SSTIC 2003 (Eric Filiol)

Home | PE Crypter | Antivirus | Steganography | PE viewer | Blocker | Tutorials

---------------------------------------------------------------
Conference SSTIC 2003
Author             :
Eric FILIOL
Subject           : Cryptanalysis of bloc cypher
Title                : Recent results concerning the AES cryptanalysis.
Language       : French
---------------------------------------------------------------
 
[le début a été coupe - NDLR]
pour doter le monde libre d'un systeme de chiffrement gratuit, et dont on
connaitrait le code, à ce concours n'a repondu qu'une seule société : IBM
et c'est devenu, apres transformation pendant 9 mois quand même dans les officines de la NSA, le DES. Or entre la version qui a été soumise au
concours, qui était Lucifer, et la version finale qui est le DES, il y a
eu quand même des modifications drastiques  qui n'ont d'ailleurs jamais
été expliquées :
- réduction de la clé de 128 a 56 bits.
- modification en particulier, de ces fameuses boites S qui sont le coeur
  du coeur du système, sans autre forme de procès, surtout sans explication, et c'est vrai que pendant des années, la question d'ailleurs se pose toujours, c'est un problème ouvert, le probleme est de savoir s'il y a des fonctions cachées dedans.
  Si on sait éventuellement libeller le problème d'un point de vue
scientifique, on ne sait toujours pas le résoudre.
Et puis il y a le problème de son utilisation aux USA, c'est que le DES qui
était distribué gratuitement au monde libre, est quand même, comme son successeur AES, interdit d'emploi aux USA pour le chiffrement des données sensibles, alors que par ailleurs, il est precisé dans des documents fédéraux officiels, qu'il ne doit pas etre utilisé pour des données sensibles. Tout cela mis bout a bout on peut se poser des questions.
En tout cas il est clair que d'un point de vue mathématique, et en
particulier d'un point de vue combinatoire, il y a des possibilités non négligeables, et on est en train de travailler la dessus, d'y cacher des trapes qui sont quasiment indécelables.

Actuellement on essaie de concevoir un système de chiffrement qui serait de l'éxtérieur inviolable, mais pour lequel on aurait effectivement un secret qui permettrait de rentrer dedans beaucoup plus facilement.
Or ca on le reverra tout a l'heure les systèmes par bloc sont un peu un
enfer combinatoire, ce sont des ensembles qui ont une taille de 2exp128 blocs, autrement dit 2exp128 ca fait quelque chose de l'ordre de 10exp40 quelque chose quand meme d'énorme.
Donc effectivement ce sont de gros ensembles qu'on ne sait même pas stocker sur un ordinateur pour les étudier.
Et ce sont des systèmes encore lents, beaucoup plus lents que les systèmes symétriques a flot. Donc voila.
Mais c'est vrai que le problème de la réutilisation des clés a été...
[phrase coupe - NDLR]

or justement ce que je veux vous montrer c'est que le fait de réutiliser
cette clé en utilisant une certaine famille de codes, permet au contraire de retrouver des informations sur cette dernière.


Alors je vais suivre le plan suivant, quelques définitions et rappel, en
particulier j'expliquerais ce que sont ces codes correcteurs d'erreur que j'utilise, à savoir les codes a répétition.

Ce sont les codes les plus basiques qu'il soit.
Et puis je parlerais un peu de chiffrement par bloc et de la cryptanalyse
linéaire qui est actuellement la meilleure ,entre guillement, technique de
cryptanalyse connue pour ces systèmes qui est du au Japonais Matsui, qui a été raffinée à travers un  certain nombre de variantes mais le coeur est quand même du a Matsui.

Et ensuite je vous présenterais justement cette fameuse technique P.D.R.C qui utilise des codes à répétitions.
On verra justement comment on peut lier chiffrement à bloc et code à
répétition.
Ensuite je vous décrirais l'attaque, vous verrez qu'elle est d'une
complexité tout a fait rudimentaire.
Et je ferais la liste d'un certain nombre de problèmes ouverts qui n'ont pas encore été résolus.
Et puis surtout je vous présenterais ces résultats éxpérimentaux à travers 200 cryptanalyses qui ont été faites, parce que ces résultats etaient contestés, de manière d'ailleurs on va dire pas tout a fait fair play, c'est pour ca qu'on a du regénérer pendant 3 mois de calcul tous les résultats en générant notament toutes les valeurs intermédiaires pour justement faire taire les critiques.

 


