AccueilđŸ‡«đŸ‡·Chercher

Attaque des anniversaires

Une attaque des anniversaires ou attaque par le paradoxe des anniversaires est un type d’attaque en cryptanalyse qui exploite des notions mathĂ©matiques Ă©quivalentes Ă  celles qu’utilise le paradoxe des anniversaires en thĂ©orie des probabilitĂ©s[1]. L'objet de l'attaque consiste Ă  comparer entre-elles les mĂ©thodes de chiffrement de plusieurs sources jusqu'Ă  ce que deux d'entre-elles correspondent. Cette attaque peut ĂȘtre utilisĂ©e pour modifier les communications entre deux personnes ou plus. L’attaque est possible grĂące Ă  la probabilitĂ© plus Ă©levĂ©e de collisions avec des tentatives d’attaques alĂ©atoires et un niveau fixe de permutations, comme dans le principe des tiroirs.

Comprendre le problĂšme

Comme exemple du paradoxe des anniversaires, il est possible de considérer le scénario suivant.

« Un enseignant ayant une classe de 30 Ă©lĂšves demande Ă  ses Ă©lĂšves de lui donner leurs dates d’anniversaires, afin de dĂ©terminer s'il y a deux Ă©lĂšves qui fĂȘtent leurs anniversaires le mĂȘme jour — cela correspond Ă  la collision de hash. »

Intuitivement, la probabilitĂ© que cela arrive paraĂźt faible. Si l’enseignant prenait un jour spĂ©cifique, par exemple le , alors la probabilitĂ© qu’au moins un Ă©lĂšve soit nĂ© ce jour spĂ©cifique est , soit environ 7,9 %[note 1].

Par contre, la probabilitĂ© qu’au moins un Ă©lĂšve ait la mĂȘme date d’anniversaire que n’importe lequel des autres Ă©lĂšves est environ Ă©gale Ă  70 %, soit : avec [2].

En mathématiques

Soit une fonction le but de l’attaque est de trouver deux antĂ©cĂ©dents diffĂ©rents tels que Une telle paire est appelĂ©e une collision. La mĂ©thode utilisĂ©e pour trouver une collision est simplement de comparer l’image de pour diffĂ©rents antĂ©cĂ©dents qui peuvent ĂȘtre choisis de façon alĂ©atoire ou pseudo-alĂ©atoire jusqu'Ă  ce que le mĂȘme rĂ©sultat soit trouvĂ© plus d’une fois. GrĂące au paradoxe des anniversaires, cette mĂ©thode peut ĂȘtre trĂšs efficace. Plus prĂ©cisĂ©ment, si une fonction dĂ©finie sur permet d’obtenir des images diffĂ©rentes avec la mĂȘme probabilitĂ© et que est un ensemble suffisamment grand, alors on peut espĂ©rer obtenir une paire d'antĂ©cĂ©dents diffĂ©rents et pour lesquelles aprĂšs avoir calculĂ© l’image de la fonction pour seulement diffĂ©rents antĂ©cĂ©dents en moyenne.

ConsidĂ©rons l’expĂ©rience suivante. Dans un ensemble de cardinal on choisit valeurs au hasard en autorisant les rĂ©pĂ©titions. Soit la probabilitĂ© que durant cette expĂ©rience au moins une valeur soit choisie plus d’une fois. Cette probabilitĂ© est Ă  peu prĂšs Ă©gale Ă  Soit le plus petit nombre de valeurs qu’on doit choisir, alors la probabilitĂ© de trouver une collision est au moins En inversant cette expression, on trouve l’approximation suivante et en attribuant une valeur Ă©gale Ă  0,5 Ă  la probabilitĂ© de collision, on trouve Soit le nombre prĂ©vu de valeurs Ă  choisir avant de trouver la premiĂšre collision. Ce nombre est environ Ă©gal Ă 

Par exemple, si un hash de 64 bits est utilisĂ©, il y a Ă  peu prĂšs 1,8 Ă— 1019 diffĂ©rentes images. Si elles sont aussi probables Ă  obtenir, ce qui est le meilleur des cas pour l’attaquant, alors il faudra « seulement » 5,1 Ă— 109, soit environ 5 milliards d’essais pour gĂ©nĂ©rer une collision en utilisant la force brute. Cette valeur est appelĂ©e limite de l’anniversaire[note 2]) et pour en binaire, cette valeur peut ĂȘtre calculĂ©e comme [3].

