Fonctions de Hachage ISEC Ludovic Perret Université Pierre et Marie Curie (Paris VI) ludovic.perret@lip6.fr
Plan du cours 1 Généralités 2 Merkle-Damgård 3 Construction basées sur des chiffrement par blocs
Fonction de Hachage Généralités
Généralités pour commencer... Définition Une fonction de hachage est une fonction prenant en entrée une donnée de taille variable et retournant une donnée de taille fixe nommée emprunte (ou haché) : h : {0, 1} {0, 1} n. Il faut que l emprunte soit calculatoirement facile à calculer, i.e. x {0, 1}, h(x) est facile à calculer.
Généralités Contrôle d intégrité Principe Pour une donnée data {0, 1}, on calcule H = h(data). FC3-i386-disc1.iso (md5sum : db8c7254beeb4f6b891d1ed3f689b412) Pour vérifier l intégrité de data, on teste si h(data ) = H. Remarque La vérification est donc possible pas tous car la fonction est publique.
Généralités Contrôle d accès Stockage d un mot de passe Soit psswd {0, 1} un mot de passe. On stocke H = h(psswd). Pour tester si psswd {0, 1} est un mot de passe correct, on teste h(psswd ) = H. Remarque On ne stocke jamais la mot de passe en clair.
Généralités Signature Numérique Principe Soit doc {0, 1}, on signe H = h(doc). Remarque La fonction de hachage est publique. La vérification est donc possible pas tous.
Généralités Sécurité d une fonction de hachage Soit h : {0, 1} {0, 1} n une fonction de hachage. h est à sens unique : pour (presque) tout y Im(h), il est calculatoirement difficile de trouver x Dom(h) tel que : h(x) = y.
Généralités Sécurité d une fonction de hachage Soit h : {0, 1} {0, 1} n une fonction de hachage. h est à sens unique : pour (presque) tout y Im(h), il est calculatoirement difficile de trouver x Dom(h) tel que : h(x) = y. h est faiblement sans-collisision : pour h(x) Im(h) fixé, il est calculatoirement difficile de trouver x x Dom(h) tel que : h(x ) = h(x).
Généralités Sécurité d une fonction de hachage Soit h : {0, 1} {0, 1} n une fonction de hachage. h est à sens unique : pour (presque) tout y Im(h), il est calculatoirement difficile de trouver x Dom(h) tel que : h(x) = y. h est faiblement sans-collisision : pour h(x) Im(h) fixé, il est calculatoirement difficile de trouver x x Dom(h) tel que : h(x ) = h(x). h est sans-collision : il est calculatoirement difficile de trouver (x, x ) Dom(h) Dom(h), x x, tel que : h(x ) = h(x).
Généralités Illustration Exercice Montrer que la fonction identité est une fonction sans-collision et faiblement sans-collision mais pas à sens unique.
Généralités Relation entre les notions (I) Proposition Soit h : X Y une fonction de hachage. Démonstration. h est sans-collision h est faiblement sans-collision. Supposons que h sans-collision. Par l absurde, supposons que h n est pas faiblement sans-collision. Étant donné x X, il est donc calculatoirement faisable de trouver x X, x x, tel que h(x ) = h(x).
Généralités Relation entre les notions (I) Proposition Soit h : X Y une fonction de hachage. Démonstration. h est sans-collision h est faiblement sans-collision. Supposons que h sans-collision. Par l absurde, supposons que h n est pas faiblement sans-collision. Étant donné x X, il est donc calculatoirement faisable de trouver x X, x x, tel que h(x ) = h(x). (x, x ) est ainsi une collision pour h.
Généralités Relation entre les notions (II) Proposition Soit h : X Y une fonction de hachage, où X et Y sont des ensembles finis. Si X 2 Y, alors : Démonstration. En TD. h est sans-collision h est à sens unique.
Généralités Paradoxe des anniversaires Proposition Soient x 1,..., x k+1, des éléments distincts de X tirés aléatoirement, et y i = h(x i ), pour tout i, 1 i k + 1. Pr( collision) 1 e k(k 1) 2N, avec N = Y.
Généralités Paradoxe des anniversaires Démonstration. On suppose que les y i sont des éléments aléatoires de Y.
Généralités Paradoxe des anniversaires Démonstration. On suppose que les y i sont des éléments aléatoires de Y. Nous avons N = Y. La probabilité que y i+1 {y 1,..., y i } est p i+1 = (1 i/n).
Généralités Paradoxe des anniversaires Démonstration. On suppose que les y i sont des éléments aléatoires de Y. Nous avons N = Y. La probabilité que y i+1 {y 1,..., y i } est p i+1 = (1 i/n). La probabilité que les y 1,..., y k tirés dans cet ordre soient distincts est k 1 k 1 P = p i+1 = (1 i/n). i=0 i=0
Généralités Paradoxe des anniversaires Démonstration. On suppose que les y i sont des éléments aléatoires de Y. Nous avons N = Y. La probabilité que y i+1 {y 1,..., y i } est p i+1 = (1 i/n). La probabilité que les y 1,..., y k tirés dans cet ordre soient distincts est k 1 k 1 P = p i+1 = (1 i/n). i=0 i=0 La probabilité de non-collision est donc P.
Généralités Paradoxe des anniversaires Démonstration. On suppose que les y i sont des éléments aléatoires de Y. Nous avons N = Y. La probabilité que y i+1 {y 1,..., y i } est p i+1 = (1 i/n). La probabilité que les y 1,..., y k tirés dans cet ordre soient distincts est k 1 k 1 P = p i+1 = (1 i/n). i=0 i=0 La probabilité de non-collision est donc P. En approchant 1 x par e x pour x proche de 0, on obtient : P k 1 i=0 e i N = e k(k 1) 2N.
Généralités Collision Proposition Soit h : X Y une fonction de hachage, avec X Y et Y = N. Pour trouver une collision avec probabilité supérieure ou égale à 1/2, il suffit" de hacher : O( N) éléments de X. Autrement dit... Pour avoir une probabilité supérieure ou égale à 1/2 de trouver une collision, il suffit de hacher un peu plus de N éléments de X.
Généralités Preuve Démonstration. Notons ɛ = 1 P, la probabilité d avoir au moins une collision. Exprimons k en fonction de ɛ et N : ɛ 1 e k(k 1) k(k 1) 2N ln(1 ɛ). 2N Ainsi, k 2 k 2N ln( 1 1 ɛ ). En ignorant le terme k, on obtient : ( ) 1 k 2N ln. 1 ɛ Pour ɛ = 1/2, on trouve k 1.18 N.
Généralités Illustration Supposons que X est un ensemble d individus Y l ensemble des 365 jours d une année non bissextile h(x), le jour de l anniversaire d une personne de X (on suppose que X comporte plus de 365 personnes) On obtient k 1.18 365 1.18 19.10 22.5
Généralités Sécurité d une fonction de hachage Soit h : {0, 1} {0, 1} n une fonction de hachage. h est à sens unique si pour (presque) tout y Im(h), il est impossible de trouver x Dom(h) tel que h(x) = y, avec une complexité significativement meilleure que O( Y ) (recherche exhaustive).
Généralités Sécurité d une fonction de hachage Soit h : {0, 1} {0, 1} n une fonction de hachage. h est à sens unique si pour (presque) tout y Im(h), il est impossible de trouver x Dom(h) tel que h(x) = y, avec une complexité significativement meilleure que O( Y ) (recherche exhaustive). h est faiblement sans-collision si pour h(x) Im(h) fixé, il est impossible de trouver x Dom(h) tel que : h(x ) = h(x), avec une complexité significativement meilleure que O( Y ) (recherche exhaustive).
Généralités Sécurité d une fonction de hachage Soit h : {0, 1} {0, 1} n une fonction de hachage. h est à sens unique si pour (presque) tout y Im(h), il est impossible de trouver x Dom(h) tel que h(x) = y, avec une complexité significativement meilleure que O( Y ) (recherche exhaustive). h est faiblement sans-collision si pour h(x) Im(h) fixé, il est impossible de trouver x Dom(h) tel que : h(x ) = h(x), avec une complexité significativement meilleure que O( Y ) (recherche exhaustive). h est sans-collision s il est impossible de trouver (x, x ) Dom(h) Dom(h), x x, tel que : h(x ) = h(x). avec une complexité significativement meilleure que O( Y ) (paradoxe des anniversaires).
Merkle-Damgård Plan du cours 1 Généralités 2 Merkle-Damgård 3 Construction basées sur des chiffrement par blocs
Merkle-Damgård Fonction de compression Problème Comment gérer une donnée de taille variable? Définition Une fonction de compression est une fonction qui transforme toute chaîne d une taille fixée n + r en une chaîne de taille n. f : {0, 1} n+r {0, 1} n.
Merkle-Damgård Construction de Merle-Damgård (I) La chaîne x (de longueur arbitraire) à hacher subit un prétraitement (padding) qui la transforme en t blocs de r bits x 1,..., x t. IV {0, 1} n une valeur initiale (ou vecteur d initialisation), f : {0, 1} r {0, 1} n {0, 1} n une fonction de compression, g : {0, 1} n {0, 1} m une fonction de finalisation". On calcule l empreinte comme : H 0 = IV, H i = f (H i 1, x i ), 1 i t, h(x) = g(h t ).
Merkle-Damgård Algorithme d extension de Merkle-Damgård (I) Entrée : f : {0, 1} n+r {0, 1} n sans-collision, IV {0, 1} n, et g : {0, 1} n {0, 1} m. Sortie : h : {0, 1} {0, 1} n sans-collision. 1 Soit x la chaîne à hacher avec l = x (en bits). On découpe x en t blocs de r bits (en complétant x t avec des 0 si nécessaire). 2 Ajouter un bloc x t+1 de r bits contenant la représentation binaire de l (on suppose l 2 r ). 3 Soit H 0 = IV, on calcule H i = f (H i 1 x i ), 1 i t + 1. 4 Retourner h(x) = g(h t+1 ). Remark Le plus souvent, g = Id, et donc h(x) = H t+1.
Merkle-Damgård Algorithme d extension de Merkle-Damgård (II)
Merkle-Damgård Sécurité de l extension MD (I) Proposition f est sans-collision h est sans-collision.
Merkle-Damgård Sécurité de l extension MD (II) Démonstration. On suppose que g = Id. Soient x, y {0, 1} tels que h(x) = h(y).
Merkle-Damgård Sécurité de l extension MD (II) Démonstration. On suppose que g = Id. Soient x, y {0, 1} tels que h(x) = h(y). Notons s (resp. t), le nombre de blocs de taille r de x (resp. y). h(x) = h(y) H s+1 = H t+1 f (H s x s+1 ) = f (H t y t+1 ). f sans-collision, donc H s x s+1 = H t y t+1 H s = H t, et x s+1 = y t+1. x s+1 et y t+1 représentant la longueur de x et y, on en déduit que s = t, et par suite H s = H s.
Merkle-Damgård Sécurité de l extension MD (II) Démonstration. On suppose que g = Id. Soient x, y {0, 1} tels que h(x) = h(y). Notons s (resp. t), le nombre de blocs de taille r de x (resp. y). h(x) = h(y) H s+1 = H t+1 f (H s x s+1 ) = f (H t y t+1 ). f sans-collision, donc H s x s+1 = H t y t+1 H s = H t, et x s+1 = y t+1. x s+1 et y t+1 représentant la longueur de x et y, on en déduit que s = t, et par suite H s = H s. Ensuite : H s = H s f (H s 1 x s ) = f (H s 1 y s ). f sans-collision, donc H s 1 x s = H s 1 y s H s 1 = H s 1, et x s = y s.
Merkle-Damgård Sécurité de l extension MD (II) Démonstration. On suppose que g = Id. Soient x, y {0, 1} tels que h(x) = h(y). Notons s (resp. t), le nombre de blocs de taille r de x (resp. y). h(x) = h(y) H s+1 = H t+1 f (H s x s+1 ) = f (H t y t+1 ). f sans-collision, donc H s x s+1 = H t y t+1 H s = H t, et x s+1 = y t+1. x s+1 et y t+1 représentant la longueur de x et y, on en déduit que s = t, et par suite H s = H s. Ensuite : H s = H s f (H s 1 x s ) = f (H s 1 y s ). f sans-collision, donc H s 1 x s = H s 1 y s H s 1 = H s 1, et x s = y s. Par récurrence descendante sur s, on obtient que x i = y i, 1 i s, et donc x = y.
Merkle-Damgård MD5 MD = Message Digest élaborée en 1991 par Ronald Rivest bloc d entrée de 512 bits produit des valeurs hachées de 128 bits utilise des rotations, des additions modulo 2 32, ainsi que des constantes de 32 bits. des collisions ont été trouvées sur MD5 en un temps MD5 ne doit plus être utilisée pour un usage cryptographique.
Merkle-Damgård Collision sur MD5 Xiaoyun Wang, Hongbo Yu. How to Break MD5 and Other Hash Functions. EUROCRYPT 2005.
Merkle-Damgård SHA1 SHA = Secure Hash Algorithm proposée par le NIST en 1995, comme version modifiée du standard SHA. bloc d entrée de 512(= 16 32) bits produit des hachées de 160 bits Recherche d une collision estimé à 2 60+x SHA1 ne devrait plus être utilisée pour un usage cryptographique.
Merkle-Damgård SHA1 (I) Variable de chaînage de 160 bits (A, B, C, D, E) Blocs de 512 = (5 32) bits (W 0,..., W 15 ) 80 étapes élémentaires (tours) Expansion du bloc de message 16 mots (32 bits) vers 80 mots
Merkle-Damgård SHA1 (II) Expansion de message : W t = (W t 3 W t 3 W t 14 W t 16 ) <<< 1, t 16. 32 fonctions de 3 bits vers 1 bit en // addition modulo 2 32 K t constante du tour
Merkle-Damgård Compétition SHA3 Nouveau standard 64 soumissions SHA3 14 candidats en phase 2 5 candidats en phase 3 Keccak (G. Bertoni, J. Daemen, M. Peeters, G. Van Assche)
Construction basées sur des chiffrement par blocs Plan du cours 1 Généralités 2 Merkle-Damgård 3 Construction basées sur des chiffrement par blocs
Construction basées sur des chiffrement par blocs Davies-Meyer (I) Soit E : F n 2 Fr 2 Fn 2 un chiffrement par blocs. On découpe la donnée x à hacher en t blocs x 1,..., x t de taille n. Le dernier bloc étant éventuellement complété par des zéros. On définit : La valeur hachée est H t. H 0 = IV, H i = E xi (H i 1 ) H i 1, 1 i t.
Construction basées sur des chiffrement par blocs Davies-Meyer (II) Soit E : F n 2 Fr 2 Fn 2 un chiffrement par blocs, et une fonction g : F n 2 Fr 2. On découpe la donnée x à hacher en t blocs x 1,..., x t de taille n. Le dernier bloc étant éventuellement complété par des zéros. On définit : La valeur hachée est H t. H 0 = IV, H i = E xi (H i 1 ) H i 1, 1 i t.
Construction basées sur des chiffrement par blocs Davies-Meyer (II) Soit E : F n 2 Fr 2 Fn 2 un chiffrement par blocs, et une fonction g : F n 2 Fr 2. On découpe la donnée x à hacher en t blocs x 1,..., x t de taille n. Le dernier bloc étant éventuellement complété par des zéros. On définit : La valeur hachée est H t. Point fixe H 0 = IV, H i = E xi (H i 1 ) H i 1, 1 i t. Il existe m tel que H = E m (H) H. H = E 1 m (0).
Construction basées sur des chiffrement par blocs Matyas-Meyer-Oseas Soit E : F n 2 Fr 2 Fn 2 un chiffrement par blocs, et une fonction g : F n 2 Fr 2. On découpe la donnée x à hacher en t blocs x 1,..., x t de taille n. Le dernier bloc étant éventuellement complété par des zéros. On définit : La valeur hachée est H t. H 0 = IV, H i = E g(hi 1 )(x i ) x i, 1 i t.
Construction basées sur des chiffrement par blocs Miyaguchi-Preneel Soit E : F n 2 Fr 2 Fn 2 un chiffrement par blocs, et une fonction g : F n 2 Fr 2. On découpe la donnée x à hacher en t blocs de taille n, x 1,..., x t, le dernier bloc étant éventuellement complété par des 0. On définit : La valeur hachée est H t. H 0 = IV, H i = E g(hi 1 )(x i ) x i H i 1, 1 i t.
Construction basées sur des chiffrement par blocs Construction d un MAC à l aide d une fonction de hachage HMAC
Construction basées sur des chiffrement par blocs Construction d un MAC à l aide d une fonction de hachage HMAC HMAC H. Krawczyk, M. Bellare, et R. Cannetti (1996) Soit h est une fonction de hachage sans-collision : HMAC(k, m) = h ( k opad h( k ipad m) ). k est la clef m est le message k désigne la clef k complétée avec des 0 jusqu à obtenir la longueur d entrée de la fonction de compression de h ipad, opad sont des chaînes de formattage fixées.