Alors qu'est ce qu'un code a répétition ?
Quand vous transmettez de l'information, imaginez que ca passe à travers un tuyaux, le long du tuyaux il y a des gens qui peuvent taper dessus, ce qui sort a l'autre bout du tuyaux quand vous collez votre oreille n'est pas forcément ce que vous avez envoyé a l'entrée
autrement dit il y a du bruit, et ce bruit intervient avec une certaine
probabilité P.
Donc on dit qu'on a un canal binaire symétrique, pourquoi binaire parce
qu'il travaille sur des zéros et des uns, et symétrique parce que la probabilité P de modifier un zero ou un un est la même.
Alors ce que l'on fait quand on veut transmettre de l'information dans un
tel canal, on peut utiliser un code a répétition, on peut décrire ca comme un code linéaire de longueur n et de dimension 1, c'est l'aspect mathématique des choses, tout ce que l'on sait c'est que pour transmettre un symbole je le répète n fois, à ce moment la je peux corriger (n-1)/2 erreurs, prenons un exemple :
imaginons que je veuille transmettre ce message : 01100
j'utilise un code 3 répétitions, certes c'est couteux en terme de bande
passante mais là n'est pas le problème, pour nous ca n'est pas handicapant. Chaque bit est envoyé 3 fois : donc la
j'envoie 000111111000000. Et imaginons que l'on recoive ce message, en
particulier on remarque que le premier triplet est bruité, quelle est la règle de décodage ? on prend
un maximum de vraissemblance : autrement dit dans un triplet, et c'est la
raison pour laquelle on prend toujours n impair, je compte le nombre maximum de symboles et je retient celui qui
est le plus prêt, donc autrement dit 010, le nombre de zéros étant supérieur au nombre de 1 je décide que c'est une zéro qui a été transmit. ici 111 ont été recus, donc je décide qu'un 1 a
été transmis, et ainsi de suite, tout simplement c'est celui qui a été
représente le plus frequement qui est supposé avoir été transmit. Donc apres décodage on s'apercoit qu'en fin
de compte j'ai pratiquement tout decodé, sauf un bit, j'ai donc un bit
d'erreur résiduelle, or cette erreur résiduelle on sait parfaitement la modéliser. J'ai donné l'équation ici, ou
n représente la longueur du code, S est égal a (n-1)/2, tout simplement on sait calculer après transmission et après décodage le nombre moyen de bits qui malgré tout auront été mal decodés.

Donc ce sont des codes très très simples, bon certes encore une
fois en terme de bande passante c'est pas optimal, mais dans ce qui va nous préocuper au contraire c'est assez intérressant.
il faut savoir qu'actuellement ce sont les meilleurs codes connus quand vous avez a traiter des paramètres de bruits elevés, or en cryptologie c'est particulierement interréssant parce que si en théorie des codes, c'est a dire quand je veux transmettre des informations en clair
a travers un canal, dès que le bruit est trop élevé on perd le clair, on est
donc obligé de le retransmettre. en cryptant c'est une problématique différente, on cherche au contraire a bruiter le plus possible le clair avec un parametre p le plus proche de 1/2 possible, pour
que précisement un attaquant ne puisse pas le retrouver.

La problématique théorie des codes et cryptologie sont a l'opposées l'une de l'autre. Ce qui est intérressant c'est qu'en cryptant on va justement essayer de travailler avec un bruit qui lui est aussi proche que possible d'un demie. Quand on va se placer justement avec des codes correcteurs d'erreurs utilisés pour faire de l'attaque cryptologique, nous ca nous gène pas puisqu'il suffit d'augmenter le paramètre S
c'est à dire augmenter n, sachant que le nombre de fois que je répète est
égal à 2*s+1, tout simplement je suis capable de dire quand S augmente, meme si il faut que je l'augmente beaucoup, ma probabilité d'erreur résiduelle tend vers zero, donc dans une optique d'attaque
cryptologique, si j'arrive a travailler avec des codes correcteurs d'erreurs
à base de code à répétition, il suffit tout simplement que je considère des codes de plus en plus longs en finale j'arriverais a une probabilité d'erreur qui tend vers zero.
Ca veux dire que je retrouverais l'information cachée, du point de vue de la
cryptanalyse l'information cachée qui était extrêmement bruitée.
Ce sont aussi des codes parfaits, ce sont les codes les plus faciles a
décoder, vous avez vu, il suffit de compter, un simple comptage, et quand vous recevez un mot vous pouvez toujours le décoder alors qu'il y a des codes qui n'ont pas cette propriété.
Il faut savoir que l'article le plus complet sur le sujet, qui date quand
même de 1988, est l'article de Matt Falken, ou il a justement generalisé tout ces classes de codes pour des alphabets quelconques, nous on se cantonnera bien evidemment aux  alphabets binaires.

 