Des exemples pour des hashs de tailles différentes avec 2 chiffres significatifs.
Nombre de
bits du hash
Images
possibles (H)
Probabilité de collision désirée (p)
10−18 10−15 10−12 10−9 10−6 0,1 % 1 % 25 % 50 % 75 %
16 65 536 <2 <2 <2 <2 <2 11 36 190 300 430
32 4,3 Ă— 109 <2 <2 <2 3 93 2 900 9 300 50 000 77 000 110 000
64 1,8 Ă— 1019 6 190 6 100 190 000 6 100 000 1,9 Ă— 108 6,1 Ă— 108 3,3 Ă— 109 5,1 Ă— 109 7,2 Ă— 109
128 3,4 Ă— 1038 2,6 Ă— 1010 8,2 Ă— 1011 2,6 Ă— 1013 8,2 Ă— 1014 2,6 Ă— 1016 8,3 Ă— 1017 2,6 Ă— 1018 1,4 Ă— 1019 2,2 Ă— 1019 3,1 Ă— 1019
256 1,2 Ă— 1077 4,8 Ă— 1029 1,5 Ă— 1031 4,8 Ă— 1032 1,5 Ă— 1034 4,8 Ă— 1035 1,5 Ă— 1037 4,8 Ă— 1037 2,6 Ă— 1038 4,0 Ă— 1038 5,7 Ă— 1038
384 3,9 Ă— 10115 8,9 Ă— 1048 2,8 Ă— 1050 8,9 Ă— 1051 2,8 Ă— 1053 8,9 Ă— 1054 2,8 Ă— 1056 8,9 Ă— 1056 4,8 Ă— 1057 7,4 Ă— 1057 1,0 Ă— 1058
512 1,3 Ă— 10154 1,6 Ă— 1068 5,2 Ă— 1069 1,6 Ă— 1071 5,2 Ă— 1072 1,6 Ă— 1074 5,2 Ă— 1075 1,6 Ă— 1076 8,8 Ă— 1076 1,4 Ă— 1077 1,9 Ă— 1077
Le tableau ci-dessus montre le nombre de hashs qu’il faut pour obtenir telle ou telle probabilitĂ© de succĂšs, en considĂ©rant que toutes les valeurs de hachage ont la mĂȘme probabilitĂ©. À titre de comparaison,le taux d'erreur non corrigeable d’un disque dur classique est 10-18 Ă  10-15[4]. En thĂ©orie, les hashs MD5 ou les UUIDs, sont de 128 bits, et devraient rester dans cette fourchette jusqu’à environ 820 milliards de documents, mĂȘme si ses images possibles sont beaucoup plus nombreuses.

Il est facile de constater que si les images de la fonction sont inĂ©galement rĂ©parties, alors une collision peut ĂȘtre trouvĂ©e encore plus vite. La notion « de rĂ©partition des images » d’une fonction de hachage influe directement sur la rĂ©sistance de la fonction Ă  des attaques des anniversaires. Cette faiblesse rend vulnĂ©rables des hashs populaires tels que MD et SHA.

La sous-expression dans l’équation pour n’est pas calculĂ©e avec prĂ©cision pour les petites valeurs de lorsqu’elle est directement traduite dans un langage de programmation par log(1/(1-p))​ Ă  cause de la perte de signification (en). Quand log1p​ est disponible par exemple, l’expression Ă©quivalente -log1p(-p)​ devrait ĂȘtre utilisĂ©e Ă  la place. Si ce n’est pas le cas, la premiĂšre colonne du tableau est remplie de zĂ©ros, et de nombreux Ă©lĂ©ments dans la seconde colonne n’ont pas de chiffres significatifs corrects.

Exemple de code source

Voici une fonction en Python qui peut générer le tableau ci-dessus avec plus de précision :

def birthday(probability_exponent, bits):
    from math import log1p, sqrt
    probability = 10. ** probability_exponent
    outputs     =  2. ** bits
    return sqrt(2. * outputs * -log1p(-probability))

Si le code est sauvegardĂ© dans un fichier nommĂ© anniversaire.py​, il peut ĂȘtre lancĂ© dans un terminal comme dans l’exemple suivant :

$ python -i anniversaire.py
>>> birthday(-15, 128)
824963474247.1193
>>> birthday(-6, 32)
92.68192319417072

Approximation rapide

Une bonne rĂšgle gĂ©nĂ©rale qui peut ĂȘtre utilisĂ©e pour calculer mentalement est la relation qui peut aussi s’écrire . Elle fonctionne bien pour les probabilitĂ©s infĂ©rieures ou Ă©gales Ă  0,5.

