LES FONCTIONS DE HACHAGE Les procédés de signatures électroniques ne permettent de signer, en fait, que des petits messages. Le procédé «DSS» signe un message de 160 bits en lui adjoignant une signature de 320 bits Or, nous désirerons signer la plupart du temps des messages beaucoup plus longs pouvant faire jusqu à plusieurs mégaoctets. Il serait possible de signer de tels documents, bloc par bloc, mais alors le document final sera très volumineux et les temps de traitement très importants. La solution à cette problématique est d utiliser une fonction, rapide à calculer, dite de hachage cryptographique («hash function») qui associe à un texte t une empreinte, d une taille fixe (pourquoi pas de 160 bits!). Le processus de signature consistera ensuite à signer cette empreinte et non le texte lui-même. t, un texte e, une empreinte avec e = h(t) s, une signature avec s = sig K (e) L utilisateur du message signé devra recalculer e = h(t) puis vérifier la validité de la signature de l empreinte associée à ce document. L utilisation «en cascade» de deux fonctions, celle de hachage puis celle de signature impose une condition à la première, celle de ne pas fragiliser la fonction qui suit, celle de signature Attaques et conditions en résultant sur la fonctions de hachage La première attaque possible d un tel document signé consiste à partir d un couple (t, s) authentique, à calculer e = h(t) puis à chercher un t t tel que h(t ) = h(t). Si quelqu un y parvient, le couple (t, s) sera un message signé valide. conditions. Pour empêcher cela, la fonction de hachage devra donc satisfaire à certains Une fonction de hachage est dite à «collisions faibles difficiles» si et seulement si étant donné un message t, il est calculatoirement difficile d obtenir un message t t tel que h(t ) = h(t). Deuxième type d attaque : le faussaire recherche deux messages différents t et t tels que h(t) = h(t ) puis il arrive à convaincre le signataire de signer le message t, donc de signer l empreinte de ce message h(t). Il réussit alors à proposer un couple (t, h(t)) tout à fait valide. LES FONCTIONS DE HACHAGE PHILIPPE JEULIN - 1 / 10
Une fonction de hachage est dite à «collisions fortes difficiles» s il est calculatoirement difficile d obtenir deux messages différents t et t tel que h(t) = h(t ). Bien évidemment si une fonction est à collisions fortes difficiles, elle est à collisions faibles difficiles. Troisième type d attaque : le faussaire dispose d une signature valide d un message de type empreinte. Il peut alors chercher un message t tel que h(t) soit cette empreinte. Une fonction de hachage est «à sens unique» si et seulement si, pour une empreinte donnée e, il est calculatoirement difficile de trouver un message t tel que h(t) = e Une fonction élémentaire Une des plus simple des fonctions de hachage peut être réalisée avec un «OU exclusif» ou «XOR». Il suffit de découper un texte en bloc de n bits puis de calculer e i = b i,1 b i,2 b i,m, ou exclusif des b i,j i ème bit du j ème bloc, m étant le nombre de n bits dans le texte. bit 1 bit 2 bit n bloc 1 b 1,1 b 2,1 b n,1 bloc 2 b 1,2 b 2,2 b n,2 bloc m b 1,m b 2,m b n,m hash code h 1 h 2 h n Cette fonction reste fort simpliste et ne vérifie pas les principes énoncés ci-dessus. La fonction de hachage MD4 Cette fonction fut proposée en 1990 par Ron Rivest. Elle est à l origine d une famille de fonctions plus sûres. Elle fut remplacée, en effet, par «MD5», présentée en 1991. Le sigle «MD» signifie «Message Digest». Cet algorithme produit une empreinte sur 128 bits du texte d entrée. Le standard de hachage «SHS» ou «Secure Hash Standard» repose sur les mêmes principes. Il fut publié dans un «Federal Register» en 1992, adopté comme LES FONCTIONS DE HACHAGE PHILIPPE JEULIN - 2 / 10
standard en 1993 mais corrigé en 1994 suite à la mise en évidence d une faiblesse technique maintenue secrète. D après Rivest, les objectifs de conception de «MD4» étaient les suivants : Sécurité : il est impossible de trouver par le calcul deux textes qui aient la même empreinte ; aucune attaque n est plus efficace que l attaque exhaustive. Sécurité directe : la sécurité de «MD4» n est basée sur aucune hypothèse telle que la difficulté de factorisation. Vitesse : «MD4» est adapté pour des réalisations logicielles rapides. Simplicité : «MD4» est aussi simple que possible sans grandes structures de données ni programme compliqué. Architecture matérielle : «MD4» est optimisé pour les architectures à microprocesseurs (telles qu INTEL) dites à «octet de poids faible en premier» (architectures «little-endian»» par opposition aux architectures «big-endian» telles que les stations «SPARC»). Mise en place du processus Soit une chaîne de bits t, nous définissons le tableau T : T[0] T[1] T[2] T[N-1] tel que chaque T[i] soit d une longueur de 32 bits et N 0 mod 16. La réalisation des T[i] suit l algorithme ci-dessous. Toutefois auparavant pour construire T, nous ajouterons un «1» à la chaîne t suivi d un nombre suffisant de «0» pour obtenir une chaîne de longueur congrue à 448 modulo 512 et enfin, nous ajouterons la représentation binaire de la longueur de t, codée sur 64 bits. La chaîne résultante aura donc une longueur multiple de 512, chaîne que nous pourrons découper en un tableau T. Algorithme Cet algorithme permet donc de calculer une empreinte numérique codée sur 128 bits. Cette empreinte est la concaténation de 4 registres nommés A, B, C et D. Ces 4 registres sont initialisés par 4 valeurs hexadécimales : «67452301», «EFCDAB89», «98BADCFE» et «10325476». LES FONCTIONS DE HACHAGE PHILIPPE JEULIN - 3 / 10
A = 67452301 (hexadécimal) B = EFCDAB89 (hexadécimal) C = 98BADCFE (hexadécimal) D = 10325476 (hexadécimal) Pour i = 0 à N/16 1 Faire Pour j = 0 à 15 Faire X[j] = M[16 i + j] AA = A BB = B CC = C DD = D étape 1 (voir ci-dessous) étape 2 (voir ci-dessous) étape 3 (voir ci-dessous) A = A + AA B = B + BB C = C + CC D = D + DD Fin Faire Fin Faire Avant d étudier en détail les trois étapes évoquées dans l algorithme ci-dessus, il nous faut préciser la symbolique utilisée : X Y ET logique bit-à-bit de X et de Y X Y OU logique bit-à-bit de X et de Y X Y OU exclusif bit-à-bit de X et de Y X complémentation bit-à-bit de X X Y addition modulo 2 32 X << s rotation circulaire de s bits vers la gauche de X avec 0 s 31 puis définir trois fonctions f, g et h par : f(x, Y, Z) = (X Y) (( X) Z) g(x, Y, Z) = (X Y) (X Z) (Y Z) h(x, Y, Z) = X Y Z LES FONCTIONS DE HACHAGE PHILIPPE JEULIN - 4 / 10
Etape 1 A = A + f(b, C, D) + X[0] <<3 D = D + f(a, B, C) + X[1] <<7 C = C + f(d, A, B) + X[2] <<11 B = B + f(c, D, A) + X[3] <<19 A = A + f(b, C, D) + X[4] <<3 D = D + f(a, B, C) + X[5] <<7 C = C + f(d, A, B) + X[6] <<11 B = B + f(c, D, A) + X[7] <<19 A = A + f(b, C, D) + X[8] <<3 D = D + f(a, B, C) + X[9] <<7 C = C + f(d, A, B) + X[10] <<11 B = B + f(c, D, A) + X[11] <<19 A = A + f(b, C, D) + X[12] <<3 D = D + f(a, B, C) + X[13] <<7 C = C + f(d, A, B) + X[14] <<11 B = B + f(c, D, A) + X[15] <<19 Etape2 A = (A + g(b, C, D) + X[0] + 5A827999) << 3 D = (D + g(a, B, C) + X[4] + 5A827999) << 5 C = (C + g(d, A, B) + X[8] + 5A827999) << 9 B = (B + g(c, D, A) + X[12] + 5A827999) << 13 A = (A + g(b, C, D) + X[1] + 5A827999) << 3 D = (D + g(a, B, C) + X[5] + 5A827999) << 5 C = (C + g(d, A, B) + X[9] + 5A827999) << 9 B = (B + g(c, D, A) + X[13] + 5A827999) << 13 A = (A + g(b, C, D) + X[2] + 5A827999) << 3 D = (D + g(a, B, C) + X[6] + 5A827999) << 5 C = (C + g(d, A, B) + X[10] + 5A827999) << 9 B = (B + g(c, D, A) + X[14] + 5A827999) << 13 A = (A + g(b, C, D) + X[3] + 5A827999) << 3 D = (D + g(a, B, C) + X[7] + 5A827999) << 5 C = (C + g(d, A, B) + X[11] + 5A827999) << 9 B = (B + g(c, D, A) + X[15] + 5A827999) << 13 Etape 3 A= (A + h(b, C, D) + X[0] + 6ED9EBA1) << 3 D= (D + h(a, B, C) + X[8] + 6ED9EBA1) << 9 C= (C + h(d, A, B) + X[4] + 6ED9EBA1) << 11 B= (B + h(c, D, A) + X[12] + 6ED9EBA1) << 15 A= (A + h(b, C, D) + X[2] + 6ED9EBA1) << 3 D= (D + h(a, B, C) + X[10] + 6ED9EBA1) << 9 C= (C + h(d, A, B) + X[6] + 6ED9EBA1) << 11 B= (B + h(c, D, A) + X[14] + 6ED9EBA1) << 15 A= (A + h(b, C, D) + X[1] + 6ED9EBA1) << 3 D= (D + h(a, B, C) + X[9] + 6ED9EBA1) << 9 C= (C + h(d, A, B) + X[5] + 6ED9EBA1) << 11 B= (B + h(c, D, A) + X[13] + 6ED9EBA1) << 15 A= (A + h(b, C, D) + X[3] + 6ED9EBA1) << 3 D= (D + h(a, B, C) + X[11] + 6ED9EBA1) << 9 C= (C + h(d, A, B) + X[7] + 6ED9EBA1) << 11 B= (B + h(c, D, A) + X[15] + 6ED9EBA1) << 15 «MD4» utilise des opérations «bit-à-bit» très rapides. Seule, l addition modulo 2 32 est arithmétique. Elle fut ainsi construite pour être très rapide d exécution. La sécurité de «MD4» ne repose pas sur un problème difficile à résoudre. Comme pour le «DES», pendant longtemps, toute la sécurité était basée sur la durée pendant laquelle aucune attaque n avait été proposée. Toutefois, très vite des chercheurs ont cryptanalysé avec succès les premières rondes de l algorithme. En 1995, Dobbertin a même mené une attaque mettant en évidence une collision forte. Ron Rivest renforça son algorithme et le résultat de cette riposte aux attaques fut «MD5». La fonction de hachage «MD5» (1991) «MD5» bien que plus complexe est très similaire à «MD4». Elle produit également des empreintes sur 128 bits. Son algorithme met en œuvre 4 tours (64 étapes) au lieu de 3. Cette sophistication se fait au dépend de sa vitesse d exécution, «MD5» tournant environ 30 % moins vite que «MD4». Les 4 vecteurs d initialisation sont les suivants : A = 01234567, B = 89ABCDEF, C = FEDCBA98 et D = 76543210 (preuve d une grande imagination ). Les 4 rondes mettent en œuvre 4 fonctions non linéaires différentes, une pour chaque ronde : LES FONCTIONS DE HACHAGE PHILIPPE JEULIN - 5 / 10
f(x, Y, Z) = (X Y) (( X) Z), fonction conditionnelle si X alors Y sinon alors Z, g(x, Y, Z) = (X Y) ( Y Z), h(x, Y, Z) = X Y Z, opérateur de parité bit à bit i(x, Y, Z) = Y ( X Z). Amélioration de «MD5» par rapport à «MD4» Une quatrième ronde a donc été ajoutée. A chaque étape «i» (il y en a 4 x 16 = 64) est ajoutée une constante unique égale à la partie entière de 2 32 x valeur absolue( sinus (i)), i étant exprimé en radian. La nouvelle fonction g est moins symétrique que celle de «MD4». Des effets d avalanche ont été accélérés, au sein de chaque étape par l ajout du résultat de l étape précédente, par des nombres plus optimisés de décalage circulaire qui plus est différents d une ronde à l autre. Les résultats d attaques, partiellement réussies, menées contre «MD5» n ont pas mis en cause l utilisation de «MD5» dans les algorithmes et produits de chiffrements. LES FONCTIONS DE HACHAGE PHILIPPE JEULIN - 6 / 10
La fonction de hachage «MD2» Elle fut conçue également par Ron Rivest. Sa sécurité dépend d une permutation aléatoire de l ensemble de tous les octets, permutation fixée et dépendant des 255 décimales de p : S i. Algorithme 1) Complément de texte avec i octets de valeur «i» de telle façon que sa longueur finale en octets devienne un multiple de 16 2) Ajout d une somme de contrôle de 16 octets au nouveau texte ainsi complété 3) Initialisation d un bloc de 48 octets : X 0, X 1,, X 47. 4) Mise à zéro des 16 premiers octets 5) Copie des 16 premiers octets du message dans les 16 suivants 6) Calcul du XOR, «OU exclusif bit-à-bit», de ces deux séries de 16 octets et mise du résultat dans les 16 derniers octets. 7) Application de la fonction de compression : t = 0 Pour j = 0 à 17 Faire Pour k = 0 à 47 Faire t = X k S t X k = t t = (t + j) mod 256 Fin Faire Fin Pour Fin Faire Fin Pour 8) Copie du deuxième morceau de 16 octets du message dans le second tiers de X 9) Calcul du XOR des deux premiers tiers de X et mise du résultat dans le troisième tiers 10) Exécution de l étape 7 puis de l étape 8 et ce, pour chaque morceau de 16 octets du texte. 11) Récupération des 16 premiers octets de X comme empreinte du message. «MD2» est plus lente que les deux précédentes fonctions de hachage mais ne présente pas de faiblesses connues. LES FONCTIONS DE HACHAGE PHILIPPE JEULIN - 7 / 10
Le «SHA», «Secure Hash Algorithm» Cet algorithme fut développé par le «NIST» et la «NSA» pour être utilisé dans le «DSA», le standard de signature numérique («DSS»). Le «SHA» produit une empreinte de 160 bits pour tout texte d une longueur inférieure à 2 64. Cette empreinte est fournie comme entrée au «DSA» qui calcule alors la signature du texte. Le «SHA» est qualifié de sûr car il fut conçu pour qu il soit impossible : de retrouver par le calcul un message correspondant à une empreinte donnée et de trouver deux textes différents qui produiraient la même empreinte. Processus Le texte est complété de telle façon que sa longueur en bits soit un multiple de 512 par ajout d un «1» suivi d autant de «0» que nécessaire pour que seuls 64 bits manquent par rapport à un multiple de 512. Puis, on ajoute à ce texte complété 64 bits contenant la longueur du message avant remplissage. «MD5», comme «MD4», utilise 4 registres (mais produit des empreintes sur 128 bits). «SHA» utilise 5 variables initialisées par les valeurs hexadécimales suivantes : A = 67452301, B = EFCDAB89, C = 98BADCFE, D = 10325476 et E = C3D2E1F0. L algorithme traite le texte par bloc de 512 bits et utilise des fonctions nonlinéaires différentes en fonctions de l opération : f t (X, Y, Z) = (X Y) (( X) Z) pour t entre 0 et 19 f t (X, Y, Z) = X Y Z pour t entre 20 et 39 f t (X, Y, Z) = (X Y) (X Z) (Y Z) pour t entre 40 et 59 f t (X, Y, Z) = X Y Z pour t entre 60 et 79. La boucle principale comprend 4 rondes de 20 opérations («MD5» compte, elle, 4 rondes de 16 étapes) et utilise 4 constantes hexadécimales K t : 5A827999, 6ED9EBA1, 8F1BBCDC et CA62C1D6 égalant respectivement à 2 / 4, 3 / 4, 5 / 4 et 10 / 4 Algorithme Le bloc de texte découpé en 16 mots de 32 bits (M 0 à M 15 ) est transformé en 80 mots de 32 bits (W 0 à W 79 ) par l algorithme suivant : W t = M t pour t = 0 à 15 LES FONCTIONS DE HACHAGE PHILIPPE JEULIN - 8 / 10
W t = W t-3 W t-8 W t-14 W t-16 pour t = 16 à 79. Si t est le numéro de l opération (de 1 à 80), M j représente le j ème sous-bloc du message (j allant de 0 à 15), si << s représente un décalage circulaire à gauche de s bits alors la boucle principale ressemble à : Pour t = 0 à 79 Faire TEMP = (A<<5) + ft(b, C, D) + E + Wt + Kt) E = D D = C C = (B << 30) B = A A = TEMP Fin Faire Fin Pour Analyse du «SHA» - Comparaison avec «MD4» et «MD5» Ron Rivest a rendu public les choix de conception de «MD5». Le «NIST» et la «NSA» ne l ont pas fait «SHA», similaire à «MD4», met en œuvre toutefois une étape d expansion, la sommation de l étape précédente à l entrée de l étape suivante afin d obtenir un «effet d avalanche». Une quatrième ronde a également été ajoutée mais dans le «SHA» la fonction utilisée est la même ce qui n est pas le cas de «MD5». LES FONCTIONS DE HACHAGE PHILIPPE JEULIN - 9 / 10
MD4 MD5 mélange de bits amélioré ; une ronde supplémentaire ; meilleur effet d avalanche ; empreinte sur 128 bits SHA addition d une transformation d expansion ; une ronde supplémentaire ; meilleur effet d avalanche même par rapport à «MD5» ; empreinte sur 160 bits meilleure résistance à une attaque massive RIPE-MD et HAVAL La fonction «RIPE-MD» a été développée par le projet «RIPE» de la Communauté Européenne et est une variante de «MD4» conçue toutefois pour résister à toutes les attaques connues. «HAVAL» est une fonction de hachage produisant des empreintes de longueur variable. C est une variante de «MD5». LES FONCTIONS DE HACHAGE PHILIPPE JEULIN - 10 / 10