Parlons un peu du chiffrement par bloc, certaines personnes vont rentrer
dans la structure interne du systême pour essayer de trouver des faiblesses structurelles, c'est pas du tout notre vision nous on le voit en vision boite noire. Autrement dit j'ai une boite, tout ce que je sais c'est qu'il va rentrer un bloc de n bits de clair, je fais rentrer également n bits de clé secrète, et je produirait un bloc de cryptograme de n bits.
Autrement dit je peux modéliser ca d'un point de vue mathématique comme une fonction booléenne vectorielle qui a un ensemble de n bits, N2 etant l'ensemble a 2 elements 0 et 1.
Autrement dit a des chaines de n bits représentant le clair et a des chaines de n bits représentant la clé, je fais correspondre des blocs de cryptogrammes de n bits.
Bien sur je pars ici du principe que je considere l'ensemble générique de
toutes les clés. Donc quand on veux chiffrer on va choisir une clé secrete particuliere, ce qui fait qu'on va considérer une restriction de cet ensemble, autrement dit pour chaque clé fixée on a bien une
permutation qui va de l'ensemble des chaines de n bits a l'ensemble des
chaines de n bits, autrement dit de l'ensemble espace clair a l'espace cryptogramme.
Et des clés il y en a 2expn, dans le cas d'AES par exemple on a environ
2exp128 clés, ce qui est quand même une quantité extrêmement importante. Sachant que les systèmes actuels sont
vendus pour accepter des clés de 128, 192 et 256 bits, juste pour info il
faut savoir qu'actuellement la recherche exhaustive qui consiste à essayer toutes les clés qui etait possible avec des clés de 40 ou 56 bits, n'est plus du tout possible. On a fait un petit calcul
si vous prenez une machine hypothétique qui est capable de casser le DES en  1 seconde, il faut savoir que pour une clé de 128 bits on parle en milliers d'années encore, a  raison de 2exp56
clés par seconde, actuellement c'est plutot 22 heures, mais admettont même qu'on ait cette machine, la recherche exhaustive n'est plus du tout possible, a moins de trouver une faiblesse mathématique ou de disposer d'une trappe, on est en face de systèmes virtuellement inviolables.
Alors ce qui fait l'intérèt de ces systèmes, c'est que je peux réutiliser la
clé non seulement pour tous les blocs d'un même message, mais aussi pour tous les messages,  d'ailleurs pour toutes les cryptanalyses qui ont ete publiées, que ce soit la cryptanalyse linéaire ou la cryptanalyse
différentielle, c'est sous entendu : quand les gens disent "pour casser il
me faut par exemple 2exp 47 couples clair/crypto a moins d'avoir un message qui fait cette taille ca veux bien dire que cette clé est réutilisée pour un très grand nombre de messages, donc implicitement, et c'est
vrai que la théorie le permet, on peut réutiliser cette clé pour un tres
grand nombre de messages, et ca c'est la superiorité par rapport au système par flot.

Quand les systèmes par blocs sont sortis, le premier rappelons nous c'est au milieu des années 1970, très vite sont apparues un certain nombre de cryptanalyses, j'ai bien sur retenu la plus efficace, il y a bien sur la cryptanalyse différentielle de Adil et Shamir de 1992,  mais la plus efficace c'est la cryptanalyse dite linéaire, c'est une attaque qui suppose de connaitre le clair, donc au niveau opérationnel c'est un peu embettant, quand on vous demande de connaitre des  milliards et des milliards
de bits clairs connaissant le chiffré pour pouvoir retrouver la clé, il est
facile de comprendre que c'est pas opérationnel. Parce que si vous êtes capables de connaitre le clair sur des milliard et des milliards de bits, on se pose pas la question de retrouver la clé, mais c'est quand même interréssant.
En fait Matsui s'est dit "si j'arrive a établir une relation probabiliste,
c'est a dire vraie avec une certaine probabilité p, entre d'une part certains bits du clair, p étant utilisé pour son acronyme
anglo-saxon "plain text" avec certains bits du cryptogrammes "cypher text", et si ces 2 quantités peuvent être liées, autrement dit si l'entrée et la sortie du système peuvent etre liées de facon probabilistes avec certains bits de la clé k, j'ai à ce moment là une information qui est
vraie dans plus d'un cas sur deux ou moins d'un cas sur deux. Si par exemple vous jouez a pile ou face et  que pile sort plus souvent
que face, vous allez miser sur face, vous allez pouvoir jouer à un jeux
d'argent, si vous savez que p = 1/2 à la limite vous avez autant de chances de perdre que de gagner, a ce moment là on ne joue pas.
Trouver une équation de ce type là ca va permettre de tricher. C'est avoir
une relation qui va permettre de retrouver une information sur la clé k. Alors comment on fait: la cryptanalyse consiste à soumettre
un grand nombre de couples clair/crypto c'est pour ca qu'on a besoin de
connaitre à la fois le clair et le chiffré parce tous les deux interviennent dans le membre de gauche de l'équation.
Et le plus souvent je sais que c'est egal à une certaine
clé, par un décodage de maximum de vraissemblance, je retrouve tout simplement une information sur la clé, en vertu d'un biais théorique
qui a été constaté sur le systeme de chiffrement, alors bien évidemment la probabilité de succes est élevée
dès que le nombre n de couples clair/crypto dont je dispose est plus grand que le biais observé.
C'est simple si vous savez qu'une piece est plombée du coté face avec une
probabilité de 2 sur 3, au bout d'un grand nombre d'essais vous saurez de quel coté la piece est plombée, autrement dit dès que vous avez
suffisament de tirages vous êtes en mesure de déterminer le biais et surtout de l'utiliser, là c'est exactement la meme chose, il faut suffisament de matériaux clair/crypto pour être capable d'exploiter ce biais. L'exemple du DES qui est la meilleure attaque connue, pour une probabilité qui fait 1/2 -1.19exp -21, on est très très proche de 1/2, il faut quand même connaitre le clair de 2exp43 couples ce qui veux dire que en gros il faut 2exp49 bits de clairs connu, donc ca fait quelques dizaines de milliards, alors on pourrais penser que cette attaque ne sert a rien, car si la cryptanalyse linéaire s'est révélée inefficace contre le DES, à la meme époque, certains systemes, en particulier le système FEAL des Japonais, s'est   complètement effondré, c'est donc une technique qui est loin d'être ininterréssante.
Bien évidemment le gros inconvenient est qu'elle nécéssite de connaitre le clair en grande quantitée.