Ce schĂ©ma d'approximation est particuliĂšrement facile Ă  utiliser lorsque l’on travaille avec des exposants. Par exemple, supposons que l’on gĂ©nĂšre des hashs de 32 bits () et que l’on veuille que la probabilitĂ© de collision soit au maximum de un sur un million (). Pour calculer le nombre de hash qu’il est possible d’avoir au maximum pour ce risque de collision, on fait ce qui est proche de la rĂ©ponse exacte qui est 93.

Vulnérabilité pour les signatures numériques

Les signatures numĂ©riques peuvent ĂȘtre vulnĂ©rables Ă  une attaque des anniversaires. Un message est normalement signĂ© par le premier calcul , oĂč est une fonction de hachage cryptographique et ensuite utiliser une clĂ© secrĂšte pour signer . Supposons que Mallory veuille escroquer Bob en signant un contrat frauduleux. Mallory prĂ©pare un contrat juste — — et un autre, frauduleux — . Ensuite, elle trouve un certain nombre de formulations oĂč change mais pas le sens du contrat, par exemple une virgule inutile Ă  insĂ©rer, une ligne vide, un caractĂšre d'espace Ă  la place de deux, remplacer des mots par des synonymes, etc. En combinant ces changements, elle peut crĂ©er un grand nombre de versions diffĂ©rentes de et du nombre qui certifie la totalitĂ© du contrat.

De la mĂȘme maniĂšre, Mallory crĂ©e aussi un grand nombre de versions diffĂ©rentes du contrat frauduleux . Ensuite, elle applique la fonction de hash sur toutes ces diffĂ©rentes versions jusqu’à trouver deux contrats qui aient la mĂȘme valeur de hash, . Elle montre la version du contrat Ă©quitable Ă  Bob pour qu’il le signe. Une fois le contrat signĂ©, Mallory prend la signature et y attache le contrat frauduleux. La signature est la « preuve » que Bob a signĂ© le contrat frauduleux.

Les probabilitĂ©s diffĂšrent lĂ©gĂšrement du problĂšme d'anniversaires original, comme Mallory ne gagne rien en trouvant deux contrats justes ou deux contrats frauduleux avec le mĂȘme hachage. La stratĂ©gie de Mallory est de gĂ©nĂ©rer des paires d’un contrat juste et d’un contrat frauduleux. Les Ă©quations de problĂšmes d’anniversaires appliquent quand est le nombre de paires. Le nombre de tables de hachage que Mallory gĂ©nĂšre rĂ©ellement est .

Pour Ă©viter cette attaque, la longueur de ce que gĂ©nĂšre la fonction de hachage utilisĂ©e pour un schĂ©ma de signature doit ĂȘtre choisie de maniĂšre Ă  ĂȘtre assez grande pour que l’attaque des anniversaires devienne mathĂ©matiquement impossible, soit environ deux fois plus de bits que nĂ©cessaire pour empĂȘcher une attaque par force brute ordinaire.

L’algorithme rho de Pollard pour les logarithmes est un exemple utilisant une attaque des anniversaires pour le calcul de logarithmes discrets.

Notes et références

(en) Cet article est partiellement ou en totalitĂ© issu de l’article de WikipĂ©dia en anglais intitulĂ© « Birthday attack » (voir la liste des auteurs).

Notes

  1. Pour simplifier on ignore les années bissextiles.
  2. Voir majorant ou minorant.

Références

  1. Michel Barrier, « Attaque des anniversaires : Cyber attaque peu connu mais redoutable », sur Demonblack, (consulté le )
  2. (en) « Math Forum: Ask Dr. Math FAQ : The Birthday Problem », sur mathforum.org (consulté le ).
  3. (en) Jacques Patarin et Audrey Montreuil, « Benes and Butterfly schemes revisited » [PDF] [ps], sur eprint.iarc.org, Université de Versailles, (consulté le ).
  4. (en) « Empirical Measurements of Disk Failure Rates and Error Rates », sur https://arxiv.org (consulté le ).

Annexes

Bibliographie

  • [Bellare et Kohno 2004] (en) Mihir Bellare et Tadayoshi Kohno, « Hash Function Balance and Its Impact on Birthday Attacks », Advances in Cryptology — EUROCRYPT 2004, lecture Notes in Computer Science, vol. 3027,‎ , p. 401–418 (ISBN 978-3-540-21935-4, ISSN 0302-9743, DOI 10.1007/978-3-540-24676-3_24, lire en ligne [PDF]).
  • [Schneier 1996] (en) Bruce Schneier, Applied Cryptography : protocols, algorithms, and source code in C , New York, Wiley, , 2e Ă©d., 758 p.

Articles connexes

Liens externes

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.