Différences entre les versions de « Les fonctions de hachage cryptographiques »

Aller à la navigation Aller à la recherche
m
m (→‎Vers des fonctions plus robustes : Ortho, ajustement.)
Que faut-il pour faire une fonction cryptographique ? Reprenons pour cela l'exemple de Java. L'empreinte générée tient sur seulement 32 bits, le nombre de condensés disponibles se réduit ainsi à environ 4 milliards (2<sup>32</sup>). Cette espace n'est pas utilisé efficacement dans le cas des chaînes de caractères. On assiste de ce fait à un regroupement des condensés dans certains intervalles alors qu'une bonne fonction cryptographique est censée répartir au maximum les résultats dans l'espace disponible.
 
Pour illustrer cette vulnérabilité, prenons l'exemple d'un attaquant qui intercepte une empreinte calculée avec la fonction de hachage Java. Un espion lui assure que cette empreinte ne concerne qu'un mot de quelques lettres qui ne contient que des majuscules. Le pirate sait que la plus grande empreinte sera obtenue avec une suite de "Z". Avec "ZZZ", l'empreinte Java sera de 89370, on ne peut pas faire plus grand avec trois majuscules. Avec "ZZZZ", le condensé se monte à environ 2.,7 millions. Si l'attaquant intercepte une valeur comprise dans cette intervalle, il devine que le mot possède certainement quatre caractères. Avec une résolution de l'équation w + x*31 + y*31*31 + z*31*31*31, on retrouve la solution sans passer par une recherche complète de toutes les possibilités, nous avons réussi à soutirer un peu d'information. On comprend qu'une fonction robuste ne doit pas permettre de telles manipulations et se laisser inverser.
 
En termes plus techniques, cette recherche d'une entrée possible à partir de l'empreinte est une ''attaque sur la première préimage''. Une ''attaque sur la seconde préimage'' consiste quant à elle, à forger des données qui donnent la même empreinte qu'un autre message. Finalement, la troisième attaque se résume à rechercher des collisions quelconques.
268

modifications

Menu de navigation