Alors justement cette dépendance vis a vis du clair est un peu embettante, parce que d'un cote operationel ca ne permet pas de réellement casser. Donc ce qu'on a imaginé c'est de prendre le meilleur des deux mondes c'est a dire prendre les codes a répétition d'un cote, et la cryptanalyse linéaire de Matsui de l'autre, et d'éssayer de conjuguer les deux. Et ca a donné la technique PDRC, autrement dit faire dépendre la cryptanalyse d'un sous-ensemble de clair et d'utiliser les codes a
répétition, alors en gros on reprend une équation probabiliste de Matsui, et on éssaie de s'affranchir avec du clair, autrement dit dans le chiffrement par bloc je transmet un bloc de clair que je cherche à bruiter avec la clé, la on a renversé les choses, on s'est dit, je prend une clé, je la bruite avec du clair, autrement dit le clair est vu comme
un facteur de bruit, autrement dit ce que je transmet c'est une information bruitée sur la clé, on peut très bien renverser le mécanisme, seulement comme cette clé est réutilisee de bloc en bloc, le clair certes lui
change, mais en gros vous transmettez toujours la même information bruitée, puisque la clé est réutilisee de bloc en bloc, autrement dit transmettre une même information un grand nombre de fois mais de manière bruitée c'est un code a répétition, donc on s'est dit si on arrive à trouver une relation de ce type là qui ne fait intervenir que le cryptograme et la clé, on a notre relation, donc on inverse le role respectif
de la clé et du clair, et on considère tout simplement qu'on a un code à
répétition par transmission d'une information sur la clé de bloc en bloc, le probleme c'est de trouver ce  genre de relation, c'est pas evident.
Le problème d'abord c'est que je ne peux pas considérer tout le clair, parce que d'un point de vue mathématique cette relation considérée sur l'ensemble tout les cryptogramme c'est p = 1/2, ca c'est la théorie vous avez une équation linéaire, sur un espace complet c'est p = 1/2, donc on ne peut pas décider, c'est pour cela qu'il faut considérer un sous ensemble de clair, et on a pu construire de manière opérationnelle des exemples
non triviaux ou globalement la probabilité était de 1/2 sur tout l'espace,
mais sur certaines permutations et sur certains sous ensemble de clair et de chiffre correspondant on avait p différent de 1/2, donc on avait bien
ce biais, donc ca confortait l'idée qu'on pouvait chercher l'information
concernée.
Il y a des problèmes de variabilité du paramètre de bruit, en fait si on
était vraiment rigoureux on aurait un bruit non stationaire, parce qu'en fin de compte les blocs de clairs qui bruitent la clé ne sont pas forcément
les mêmes d'un bloc à un autre donc ca peut poser des problèmes, c'est pour ca qu'on s'est dit qu'on allait considérer un sous ensemble de clair a partir duquel aura été produit avec une même clé secrête les cryptogrammes qui vont servir de base a notre étude, l'avantage c'est que ca permet de considérer de facon [coupure-NDLR] éspérer des valeurs beaucoup plus importantes de p.
Les clairs qu'on a etudié correspondent a du langage de type anglais, mais c'est transposable à d'autres langues, codé en majuscule et en caractères ASCII, donc d'un point de vue operationel ca correspond quand même à beaucoup de choses envoyées sur les réseaux ou dans les communications, par exemple le telex chiffrant rentre tout a fait
dans ce modèle. Alors on applique les masques, on génère aléatoirement des clair et on applique ce masque,  ca oblige un bit a être a zéro ici ou ici, la position dépend du type de codage que l'on considère, autrement dit
la seule supposition que je fais c'est que celui que j'attaque a envoyé du
langage clair de type anglais code en ascii, un presupposé qui n'est pas trop handicapant, on peut éventuellement savoir, par une analyse de traffic ce qui a été réellement envoyé.
 
L'attaque en elle même est tres simple, c'est juste compter, tout simplement je considere un code a répétition de n, avec n impair pour les raisons qu'on a vu tout a l'heure, je considère donc ce nombre de bloc de
cryptogrammes, la je ne vais utiliser que les textes chiffrés, la je me suis
affranchis de toute autre considération sur le clair, je ne travaille qu'avec des cryptogrammes, il suffit de mettre une antenne dans l'air ou de sniffer
un réseau, c'est des choses qu'on intercepte facilement.
Et aussi je dispose d'une équation probabiliste qui me permet de lier sur un tel sous ensemble le cryptogramme a la clé, donc en sortie je vais produire tout simplement un ou plusieurs bit d'information, du moins un bit par équation probabiliste, c'est a dire une information vraie a 100%, du moins on l'espère, sur la clé, et quand j'aurais suffisament de bits d'information, il suffit d'avoir n bits d'information sur une clé de n bits, je pourrais retrouver la clé. L'algorithme en pseudo code est très simple, j'initialise un compteur à zéro, pour chaque bloc chiffre je calcule le membre de gauche de mon équation probabiliste, autrement dit
c'est simplement des ET et des OU en terme d'informatique, donc ca ne consomme presque rien, si le resultat de mon produit scalaire vaut 1, j'incrémente mon compteur, terminé, donc en fin de compte c'est juste n comptage, soit n évaluations de produits scalaires, mais ca coute vraiment rien, et à la fin je décide, tout simplement si c'est supérieur au seuil, je décide que le bit d'information que je cherche c'est 1, sinon c'est 0.
Vous voyez qu'en terme de complexité on ne peut pas faire plus simple, je n'ai meme pas a soumettre au chiffrement un certain nombre de clair, donc je gagne également sur cette phase, je n'ai  juste que des comptages a faire.

