Fonction de hachage cryptographique
Une fonction de hachage cryptographique est une fonction de hachage qui, à une donnée de taille arbitraire, associe une image de taille fixe, et dont une propriété essentielle est qu'elle est pratiquement impossible à inverser, c'est-à -dire que si l'image d'une donnée par la fonction se calcule trÚs efficacement, le calcul inverse d'une donnée d'entrée ayant pour image une certaine valeur se révÚle impossible sur le plan pratique. Pour cette raison, on dit d'une telle fonction qu'elle est à sens unique.
En raison de leur ubiquité, ces fonctions à sens unique ont été appelées les chevaux de trait de la cryptographie moderne[1]. La donnée d'entrée de ces fonctions est souvent appelée message ; la valeur de sortie est souvent appelée valeur de hachage, empreinte numérique, empreinte, ou encore haché (en anglais, message digest ou digest, hash).
Une fonction de hachage cryptographique idéale possÚde les six propriétés suivantes[2] :
- la fonction est dĂ©terministe, c'est-Ă -dire qu'un mĂȘme message aura toujours la mĂȘme valeur de hachage ;
- la valeur de hachage d'un message se calcule « facilement » ;
- il est impossible, pour une valeur de hachage donnée, de construire un message ayant cette valeur (résistance à la préimage) ;
- il est impossible de trouver un second message ayant la mĂȘme valeur de hachage qu'un message donnĂ© (rĂ©sistance Ă la seconde prĂ©image) ;
- il est impossible de trouver deux messages diffĂ©rents ayant la mĂȘme valeur de hachage (rĂ©sistance aux collisions) ;
- modifier un tant soit peu un message modifie considérablement la valeur de hachage[3].
Les fonctions de hachage cryptographiques sont une primitive de cryptographie symétrique, mais forment une brique de base largement utilisées dans la conception de schémas cryptographiques (aussi bien symétriques qu'asymétriques), notamment dans les signatures numériques, les codes d'authentification de message et les autres formes d'authentification.
Les fonctions Secure Hash Algorithm (SHA) du NIST sont des exemples de fonctions de hachage cryptographiques.
Propriétés
La plupart des fonctions de hachage cryptographiques sont conçues pour prendre une suite de bits de longueur quelconque en entrée (éventuellement la longueur est bornée, mais la borne est trÚs élevée) et produire une valeur de hachage de longueur fixe en sortie.
Dans leur dĂ©finition formelle, les fonctions de hachages cryptographiques possĂšdent dans le modĂšle standard diffĂ©rents niveaux de sĂ©curitĂ©s qui peuvent ĂȘtre requis[4], dĂ©finis par les propriĂ©tĂ©s suivantes :
- rĂ©sistance Ă la prĂ©image (en anglais, preimage resistance) pour toute valeur de hachage h, il devrait ĂȘtre difficile de trouver un message m tel que hachage(m) = h. Cette notion est liĂ©e Ă la notion de fonction Ă sens unique. Les fonctions qui n'ont pas cette propriĂ©tĂ© sont vulnĂ©rables aux attaques de prĂ©image (en anglais, preimage attacks) ;
- rĂ©sistance Ă la seconde prĂ©image (en anglais, second preimage resistance) pour tout message m1, il devrait ĂȘtre difficile de trouver un message diffĂ©rent m2 tel que hachage(m1) = hachage(m2). Les fonctions qui n'ont pas cette propriĂ©tĂ© sont vulnĂ©rables aux attaques de seconde prĂ©image (en anglais, second-preimage attacks) ;
- rĂ©sistance aux collisions il doit ĂȘtre difficile de trouver deux messages diffĂ©rents m1 et m2 tels que hachage(m1) = hachage(m2). Une telle paire de messages est appelĂ©e une collision de hachage cryptographique. Pour obtenir cette propriĂ©tĂ©, il faut une valeur de hachage au moins deux fois plus longue que celle requise pour obtenir la rĂ©sistance Ă la prĂ©image. Si la clĂ© n'est pas assez longue, une collision peut ĂȘtre trouvĂ©e par une attaque des anniversaires.
On peut noter qu'un algorithme permettant de trouver une prĂ©image peut aussi ĂȘtre utilisĂ© pour fournir une collision ; par contraposĂ©e, l'absence d'attaque efficace en collision implique l'absence d'attaque efficace en prĂ©image. En pratique, les fonctions de hachages cryptographiques utilisĂ©es sont conçues pour ĂȘtre rĂ©sistantes aux collisions, cette propriĂ©tĂ© impliquant les deux autres. Et mĂȘme si en cryptographie thĂ©orique il est parfois nĂ©cessaire dâutiliser des fonctions de hachages sur des hypothĂšses plus faibles pour des raisons d'efficacitĂ© calculatoire thĂ©oriques, on leur prĂ©fĂ©rera en pratique les fonctions standardisĂ©es possĂ©dant les propriĂ©tĂ©s de sĂ©curitĂ© les plus fortes.
Informellement, ces propriĂ©tĂ©s signifient qu'un adversaire malveillant ne peut pas remplacer ou modifier les donnĂ©es d'entrĂ©e sans changer son empreinte numĂ©rique. Ainsi, si deux chaĂźnes ont la mĂȘme empreinte numĂ©rique, on peut ĂȘtre trĂšs confiant dans le fait qu'elles sont identiques.
Une fonction de hachage cryptographiquement sĂ»re peut tout de mĂȘme avoir des propriĂ©tĂ©s indĂ©sirables. Actuellement, des fonctions populaires de hachage cryptographique (MD5, SHA-1 et la plupart des SHA-2) sont vulnĂ©rables Ă des attaques qui allongent la longueur du message : en effet, si hachage(m1) et la longueur de m1 sont connus, en choisissant un m2 appropriĂ©, un attaquant peut calculer hachage(m1 || m2) oĂč || dĂ©signe la concatĂ©nation[5]. Cette particularitĂ© peut ĂȘtre utilisĂ©e pour briser des algorithmes d'authentification fondĂ©s sur des fonctions de hachage. Les HMAC (en anglais Keyed-Hash Message Authentication Code) permet de corriger cette faiblesse.
On pourrait augmenter la sécurité des fonctions de hachage cryptographiques en exigeant des propriétés additionnelles pour ces fonctions. Par exemple,
- il est impossible de trouver deux messages ayant des empreintes numĂ©riques semblablesâŻ;
- il est impossible de déduire quelque information que ce soit d'un message à partir de son empreinte numérique.
Les algorithmes de somme de contrÎle (checksum), comme CRC32 et d'autres contrÎles de redondance cyclique, sont conçus pour répondre à des exigences beaucoup plus faibles et sont généralement inadéquats comme fonctions de hachage cryptographique. Par exemple, un CRC a été utilisé pour vérifier l'intégrité des messages dans la norme de cryptage WEP, mais une attaque qui exploitait la linéarité de la somme de contrÎle a été rapidement découverte[6].
ModÚle de l'oracle aléatoire
Dans le cadre de la sĂ©curitĂ© prouvable, le modĂšle de l'oracle alĂ©atoire est un modĂšle de sĂ©curitĂ© idĂ©alisĂ© oĂč les fonctions de hachage cryptographiques sont considĂ©rĂ©es comme des fonctions alĂ©atoires. Cette mĂ©thodologie permet de prouver des rĂ©sultats qui ne sont pas possibles autrement. Par exemple la transformation de Fiat-Shamir repose essentiellement sur le fait que la fonction de hachage est utilisĂ©e comme une fonction alĂ©atoire.
Cependant cette mĂ©thodologie est parfois critiquĂ©e car considĂ©rĂ©e comme non-rĂ©aliste[7], et on lui prĂ©fĂ©rera le modĂšle standard et les dĂ©finitions ci-dessus dans les cas oĂč ils sont suffisants. Ainsi le premier chiffrement fondĂ© sur l'identitĂ© (IBE) par Boneh et Franklin[8] est prouvĂ© sĂ»r dans le modĂšle de l'oracle alĂ©atoire, avant la dĂ©couverte de l'IBE par Boneh et Boyen[9] prouvĂ© dans le modĂšle standard, n'utilisant que des fonctions de hachage rĂ©sistantes aux collisions.
Degré de difficulté
Dans la pratique de la cryptographie, difficile signifie gĂ©nĂ©ralement au-delĂ de la portĂ©e de tout adversaire, et cela aussi longtemps que la sĂ©curitĂ© du systĂšme est jugĂ©e importante. La signification du terme est dĂ©pendante de la valeur de l'information Ă protĂ©ger, puisque l'effort qu'un agent malveillant peut mettre Ă la tĂąche est gĂ©nĂ©ralement proportionnel Ă son espĂ©rance de gain. L'Ă©valuation de la puissance de traitement d'un adversaire doit aussi tenir compte de la pĂ©riode de temps durant laquelle l'information doit ĂȘtre protĂ©gĂ©e. En effet, comme les connaissances cryptographiques et la puissance de traitement des ordinateurs augmentent rapidement, il faut tenir compte de ce fait pour estimer les capacitĂ©s d'un adversaire dans 10 ou 20 ans. Toutefois, Ă©tant donnĂ© que l'effort nĂ©cessaire pour briser un message augmente trĂšs rapidement avec la longueur de la valeur de hachage, mĂȘme une augmentation par un facteur de mille de la puissance de traitement peut ĂȘtre neutralisĂ©e par l'addition d'une dizaine de bits Ă la valeur de hachage.
Dans certaines analyses thĂ©oriques, difficile a le sens mathĂ©matique spĂ©cifique suivant : non rĂ©soluble dans un temps polynomial asymptotique. Cette dĂ©finition de difficile est importante dans l'Ă©tude des fonctions de hachage cryptographiques pouvant ĂȘtre prouvĂ©es sĂ©curisĂ©es, mais n'est gĂ©nĂ©ralement pas un gage de sĂ©curitĂ© dans la pratique. Par exemple, un algorithme de temps exponentiel peut parfois ĂȘtre rĂ©soluble assez rapidement pour permettre une attaque. Ă l'inverse, un algorithme de temps polynomial (par exemple, celui qui nĂ©cessite n20 Ă©tapes pour une clĂ© de n chiffres) peut ĂȘtre trop lent pour une implĂ©mentation pratique.
Illustration
Voici un exemple d'utilisation d'un hachage cryptographique :
- Alice propose un problÚme difficile de mathématiques à Bob, prétend qu'elle l'a résolu et défie Bob de le résoudre.
- Bob veut bien essayer, mais il veut s'assurer qu'Alice ne bluffe pas.
- Pour prouver sa bonne foi, Alice calcule la valeur de hachage de sa solution et la donne Ă Bob (tout en gardant sa solution secrĂšte).
- Si Bob rĂ©sout le problĂšme, il peut ensuite en calculer la valeur de hachage (en utilisant le mĂȘme algorithme qu'Alice) et la comparer avec celle donnĂ©e par Alice Ă l'Ă©tape prĂ©cĂ©dente. Si la solution est unique, les valeurs de hachage doivent ĂȘtre les mĂȘmes. Alice a bien trouvĂ© la solution avant Bob.
Le scénario précédent est un exemple d'une mise en gage simple. Dans la pratique, Alice et Bob seraient souvent des programmes informatiques et le secret serait quelque chose de moins facilement usurpée qu'une solution de puzzle.
Applications
Vérification de l'intégrité des fichiers ou des messages
Une application importante du hachage cryptographique est la vĂ©rification de l'intĂ©gritĂ© d'un fichier (ou d'un message). Par exemple, la modification d'un fichier lors d'une transmission (ou toute autre activitĂ©) peut ĂȘtre prouvĂ©e en comparant la valeur de hachage du fichier avant et aprĂšs la transmission.
En pratique, la plupart des algorithmes de signature numĂ©rique d'un fichier ne vĂ©rifient pas que le fichier n'a pas Ă©tĂ© changĂ©, mais bien que la valeur de hachage du fichier n'a pas changĂ©. Toutefois, Ă cause des caractĂ©ristiques des fonctions de hachage cryptographiques, la vĂ©rification de la valeur de hachage est considĂ©rĂ©e comme la preuve que le fichier lui-mĂȘme est authentique.
Des valeurs de hachage obtenues par les algorithmes MD5, SHA-1 ou SHA-2 sont parfois affichées avec les fichiers correspondants sur des sites Web ou des forums informatiques pour permettre la vérification de l'intégrité des fichiers[10]. Cette pratique établit une chaßne de confiance pourvu que les valeurs de hachage soient affichées sur un site sécurisé par HTTPS.
La sĂ©curitĂ© de la fonction de hachage utilisĂ©e, en particulier la rĂ©sistance Ă une attaque par prĂ©image est importante. Le ver informatique FLAME en 2012 a par exemple profitĂ© du fait que les certificats de confiance utilisĂ©s par Microsoft signaient une empreinte MD5[11] pour pouvoir sâinstaller discrĂštement en se faisant passer pour un composant systĂšme.
VĂ©rification de mot de passe
Une autre application du hachage cryptographique est la vĂ©rification de mot de passe (inventĂ©e par Roger Needham). Le stockage de tous les mots de passe utilisateur en clair peut entraĂźner une violation de sĂ©curitĂ© massive si le fichier de mots de passe est compromis. Une façon de rĂ©duire ce danger est de stocker seulement la valeur de hachage de chaque mot de passe. Pour authentifier un usager, le mot de passe fourni par l'utilisateur est hachĂ© et comparĂ© avec la valeur de hachage stockĂ©e. Avec cette approche, les mots de passe perdus ne peuvent pas ĂȘtre rĂ©cupĂ©rĂ©s s'ils sont oubliĂ©s ; ils doivent ĂȘtre remplacĂ©s par de nouveaux mots de passe.
Le mot de passe est souvent concatĂ©nĂ© avec un sel cryptographique non secret avant que la fonction de hachage soit appliquĂ©e. Si le salage est alĂ©atoire (sel diffĂ©rent pour chaque utilisateur) â ce qui est maintenant la norme â, le sel est stockĂ© avec la valeur de hachage du mot de passe. Il est alors impossible de construire des tables de valeurs de hachage prĂ©calculĂ©es pour les mots de passe communs. Les fonctions de dĂ©rivation de clĂ©s, comme PBKDF2, Bcrypt ou Scrypt, typiquement utilisent des appels rĂ©pĂ©tĂ©s d'une fonction de hachage cryptographique pour augmenter le temps nĂ©cessaire afin d'effectuer des attaques par force brute sur des valeurs de hachage de mots de passe stockĂ©s.
En 2013, une compétition de hachage de mots de passe, intitulée Password Hashing Competition a été annoncée pour choisir un nouvel algorithme standard de hachage de mot de passe[12]. Le , Argon2 a été choisi comme le vainqueur de la compétition. Des mentions de reconnaissance ont aussi été attribuées aux hachages suivants : Catena, Lyra2 (en), Scrypt et Makwa[13].
Preuve de travail
Une preuve de travail est un protocole visant Ă dissuader les attaques par dĂ©ni de service ou d'autres nuisances comme le spam, en exigeant du demandeur de service dâexĂ©cuter une tĂąche Ă coĂ»t non nĂ©gligeable. Ce travail est habituellement un calcul complexe effectuĂ© par un ordinateur. Une caractĂ©ristique clĂ© de ces travaux est leur asymĂ©trie : le travail doit ĂȘtre modĂ©rĂ©ment difficile Ă exĂ©cuter (mais possible) pour le demandeur, mais facilement vĂ©rifiable par le fournisseur de service. Une tĂąche typique exigĂ©e â par exemple, dans le minage de Bitcoins et Hashcash â est l'inversion partielle d'une fonction de hachage. Le demandeur doit trouver un message dont la valeur de hachage commence par un certain nombre de bits Ă zĂ©ro. Le coĂ»t moyen du travail que le requĂ©rant doit effectuer afin de trouver un message valide varie exponentiellement avec le nombre de zĂ©ros requis au dĂ©but de la valeur de hachage, alors que le destinataire vĂ©rifie la validitĂ© de la rĂ©ponse proposĂ©e en exĂ©cutant une seule fonction de hachage. Ainsi, avec Hashcash, un expĂ©diteur doit gĂ©nĂ©rer un message dont la valeur de hachage commence par 20 zĂ©ros, par consĂ©quent, il devra en moyenne essayer 220 messages pour trouver un message valide.
Identification de fichiers ou de données
Une valeur de hachage peut aussi servir comme un moyen d'identifier de maniÚre fiable un fichier ; plusieurs systÚmes de gestion de code source, y compris Git, Mercurial et Monotone, utilisent le sha1sum de divers types de contenu (le contenu de fichiers, les arborescences de répertoires, etc.) pour les identifier de maniÚre unique. Les valeurs de hachage sont utilisées pour identifier les fichiers sur les réseaux de partage de fichiers pair-à -pair. Par exemple, dans un lien ed2k, la valeur de hachage d'une variante de MD4 est combinée avec la taille du fichier, fournissant des informations suffisantes pour localiser les sources du fichier, le télécharger et en vérifier le contenu.
L'une des principales applications d'une fonction de hachage est de permettre la consultation rapide d'un Ă©lĂ©ment dans une table de hachage. Ătant des fonctions de hachage d'un genre particulier, les fonctions de hachage cryptographiques se prĂȘtent aussi Ă cette utilisation. Cependant, en comparaison avec les fonctions de hachage standards, les fonctions de hachage cryptographiques sont beaucoup plus coĂ»teuses en calcul. Pour cette raison, elles sont utilisĂ©es seulement dans des contextes oĂč il est nĂ©cessaire de se protĂ©ger contre les risques de falsification (la crĂ©ation de donnĂ©es avec la mĂȘme valeur de hachage que les donnĂ©es attendues) par des participants potentiellement malveillants.
Génération d'éléments pseudo-aléatoires et dérivation de clés
Les fonctions de hachage cryptographiques peuvent Ă©galement ĂȘtre utilisĂ©es dans la gĂ©nĂ©ration de nombres et de suites de bits pseudo-alĂ©atoires, ou pour dĂ©river de nouvelles clĂ©s ou de nouveaux mots de passe Ă partir d'une clĂ© ou d'un mot de passe sĂ©curisĂ©.
Notes et références
- (en) Bruce Schneier, « Cryptanalysis of MD5 and SHA: Time for a New Standard », sur Computerworld (consulté le ).
- (en) Alfred J. Menezes, Paul C. van Oorschot et Scott A. Vanstone, Handbook of Applied Cryptography, CRC Press, (ISBN 0-8493-8523-7, lire en ligne).
- (en) Saif Al-Kuwari, James H. Davenport et Russell J. Bradford, Cryptographic Hash Functions: Recent Design Trends and Security Notions, (lire en ligne)
- Rogaway et Shrimpton 2004.
- (en) « Flickr's API Signature Forgery Vulnerability », Thai Duong and Juliano Rizzo
- (en) Nikita Borisov, Ian Goldberg et David Wagner, « (In)Security of the WEP algorithm » (consulté le )
- MĂŒller-Quade et Unruh 2007, section 5.1. Trusted Devices Implementing a Random Oracle.
- Boneh et Franklin 2001.
- Boneh et Boyen 2004.
- (en) Chad Perrin, « Use MD5 hashes to verify software downloads », TechRepublic, (consulté le )
- Fillinger et Stevens 2015.
- (en) « Password Hashing Competition » (consulté le )
- "Password Hashing Competition"
Annexes
Bibliographie
- [Boneh et Boyen 2004] (en) Dan Boneh et Xavier Boyen, « Efficient Selective-ID Secure Identity-Based Encryption Without Random Oracles », Eurocrypt,â (DOI 10.1007/978-3-540-24676-3_14)
- [Boneh et Franklin 2001] (en) Dan Boneh et Matt Franklin, « Identity-Based Encryption from the Weil Pairing », Crypto,â (DOI 10.1007/3-540-44647-8_13)
- [Fillinger et Stevens 2015] (en) Max Fillinger et Marc Stevens, « Reverse-Engineering of the Cryptanalytic Attack Used in the Flame Super-Malware », Asiacrypt,â (lire en ligne)
- [MĂŒller-Quade et Unruh 2007] (en) Jörn MĂŒller-Quade et Dominique Unruh, « Long-Term Security and Universal Composability », Theory of Cryptography Conference (TCC),â
- [Rogaway et Shrimpton 2003] (en) Phillip Rogaway et Thomas Shrimpton, « Cryptographic Hash-Function Basics: Definitions, Implications, and Separations for Preimage Resistance, Second-Preimage Resistance, and Collision Resistance », FSE,â (lire en ligne)
Liens externes
- (en) Christof Paar et Jan Pelzl, Understanding Cryptography, A Textbook for Students and Practitioners, Springer, (lire en ligne), « 11: Hash Functions » (companion web site contains online cryptography course that covers hash functions)
- (en) « The ECRYPT Hash Function Website »