Alors evidemment on va voir quand même que cette complexité qui a l'air
linéaire, effectivement elle dépend du nombre de texte chiffrés, le problème c'est que la taille du texte chiffré dont on a besoin est loin d'etre linéaire, c'est pour ca qu'il faut quand meme etre prudent, mais par rapport a toutes les attaques qui sont faites jusqu'a present c'est quand même un gain non négligeable, et plus que non négligeable.

Alors on s'est dit aussi ce qu'on pourrais faire c'est une attaque en deux
temps, autrement dit on pourrait utiliser ce qu'on appelle des codes concaténés, autrement dit je considère 2 codes a répétition, c'est a dire que j'ai mon système de chiffrement, mon clair et mon crypto, et je fais une premiere attaque par code à répétition, vous savez que le résultat donnera une information avec une certaine probabilité d'erreur résiduelle, je resoumet ca a une deuxieme phase de cryptanalyse par code a répétition en considerant cette fois ci un code a répétition different, dont le parametre de bruit sera justement la probabilité d'erreur résiduelle obtenue lors du premier décodage, on s'est dit intuitivement que ca pourrait peut etre etre interréssant, parce qu'on sait qu'en general
les codes concaténés sont des codes plus puissants que leurs homologues simples, sauf dans le cas des codes a répétition, on a pu le démontrer mathématiquement.
Donc cette idée était moins efficace, il faut mieux prendre un seul code a
répétition plutot que d'en prendre deux, la bonne nouvelle c'est que la complexité de l'attaque reste basse parce que sinon il aurait fallu répéter l'attaque 2 fois.
 
Donc l'idée de considérer des codes concaténés formes de 2 codes a
répétition n'ameliore pas contrairement aux autres familles de codes correcteurs d'erreur.
 

Alors avant de passer aux résultats concernant l'AES, on s'est posé 4
problèmes qui sont des problèmes ouverts, et qui ont quand même ont leur importance, vous allez voir pourquoi.
tout d'abord est ce qu'il est possible de concevoir un système
cryptographique S capable de résister a cette attaque,
le problème c'est que dans l'absolu ca n'est pas possible, pourquoi ? parce que les mathématiques montrent qu'au niveau des fonctions booléennes modélisant les sorties d'un système de chiffrement par bloc, comme d'ailleurs dans n'importe quel système de chiffrement, il existe toujours des corrélations exploitables, autrement dit il existe toujours des biais,
vous pouvez toujours essayer de les gommer à la base, vous ne ferrez que les concentrer ailleurs, et ca c'est du au théorème de Parseval, donc ces corrélations existent toujours, alors le problème c'est de les trouver, rappelez vous qu'on travaille sur des ensembles monstrueusement grands, et ca c'est en particulier le travail qu'effectue le logiciel Vauban qui a été concu pour travailler sur de très très gros ensembles.
Alors après il y a 2 problèmes: le problème de trappes faibles, autrement
dit je dispose d'un sous ensemble de cryptogrammes produits a partir d'un sous-ensemble de texte clair, est ce que je peux concevoir un système S qui pour une équation probabiliste E que je connais, est ce qu'il est possible de fabriquer un tel système autorisant l'attaque, le principe
du systeme c'est que j'ai une équation, je connais le secret, la personne
utilise mon systeme sans le connaitre, moi je veux attaquer ce système, on travaille dessus, on a disont de bons espoirs d'y arriver, on voit bien les enjeux qu'il y a derriere.
Puis le problème de trappe forte, la j'augmente un peu les contraintes,
autrement dit j'ai une équation probabiliste, cette fois ci je veux que quel que soit le sous-ensemble de cryptogramme ca fonctionne, autrement dit que je puisse attaquer le systeme, vous voyez que par rapport au problème de trappe faible on augmente le niveau de difficulté.
Et puis un autre problème ouvert, qui est de moins en moins ouvert avec le système Vauban, c'est justement est ce que je peux trouver des équations probabilistes et des sous-ensembles qui vont bien permettant de lier uniquement le cryptogramme avec la clé.
 
Alors pour l'AES, les résultats avaient été trouvés l'année derniere, on a
trouvé apres 4 mois de calcul, sur 2 PC quand même retaillés mais ne nécéssitant pas une grande quantité de mémoire,  juste beaucoup de temps, on a donc trouvé avec le logiciel Vauban, qui est un logiciel qui n'est pas publié pour le moment, 2 equations de facon déterministe,
on en a en fait trouvé plus, environ 300 a 400, mais pour l'instant on en a
étalonné que 2.
Ce que l'on sait c'est que l'on peut exhiber une équation dont on connait le biais et le signe du biais, autrement dit on sait si c'est 1/2+epsilon ou 1/2-epsilon, ce que l'on ne sait pas encore déterminer, tout simplement parce qu'on a pas encore assez avance dans le domaine, c'est le biais lui même, est ce que c'est 1/2+0.1, ou 1/2+0.01, on sait plutot
que ca sera 1/2+10e-5 ou 10-6, mais on est pas capable a l'heure actuelle de donner la valeur exacte du biais, on sait qu'il y a un biais et on connait son signe, c'est déja une information importante.
Alors ce qu'on a fait c'est 200 cryptanalyses sur l'AES, le code source
complet a été publié, ce qui a nécéssité 3 mois de calculs, le plus dur a été de produire les blocs chiffrés, l'AES a beau etre bien programmé plus de 80% du temps de calcul est passé dans la génération de ce que dans un autre cas on intercepterait simplement.
Le cout dans l'éxpérience menée
est donc essentiellement passé dans la génération de ce qu'on intercepterait autrement.
et on utilise que 2exp31 blocs de chiffres, autrement dit c'est ce que l'on
stocke actuellement sur un disque dur moyen ca fait environ 4 giga-blocs, on suppose tout simplement que le clair a été produit a partir de l'ASCII.
Alors bien sur on a définit un protocole éxpérimental rigoureux parce qu'il
faut savoir qu'en Janvier quand on a publié ca alors qu'on avait publié le code source, il y a eu un certain nombre de critiques, qui s'expliquent plus ou moins, ce qui s'est passé c'est que personne n'a voulu reproduire l'éxpérience, donc on a été obligé de refaire l'éxpérience,
(ces 200 cryptanalyse), mais cette fois ci de générer depuis le code source, de montrer que l'aléas était de bonne qualitée puisque ca aussi a été suspecté mauvais, bref on a définit un protocole éxpérimental extrêmement rigoureux, tout a été publié, code source et également toutes les valeurs intermédiaires des cryptanalyses, pour permettre justement la reproductibilite des résultats sans avoir a refaire la cryptanalyse, et les résultats sont confirmés, on peut effectivement retrouver 3 bits d'information (en fait 2 et demie) sur la clé de maniere opérationnelle.
Alors il faut savoir que lors des critiques de février 2002, deux Americains
ont prétendu avoir obtenu les mêmes résultats en 27 heures ce que nous on avait fait en 3 mois, le problème c'est que les informations qu'ils donnent sont inexploitables car non reproductibles. il n'est pas possible qu'ils aient obtenu ces résultats, c'est en particulier ce qui a incité a
refaire l'éxpérience en regénérant tout les résultats intermédiaires.
Alors juste pour le fun voila les deux équations, elle sont disponibles sur
un lien que je vous donnerais, ne les recopiez pas. ici vous avez le bits de cryptogrammes, alors il y a des raisons particulieres qui font qu'on considère les bits de cryptogrammes un par un plutot que par plusieurs, comme dans le cas de la cryptanalyse linéaire, et ici tous les bits de
clé que l'on considère, pareil pour la deuxieme équation.
Maintenant qu'on est sur que cette technique marche on va pouvoir valider les quelques 300 autres équations, le problème c'est qu'il faut beaucoup de puissance de calcul, et je suis a la recherche de gros ordinateurs.
L'éxpérience numero un consiste a laisser tourner un PC pendant 3 mois, on lui a donne une graine, et on l'a laisse générer ses 300 cryptanalyses, autrement dit avec l'équation 1 je retrouve le premier bit avec une probabilité de succès de 60%, alors bien évidemment si j'augmentait la taille de mon code a répétition, passer de 2exp31 a 2exp36 par exemple,
c'est pas grave on travaille que sur du chiffré, je pense qu'on doit augmenter
la probabilite de succès. sur l'equation numéro 2 on obtient 63%, et ce qui est intérressant c'est de remarquer que ces équations sont très fortement différentes, or si l'AES était un bon modèle on pourrait se dire que ces équations sont indépendantes, donc additionner les équations devrait donner a priori 1/2, or on s'apercoit  qu'il y a un lien entre ces deux
équations, ce qui conforte d'ailleurs l'approche, donc ces equations ne sont pas indépendantes.
On a obtenu les mêmes types de résultats sur un deuxieme PC qui a lui aussi tourné 3 mois. donc il est clair que, contrairement a ce qu'a dit une des critiques, que ca n'est pas une question de chance. car obtenir ce genre de résultats c'est plus dur que de gagner au loto, un simple calcul le montre, donc c'est pas une question de chance.
 
Donc en guise de conclusion, d'abord il faut savoir que d'autres équations
sur AES ont été obtenues, et sont en cours de tests, mais ce qu'on voulait c'etait quand même que ces deux équations soient validées, ce qu'on voudrait c'est quand même déterminer plus precisement le biais, on y travaille, parce que je vous rappelle que l'on sait qu'il y a un biais et quel est son signe. Il faut quand meme savoir une chose, l'AES a été  selectionné a l'issu d'un concours lancé par le gouvernement Americain, encore une fois, et il imposait obligatoirement que ca soit des systèmes par blocs, il ne veulent pas du tout entendre parler de systèmes par flot. 18 candidats avaient été soumis, il y en a 3 qui ont été tout de suite virés ce sont les candidats Russes, les Americains ont peut être peur des Mathématiciens Russes, et on a eu 15 candidats sélectionnés pour la première phase, a l'issu de la première phase 5 candidats ont étés
retenus, 3 Americains, 1 Anglais/israelien/norvegien, 1 candidat belge, un
seul candidat a été retenu c'est le système Belge aussi appelé Rinjdael. On a appliqué les techniques Vauban sur ces systèmes.
Seuls 3 systèmes pour l'instant résistent, c'est le système E2 Japonais, le
système Allemand "Magenta", et le système Mars, mais c'est vrai que les gens de Mars sont les mêmes qui ont concu le système DES, certains louvoient entre IBM et la NSA et ils ont donc peut etre des connaissances beaucoup plus étendues que les autres personnes ayant composées les candidats, en tout cas pour l'instant ces 3 la résistent, autrement dit le système Vauban ne retrouve pas d'équations pour ces systèmes, ca ne veux pas dire qu'elles n'existent pas, mais le système est tellement bien fait que Vauban n'arrive pas a les retrouver.
Alors en tout cas on peut d'un point de vue théorique, mais aussi d'un point de vue pratique, a la lumiere des éxpériences sur l'AES considérer qu'une certaine remise en cause des systèmes de chiffrement par bloc est possible, le simple fait de réutiliser la clé on voit bien par cette modélisation par des codes a répétition, que c'est une information qu'on transmet plusieurs fois, on peut d'une manière ou d'une autre essayer de la retrouver, en tout cas pour l'AES c'est ce qu'on est parvenu a faire dans nettement plus d'un cas sur deux. on a essayé avec pour l'instant des prémisses de succès, de transposer ces technique Vauban pour les systèmes sur les systèmes par flot utilisant la rétroaction linéaire,
c'est a dire les systèmes les plus fréquents, a priori ca marche sans
problème, et pour le moment les seuls qui résistent sont les systèmes par flots utilisant la rétroaction non lineaire, autrement dit l'évolution du système interne pour générer la suite aléatoire qui est combinée au texte clair se fait selon des processus non linéaires contrairement aux systèmes utilisant la rétroaction linéaire, c'est implicite, on voit bien que quand il y a une relation interne entre les états de la machine qui sont de nature linéaire, c'est moins difficile et plus prédictible que pour quelque chose qui se rapproche du chaos. Donc pour l'instant Vauban ne marche pas sur les systèmes non lineaire.
 

je vous disait que tout est disponible sur la page web, vous trouverez au
fur et à mesure le code source, le générateur aléatoire tant critiqué est disponible, apres coup les gens se sont apercus qu'il était excellent, je precise aussi qu'on utilise deux generateurs aléatoires: un pour le clair, et un pour la clé, pour eviter d'introduire des dépendances qu'on ne pourrais pas voir, donc il y a deux systemes de génération aléatoire, tous les résultats detaillés sont disponibles , le modèle théorique de l'attaque a été accepté, c'est James Massey, un ponte en matière de chiffrement par bloc, qui a reviewé ce papier, donc le modèle théorique on peut considérer qu'il a été admis et accepté.
 

Les résultats éxpérimentaux pour l'AES et pour d'autres systèmes sont en cours de soumission. Voila j'espere que je n'ai pas été trop technique. Si vous avez des questions j'y repondrait avec plaisir.
 
[APLAUDISSEMENT]
- Mon commandant, vous parliez de 3 mois de calculs, je voulais savoir
combien de temps prenait l'attaque effective
 
- On l'a evalué à la louche, je pense que c'est 90% pour la génération
aléatoire des clairs et leur chiffrement, qui nécéssite beaucoup de temps de calcul, les clés quand a elles ne changent pas souvent, une cryptanalyse dure 27 heures a peu près, a la louche selon le temps de chargement des machines, donc 90% de 27 heures ca fait combien ?
- pour l'instant le biais est autour de 1/2...
- le 1/2 ca met en lumiere une dépendance, disont 2 bits de cle, donc l'AES n'est pas cassé,
 
 
- et est ce qu'on pourra trouver plus ?
 
- on a un certain nombre de candidats mais dans ce domaine là dans la mesure ou ce sont des ensembles tellement gros il faudra refaire l'éxpérience un grand nombre de fois, j'espère que ca donnera l'idée a des chercheurs de se mettre dessus, alors on a réussi a expliquer pourquoi ces biais existent, ca c'est important, en mettant bout a bout Parseval
et les aspects combinatoire, on peut l'expliquer, le probleme c'est qu'il
manque quand même une inconnue pour avoir une idée précise de la quantité de chiffrés qu'il faut, ce serait bien d'avoir une valeur relativement exacte du moins avec un bon ordre de grandeur, du biais, pourquoi c'est intérressant, parce qu'une fois que j'aurais le biais relativement précis, je pourrais déterminer une longueur suffisante de mon code a répétition pour pouvoir avoir une probabilité de succès plus importante. Quand j'aurais des probabilités suffisament importantes avoisinant les 90%, je pourrais varier plusieurs équations, et la je pense qu'on pourra retrouver une partie significative de la clé. Mais il y a encore
beaucoup de travail a faire avant de dire que l'AES est cassé, on a de bons espoirs d'y arriver avec beaucoup de temps et d'ordinateurs, en tout cas on sait comment faire.
 

- combien d'ordinateurs faudrait il pour casser complètement et rapidement AES ?
 

- beaucoup, disont que la on a 300 équations a tester donc 300 PC pendant 3 mois, bien sur si vous avez plus je suis preneur. C'est ca le problème, c'est que dans la mesure ou on voulait privilegier une approche operationnelle, c'est a dire de montrer qu'on l'a fait, d'exhiber la probabilité de succes, qu'on peut le faire et le refaire, et aussi mettre a disposition les codes sources, or c'est du C tout a fait standard qui ne nécéssite qu'un compilateur tout a fait générique, c'est du C écrit proche de la machine, n'importe qui peut le prendre et le réutiliser, donc si vous avez des PC inutilisés...
 

- Le fait d'avoir trouvé des biais dans AES, est ce que ca veux dire qu'il y
a une trappe dans AES ?
 
- il faut savoir qu'il existera toujours des biais, et ca meme les
concepteurs de l'AES l'ont reconnu, c'est du au theoreme de Parseval, on ne peut pas y couper,ce qu'on peut s'arranger c'est de répartir l'énergie de chaque fonction le mieux possible pour etre inexploitable pour l'attaquant, a l'inverse, on peut s'arranger pour la répartir d'une
maniere optimale pour l'attaquant, le probleme c'est que ce sont des
ensembles tellement gros que, a moins de connaitre la trappe on ne peut pas repondre a la question, alors maintenant à la lumiere d'un certain nombre d'éxpérience, et d'un certain nombre d'autres éléments, et connaissant surtout les Américains, je serais ammené a penser que oui, il y a une trappe, mais cette fois ci c'est un sentiment personnel, etayé certes par un certain nombre d'éléments de réflexion et un certain nombre d'éléments techniques, mais il est bien evident que tant que l'on exhibera pas la trappe, on ne pourra pas le prouver à 100%. Maintenant ca dépend de ce qu'on appelle trappe, on peut très bien ne pas mettre tous les oeufs dans le même pannier, peut etre que c'est une trappe qui permet de réduire la complexité de 2exp128 a 2exp60 ou 2exp70, ce qui n'est accessible qu'a des pays richement dotes en matière de compétences informatiques, donc à la limite on ne met pas tous les oeufs dans le même panier, ce qui est déja intérressant, mais ma conviction est que oui il y en a une.
 

- avez vous appliqué ces techniques a spyjack qui est un système ... [phrase coupe - NDLR]
 
- non, le problème c'est qu'il y a tellement de candidats qui seraient
intérressant de tester, mais la c'est un problème de temps, et on est pas nombreux, le DES j'aimerais bien aussi. Ce qui a motivé le choix de l'AES je le reconnais c'est que c'est une algorithme a la mode, pour étalonner une technique et inciter les gens a l'utiliser et a l'étalonner autant prendre un algorithme à la mode, mais c'est vrai que pour skipjack ou même pour le DES, il y a toujours un problème ouvert dessus, et donc ce sont des candidats extrêmement  intérressant.
 

- si je suis votre raisonnement comme quoi il y un trappe dans AES
 
- c'est une conviction !
 
- oui, comment a ce moment la vous expliquez que ce soit l'algorithme AES qui ait été choisi ?
 
- pour avoir été a la conférence AES 3, au départ les Américains avaient
envie de privilégier le système Mars, les universitaires n'avaient pas du tout envie, il y a eu des votes, de facon feinte ou réelle je ne sais pas,
la communauté Européenne, en particulier le NIST, a semblé ou a affecté
d'agir sous la pression, moi mon sentiment, c'est que les 15 systèmes ils les maitrisent. pour l'instant il existe une grosse incertitude sur le chiffrement par bloc. Sur un systeme de chiffrement par flot il
y a un état de l'art tel que l'on sait si on a un niveau de securité ou pas,
c'est peut etre la raison pour laquelle la plupart des systèmes de chiffrement par flot sont reconnus, il y a un état de l'art.
les systèmes par bloc pour l'instant c'est une grosse pagaille combinatoire, et c'est vrai qu'il y a des tas d'idées, on est en train d'en developper certaines, qui permettent de cacher des tas de choses dedans, J'ai parlé de la cryptanalyse différentielle tout a l'heure,  quand elle a ete révélee par Shamir en 92, beaucoup de systèmes sont tombés, le systeme FEAL des japonais, et d'autres, et on s'est dit que c'était quand meme bizarre que le DES résiste, c'est pas naturel qu'un systeme résiste aussi bien à une cryptanalyse qui il faut bien le reconnaitre,
était puissante, et la NSA a reconnu que cette cryptanalyse il la connaissaient 20 ans avant, donc ca vous donne une idée du differentiel en terme de connaissances entre la communaute ouverte, pourtant nombreuse, et certains services comme la NSA. Il faut voir l'énergie qu'ils y consacrent, de plus ce differentiel s'est a mon avis aggravé en ce qui
nous concerne.
Mais bon la pour beaucoup de choses se sont des suppositions, certes etayés par un certain nombre d'éléments de réflexion, encore une fois tant qu'on exhibera pas la trappe, ca reste une conjecture.
Bon, si il n'y a pas d'autres questions je vous propose d'aller prendre un
café.
 
 
 
Author        : Eric Filiol
Transcript  : bee_meal@yahoo.com