Vous êtes sur la page 1sur 204

Universit e de Versailles Saint-Quentin-en-Yvelines UFR Sciences Laboratoire PRISM

Analyse de fonctions de hachage cryptographiques


` THESE
pr esent ee et soutenue publiquement le 3 novembre 2008, ` a lEcole normale sup erieure, Paris pour lobtention du

Doctorat de lUniversit e de Versailles Saint-Quentin-en-Yvelines


(Sp ecialit e informatique) par

Thomas Peyrin

Composition du jury: Rapporteurs : Directeur : Examinateurs : Prof. Lars Knudsen Prof. Bart Preneel Dr. Marc Girault Prof. Jean-S ebastien Coron Prof. Pierre-Alain Fouque Dr. Henri Gilbert Prof. Antoine Joux Dr. Guillaume Poupard Prof. Adi Shamir (Technical University of Denmark, Danemark) (Katholieke Universiteit Leuven, Belgique) (France T el ecom R&D) (University of Luxembourg, Luxembourg) (Ecole Normale Sup erieure) (France T el ecom R&D) (Univ. de Versailles Saint-Quentin-en-Yvelines) (Minist` ere de la D efense) (Weizmann Institute of Science, Isra el)

Th` ese eectu ee au sein du laboratoire NSS, France T el ecom R&D, Issy-les-Moulineaux

Remerciements
Je souhaite adresser mes premiers remerciements Henri Gilbert, qui a accept de mencadrer tout au long de mon travail de recherche. Son amabilit, sa patience et sa grande disponibilit ont largement contribu rendre ces trois annes de recherche plaisantes et amliorer ma conance envers mes capacits, conance combien ncessaire pour mener bien des tudes si spcialises. En plus de laspect humain, sa parfaite matrise de nombreux domaines de la cryptologie et ses explications claires et rigoureuses mont permis de mieux orienter mes approches de recherche, mais aussi de me rendre compte du long chemin quil me reste maintenant parcourir. Jespre un jour tre capable dcrire une page de contenu technique sans quil ny trouve mot redire. Paralllement, je remercie Marc Girault, qui a accept dtre mon directeur de thse et avec qui jai eu la chance davoir des discussions trs enrichissantes malgr lloignement gographique. Je tiens ensuite remercier Lars Knudsen et Bart Preneel davoir accept la lourde tche de rapporteur, et ce, malgr les contraintes dans leur emploi du temps que ce travail implique. Je remercie galement Jean-Sbastien Coron, Pierre-Alain Fouque, Antoine Joux, Guillaume Poupard et Adi Shamir de me faire lhonneur de participer au jury de cette thse. Mes efforts seuls nauraient pas suf pour accomplir tout le chemin jusqu la n de cette thse. Jai t grandement aid durant mon cursus par plusieurs personnes et je saisis naturellement cette occasion pour les remercier encore une fois. Merci donc tout dabord Gildas Avoine, Jean Monnerat et Serge Vaudenay et toute lquipe du laboratoire de scurit de lEPFL, qui ont bien voulu faire conance un tudiant en Chimie-lectronique pour un projet de diplme en cryptographie. Merci aussi Frdric Muller et Guillaume Poupard, ainsi qu tout le laboratoire de cryptographie de la DCSSI, pour ces six mois de stage de Master trs riches, aussi bien humainement que scientiquement. Merci pour tout. Ma reconnaissance va galement au laboratoire de scurit de lAIST Tokyo, et notamment au professeur Imai qui a accept ma visite au Japon durant six mois de ma thse. Par ailleurs, les laboratoires de scurit informatique de France Tlcom R&D constituent un cadre idal pour un jeune thsard : une excellente ambiance de travail et des chercheurs reconnus mondialement pour leurs avances scientiques. Merci donc toutes les personnes que jai eu la chance de ctoyer dans ces locaux, et particulirement aux membres du laboratoire de cryptographie dIssy-les-Moulineaux : Matt Robshaw pour nos discussions sur les fonctions de hachage et pour ses talents de footballeur inpuisable, Olivier Billet pour ses blagues au degr non mesurable et pour son aide inestimable en tant quoracle humain de la cryptographie et de linformatique, Cme Berbain pour sa culture sans faille de la scurit informatique en gnral et pour ses biscuits faussement cachs dans son deuxime tiroir gauche, Yannick Seurin pour tre un excellent compagnon de voyage et sans qui la moiti de cette thse prsenterait des rsultats errons, Jonathan Etrog qui je souhaite bonne chance pour la thse venir, Gilles Macario-Rat pour ses nigmes scientiques en tout genre et Ryad Benadjila pour sa virtuosit la Wii. Je remercie aussi Fabien Allard, Julien Bournelle, Jean-Michel Combes, Daniel Migault, Morgan Barbier, Jrome Cherel, Al Mahdi Chakri, Xavier Misseri, Jean-Franois Biasse et Tony Cheneau pour les conseils aviss et les (trs) bons moments changs. Merci galement aux i

managers, Sbastien Nguyen Ngoc et Thierry Baritaud, trs comprhensifs en ce qui concerne les besoins si spciques des chercheurs. Ma route a crois dautres chercheurs et je remercie donc mes coauteurs pour ces changes si fructueux, ainsi que tous les membres du projet SAPHIR (spcialement Benot ChevallierMames pour sa relecture assidue de cette thse). Jai aussi une pense pour toute lquipe de chercheurs en cryptographie de lUniversit de Versailles St-Quentin-en-Yvelines, des professeurs aux thsards. Enn, merci Ccile davoir support mes longues nuits de cryptanalyse, ainsi qu toute ma famille. Je remercie mes parents qui mont toujours pouss et encourag tout au long de mes tudes. Je me rends compte quel point cela fut important. Jespre navoir oubli personne et je mexcuse par avance si cela est le cas.

ii

Table des matires


Liste des tableaux Table des gures ix xi

Partie I.

Introduction gnrale

Chapitre 1. Les fonctions de hachage cryptographiques 1.1 1.2 1.3 Les fonctions de hachage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Proprits des fonctions de hachage . . . . . . . . . . . . . . . . . . . . . . . . Utilisations pratiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 6 9

Chapitre 2. Lextension de domaine 2.1 2.2 2.3 Lalgorithme de Merkle-Damgrd . . . . . . . . . . . . . . . . . . . . . . . . . Les vulnrabilits de lalgorithme de Merkle-Damgrd . . . . . . . . . . . . . Les nouveaux algorithmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 13 14

Chapitre 3. Fonctions de compression 3.1 3.2 3.3 Fonctions de compression ad hoc . . . . . . . . . . . . . . . . . . . . . . . . . 17

Fonctions de compression fondes sur un algorithme de chiffrement par blocs 18 Fonctions de compression fondes sur une structure algbrique . . . . . . . . 22

Partie II.

Cryptanalyse de la famille SHA


iii

Table des matires Chapitre 4. Prsentation des fonctions de la famille MD-SHA 4.1 MD4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1 4.1.2 4.2 4.2.1 4.2.2 4.3 4.3.1 4.3.2 4.4 4.4.1 4.4.2 4.5 4.5.1 4.5.2 4.6 4.6.1 4.6.2 4.7 4.7.1 4.7.2 4.8 4.8.1 4.8.2 4.9 4.9.1 4.9.2 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Scurit actuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Scurit actuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Scurit actuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Scurit actuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Scurit actuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Scurit actuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Scurit actuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Scurit actuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Scurit actuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 31 31 32 32 33 34 34 34 35 35 36 36 36 37 38 38 39 40 40 40 42 42 42 42 42 44 44 44 46

MD5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

HAVAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

RIPEMD-0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

RIPEMD-128 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

RIPEMD-160 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

SHA-0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

SHA-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

SHA-256 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.10 SHA-512 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.2 Scurit actuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapitre 5. Historique de la cryptanalyse des fonctions de la famille SHA 5.1 iv Structure gnrale de la cryptanalyse dune fonction de hachage . . . . . . .

47

5.2

Premires attaques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 Les collisions locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conditions sur le masque de perturbation . . . . . . . . . . . . . . . . Attaque de la vraie fonction de compression de la famille SHA . . . . Rechercher une paire de messages valide . . . . . . . . . . . . . . . . . Les bits neutres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lattaque multiblocs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . La modication de message . . . . . . . . . . . . . . . . . . . . . . . . La partie non linaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . La recherche de vecteurs de perturbation pour SHA-1 . . . . . . . . . Une analyse plus ne des conditions . . . . . . . . . . . . . . . . . . .

52 52 54 55 58 60 62 64 65 67 69 76

5.3

Attaques de Wang et al. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.1 5.3.2 5.3.3 5.3.4

Chapitre 6. Amlioration des mthodes de cryptanalyse 6.1 6.2 Un problme plusieurs dimensions . . . . . . . . . . . . . . . . . . . . . . . Recherche de chemin : le vecteur de perturbation . . . . . . . . . . . . . . . . 6.2.1 6.2.2 6.3 6.3.1 6.3.2 6.3.3 6.4 6.4.1 6.4.2 6.4.3 6.4.4 Chapitre 7. Application la cryptanalyse de la famille SHA 7.1 7.2 Cas de SHA-0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Cas de SHA-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 La technique de Wang et al. . . . . . . . . . . . . . . . . . . . . . . . . . Les techniques avances . . . . . . . . . . . . . . . . . . . . . . . . . . Calcul efcace de probabilit pour un chemin diffrentiel . . . . . . . Calcul efcace de rafnage de conditions . . . . . . . . . . . . . . . . . Structure de lalgorithme . . . . . . . . . . . . . . . . . . . . . . . . . . Lattaque boomerang pour les algorithmes de chiffrement par blocs . Adapter lattaque boomerang aux fonctions de hachage itres . . . . Les diffrentes approches possibles . . . . . . . . . . . . . . . . . . . . 79 82 82 83 84 85 87 89 94 94 95 98

Recherche de chemin : la partie non linaire . . . . . . . . . . . . . . . . . . .

Recherche de candidats valides : les attaques boomerang . . . . . . . . . . . .

Application la famille SHA . . . . . . . . . . . . . . . . . . . . . . . . 101

Partie III.

Cryptanalyses de nouvelles fonctions de hachage


v

Table des matires Chapitre 8. Cryptanalyse de G RINDAHL 8.1 8.2 Description de G RINDAHL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Analyse gnrale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.3 8.3.1 8.3.2 8.3.3 8.4 Les diffrences tronques . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Analyse de la fonction MixColumns . . . . . . . . . . . . . . . . . . . 121 Existence des octets de contrle . . . . . . . . . . . . . . . . . . . . . . 123 Stratgie gnrale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Trouver un chemin diffrentiel tronqu . . . . . . . . . . . . . . . . . . 124 Le chemin diffrentiel tronqu . . . . . . . . . . . . . . . . . . . . . . . 125 Lattaque par collision . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Discussion de lattaque . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

Trouver une collision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

Amliorations et autres attaques . . . . . . . . . . . . . . . . . . . . . . . . . . 130

Chapitre 9. Cryptanalyse de FORK-256 9.1 9.2 9.3 9.4 Description de FORK-256 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Observations prliminaires sur FORK-256 . . . . . . . . . . . . . . . . . . . . 136 Les microcollisions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Une premire tentative de recherche dun chemin diffrentiel . . . . . . . . . 140 9.4.1 9.4.2 9.4.3 9.5 9.5.1 9.5.2 9.6 9.6.1 9.6.2 Bibliographie Bibliographie personelle Annexes vi Une pseudo-presque collision au septime tour . . . . . . . . . . . . . 141 Choisir la diffrence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Pseudo-presque collisions pour la fonction de compression . . . . . . 143 Principe gnral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 Gnralisation de la recherche . . . . . . . . . . . . . . . . . . . . . . . 146 Trouver des collisions avec peu de mmoire . . . . . . . . . . . . . . . 147 Amlioration de lattaque laide de tables prcalcules . . . . . . . . 150 153 167

Trouver des chemins diffrentiels pour FORK-256 . . . . . . . . . . . . . . . 144

Collisions pour la fonction de compression de FORK-256 . . . . . . . . . . . 146

Annexe A. Spcication des fonctions de compression de la famille MD-SHA A.1 MD4 [RFCmd4] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 A.2 MD5 [RFCmd5] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 A.3 RIPEMD-0 [RIPE95] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 A.4 RIPEMD-128 [DBP96] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 A.5 RIPEMD-160 [DBP96] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 A.6 SHA-0 [N-sha0] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 A.7 SHA-1 [N-sha1] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 A.8 SHA-256 [N-sha2, N-sha2b] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 A.9 SHA-512 [N-sha2] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 Annexe B. Conditions totales concernant les collisions locales pour SHA

vii

Table des matires

viii

Liste des tableaux


3.1 4.1 5.1 5.2 6.1 6.2 6.3 6.4 8.1 8.2 8.3 8.4 9.1 9.2 9.3 9.4 9.5 9.6 9.7 Meilleures attaques par collision contre les membres de la famille MD-SHA . . . Paramtres des fonctions de compression des membres de la famille MD-SHA . Notations utilises pour reprsenter un chemin diffrentiel . . . . . . . . . . . . . Conditions vrier pour une collision locale pour SHA-0 . . . . . . . . . . . . . Nombre de conditions suivant ltape de dbut de comptage pour SHA-0 . . . Nombre de conditions suivant ltape de dbut de comptage pour SHA-1 . . . Les diffrentes variantes de lattaque boomerang pour les fonctions de hachage Variantes possibles dune collision locale avec comportement non linaire . . . Bote de substitution utilise dans Rijndael et Grindahl . . . . . . . . . . . . . Probabilit de transitions diffrentielles durant lapplication de MixColumns Inuences sur ltat interne dune modication dun octet du message . . . . Dpendances des blocs de message utiliss comme octets de contrle . . . . . . . . . 26 29 49 58

. 83 . 84 . 100 . 102 . . . . . . . . . . . 119 122 123 128 136 136 136 138 142 147 150

Constantes utilises pour FORK-256 . . . . . . . . . . . . . . . . . . . . . . . . . Permutations et constantes utilises dans chaque branche de FORK-256 . . . . Un chemin diffrentiel sur 4 tapes aboutissant une collision . . . . . . . . . . Un chemin diffrentiel sur 7 tapes aboutissant une pseudo-presque collision Relations entre les quadruplets xer et les mots dentre . . . . . . . . . . . . Nombre minimal de structures Q actives selon diffrents scnarios . . . . . . . Meilleures diffrences additives trouves par exprimentation . . . . . . . . . .

B.1 Conditions vrier pour une collision locale pour SHA-0 ou SHA-1 (1) . . . . . 186 B.2 Conditions vrier pour une collision locale pour SHA-0 ou SHA-1 (2) . . . . . 187

ix

Liste des tableaux

Table des gures


2.1 2.2 3.1 3.2 3.3 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 5.13 5.14 5.15 5.16 5.17 5.18 6.1 6.2 Lalgorithme de Merkle-Damgrd . . . . . . . . . . . . . . . . . . . . . . . . . . . . Attaque par multicollisions sur lalgorithme de Merkle-Damgrd . . . . . . . . . Fonctions de compression fondes sur un algorithme de chiffrement par blocs . . La fonction de compression de MDC-2 . . . . . . . . . . . . . . . . . . . . . . . . Deux nouvelles propositions de fonction de compression . . . . . . . . . . . . . . Structure gnrique des fonctions de compression pour la famille MD-SHA Une tape de la fonction de compression de MD4 . . . . . . . . . . . . . . . Une tape de la fonction de compression de MD5 . . . . . . . . . . . . . . . Une tape pour une branche de la fonction de compression de RIPEMD-0 . Une tape pour une branche de la fonction de compression de RIPEMD-128 Une tape pour une branche de la fonction de compression de RIPEMD-160 Une tape de la fonction de compression de SHA-0 ou SHA-1 . . . . . . . . Une tape de la fonction de compression de SHA-256 . . . . . . . . . . . . . Une tape de la fonction de compression de SHA-512 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 14 19 20 21 30 32 33 36 38 39 41 44 46 51 51 53 59 60 61 63 65 67 68 69 70 71 72 73 74 75 77 81 85

Un premier chemin diffrentiel peu labor pour SHA-0 . . . . . . . . . . . . . . Un chemin diffrentiel plus labor pour SHA-0 . . . . . . . . . . . . . . . . . . . Une collision locale pour SHA-0 ou SHA-1 . . . . . . . . . . . . . . . . . . . . . . Une collision locale signe pour SHA-0 ou SHA-1 . . . . . . . . . . . . . . . . . . Vecteur de perturbation utilis pour lattaque en collision contre SHA-0 [CJ98] . . Chemin diffrentiel utilis pour lattaque en collision contre SHA-0 [CJ98] . . . . Principe de lattaque multiblocs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vecteurs de perturbation pour lattaque multiblocs sur SHA-0 [BCJ05] . . . . . . Attaque multiblocs avec partie non linaire pour les premires tapes . . . . . . . Attaque en un bloc de diffrence avec partie non linaire pour SHA-0 [WYY05d] Vecteur de perturbation utilis pour lattaque en un bloc sur SHA-0 [WYY05d] . Chemin diffrentiel utilis pour lattaque en un bloc sur SHA-0 [WYY05d] . . . . Vecteur de perturbation pour lattaque multiblocs sur SHA-1 [WYY05b] . . . . . Vecteur de perturbation pour lattaque multiblocs sur SHA-1 [WYY05a] . . . . . Chemin diffrentiel pour lattaque multiblocs sur SHA-1 [WYY05b] . . . . . . . . Chemin diffrentiel pour lattaque multiblocs sur SHA-1 [WYY05a] . . . . . . . . Une instance signe du chemin diffrentiel de la gure 5.16 . . . . . . . . . . . . . La compression de bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . La cryptanalyse de SHA, un problme plusieurs dimensions . . . . . . . . . . . Un exemple de calcul de la probabilit incontrle . . . . . . . . . . . . . . . . . . xi

Table des gures 6.3 6.4 6.5 6.6 6.7 6.8 6.9 6.10 6.11 6.12 7.1 7.2 7.3 7.4 7.5 7.6 8.1 8.2 9.1 9.2 9.3 9.4 Un exemple de rafnage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . La technique de rafnage . . . . . . . . . . . . . . . . . . . . . . . . . . . . Un exemple de squelette de dpart . . . . . . . . . . . . . . . . . . . . . . . Un exemple de sortie de lalgorithme de recherche de parties non linaires Algorithme de recherche de parties non linaires . . . . . . . . . . . . . . . Lattaque boomerang contre les algorithmes de chiffrement par blocs . . . Lattaque boomerang contre les fonctions de hachage . . . . . . . . . . . . Division dun chemin diffrentiel en trois sous-parties . . . . . . . . . . . . Chemin diffrentiel auxiliaire AP1 . . . . . . . . . . . . . . . . . . . . . . . Chemin diffrentiel auxiliaire AP2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 . 89 . 90 . 91 . 92 . 95 . 96 . 97 . 103 . 104 108 109 110 111 112 113

Une paire de messages aboutissant une collision pour SHA-0 . . . . . . . . . . . Une paire de messages aboutissant une collision pour SHA-1 rduit 70 tours . Premier chemin diffrentiel pour lattaque sur SHA-0 [MP08] . . . . . . . . . . . Second chemin diffrentiel pour lattaque sur SHA-0 [MP08] . . . . . . . . . . . . Premier chemin diffrentiel pour lattaque sur SHA-1 rduit 70 tours [JP07c] . . Second chemin diffrentiel pour lattaque sur SHA-1 rduit 70 tours [JP07c] . .

Vue schmatique de la fonction de hachage Grindahl . . . . . . . . . . . . . . . . 120 Chemin diffrentiel tronqu commenant par une paire dtats partout diffrents 126 Squelette de la fonction de compression de FORK-256 . . . . . . . . . . . Transformations utilises pour FORK-256 . . . . . . . . . . . . . . . . . . Une pseudo-presque collision avec 22 bits de diffrence pour FORK-256 Chemin diffrentiel utilis pour calculer des collisions pour FORK-256 . . . . . . . . . . . . . . . . . . . . . 134 135 145 148

xii

P REMIRE PARTIE

Introduction gnrale

La cryptologie, tymologiquement la science du secret, ne peut tre vraiment considre comme une science que depuis peu de temps. Mme si lon retrouve des utilisations de cet art jusqu lAntiquit, ce nest que rcemment quelle est devenue un sujet de recherche acadmique, et quelle a trouv sa motivation hors des seules applications militaires. Cette discipline se situe prsent la frontire des mathmatiques, de linformatique et de llectronique et lon peut la diviser en deux sous-parties : la cryptographie, qui dnit les mcanismes mis en oeuvre pour garantir des proprits de scurit, et la cryptanalyse qui analyse et tente de mettre en dfaut ces proprits. Le but principal de la cryptographie est de limiter laccs certaines informations ou certaines ressources aux seules personnes dsires. Les premires solutions apportes taient physiques et protgeaient le support plutt que linformation transporte (par exemple un coffre-fort ou une porte ferme cl). Cependant, en pratique, il est difcile de garantir la scurit dun support. Ainsi, dans le cas dune transmission dinformations, le besoin de protger linformation elle-mme apparut rapidement. Lhistoire de la cryptologie peut schmatiquement tre subdivise en trois phases. De lAntiquit aux grandes guerres, les mthodes utilises taient peu labores et reposaient rarement sur une thorie pralablement tablie. Durant la Seconde Guerre mondiale, le milieu militaire et diplomatique se rendit compte de limportance de la cryptologie. Lattention qui y fut porte fut grandement accrue, en particulier en ce qui concerne la cryptanalyse. De lamlioration des techniques danalyse dcoula immdiatement une nette amlioration de la qualit des nouveaux systmes de chiffrement. Enn, depuis lapparition des ordinateurs et le dveloppement de linformatique, la cryptologie sinsre au coeur du quotidien. Aujourdhui, des primitives cryptographiques sont prsentes dans les tlphones portables, les ordinateurs, les cartes puce, etc., pour des domaines dapplication varis tels que les tlcommunications, la protection des transactions bancaires, la tlvision page, les transmissions militaires et diplomatiques, etc. Cette varit a fortement contribu lessor de cette science, mais en a aussi diversi les enjeux. Au problme de condentialit sont venus sajouter lauthentication, lintgrit des donnes, la signature numrique, etc. Aujourdhui, les concepteurs tentent de rpondre des problmes aussi complexes que le vote lectronique. Historiquement, les systmes cryptographiques ont dabord t cl secrte (et relevaient donc exclusivement de la cryptographie symtrique) : deux utilisateurs souhaitant changer des informations condentielles doivent au pralable possder une cl connue deux seuls. Cette unique cl sera leur secret partag et servira pour toute utilisation cryptographique, chiffrement ou authentication. la n des annes 1970 apparut la cryptographie cl publique (ou cryptographie asymtrique), qui utilise deux cls relies entre elles pour chaque utilisateur : une cl publique (connue de tous) et une cl prive (connue seulement de lutilisateur). Le chiffrement dune information seffectue avec la cl publique et le dchiffrement seffectue avec la cl prive. Ainsi, tout un chacun peut chiffrer un message pour lutilisateur, mais lui seul peut dchiffrer un message qui lui est destin. Inversement, la signature dun message se ralise avec la cl secrte et lon vrie cette signature laide de la cl publique. Seul lutilisateur peut calculer sa signature dun message, mais tout un chacun peut vrier la validit de cette signature. Dans un article fondateur, Ron Rivest, Adi Shamir, et Leonard Adleman proposrent le systme de chiffrement cl publique RSA, qui est de loin le cryptosystme asymtrique le plus utilis aujourdhui. Les performances de la cryptographie symtrique sont trs bonnes, les algorithmes cl secrte faisant partie des primitives les plus rapides. Au contraire, la cryptographie cl publique, effectuant en gnral des oprations trs coteuses, nest pas adapte de longs messages. De ce fait, en pratique, on ralise souvent un compromis entre ces deux familles de 3

technique : le problme dchange de secret (ltablissement dune cl symtrique) est rsolu par lutilisation dun cryptosystme cl publique, tandis que le message sera chiffr avec un algorithme cl secrte. Dans ce mmoire, nous nous intressons aux fonctions de hachage cryptographiques, et plus particulirement leur cryptanalyse. Les fonctions de hachage cryptographiques font simplement correspondre un message de taille arbitraire, une sortie de taille xe, appele hach. Informellement, lide sous-jacente est que toute modication, mme inme, du message dentre, doit induire des modications importantes et imprvisibles du hach en sortie. Par exemple, lune des proprits recherches est quil doit tre trs difcile pour un attaquant de trouver une collision, cest--dire deux messages distincts ayant un hach identique. Pour des raisons historiques et bien quelles soient largement utilises en dehors de ce seul domaine, ces fonctions sont considres comme faisant partie de la cryptographie symtrique. De par leur proprit assez unique en cryptographie de ne dpendre daucun secret, elles diffrent signicativement des autres primitives symtriques telles que les algorithmes de chiffrement par blocs ou les algorithmes de chiffrement ot. Grce entre autres leur rapidit, leur utilit est nanmoins trs tendue en scurit informatique en gnral : de la signature numrique lintgrit des donnes en passant par le stockage de mots de passe. Les fonctions de hachage sont lun des sujets les plus tudis actuellement en cryptographie, et le National Institute of Standards and Technology (NIST) vient de lancer un appel soumissions dans le but de trouver le prochain algorithme qui sera standardis. Dans cette premire partie, nous introduisons les notations et dnitions relatives aux fonctions de hachage ainsi que les principales techniques de conception de telles fonctions. Ensuite, dans la deuxime partie, nous tudions la cryptanalyse des fonctions de hachage de la famille MD-SHA, les plus utilises en pratique. Nous rappelons en dtail les prcdentes avances et nous expliquons comment nos travaux permettent damliorer ces attaques existantes. Enn, dans la troisime et dernire partie, nous dcrivons des attaques contre deux fonctions de hachage assez rcentes, G RINDAHL et FORK-256. Durant les trois annes de recherche pour cette thse en cryptographie, nous avons publi plusieurs articles ayant trait aux fonctions de hachage, aussi bien en ce qui concerne la partie conception [PGM06, SP07, BPR07, BCC07] que la partie cryptanalyse [MP06, MPB07, JP07a, JP07b, Pey07, MP08, GLP08, YIN08b]. Auparavant, nous nous sommes intresss des sujets tels que la reprsentation dentiers pour des oprations algbriques sur des courbes elliptiques [AMP04], lchange authenti de cls pour des applications telles que le Bluetooth [PV05], ou encore la cryptanalyse dalgorithme de chiffrement ot [MP05].

C HAPITRE 1

Les fonctions de hachage cryptographiques


Sommaire
1.1 1.2 1.3 Les fonctions de hachage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Proprits des fonctions de hachage . . . . . . . . . . . . . . . . . . . . . . Utilisations pratiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 6 9

Une fonction de hachage est une fonction prenant en entre un lment de taille variable et renvoyant en sortie un lment de taille xe et prdtermine. Ces fonctions sont trs utiles notamment dans le domaine des bases de donnes. Elles permettent de manipuler de trs grandes structures tout en gardant une vitesse acceptable en ce qui concerne la recherche dlments. Cependant, dans ce mmoire, nous considrons uniquement une sous-classe des fonctions de hachage : les fonctions de hachage cryptographiques. Ces dernires ont la particularit de vrier certaines proprits qui rendent leur utilisation trs pratique dans le domaine de la scurit de linformation. En gnral, on souhaite viter le plus possible la situation o deux entres distinctes sont envoyes sur la mme valeur de sortie par la fonction de hachage (situation appele collision). La principale diffrence entre les fonctions de hachage classiques et les fonctions de hachage cryptographiques est que ces dernires ne doivent pas pouvoir tre inverses facilement. Une fonction de hachage classique a trs peu de chances de vrier cette proprit de scurit. Il en est de mme en ce qui concerne les collisions : pour une fonction de hachage classique, on souhaite uniquement que des messages choisis au hasard naboutissent une collision quavec une probabilit relativement faible en moyenne. Pour une fonction de hachage cryptographique, on souhaite quil soit difcile pour un adversaire de trouver une collision, cet adversaire pouvant choisir loisir les messages et donc essayer de se placer dans un cas qui lui est favorable. Nous introduisons dans ce chapitre diverses dnitions et notations relatives ces fonctions, les critres de scurit auxquels elles doivent satisfaire, ainsi que leurs principales utilisations en pratique. Dans la suite de ce mmoire, nous utiliserons le terme fonctions de hachage pour dsigner les fonctions de hachage cryptographiques.

1.1

Les fonctions de hachage

Une fonction de hachage H de taille de sortie n est un algorithme faisant correspondre un message M de taille arbitraire un lment H(M ) de taille n bits appel hach. En pratique, n est 5

Chapitre 1. Les fonctions de hachage cryptographiques de lordre de plusieurs centaines de bits, typiquement 128, 160, 256 ou 512 bits. Mme si le paralllisme est en gnral une bonne proprit pour une primitive que lon souhaite rapide, on ne peut pas construire une fonction de hachage de manire totalement parallle (en traitant simultanment tous les morceaux de message). En effet, dans ce cas, la quantit de mmoire requise par ltat interne de la fonction pour le calcul du hach serait dpendante de la taille du message hacher. Si le message est trs long, une utilisation dans des environnements contraints en mmoire sera impossible. La premire grande avance dans le domaine des fonctions de hachage fut lalgorithme de Merkle-Damgrd [Mer89, Dam89], qui permet de construire des fonctions de manire itre en traitant les morceaux de message squentiellement. Ce procd, que nous dcrivons plus en dtail dans le prochain chapitre, inuena considrablement la recherche dans ce domaine, si bien quaujourdhui presque toutes les fonctions de hachage reposent sur une construction en srie (suivant un processus itratif). Dans la construction de Merkle-Damgrd, la fonction de hachage possde un tat interne de N bits, initialis une certaine valeur prdtermine (appele IV). Nous dnissons une fonction de hachage itre comme tant compose de deux transformations : la compression et la fonction dextension de domaine. Durant litration i, une fonction de compression, note h, prend en entre ltat interne actuel Hi1 de la fonction de hachage (que nous appelons variable de chanage) et un nouveau bloc de message hacher de m bits not Mi . Cette fonction permet ainsi de hacher des messages de taille xe et renvoie une nouvelle variable de chanage Hi , qui reprsente le nouvel tat interne de la fonction de hachage : Hi = h(Hi1 , Mi ). La fonction h est appele fonction de compression parce quelle fait correspondre N bits N + m bits. La fonction dextension de domaine permet de traiter des messages de taille arbitraire, et non plus xs m bits. Pour cela, on dnit la prparation initiale du message hacher (le rembourrage) et la mthode dutilisation de la fonction de compression pour nalement traiter lintgralit du message.

1.2

Proprits des fonctions de hachage

Les fonctions de hachage doivent possder plusieurs proprits utiles en cryptographie. Les principales sont la rsistance aux attaques recherchant des collisions, des primages ou des secondes primages. collision : trouver deux messages distincts M 1 et M 2 , tels que H(M 1 ) = H(M 2 ). seconde primage : tant donn un message M 1 choisi alatoirement, trouver un message distinct M 2 tel que H(M 1 ) = H(M 2 ). primage : tant donn un hach H 1 choisi alatoirement, trouver un message M 1 tel que H(M 1 ) = H 1 . Il doit tre impossible pour un attaquant de trouver une collision, une primage ou une seconde primage. On remarque que puisque la taille dentre de la fonction de hachage est arbitrairement grande, des collisions existent ncessairement (si lon choisit 2n + 1 messages
une autre dnition possible de primage existe : on tire alatoirement un message et lon donne uniquement le hach de ce message comme d lattaquant. Cela vite de proposer un d potentiellement irralisable.

1.2. Proprits des fonctions de hachage distincts, il existera obligatoirement une paire de messages aboutissant au mme hach). On dnit donc limpossibilit dun attaquant relativement une certaine quantit doprations, dtermine par la meilleure attaque gnrique contre une fonction de hachage idale. Ainsi, un attaquant ne doit pas tre en mesure de trouver une primage en moins de O(2n ) oprations, puisque la meilleure attaque gnrique consiste essayer O(2n ) messages distincts pour avoir une bonne probabilit de succs dobtenir une solution. Le raisonnement est identique pour la seconde primage, O(2n ) oprations sont ncessaires dans le cas dune fonction de hachage idale. En ce qui concerne la collision, lattaque gnrique est moins triviale. Elle utilise le paradoxe des anniversaires : pour trouver deux valeurs identiques parmi a valeurs possibles, il suft den tirer alatoirement a pour avoir une bonne probabilit de succs. Cela sexplique par lobservation quen tirant a lments, on forme approximativement ( a)2 /2 = a/2 paires possibles, ce qui est sufsant pour obtenir une bonne probabilit de succs tant donn la taille de lensemble de tirage. Ainsi, nous devons utiliser 2n/2 messages pour trouver une collision pour une fonction de hachage idale. Lattaque originale [Yuv79] requiert beaucoup de mmoire, mais des versions sans mmoire ou parallles furent ensuite publies [QD89, VW99], et Wagner [Wag02] gnralisa le problme plus de deux lments. On se rend compte facilement que la rsistance aux attaques trouvant des collisions implique labsence dattaque de complexit strictement infrieure 2n/2 oprations trouvant des secondes primages (linverse tant faux). On ne peut nanmoins rien dire en ce qui concerne le lien entre les primages et les collisions (des contre-exemples sont dcrits dans [Handbook]). Ces notions de scurit peuvent aussi tre appliques aux fonctions de compression, la seule diffrence tant la taille xe des messages et la possibilit pour lattaquant de choisir ou non la variable de chanage dentre. Le nombre doprations pour une attaque gnrique reste identique aux cas respectifs des fonctions de hachage. collision : tant donn un tat interne Hi1 choisi alatoirement, trouver deux blocs de message distincts Mi1 et Mi2 tels que h(Hi1 , Mi1 ) = h(Hi1 , Mi2 ). collision libre : trouver deux blocs de message distincts Mi1 et Mi2 et un tat interne Hi1 tels que h(Hi1 , Mi1 ) = h(Hi1 , Mi2 ). seconde primage : tant donn un tat interne Hi1 et un bloc de message Mi1 choisis alatoirement, trouver un bloc de message distinct Mi2 tel que h(Hi1 , Mi1 ) = h(Hi1 , Mi2 ). seconde primage libre : tant donn un bloc de message Mi1 choisi alatoirement, trouver un bloc de message distinct Mi2 et un tat interne Hi1 tels que h(Hi1 , Mi1 ) = h(Hi1 , Mi2 ). primage : tant donn deux tats internes Hi1 et Hi choisis alatoirement, trouver un bloc de message Mi1 tel que Hi = h(Hi1 , Mi1 ). primage libre : tant donn un tat interne Hi choisi alatoirement, trouver un tat interne Hi1 et un bloc de message Mi1 tels que Hi = h(Hi1 , Mi1 ). La rsistance aux recherches de collisions est une notion assez difcile formaliser puisquen cryptographie on considre le meilleur des attaquants possibles. En effet, il existe toujours un attaquant possdant une collision pour la fonction de hachage, et renvoyant cette paire de messages. Rcemment, Rogaway [Rog06] a introduit le concept de lignorance humaine, pour formaliser le fait quil existe effectivement toujours un tel attaquant, la difcult tant de le trouver. Tout le problme vient du fait que, contrairement au cas de la primage ou celui de la seconde primage, aucun d nest soumis lattaquant. Il doit calculer une collision 7

Chapitre 1. Les fonctions de hachage cryptographiques sans aucune contrainte impose par le joueur adverse. Un contournement de ce problme fut lintroduction du concept de famille de fonctions de hachage : toute fonction de hachage H est paramtre par une nouvelle entre (par exemple lIV) pour former une famille de fonctions. On pourra prsent der lattaquant en lui demandant de trouver une collision pour un membre de la famille choisi alatoirement. Ainsi, comme pour les fonctions de compression, on peut distinguer les cas de collision et de collision libre (ou primage et primage libre) pour les familles de fonctions de hachage, suivant que ladversaire peut choisir lIV ou que celui-ci lui est impos. Ce modle, utile pour les preuves de scurit, sloigne du cas rel puisquen pratique ce paramtre nexiste pas et que lIV est xe. La notion de famille de fonctions de hachage apporta de nouvelles proprits de scurit, plus sophistiques, mais utiles pour analyser nement un candidat. Par exemple, on peut imaginer que lattaquant choisit des IV potentiellement diffrents, aussi bien pour les collisions que pour les secondes primages. On parlera dans le premier cas de pseudo-collision et nous proposons, pour distinguer le second cas, lappellation de pseudo-seconde primage. Pour ces deux notions de scurit, dont une dnition est donne ci-dessous, le nombre doprations requis pour une attaque gnrique est gal O(2n/2 ) (trouver une pseudo-seconde primage est donc beaucoup plus facile quune seconde primage). De mme, les pseudo-collisions ou pseudo-secondes primages existent aussi pour les fonctions de compression en utilisant des tats internes initiaux et potentiellement diffrents pour chaque message. On remarque que ces notions de scurit sont les plus fortes et les plus gnriques prsentes ici pour une fonction de compression, et traitent les messages et la variable de chanage de manire identique. Ceci tend montrer que si lon souhaite construire une fonction de compression idale, le message et la variable de chanage doivent y jouer un rle identique. Nous verrons que cela nest que trs rarement le cas en pratique. pseudo-collision : trouver deux couples distincts bloc de message/tat interne (Mi1 ,Hi1 1 ) 1 , M 1 ) = h(H 2 , M 2 ). et (Mi2 ,Hi2 ) tels que h ( H 1 i1 i i1 i pseudo-seconde primage : tant donn un bloc de message Mi1 choisi alatoirement, 2 2 trouver un tat interne Hi1 1 et un couple bloc de message/tat interne (Mi ,Hi1 ) = 1 1 1 1 2 2 (Mi ,Hi1 ) tels que h(Hi1 , Mi ) = h(Hi1 , Mi ). Par ailleurs, on peut gnraliser le principe de collision en stipulant que lattaquant ne doit pas tre capable dobtenir une certaine diffrence entre deux hachs, quelle que soit cette diffrence. La collision devient alors un cas particulier o la diffrence est nulle. Nous appelons ce type dattaque une presque collision et lon note h(Hi1 , Mi1 ) h(Hi1 , Mi2 ) lorsque les deux valeurs de hach sont trs similaires. On applique identiquement ce principe aux primages et secondes primages et le nombre doprations pour une attaque gnrique ne change pas (sauf par exemple dans le cas o la diffrence en sortie ne serait pas impose sur tous les bits). De mme, on peut parler de presque collisions ou de presque primages pour les fonctions de compression si lon prvoit une certaine diffrence sur les tats internes de sortie. Rogaway et Shrimpton [RS04] ont continu dlargir le panel de proprits de scurit en tudiant des scnarios o lattaquant possde le contrle sur le paramtre dentre, mais pas sur le d (a-primage et a-seconde primage) ; ou sur le d, mais pas sur le paramtre dentre (e-primage et e-seconde primage). Ils ont de plus tudi les liens entre ces diffrentes notions. On pourrait continuer dtendre ces notions, par exemple, en distinguant suivant lordonnancement du processus de d : dans le cas de la-primage, la situation o lattaquant choisit le paramtre dentre avant de recevoir le d est diffrente de celle o il choisit le paramtre dentre aprs avoir reu le d (ce qui correspond une primage libre). Enn, le mlange des 8

1.3. Utilisations pratiques diffrentes notions entre elles nous en fournit encore de nouvelles. Plus la quantit de proprits vries est leve et plus lon se rapproche dune primitive idale. Les opinions sont partages parmi les cryptologues en ce qui concerne la simulation dun oracle alatoire [BR93] par une fonction de hachage. Un oracle alatoire est une primitive idale, prenant en entre une valeur de taille arbitraire et renvoyant une valeur de taille xe en sortie. Ce modle, trs utilis pour les preuves de scurit en cryptographie, suppose que lon dispose dune fonction simulant cet oracle et ne pouvant pas tre distingue de ce composant idal. Certains chercheurs avancent que puisquen pratique les oracles alatoires (indispensables pour lobtention de preuves de scurit) sont remplacs par des fonctions de hachage, ces dernires ne doivent comporter aucune proprit spciale qui pourrait les en distinguer. Rcemment, cette notion fut prcise en considrant lindiffrentiabilit dune fonction de hachage dun oracle alatoire [MRH04]. Dautres chercheurs prconisent de se concentrer uniquement sur les proprits fondamentales des fonctions de hachage, dj complexes assurer, plutt que dessayer de concevoir une fonction idale tous points de vue.

1.3

Utilisations pratiques

Les schmas de signature sont sans doute lapplication la plus importante des fonctions de hachage. Ils permettent un utilisateur de signer un message laide de sa cl prive. Chacun peut vrier la validit de cette signature grce la cl publique correspondante. Les oprations internes de ces primitives cryptographiques sont en gnral trs coteuses, car elles appartiennent la cryptographie asymtrique. Ainsi, leur application un trs long message demande un temps de calcul trop grand dans certains cas pratiques. Les fonctions de hachage sont donc utilises pour raccourcir le message signer et amliorer les performances : on signe le hach du message plutt que lintgralit du message. Dans cette situation, on souhaite quun attaquant susceptible dobtenir les signatures de certains messages choisis soit incapable de crer une nouvelle signature valide sans connatre la cl prive de lutilisateur. Aussi, tant donns plusieurs couples message/signature, il doit tre impossible pour lui de deviner la moindre information sur la cl prive. Par impossible , nous entendons que le meilleur moyen possible pour un attaquant est dutiliser une attaque gnrique, cest--dire indpendante du fonctionnement interne de la primitive. Il est donc important que les fonctions de hachage soient rsistantes la recherche de collisions ou de primages. Par exemple, la connaissance dune collision pour la fonction de hachage permettrait de calculer deux messages distincts aboutissant la mme signature : en demandant la signature du premier message, on pourrait en dduire celle du deuxime message. Une autre application importante des fonctions de hachage concerne les codes dauthentication de message (ou MAC), qui appartiennent la cryptographie symtrique et manipulent donc une cl secrte. Ces primitives servent vrier lintgrit dun message et authentier son expditeur. Tout comme pour les signatures, il doit tre impossible pour lattaquant de retrouver la moindre information sur la cl secrte. Aussi, un attaquant doit tre incapable de crer un MAC valide pour un nouveau message. Plusieurs techniques de construction existent, mais lune des plus connues, HMAC, est fonde sur une fonction de hachage. Dans leur article original, Bellare et al. [BCK96] dmontrrent la scurit dun tel schma sous certaines conditions concernant la fonction de hachage interne. Cette preuve fut amliore quelques annes plus
ladversaire considr ici est le plus fort, mais lon peut aussi admettre quil ne puisse pas choisir les messages de manire adaptative, ou mme quil ne puisse pas les choisir du tout.

Chapitre 1. Les fonctions de hachage cryptographiques tard [Bel06] en saffranchissant de lune des conditions, qui tait peu intuitive. Actuellement, de nombreux travaux [CY06, FLN07, KBP06, WOK08] tentent de transformer les vulnrabilits de certaines fonctions de hachage en attaques retrouvant la cl secrte ou calculant des signatures valides pour lalgorithme HMAC. Les fonctions de hachage sont utiles pour de nombreuses autres applications, telles que la protection de mots de passe : dans un serveur, au lieu de stocker tous les mots de passe dutilisateurs, il est prfrable de stocker les hachs de ces derniers. Lauthentication peut toujours avoir lieu, mais, si le serveur est compromis, lattaquant na accs quaux hachs des mots de passe. Il ne peut donc thoriquement pas retrouver les mots de passe originaux cause de la proprit de rsistance la recherche de primages. Les fonctions de hachage sont aussi utilises dans certains protocoles pour sengager lavance sur le choix dune certaine valeur ou mme pour conrmer la connaissance dun certain secret, sans le rvler. Par exemple, le calcul de secret partag entre deux entits utilise souvent ce genre de techniques. Un autre exemple dapplication pratique est la drivation de cls cryptographiques ou encore la vrication dintgrit de chiers publics. Les fonctions de hachage ont donc plusieurs rles en cryptographie et servent souvent de couteau suisse grce aux nombreuses proprits quelles vrient. Chaque utilisation ne ncessite quun sous-ensemble de ces proprits, ce qui signie quen gnral la fonction de hachage satisfait plus de proprits de scurit que ne lexige son rle rel. Nanmoins, il est plus facile pour les chercheurs de se focaliser sur un seul candidat analyser plutt que de crer une fonction spcique pour chaque type dutilisation. Cela simplie fortement le processus de standardisation et, de plus, ltat actuel des connaissances ne permet pas de rellement saisir toutes les imbrications entre les diffrentes notions de scurit dune fonction de hachage et celles des constructions les utilisant. Par exemple, nous ne connaissons pas aujourdhui parfaitement le danger rel pour toutes les applications connues de lapparition dune attaque trouvant des collisions contre la fonction de hachage. En coopration avec plusieurs membres du projet RNRT SAPHIR [Saphir], nous avons combl en partie ce manque en analysant les implications entre certaines notions de scurit des fonctions de hachage et celles de schmas de signature [BCC07].

10

C HAPITRE 2

Lextension de domaine
Sommaire
2.1 2.2 2.3 Lalgorithme de Merkle-Damgrd . . . . . . . . . . . . . . . . . . . . . . . 11 Les vulnrabilits de lalgorithme de Merkle-Damgrd . . . . . . . . . . 13 Les nouveaux algorithmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

Lextension de domaine est lune des deux composantes dune fonction de hachage itre. En raison de sa simplicit, lalgorithme de Merkle-Damgrd est demeur longtemps seul et incontest, mais rcemment, des recherches ont montr les limites de cette technique. prsent, de nombreux chercheurs tentent de proposer une nouvelle mthode, la fois simple et sre, qui pourrait simposer comme nouveau standard.

2.1

Lalgorithme de Merkle-Damgrd

En 1989, Ralph Merkle [Mer89] et Ivan Damgrd [Dam89] proposrent indpendamment un algorithme dextension de domaine trs simple, dont certaines proprits de scurit peuvent tre dmontres en supposant certaines proprits de la fonction de compression interne. On prpare tout dabord le message hacher M en y ajoutant un rembourrage. La fonction de compression prenant en entre des blocs de message de taille xe m, le rembourrage permet de ramener la taille du message hacher un multiple de m. Pour cela, on rajoute tout dabord M un bit 1 puis u bits 0, o u est le plus petit nombre positif ou nul tel que la longueur nale du message soit gale m v (mod m) (typiquement, v = 64 bits). Ensuite, un deuxime rembourrage intervient : on ajoute un bloc de v bits contenant la reprsentation en base binaire de la taille de M . La taille nale du message rembourr sera bien un multiple de m. On remarque que la taille maximale de message pouvant tre hache est limite 2v bits, mais en pratique ce nombre est assez grand pour ne jamais tre atteint. Le message rembourr est ensuite divis en k blocs de message Mi de m bits chacun, qui serviront mettre jour la variable de chanage Hi1 pour donner Hi laide de la fonction de compression h : Hi = h(Hi1 , Mi ). La variable de chanage initiale H0 est x la valeur dIV et la dernire variable de chanage Hk permet de dduire le hach nal. En gnral, ltat interne de la fonction de hachage est de mme taille n que le hach nal. Dans ce cas, le hach est directement gal Hk . Si ltat interne est plus grand que la taille de hach, on doit effectuer une certaine troncature pour obtenir la bonne taille de sortie. Il est aussi possible dappliquer une fonction de sortie sur Hk 11

Chapitre 2. Lextension de domaine avant dobtenir le hach, mais cette tape est souvent omise en pratique. Le processus entier est dcrit en gure 2.1. Dans la suite, sauf mention contraire, nous considrons que la taille de ltat interne de la fonction de hachage est gale celle du hach : n = N .

MESSAGE

rembourrage

M1
IV
n bits m bits

M2

Mk1

Mk
n bits

h
H0 H1

h
H2 Hk 2

h
Hk 1

h
Hk

hach
F IG . 2.1 Lalgorithme de Merkle-Damgrd [Mer89, Dam89]. Aprs rembourrage, le message est divis en blocs de m bits. Chacun de ces blocs Mi opre la mise jour par la fonction de compression h de la variable de chanage Hi1 pour donner Hi . Le succs de cet algorithme dextension de domaine vient de sa preuve de scurit trs simple et trs utile. Plus prcisment, on peut prouver que toute fonction de compression rsistante aux attaques trouvant des pseudo-collisions fournit par cette mthode une fonction de hachage rsistante aux attaques trouvant des collisions. On sen convainc facilement en remarquant quune collision sur la fonction de hachage entrane lexistence dune pseudocollision sur la fonction de compression une certaine itration. Le cas o lattaquant trouve un message M tel que h(IV, M ) = IV est pris en compte par le deuxime rembourrage, qui empche quun message rembourr soit le sufxe dun autre message rembourr. Il vite aussi certaines attaques triviales, notamment en ce qui concerne les pseudo-collisions : en choisissant IV = h(IV, M 1 ), si lon omet le deuxime rembourrage, nous calculons immdiatement la pseudo-collision h(IV, M 1 ||M 2 ) = h(IV , M 2 ). Cette preuve est quelquefois mal interprte parmi les chercheurs : il est admis par certains auteurs quune attaque contre la fonction de compression permettant de trouver des pseudocollisions rend vulnrable la fonction de hachage totale. Ceci est a priori faux puisquaucun algorithme gnrique ne permet de trouver une collision pour la fonction de hachage partir de pseudo-collisions pour la fonction de compression interne. Il est nanmoins vrai que la preuve de scurit nest plus valide dans ce cas. Il serait dailleurs intressant de trouver une hypothse ncessaire et sufsante pour cette preuve : il semble trop fort dempcher lattaquant de trouver des pseudo-collisions sur la fonction de compression (sauf prouver le contraire en tablissant une attaque gnrique), mais, dautre part, ne considrer que la rsistance la recherche de collisions est trop faible. 12

2.2. Les vulnrabilits de lalgorithme de Merkle-Damgrd Le cas de la primage est plus simple. La preuve de Merkle-Damgrd sapplique de la mme manire : une fonction de compression rsistante la recherche de primages libres aboutira une fonction de hachage rsistante la recherche de primages. Cependant, lhypothse est ici ncessaire puisquun algorithme gnrique [Pre93] permet de transformer des primages libres pour la fonction de compression en primages pour la fonction de hachage. De manire simplie, on choisit 2(n+s)/2 blocs de message qui nous fournissent 2(n+s)/2 variables de chanage partir de lIV que lon stocke dans une premire liste. On inverse ensuite 2(ns)/2 fois la fonction de compression partir de la valeur de hach du d (calcul de primages libres) pour obtenir encore 2(ns)/2 variables de chanage que lon stocke dans une deuxime liste. On applique enn une technique de rencontre au milieu : on trouve une valeur de variable de chanage prsente dans les deux listes (en les triant par exemple), ce qui nous donne une primage. Nous avons une bonne probabilit de succs puisque le paradoxe des anniversaires sapplique dans notre cas : nous avons bien 2(ns)/2 2(n+s)/2 = 2n couples possibles. Enn, la complexit nale est de O(2(n+s)/2 ) oprations si lon est en mesure de calculer des primages libres en O(2s ) oprations. On remarque que si s < n (la fonction de compression nest pas rsistante la recherche de primages libres), alors 2(n+s)/2 < 2n et nous avons bien une meilleure attaque que celle gnrique pour la recherche de primages pour la fonction de hachage.

2.2

Les vulnrabilits de lalgorithme de Merkle-Damgrd

Lun des premiers problmes concernant la scurit de lalgorithme de Merkle-Damgrd fut dcouvert rapidement. Une fonction de hachage H simulant un oracle alatoire doit fournir des constructions de MAC sres en utilisant par exemple MACK (M ) = H(K ||M ), o K reprsente la cl secrte et M le message. Or, cette construction prsente des vulnrabilits si lon utilise une fonction de hachage fonde sur le principe de Merkle-Damgrd. En effet, supposons que lon demande le MAC pour la cl secrte K du message M1 . On obtient MACK (M1 ) = H(K ||M1 ). Puisque lon connat ltat interne de la fonction de hachage la dernire itration (cest le hach), on peut parfaitement calculer H(K ||M1 ||M2 ), ce qui est gal MACK (M1 ||M2 ). Nous avons ainsi engendr un nouveau MAC valide, sans pour autant connatre la cl secrte. Cette vulnrabilit sur lalgorithme dextension de domaine, appele attaque par extension de longueur, fut corrige bien plus tard par Coron et al. [CDM05]. De nouveaux types dattaques ont galement t mis en vidence. Tout dabord, Joux introduisit le concept de multicollisions [Jou04] : une k-multicollision est un ensemble de k messages aboutissant tous la mme valeur de sortie (une collision est donc une 2-multicollision). Pour une fonction de hachage simulant un oracle alatoire, on devrait excuter O(2n(k1)/k ) oprations pour avoir une bonne probabilit dobtenir une k -multicollision. Dans le cas dune fonction de hachage fonde sur le principe de Merkle-Damgrd, cela est beaucoup plus simple : on trouve tout dabord une collision sur la fonction de compression partir de lIV (avec O(2n/2 ) oprations). Ensuite, partir de la nouvelle variable de chanage, on trouve une nouvelle collision interne (encore avec O(2n/2 ) oprations). On continue, de la mme manire, jusqu forcer k collisions internes. Ces k collisions vont nalement nous donner 2k chemins diffrents pour aboutir la variable de chanage nale et nous obtenons donc une 2k -multicollision en excutant seulement O(k 2n/2 ) oprations. Cette technique est dcrite en gure 2.2. Si la taille de ltat interne est gale celle du hach, aucun algorithme dextension de domaine ne corrige cette vulnrabilit ce jour except le schma de Maurer et al. [MT07]. Ces travaux de Joux ont aussi montr que la concatnation des hachs de deux fonctions 13

Chapitre 2. Lextension de domaine de hachage indpendantes namliore pas la rsistance en collision autant que lexigerait laugmentation de la taille du hach nal : en engendrant une 2n/2 -multicollision sur lun des hachs, on obtient une bonne probabilit de trouver une collision pour le deuxime hach parmi ces candidats. Pour une taille de hach nal de 2n, nous trouvons donc des collisions laide de seulement n/2 2n/2 oprations approximativement.

M1
H0 H1

M3 M2
H2 H3

M4
H4

M5

H5

M1

M3

M4

F IG . 2.2 Exemple de lattaque par multicollisions de Joux [Jou04] pour lalgorithme dextension de domaine de Merkle-Damgrd. Chaque che reprsente une transition dune variable de chanage Hi une variable de chanage Hi+1 par lapplication de la fonction de compression h avec le bloc de message Mi . Dans le cas o lon ralise une collision sur h, on note Mi le second bloc de message. Dans cet exemple, nous avons 3 collisions internes, ce qui nous fournit une 8-multicollision pour le hach nal en seulement 3 2n/2 oprations approximativement (au lieu de 27n/8 oprations dans le cas idal). De nouvelles vulnrabilits furent ensuite publies. Par exemple, Dean [Dea99] puis Kelsey et Schneier [KS05] montrrent que lon peut trouver une seconde primage pour une fonction de hachage fonde sur le principe de Merkle-Damgrd en moins de 2n oprations. Cette attaque, qui peut tre vue comme une gnralisation du travail prcdent de Joux, utilise nanmoins de trs longs messages. Plus le message du d est long, meilleure sera la complexit nale de lattaque. On peut enn noter le travail de Kelsey et al. [KK06], qui dcrit lattaque par rassemblement, permettant de sengager lavance et de manire frauduleuse sur une valeur de hach. Ces travaux furent tendus plus tard par Dunkelman et al. [DP07].

2.3

Les nouveaux algorithmes

Beaucoup de nouveaux candidats apparaissent pour tenter de remplacer lalgorithme dextension de domaine de Merkle-Damgrd. On peut citer par exemple les rcentes propositions HAIFA [BD06], EMD [BR06], ROX [ANP07], etc. Nanmoins, mme si chacune de ces propositions possde certaines qualits, aucune dentre elles ne corrige les problmes de multicollisions ; hormis celle de Maurer et al. [MT07] qui permet de concevoir un oracle alatoire de taille dentre variable partir dun oracle alatoire de taille dentre xe au prix dune construction peu pratique. Lune des solutions possibles ce problme serait daugmenter la taille de ltat interne de la fonction de hachage ( taille de hach constante), pour rendre trop coteuse la recherche de collisions internes. Pour tenter dobtenir une fonction de hachage idale, nous devrons mme satisfaire N 2n. Cette possibilit, dj pressentie par Joux [Jou04] puis formalise par Lucks [Luc05], attire de plus en plus les concepteurs de nouveaux schmas, comme en tmoignent les dernires fonctions de hachage publies. 14

2.3. Les nouveaux algorithmes Enn, les fonctions ponges [BDP06, BDP08] semblent assez prometteuses pour construire des fonctions de hachage. Lide est dutiliser un tat interne trs grand pour viter toute possibilit de trouver une collision, tout en rendant trs lgre la fonction de compression. La rsistance la recherche de primages est renforce par une fonction de sortie trs robuste. Cependant, nous avons montr dans [Pey07] et nous expliquons dans la dernire partie de ce mmoire que pour la fonction de hachage G RINDAHL, trs proche des fonctions ponges, la rsistance la recherche de collisions nest pas satisfaite. Nous avons aussi publi dautres vulnrabilits des fonctions ponges quant la construction de MAC [GLP08, Pey08].

15

Chapitre 2. Lextension de domaine

16

C HAPITRE 3

Fonctions de compression
Sommaire
3.1 3.2 3.3 Fonctions de compression ad hoc . . . . . . . . . . . . . . . . . . . . . . . . 17 Fonctions de compression fondes sur un algorithme de chiffrement par blocs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Fonctions de compression fondes sur une structure algbrique . . . . . 22

La fonction de compression est la principale composante dune fonction de hachage itre. En pratique, cest aussi souvent la partie la plus vulnrable et donc la plus difcile construire. Historiquement, on peut distinguer trois manires de procder pour crer une telle primitive : partir de rien, en utilisant un algorithme de chiffrement par blocs, ou en se fondant sur un problme difcile.

3.1

Fonctions de compression ad hoc

Les fonctions de compression ad hoc sont en pratique les plus rapides puisquelles utilisent des oprations trs peu coteuses. Le dsavantage est que la scurit de ces fonctions est en gnral conjecture et nest pas fonde sur des preuves rductionnistes, car le principe de construction vise avant tout la performance. Les plus connues font partie de la famille MDSHA [RFCmd4, RFCmd5, RIPE95, DBP96, ZPS92, N-sha0, N-sha1, N-sha2, N-sha2b], initie par Ron Rivest en 1990. Nous ne dcrivons pas en dtail ces fonctions, car elles le seront dans la deuxime partie de ce mmoire. On peut tout de mme remarquer que mme si le fonctionnement interne de ces fonctions ne repose sur aucune primitive cryptographique dj connue, elles dnissent en fait le plus souvent un algorithme de chiffrement par blocs ad hoc E qui est imbriqu dans un schma de type Davies-Meyer (ce schma sera dcrit dans la prochaine section) : Hi = h(Hi1 , Mi ) = EMi (Hi1 ) Hi1 . o Ex (y ) reprsente le chiffrement du message y par la cl x. Dailleurs, des algorithmes de chiffrement par blocs dduits dune fonction de compression ad hoc ont parfois t proposs. Par exemple, SHACAL [HN00, HN02] est extrait de la fonction de compression de SHA1 [N-sha1]. De nombreuses fonctions de compression ne font pas partie de la famille MD-SHA. On peut citer par exemple TIGER [AB96], W HIRLPOOL [BR00], SMASH [Knu05], FORK-256 [HCS05, 17

Chapitre 3. Fonctions de compression HCS06, HCS07], LAKE [AMP08], MAME [YW007], etc. Cependant, beaucoup de ces fonctions prsentent des vulnrabilits [MR07, PRR05, MLP07, MPB07, Saa07a]. Les fonctions ponges [BDP08], comme R ADIO G ATN [BDP06] ou G RINDAHL [KRT07], utilisent elles aussi des fonctions de compression ad hoc spcialement adaptes la trs grande taille de leur tat interne. Les rsultats prsents dans ce mmoire concernent la cryptanalyse de ces fonctions de compression ad hoc. Nous dcrivons certaines vulnrabilits pour les fonctions de hachage FORK-256 [MPB07] et G RINDAHL [Pey07] (et plus gnralement les fonctions ponges [GLP08, Pey08]). Nous amliorons ensuite les attaques connues en ce qui concerne la recherche de collisions pour SHA-0 [MP08] et SHA-1 [JP07a, JP07b, JP07c, YIN08b]. Enn, nous avons montr avec Frdric Muller [MP06] que de nombreux schmas fonds sur des T-fonctions [KS02, KS04] ne peuvent pas tre considrs comme srs. Cependant, ces derniers travaux ne seront pas dcrit en dtail dans cette thse.

3.2

Fonctions de compression fondes sur un algorithme de chiffrement par blocs

Les fonctions de compression fondes sur un algorithme de chiffrement par blocs paraissent intressantes pour les concepteurs. En effet, nous connaissons de nombreux candidats efcaces et srs, tels que lAES, et cette approche dbouche parfois sur des preuves de scurit. Plus prcisment, certaines proprits de la fonction de hachage (rsistance la recherche de collisions, de primages ou de secondes primages) peuvent tre dmontres en supposant la primitive interne idale. Cela fut le cas pour certains des premiers schmas considrs par Preneel et al. [PGV93]. Ils tudirent tous les candidats simples pour construire une fonction de compression partir dun algorithme de chiffrement par blocs. Plus prcisment, ils analysrent toutes les constructions de la forme : Hi = h(Hi1 , Mi ) = EV1 (V2 ) V3 o V1 , V2 et V3 sont des combinaisons linaires des deux entres Hi1 , Mi . Il y a donc (22 )3 = 64 candidats au total, dont seulement 12 furent conjecturs srs (une vulnrabilit fut dcrite pour chacun des autres candidats). Ce nest que plusieurs annes plus tard que Black et al. [BRS02] dmontrrent la validit de cette conjecture, dans le modle du chiffrement idal ou modle de la bote noire o lon considre la primitive interne comme une permutation parfaitement alatoire, voir [Sha49, Win84]. Les plus connus de ces schmas sont ceux de Matyas-MeyerOseas, de Davies-Meyer, et de Miyaguchi-Preneel. Ils sont explicits dans la gure 3.1. Chacun deux possde un taux defcacit gal 1, dni par le rapport entre le nombre de blocs de message traits et le nombre dappels un algorithme de chiffrement par blocs. Nanmoins, il faut noter que pour le schma de Davies-Meyer il est facile de trouver des points xes, i.e. des valeurs de la variable de chanage interne restant identiques aprs application de la fonction de compression : h(Hi1 , Mi ) = Hi1 . Il suft de dchiffrer le chiffr nul pour E avec une cl gale un message Mi tir alatoirement. Cela fournit une variable de chanage dentre vriant Hi = EMi (Hi1 ) Hi1 = Hi1 . 18

3.2. Fonctions de compression fondes sur un algorithme de chiffrement par blocs Cette vulnrabilit nest pas trs pnalisante puisque la fonction de compression est en principe rsistante la recherche de primages. Ainsi, il sera trs difcile en pratique pour un attaquant datteindre un tel point xe durant lexcution.

M Hi M

Hi Hi

Hi+1
MatyasMeyerOseas

Hi+1
DaviesMeyer

Hi+1
MiyaguchiPreneel

F IG . 3.1 Les trois schmas les plus connus de fonctions de compression de taille simple fondes sur des algorithmes de chiffrement par blocs. M reprsente le bloc de message hacher, Hi et Hi+1 reprsentent respectivement lancienne et la nouvelle variable de chanage. Enn, E est un algorithme de chiffrement par blocs dont lentre relative la cl est marque par une encoche. Dans le cas o la taille de bloc de lalgorithme de chiffrement par blocs est gale celle de la variable de chanage de la fonction de compression, toutes ces tudes semblent clore le sujet. Cependant, dun point de vue pratique, cette conguration nest pas trs utile. En effet, nous disposons actuellement dalgorithmes dont la taille de bloc est infrieure ou gale 128 bits (dans le cas de lAES, nous avons 128 bits par bloc). Or, si le hach de la fonction de hachage nale est aussi dune taille de 128 bits, la recherche gnrique de collisions ne ncessitera que O(264 ) oprations. Cette quantit de calculs est actuellement porte dune grappe dordinateurs puissants. Ainsi, un problme plus complexe doit tre tudi : comment produire des hachs de taille 2n (ou plus) lorsque lon dispose dun algorithme de chiffrement par blocs oprant sur des blocs de n bits. Les fonctions les plus connues tentant de rpondre ce problme sont MDC-2 (explicit en gure 3.2) et MDC-4 [CPM90]. Elles sont cependant trs loin doffrir une scurit parfaite proportionne leur taille de sortie [Pre93]. De nombreuses propositions de nouveaux schmas furent publies [PBG89, QG89, BPS90, LM92, LWH93, NLS05], mais peu de ces candidats restrent indemnes de toute attaque [LM92, KL94, KM05]. Aussi, Bart Preneel et Lars Knudsen [KP96, KP97, KP02] proposrent des constructions tayes par des arguments de scurit forts et utilisant la thorie des codes pour dnir les combinaisons linaires dentre et de sortie pour lalgorithme de chiffrement par blocs. Cependant, en plus de quelques lgres vulnrabilits pour certaines instances [Wat08], ces schmas prsentent le dsavantage de ne pas offrir une scurit idale relativement la taille de sortie du hach : un hach de taille beaucoup plus grande que 2n bits est ncessaire pour prtendre une scurit quivalente celle dune fonction de hachage idale dont le hach mesure 2n bits. Plus rcemment, Hi19

Chapitre 3. Fonctions de compression rose [Hir04, Hir06] eut lide dutiliser des algorithmes de chiffrement par blocs dont la taille de cl est double (comme cela est le cas pour AES-256). Cette proposition est accompagne dune preuve de scurit relative la rsistance la recherche de collisions et de (secondes) primages dans le modle du chiffrement idal.

Gi

Hi

A B

C D

A D

C B

Gi+1

Hi+1

F IG . 3.2 La fonction de compression de MDC-2 [CPM90]. M reprsente le bloc de message hacher, Gi et Hi sont les deux blocs de variable de chanage dentre, Gi+1 et Hi+1 dnotent les deux blocs de variable de chanage de sortie. E est un algorithme de chiffrement par blocs dont lentre relative la cl est marque par une encoche. Enn, les notations A, B , C et D dsignent des demi-blocs et servent dcrire le mlange ralis entre la branche de droite et celle de gauche. En collaboration avec Henri Gilbert, Frdric Muller et Matt Robshaw, nous avons tudi ce problme dans un article publi la confrence ASIACRYPT 2006 [PGM06], en essayant de dnir un cadre de travail regroupant toutes les attaques connues. Nous avons aussi tent de gnraliser lanalyse en tudiant comment construire une fonction de compression idale en utilisant un certain nombre de fonctions de compression elles-mmes idales mais plus petites. Nous sommes arrivs la conclusion quelque peu contre-intuitive que dans le cas dune construction parallle simple et pour une taille de hach nal de 256 bits, il faut utiliser au moins cinq appels AES pour hacher un bloc de message de 128 bits. Cette borne infrieure montre que les tentatives antrieures des chercheurs de rsoudre ce problme en utilisant seulement un ou deux appels la primitive interne (pour obtenir un bon taux defcacit) taient condamnes lchec. Nous avons par ailleurs propos dans [PGM06] des candidats potentiels, explicits dans la gure 3.3. Aucune vulnrabilit na pour linstant t trouve pour ces schmas, pour lesquels nous avons apport de nouveaux arguments de scurit dans un article publi avec Yannick Seurin la confrence FSE 2007 [SP07]. Nous conjecturons quil existe pour ce problme un compromis entre la taille de description 20

3.2. Fonctions de compression fondes sur un algorithme de chiffrement par blocs

Gi

Hi

Hi

G i Hi

Gi

Gi

Hi

f (1)

f (2)

f (3)

f (4)

f (5)

Gi+1

Hi+1

Gi

Hi

M 1 Gi

Hi

M 2 Gi

M 1 M 2 Gi

Hi

M 1 Hi

M1 M2

f (1)

f (2)

f (3)

f (4)

f (5)

Gi+1

Hi+1

F IG . 3.3 Deux nouvelles propositions de fonction de compression de taille double fonde sur un algorithme de chiffrement par blocs [PGM06]. M , ou M 1 et M 2 , reprsentent les blocs de message hacher, Gi et Hi sont les deux blocs de variable de chanage dentre, Gi+1 et Hi+1 dsignent les deux blocs de variable de chanage de sortie. Les fonctions f (i) reprsentent des fonctions de compression indpendantes de taille simple, pouvant par exemple tre instancies en pratique par des algorithmes de chiffrement par blocs indpendants en mode Davies-Meyer. Celles utilises pour le premier schma possdent deux entres de taille n tandis que celles utilises pour le deuxime ont trois entres de n bits (par exemple un algorithme de chiffrement par blocs taille de cl double en mode Davies-Meyer). Ces schmas ne prsentent aucune vulnrabilit connue et lon remarque que le deuxime schma possde un taux defcacit deux fois meilleur que le premier. de lalgorithme et son taux defcacit. Nos travaux tendent montrer que plus on sautorise un schma complexe (et donc, excutant de nombreux appels la primitive interne), plus on a de chances de trouver un candidat sr et prsentant un trs bon taux defcacit. Il existe une assez forte ressemblance entre les fonctions de hachage et les algorithmes de chiffrement par blocs actuels. Cette ressemblance est sans doute due au fait que la construction 21

Chapitre 3. Fonctions de compression de ces derniers est ce jour considre par la plupart des chercheurs comme mieux matrise, et que de ce fait les concepteurs de fonctions de hachage ont cherch sen loigner le moins possible. Cependant, la diffrence fondamentale est quil ny a aucun secret dans une fonction de hachage. Ainsi, lattaquant contrle entirement lexcution, contrairement au cas des algorithmes de chiffrements par blocs. Comme la rcemment remarqu Knudsen [Knu08], on serait donc tent de penser quune fonction de hachage ne devrait pas tre plus rapide quun algorithme de chiffrement par blocs. Cela nest pas le cas aujourdhui, SHA-1 tant beaucoup plus rapide que lAES. Cependant, il est encore trop tt pour pleinement mesurer la difcult de construire un schma rsistant la recherche de collisions, proprit gnralement non exige des algorithmes de chiffrement par blocs.

3.3

Fonctions de compression fondes sur une structure algbrique

Le dernier groupe de fonctions de compression, celles fondes sur une structure algbrique, est situ loppos de celui des fonctions ad hoc. En effet, certaines de ces constructions fournissent des preuves permettant de faire reposer leur scurit sur un problme suppos difcile, pour lune ou plusieurs des notions de scurit habituelles (rsistance la recherche de collisions, de primages, de secondes primages). Depuis les rcentes attaques dvastatrices contre les membres de la famille MD-SHA, ces fonctions ont connu un regain dintrt certain. Cependant, les principaux inconvnients de cette approche sont la ncessit de possder une trs grande quantit de mmoire ou encore une vitesse dexcution souvent lente cause doprations algbriques trs coteuses. De plus, ces fonctions possdent une forte structure algbrique et cela peut poser problme puisque les fonctions de hachage sont aussi utilises pour casser de telles structures dans certaines primitives cryptographiques. Aujourdhui, pour construire des fonctions de compression, on peut utiliser des problmes aussi varis que la factorisation [CLS06], le dcodage de syndrome [AFS05], ou la recherche du plus court vecteur dans un rseau [GGH96, BPS06]. En collaboration avec Olivier Billet et Matt Robshaw, nous avons propos une fonction de hachage fonde sur le problme de la rsolution de systmes dquations quadratiques multivaries dans un corps ni [BPR07], et fournissant une preuve de scurit en ce qui concerne la rsistance la recherche de primages et de secondes primages. Une analyse de scurit fut conduite plus tard par Aumasson et al. [AM07], sans pour autant aboutir une attaque contre le schma complet. Certains schmas de cette famille ne sont pas indemnes de toute vulnrabilit [Saa07b, CMP08, Saa06], mais cette approche semble de plus en plus intressante mesure que les vitesses dexcution des autres familles de schmas diminuent. Cependant, tant donn les performances actuelles, il semble peu probable quune telle fonction soit slectionne comme algorithme vainqueur de lappel soumissions du NIST. On peut enn noter la rcente proposition dAdi Shamir [Sha08] pour construire un MAC, prsentant lavantage de ne demander quune quantit de mmoire trs faible et rendant le schma attractif pour des environnements trs contraints.

22

D EUXIME PARTIE

Cryptanalyse de la famille SHA

23

Nous prsentons dans cette section les fonctions de hachage de la famille Message-Digest (MD) ou Secure Hash Algorithm (SHA), de loin les plus implantes en pratique et les plus tudies. Ces primitives, trs rapides, dnissent en fait une fonction de compression qui sera utilise avec lalgorithme dextension de domaine de Merkle-Damgrd. Elles ont toutes pour caractristique commune dutiliser un algorithme de chiffrement par blocs ddi E , lintrieur dune construction de type Davies-Meyer : Hi = EMi (Hi1 ) Hi1 o Hi1 reprsente la variable de chanage dentre, Hi celle de sortie et E est fond sur un schma de Feistel asymtrique gnralis. Le premier reprsentant de cette ligne, MD4 [RFCmd4] , a t conu en 1990 par Rivest pour les laboratoires RSA. Cette fonction produit des hachs de 128 bits et est spcialement optimise pour les architectures 32 bits. la suite de la dcouverte de vulnrabilits potentielles de MD4, une version amliore, MD5 [RFCmd5], fut propose lanne suivante. En 1992, Zheng et al. publirent lalgorithme HAVAL [ZPS92], trs proche de la famille MD, mais ayant lavantage de possder un paramtre de scurit et une longueur de sortie paramtrable. Paralllement, le projet europen RACE Integrity Primitives Evaluation (RIPE) recommanda la fonction de hachage RIPEMD-0 [RIPE95] , constitue quasiment de deux MD4 mis en parallle, puis renforce en 1996 pour donner RIPEMD-128 et RIPEMD-160 [DBP96]. Le NIST ne tarda pas ragir en standardisant en 1993 SHA-0 [N-sha0], fruit du travail de la National Security Agency (NSA). SHA-0, dont la conception est galement fortement inspire par celle des fonctions de la famille MD, est une fonction de hachage produisant des hachs de 160 bits. Cette version fut trs lgrement corrige en 1995, pour des raisons restes condentielles, et a donn naissance SHA-1 [N-sha1] . Dans un souci danticipation des futures cryptanalyses et de laugmentation suppose des capacits de calcul, le NIST a publi rcemment les fonctions SHA-256 et SHA-512 [N-sha2], des versions amliores des anciens membres de la famille SHA produisant des hachs de taille 256, 384 ou 512 bits (puis 224 bits [N-sha2b]). Aprs plusieurs avances sur des versions rduites de MD4 [BB91], de MD5 [BB93] ou encore de RIPEMD-0 [Dob97], une premire cryptanalyse complte dun membre de cette ligne permettant de produire des collisions pour MD4 fut publie par Dobbertin [Dob96a] en 1996. En 1998, Chabaud et Joux [CJ98] tablirent la premire attaque thorique fournissant une collision pour SHA-0 en moins de 280 oprations (pour 160 bits de sortie). En 2004, Biham et Chen [BC04] introduisirent lide de bits neutres, qui mena plus tard au calcul de la premire collision sur SHA-0 [BCJ05] avec 4 blocs de message. Durant lt 2004 [WFL04], la communaut acadmique dcouvrit lexistence dun travail indpendant dune quipe de chercheurs chinois tudiant la rsistance la recherche de collisions de nombreuses fonctions de la famille MD ou SHA : les premires attaques produisant une collision pour MD5 [WY05], SHA1 [WYY05b], RIPEMD-0 [WLF05] et certaines versions dHAVAL [YWY06] ; en plus dune amlioration signicative des attaques existantes pour MD4 [WLF05] et SHA-0 [WYY05d]. Depuis ces importantes avances, une grande quantit darticles a permis de mieux comprendre
MD2, conu pour les processeurs 8 bits, date de 1989, mais ne repose pas sur les mmes principes de construction que les autres membres de la famille MD. Les notations RIPEMD-0, RIPEMD-128 et RIPEMD-160 furent introduites aprs la cration des versions renforces de RIPEMD. De manire similaire RIPEMD, les notations SHA-0 et SHA-1 furent introduites aprs la cration de SHA-1 pour distinguer la version originale de la version corrige de SHA.

25

Algorithme MD4 MD5 HAVAL 3 tours HAVAL 3 tours HAVAL 4 tours HAVAL 5 tours RIPEMD-0 RIPEMD-128 RIPEMD-160 SHA-0 SHA-1 SHA-256 SHA-512

Taille de sortie 128 128 128 160 256 128 256 128 256 128 128 ou 256 160 ou 320 160 160 256 ou 224 512 ou 384

Complexit 2 223 26 229 236 2123 216

Rfrence [SWO07] [Kli06] [YWY06] [VBP03] [YWY06] [YWY06] [WLF05]

233 261

[MP08] [MRR07]

TAB . 3.1 Meilleures attaques par collision contre les membres de la famille MD-SHA, avec les tailles de sortie (en bits), les complexits des attaques en nombre dappels la fonction de compression et les rfrences respectives. ou damliorer encore ces attaques. Le tableau 3.1 donne les attaques produisant des collisions de meilleure complexit actuellement connues et les rfrences correspondantes. Actuellement, un des axes majeurs de recherche concerne linvestigation des implications relles de ces attaques pour la scurit des applications cryptographiques pratiques [LW05, CY06, KBP06, Leu07, SYA07, SLW07a, FLN07, WOK08]. Les fonctions de la famille MD-SHA encore considres comme sres sont en nombre limit : seules RIPEMD-128, RIPEMD-160, SHA-256 et SHA-512 ont rsist pour linstant lpreuve du temps. Nanmoins, ces avances inattendues en cryptanalyse ont jet un doute sur la scurit de ce type de construction et ceci explique en grande partie la dcision du NIST dorganiser un appel soumissions pour de nouvelles fonctions de hachage, dans le but de standardiser le futur SHA-3 [N-sha3], comme cela fut le cas de lAdvanced Encryption Standard (AES) [N-aes] pour les algorithmes de chiffrement par blocs. La date nale de dcision du candidat vainqueur est prvue pour le milieu de lanne 2012. Le travail de cryptanalyse nest cependant toujours pas termin puisque lamlioration des attaques connues permet dvaluer prcisment les limites de ce type de mthodes pour chaque schma. De plus, mme si la fonction SHA-1 est thoriquement casse, le temps pour calculer une collision est pour linstant hors de porte des ordinateurs actuels et de nombreuses quipes de recherche tentent de trouver un moyen pour calculer la premire collision pour SHA-1, la fonction de hachage actuellement la plus utilise en pratique.

26

C HAPITRE 4

Prsentation des fonctions de la famille MD-SHA


Sommaire
MD4 . . . . . . . . . . . 4.1.1 Description . . . 4.1.2 Scurit actuelle 4.2 MD5 . . . . . . . . . . . 4.2.1 Description . . . 4.2.2 Scurit actuelle 4.3 HAVAL . . . . . . . . . 4.3.1 Description . . . 4.3.2 Scurit actuelle 4.4 RIPEMD-0 . . . . . . . 4.4.1 Description . . . 4.4.2 Scurit actuelle 4.5 RIPEMD-128 . . . . . 4.5.1 Description . . . 4.5.2 Scurit actuelle 4.6 RIPEMD-160 . . . . . 4.6.1 Description . . . 4.6.2 Scurit actuelle 4.7 SHA-0 . . . . . . . . . 4.7.1 Description . . . 4.7.2 Scurit actuelle 4.8 SHA-1 . . . . . . . . . 4.8.1 Description . . . 4.8.2 Scurit actuelle 4.9 SHA-256 . . . . . . . . 4.9.1 Description . . . 4.9.2 Scurit actuelle 4.10 SHA-512 . . . . . . . . 4.10.1 Description . . . 4.10.2 Scurit actuelle 4.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 31 31 32 32 33 34 34 34 35 35 36 36 36 37 38 38 39 40 40 40 42 42 42 42 42 44 44 44 46

27

Chapitre 4. Prsentation des fonctions de la famille MD-SHA

Toutes les fonctions de hachage dcrites dans cette premire partie utilisent le procd de Merkle-Damgrd comme algorithme dextension de domaine, avec pralablement un rembourrage appropri. Nous ne dcrirons donc ici que les fonctions de compression, faisant correspondre pour le mot de message M la variable de chanage de sortie H celle dentre H . Sauf indication contraire, tous les mots considrs seront des mots de w = 32 bits chacun, ce qui explique la rapidit de ces fonctions pour les applications logicielles puisque toutes les oprations utilises sont disponibles sur les microprocesseurs actuels. Nous notons n le nombre de bits de sortie de la fonction h, m le nombre de mots de message traits chaque itration de la fonction h, et r le nombre de mots de ltat interne, que lon appelle registres. Sauf dans le cas de RIPEMD o deux branches parallles sont utilises (o r reprsente alors le nombre de registres dans chaque branche), nous aurons r 32 = n ce qui signie que la taille de ltat interne est gale celle de la variable de chanage. La variable de chanage H (respectivement H ) peut alors naturellement tre divise en r mots de 32 bits h0 , . . . , hr1 (respectivement h0 , . . . , hr1 ). Les r registres internes sont mis jour par un schma de Feistel asymtrique gnralis, chaque registre correspondant un brin. chaque tape i, un registre est mis jour laide dune fonction fi dpendante de i, avant le dcalage des registres propre au schma de Feistel. Aussi, certains registres pourront potentiellement subir une rotation avant le dcalage. Il nexiste en fait que t fonctions fi diffrentes, ce qui dnit la notion de tour : pour toutes les tapes du tour j , la mme fonction fj sera utilise. Soit t le nombre de tours et u le nombre dtapes par tour. Le nombre total dtapes de la fonction de compression est gal s = t u. Un mot dpendant du message est requis lentre de chaque tape i, ce qui nous oblige dnir lexpansion de message : partir du message M constitu de m mots, nous construisons le message tendu W comportant s mots. Il existe deux types dexpansion. Celle de la famille MD ou RIPEMD utilise des permutations des mots de M pour chaque tour. Ainsi, chaque mot de message sera utilis une et une seule fois par tour. Dans le cas de la famille SHA, une formule de rcurrence est dnie pour calculer les mots de W , linitialisation tant fournie par les mots de M . chaque tape, seulement un registre sera mis jour et nous lappelons registre cible (sauf dans le cas de SHA-256 et SHA-512 o nous avons deux registres cibles par tape). Nous pouvons ne considrer que les registres de ltat initial et les registres cibles pour la description de la fonction puisque ltat interne chaque tape peut tre intgralement reconstruit grce la seule connaissance de ces valeurs. Ainsi, ltat interne durant lexcution peut tre vu comme un vecteur de s + r mots de 32 bits Ar+1 , . . . , As reprsentant les registres cibles et ltat initial : Ai+1 correspondant la valeur du registre cible mis jour durant ltape i pour 0 i < s (dans le cas de SHA-256 ou de SHA-512 nous aurons deux vecteurs de registres cibles, et il en est de mme pour RIPEMD puisque nous devrons maintenir un vecteur de registres cibles pour chaque branche). Linitialisation insrera les registres de la variable de chanage dentre dans les r premiers registres de ltat interne. Cette description simplie des algorithmes est utile la fois pour une meilleure comprhension des schmas et une meilleure vision des vnements dans les registres pour le cryptanalyste [Dau05]. Toutes les fonctions de la famille MD-SHA utilisent la construction de Davies-Meyer, o la variable de chanage dentre est reboucle sur les registres internes naux pour donner la variable de chanage de sortie, et ce, pour viter toute possibilit dinversion de la fonction de compression (ce qui aboutirait directement une attaque par primage sur la fonction de 28

hachage complte). Cette technique de rebouclage est connue en anglais sous le nom de feedforward. On peut donc voir la fonction de compression comme un algorithme de chiffrement par blocs E (possdant une structure de schma de Feistel asymtrique gnralis) plac dans une construction de Davies-Meyer. Cet algorithme chiffre la variable de chanage h avec comme cl le message M , la phase de prparation des cls de E tant la fonction dexpansion de message de la fonction de hachage. Ce formalisme donna mme naissance au chiffrement par blocs SHACAL [HN00, HN02], utilisant lalgorithme interne de la fonction de compression de SHA1. Le schma de Davies-Meyer a t tudi par Preneel et al. [PGV93] parmi dautres schmas, puis prouv sr par Black et al. [BRS02] dans le modle de la bote noire o le chiffrement par blocs interne E est cens tre une primitive parfaite. Le principal avantage des fonctions de hachage ddies est leur rapidit dans un environnement logiciel. En effet, seules des oprations trs simples et trs bien supportes par les microprocesseurs actuels sont utilises pour la diffusion (additions modulaires, fonctions boolennes bit bit, rotations et dcalages). En ce qui concerne la confusion, lutilisation de fonctions boolennes et dadditions modulaires semble cryptographiquement robuste. Enn, seuls quelques registres sont modis chaque tape, il aurait pu en tre autrement si les fonctions de la famille MD-SHA navaient pas t destines des applications logicielles. Une fois les notations ci-dessus introduites, explicites dans la gure 4.1 et rsumes dans le tableau 4.1, il est trs facile de dcrire les diffrents membres de la famille MD-SHA. En fait, il ne reste plus qu dnir pour chaque cas la mthode dexpansion de message et prciser par quelle fonction le registre Ai+1 est mis jour chaque tape i. Dans la suite, nous noterons < <x > >x A< (respectivement A> ) la rotation de x positions vers la gauche (respectivement vers la droite) des bits du mot A.
Algorithme MD4 MD5 RIPEMD-0 RIPEMD-128 RIPEMD-128 v. 256 bits RIPEMD-160 RIPEMD-160 v. 320 bits SHA-0 SHA-1 SHA-256 SHA-256 v. 224 bits SHA-512 SHA-512 v. 384 bits n 128 128 128 128 256 160 320 160 160 256 224 512 384 Scurit 128 128 128 128 128 160 160 160 160 256 224 512 384 w 32 32 32 32 32 32 32 32 32 32 32 64 64 r 4 4 4 4 4 5 5 5 5 8 8 8 8 m 16 16 16 16 16 16 16 16 16 16 16 16 16 t 3 4 3 4 4 5 5 4 4 1 1 1 1 s 48 64 48 64 64 80 80 80 80 64 64 64 64 Rfrence [RFCmd4] [RFCmd5] [RIPE95] [DBP96] [DBP96] [DBP96] [DBP96] [N-sha0] [N-sha1] [N-sha2] [N-sha2b] [N-sha2] [N-sha2]

TAB . 4.1 Paramtres des fonctions de compression des membres de la famille MD-SHA, avec les tailles de sortie n (en bits), le nombre de bits de scurit espers, la taille w (en bits) des mots utiliss, le nombre r de registres internes (par branche dans le cas des fonctions de la famille RIPEMD), le nombre m de mots de message traits par appel la fonction de compression, le nombre t de tours et le nombre total s dtapes. Nous indiquons aussi les rfrences des caractristiques compltes de ces algorithmes.

29

Chapitre 4. Prsentation des fonctions de la famille MD-SHA

r registres de w bits A1r W0 W1 A2r tape 0 tape 1 tour 0 Wu2 Wu1


Expansion de message

A1

A0

tape u 2 tape u 1 tape u tape u + 1 tour 1

Wu Wu+1

partir de M0 , . . . , Mm1

Ws3 Ws2 Ws1

tape s 3 tape s 2 tape s 1 Asr+1 Asr+2 As1 As

tour t 1

Feedforward

n bits h

F IG . 4.1 Structure gnrique des fonctions de compression pour la famille MD-SHA. Lors de ltape i, la valeur Ai+1 est produite.

30

4.1. MD4

4.1
4.1.1

MD4
Description

Invente par Rivest en 1990 pour les laboratoires RSA [RFCmd4], MD4 est la plus ancienne fonction de la famille MD-SHA, cest donc naturellement aussi la plus simple. La fonction de compression produit des hachs de n = 128 bits pour un tat interne de r = 4 registres de w = 32 bits chacun, initialis par la variable de chanage dentre : A 3 = h 0 A 2 = h 3 A 1 = h 2 A0 = h 1 .

chaque appel, m = 16 mots de message seront traits, avec t = 3 tours de u = 16 tapes chacun (cest dire s = 48 tapes en tout). Lexpansion de message est trs simple. Pour chaque tour j une permutation j de lordre des mots de message est dnie (0 tant lapplication identit). Ainsi, nous avons pour la k -ime tape du tour j , avec 0 j 2 et 0 k 15 : Wj 16+k = Mj (k) . Les permutations j sont dnies dans la section A.1 de lappendice. On peut observer que puisque lexpansion de message est une permutation par tour des mots du message dentre M , chaque mot de M sera utilis une fois pour chaque tour. Durant chaque tape i, le registre cible Ai+1 est mis jour par la fonction fj , dpendante du tour j auquel appartient i : Ai+1 = fj (Ai , Ai1 , Ai2 , Ai3 , Wi , si )
< <si , = (Ai3 + j (Ai , Ai1 , Ai2 ) + Wi + Kj )<

o les Kj sont des constantes prdnies pour chaque tour, les si sont des valeurs de rotation prdnies pour chaque tape, et les fonctions j sont des fonctions boolennes dnies pour chaque tour et prenant 3 mots de 32 bits en entre (voir section A.1 de lappendice). Du fait du rebouclage, la n des 48 tapes, les mots de la sortie de la fonction de compression sont calculs par : h0 = A45 + A3 h1 = A48 + A0 h2 = A47 + A1 h3 = A46 + A2 .

Une description visuelle dune tape est donne dans la gure 4.2 et les caractristiques compltes de la fonction peuvent tre trouves dans [RFCmd4].

4.1.2

Scurit actuelle

Des vulnrabilits pour la fonction de compression furent trs rapidement identies juste aprs la publication de MD4. En effet, ds 1991, Den Boer et Bosselaers [BB91] attaqurent une version rduite deux tours au lieu des trois tours que compte MD4 (cest lune des raisons de la conception de MD5, dont lune des diffrences majeures avec MD4 est quelle comporte 4 tours). Aprs plusieurs avances, Dobbertin [Dob96a] publia en 1996 la premire attaque permettant de trouver des collisions pour la fonction complte dont la complexit en temps est quivalente 220 appels la fonction de compression. Huit ans plus tard, en plus dun grand nombre dautres cryptanalyses de membres de la famille MD-SHA, Wang et al. [WFL04, WLF05] amliorrent lattaque pour obtenir une complexit de moins de 28 appels la fonction. 31

Chapitre 4. Prsentation des fonctions de la famille MD-SHA


Ai3 Ai2 j Wi Kj
< < < si

Ai1

Ai

n m w r t u s

128 16 32 4 3 16 48
Ai2 Ai1 Ai Ai+1

F IG . 4.2 Une tape de la fonction de compression de MD4. Les amliorations qui suivirent furent telles quaujourdhui la complexit pour trouver une collision pour MD4 est peu prs gale celle pour vrier cette collision [SWO07]. Nanmoins, cette fonction continue dtre tudie, reprsentant une bonne entre en matire dans la cryptanalyse des fonctions de hachage de la famille MD-SHA. De plus, de nouvelles voies de recherche consistent exploiter ces types dattaques pour mettre en dfaut la scurit de certains protocoles dans lesquels une fonction de hachage est utilise (tels que HMAC [FLN07, WOK08] ou APOP [Leu07]). Enn, cette fonction semble tre le point de dpart idal pour essayer dvaluer les fonctions de la famille MD-SHA quant leur rsistance en primage [Leu08] ou seconde primage [WLF05]. Il est aujourdhui vident que toute utilisation de MD4 comme primitive cryptographique est proscrire.

4.2
4.2.1

MD5
Description

En rponse aux attaques sur des versions rduites de MD4, une nouvelle version plus complexe fut cre. Compare celle de MD4, la fonction de compression de MD5 possde un tour de plus, de nouvelles fonctions boolennes, une diffusion accrue dans la fonction dtape, des constantes dnies pour chaque tape, etc. Les paramtres gnraux restent inchangs : des hachs de taille n = 128 bits pour un tat interne de r = 4 registres de w = 32 bits chacun, initialis avec la variable de chanage dentre : A 3 = h 0 A 2 = h 3 A 1 = h 2 A0 = h1 .

chaque appel, m = 16 mots de message seront traits, durant t = 4 tours de u = 16 tapes chacun (cest dire s = 64 tapes en tout). Lexpansion de message reste trs simple : pour chaque tour j , une permutation j de lordre des mots de message est dnie (0 tant lapplication identit). Ainsi, nous avons pour la k -ime tape du tour j , avec 0 j 3 et 0 k 15 : Wj 16+k = Mj (k) . Les permutations j sont dnies dans la section A.2 de lappendice. Comme pour MD4, on peut observer que puisque lexpansion de message est une permutation par tour des mots 32

4.2. MD5 du message dentre M , chaque mot de M sera utilis une fois pour chaque tour. Lexpansion de message de MD5 est donc identique celle de MD4 ceci prs que les permutations ont t lgrement modies. Durant chaque tape i le registre cible Ai+1 est mis jour par la fonction fj , qui dpend du tour j auquel i appartient : Ai+1 = fj (Ai , Ai1 , Ai2 , Ai3 , Wi , Ki , si )
< <si = Ai + (Ai3 + j (Ai , Ai1 , Ai2 ) + Wi + Ki )< ,

o les Ki sont des constantes prdnies pour chaque tape, les si sont des valeurs de rotation prdnies pour chaque tape, et les fonctions j sont des fonctions boolennes dnies pour chaque tour et prenant 3 mots de 32 bits en entre (voir section A.2 de lappendice). la n des 64 tapes, les mots de la sortie de la fonction de compression sont calculs par : h0 = A61 + A3 h1 = A64 + A0 h2 = A63 + A1 h3 = A62 + A2 .

Une description visuelle dune tape est donne dans la gure 4.3 et les caractristiques compltes de la fonction peuvent tre trouves dans [RFCmd5].
Ai3 Ai2 j Wi Ki
< < < si

Ai1

Ai

n m w r t u s

128 16 32 4 4 16 64
Ai2 Ai1 Ai Ai+1

F IG . 4.3 Une tape de la fonction de compression de MD5.

4.2.2

Scurit actuelle

La fonction de hachage MD5 rsista un peu plus longtemps que MD4 aux efforts des cryptanalystes et, pour cette raison, elle russit mieux pntrer le monde industriel et fut implante dans de trs nombreuses applications. Une pseudo-collision fut tout dabord dcouverte en 1993 [BB93] pour la fonction de compression de MD5, puis une attaque trouvant des collisions contre la fonction de hachage complte (mais avec une valeur dinitialisation diffrente de celle prdnie) fut prsente par Hans Dobbertin [Dob96b] en 1996. Cest grce au travail de Wang et al. [WFL04, WY05] en 2004 que put tre calcule la premire collision pour MD5, avec une complexit en temps quivalente 239 appels la fonction de compression. Beaucoup de progrs ont t faits depuis pour cryptanalyser cette fonction. Par exemple, la technique optimise de Klima [Kli06] permet de trouver des collisions pour MD5 en quelques secondes sur un ordinateur standard. 33

Chapitre 4. Prsentation des fonctions de la famille MD-SHA Comme pour MD4, beaucoup dquipes de recherche continuent danalyser MD5, et ce, pour plusieurs raisons. Tout dabord, une meilleure comprhension des fonctions de hachage de la famille MD-SHA est ncessaire. De plus, MD5 est encore utilise dans certaines implantations, ce qui pose la question des consquences de ces attaques. Par exemple, de nombreux travaux [Leu07, SYA07, FLN07, WOK08] analysent la possibilit de compromettre la scurit de HMAC ou dAPOP lorsque MD5 est utilis comme brique interne. De nouvelles vulnrabilits ont rcemment t identies concernant lutilisation de MD5 pour vrier lintgrit de programmes excutables [SLW07b] ou pour la signature de certicats X.509 [LW05, SLW07a]. Mme si la rsistance de la fonction de compression quant la recherche de primages nest pour linstant toujours pas mise en dfaut, MD5 ne doit plus tre implante dans des applications cryptographiques.

4.3
4.3.1

HAVAL
Description

La fonction de hachage HAVAL [ZPS92], trs inspire de MD4, a t invente par Zheng et al.. Lune des nouveauts est que le nombre de tours et la taille des hachs peuvent tre moduls, donnant ainsi naissance toute une srie de fonctions HAVAL permettant de couvrir un ventail de besoins le plus large possible. Cette particularit sera reprise par la suite pour les nouvelles fonctions de hachage conues. Par dfaut, les hachs sont de taille n = 256 (les tailles 128, 160, 192 et 224 bits en sortie sont aussi possibles grce une mthode relativement simple de troncature de la sortie originale de 256 bits, voir [ZPS92]) pour un tat interne de r = 8 registres de w = 32 bits chacun, initialis par la variable de chanage dentre. chaque appel, m = 32 mots de message seront traits, avec t tours de u = 32 tapes chacun (cest dire s = t 32 tapes en tout). Suivant la version utilise, le nombre de tours t peut tre gal 3, 4 ou 5. Cette deuxime possibilit de modularit semble tre un lment ncessaire pour les futures fonctions de hachage, un paramtre de scurit permettant facilement daugmenter la robustesse du schma (au dtriment de la rapidit) sans devoir le rimplanter compltement. Cela permet de mieux anticiper et grer les avances potentielles en cryptanalyse. Une telle fonctionnalit est requise pour tout candidat lappel soumissions du NIST. Les caractristiques compltes de la fonction HAVAL peuvent tre trouves dans [ZPS92].

4.3.2

Scurit actuelle

Comme pour MD4 ou MD5, les cryptologues analysrent tout dabord des versions rduites dHAVAL [KP00, PSC02, HSK03], ou tentrent de trouver des comportements non alatoires dans la fonction [YBC04]. La premire attaque contre une version complte dHAVAL (version 3 tours et nimporte quelle taille de sortie) est due Van Rompay et al [VBP03] et permet de trouver des collisions avec une complexit de 229 appels la fonction de compression. Un an plus tard, Wang et al [WFL04] rduisirent la complexit seulement 26 appels pour la version 3 tours avec 128 bits de sortie, puis les versions 4 et 5 tours succombrent en 2006 [YWY06] (236 et 2123 appels la fonction de compression respectivement). Pour ces raisons, HAVAL ne doit plus tre implante dans des applications cryptographiques. 34

4.4. RIPEMD-0

4.4
4.4.1

RIPEMD-0
Description

RIPEMD-0 est lune des primitives recommandes en 1992 lissue dune tude dun consortium dans le cadre du projet europen RACE Integrity Primitives Evaluation (RIPE) sur les primitives permettant de garantir lintgrit [RIPE95]. Originalement nomme RIPEMD, la fonction de compression se compose de deux branches parallles, chacune quasiment identique la fonction de compression de MD4. Les deux lignes parallles de calcul ne diffrent que par lemploi de constantes diffrentes. Les paramtres de chaque branche sont donc gaux ceux de MD4, mais lordre dintroduction des mots du bloc de message tendu et les longueurs de rotation lors des tapes sont diffrents de ceux de MD4. Les hachs sont de taille n = 128 bits pour un tat interne de r = 4 registres de w = 32 bits chacun pour chaque branche. On note R AL i les registres cibles de la branche de gauche et Ai ceux de la branche de droite. On initialise chaque branche par la variable de chanage dentre : AL 3 = h0 AR 3 = h0 AL 2 = h1 AR 2 = h1 AL 1 = h2 AR 1 = h2 AL 0 = h3 AR 0 = h3 .

chaque appel, m = 16 mots de message sont traits, durant t = 3 tours de u = 16 tapes chacun dans chaque branche (cest dire s = 48 tapes en tout). Lexpansion de message est lgrement modie : pour chaque tour j , une permutation j de lordre des mots de message est dnie (0 tant lapplication identit). Ainsi, nous avons pour la k -ime tape du tour j , avec 0 j 2 et 0 k 15 : Wj 16+k = Mj (k) . Les permutations j sont dnies dans la section A.3 de lappendice. Comme pour son prdcesseur MD4, on peut observer que puisque lexpansion de message est une permutation tour par tour des mots du message dentre M , chaque mot de M est utilis une fois pour chaque tour. Lexpansion de message de RIPEMD-0 est donc identique celle de MD4 ceci prs que les permutations ont t lgrement modies.
L fj R Durant chaque tape i, les registres cibles AL i+1 et Ai+1 sont mis jour laide des fonctions R et fj , dpendantes du tour j auquel appartient i : L L L L L AL i+1 = fj (Ai , Ai1 , Ai2 , Ai3 , Wi , si ) L L L L < < <si = (AL , i3 + j (Ai , Ai1 , Ai2 ) + Wi + Kj ) R R R R R AR i+1 = fj (Ai , Ai1 , Ai2 , Ai3 , Wi , si ) R R R R < < <si = (AR , i3 + j (Ai , Ai1 , Ai2 ) + Wi + Kj ) L et K R sont des constantes prdnies pour chaque tour et pour chaque branche, o les Kj j les si sont des valeurs de rotation prdnies pour chaque tape, et les fonctions j sont des fonctions boolennes dnies pour chaque tour et prenant 3 mots de 32 bits en entre (voir section A.3 de lappendice). On peut noter que les seules diffrences entre la fonction de mise L et jour de la branche de gauche et de celle de droite sont les diffrentes constantes utilises Kj R . la n des 48 tapes des deux branches, on applique le rebouclage pour calculer les mots Kj de la sortie de la fonction de compression :

35

Chapitre 4. Prsentation des fonctions de la famille MD-SHA


R h 0 = AL 47 + A48 + A2 R h 2 = AL 45 + A46 + A0 R h 1 = AL 48 + A45 + A1 R h 3 = AL 46 + A47 + A3 .

Une description visuelle dune tape est donne dans la gure 4.4 et les caractristiques compltes de la fonction peuvent tre trouves dans [RIPE95].
Ai3
L/R

Ai2 j

L/R

Ai1

L/R

Ai

L/R

n m w r t u s

128 16 32 4 3 16 48
Ai2
L/R

Wi Kj
L/R
< < < si

Ai1

L/R

Ai

L/R

Ai+1

L/R

F IG . 4.4 Une tape pour une branche de la fonction de compression de RIPEMD-0.

4.4.2

Scurit actuelle

Comme pour ses prdcesseurs, des versions rduites de RIPEMD-0 furent tout dabord analyses, soit en diminuant le nombre de tours [Dob97], soit en analysant une seule des branches la fois [DG01]. La premire cryptanalyse contre le schma complet fut publie en 2004 par Wang et al. [WFL04, WLF05], et prsente une complexit de 216 appels la fonction de compression. Comme pour MD4 ou MD5, lutilisation de RIPEMD-0 dans une application cryptographique est proscrire.

4.5
4.5.1

RIPEMD-128
Description

En 1996, Hans Dobbertin, Antoon Bosselaers et Bart Preneel [DBP96] proposrent une version renforce de RIPEMD-0 pour contrer les premires cryptanalyses de MD4 et de RIPEMD0 qui apparaissaient. De plus, une version 256 bits a aussi t dnie, mais pour une scurit quivalant une fonction de 128 bits. Cette nouvelle primitive comporte toujours 2 branches R de r = 4 registres de w = 32 bits. On note AL i les registres cibles de la branche de gauche et Ai ceux de la branche de droite. On initialise chaque branche par la variable de chanage dentre : AL 3 = h0 AR 3 = h0 AL 2 = h1 AR 2 = h1 AL 1 = h2 AR 1 = h2 AL 0 = h3 AR 0 = h3 .

chaque appel, m = 16 mots de message seront traits, avec maintenant t = 4 tours de u = 16 tapes chacun dans chaque branche (cest dire s = 64 tapes en tout). Lexpansion 36

4.5. RIPEMD-128 de message est modie par rapport RIPEMD-0 puisque pour chaque tour j et pour chaque R et L sont dnies. Ainsi, nous branche, des permutations de lordre des mots de message j j avons pour la k -ime tape du tour j , avec 0 j 3 et 0 k 15 : WjL 16+k = M L (k)
j

WjR 16+k

= M R (k ) .
j

L et R sont dnies dans la section A.4 de lappendice. Lexpansion Les permutations j j de message reposant toujours sur des permutations des mots de message pour chaque tour, chaque mot de M sera utilis une fois pour chaque tour dans chaque branche. Une des nouveauts par rapport RIPEMD-0 est donc que lordonnancement des mots de message est diffrent dans les deux branches. R L Durant chaque tape i, les registres cibles AL i+1 et Ai+1 sont mis jour par les fonctions fj R , dpendantes du tour j auquel appartient i : et fj L L L L L L L AL i+1 = fj (Ai , Ai1 , Ai2 , Ai3 , Wi , si ) L L L L L L < < <si = (AL , i3 + j (Ai , Ai1 , Ai2 ) + Wi + Kj ) R R R R R R R AR i+1 = fj (Ai , Ai1 , Ai2 , Ai3 , Wi , si ) R R R R R R < < <si , = (AR i3 + j (Ai , Ai1 , Ai2 ) + Wi + Kj ) L et K R sont des constantes prdnies pour chaque tour et pour chaque branche, les o les Kj j L R si et si sont des valeurs de rotation prdnies pour chaque tape et pour chaque branche, R et les fonctions L j et j sont des fonctions boolennes dnies pour chaque tour et pour chaque branche et prenant 3 mots de 32 bits en entre (voir section A.4 de lappendice). On R L R peut noter que les fonctions boolennes L j et j (et les constantes de rotation si et si ) utilises dans chaque branche sont diffrentes et ceci constitue la deuxime grande distinction entre RIPEMD-0 et RIPEMD-128. Du fait du rebouclage, la n des 64 tapes des deux branches, les mots de la sortie de la fonction de compression sont calculs par :
R L

R h 0 = AL 63 + A64 + A2 R h 2 = AL 61 + A62 + A0

R h 1 = AL 64 + A61 + A1 R h 3 = AL 62 + A63 + A3 .

En ce qui concerne la version 256 bits, les deux branches sont gardes spares durant le rebouclage pour obtenir la bonne taille de sortie, un mlange soprant en inversant certains registres la n de chaque tour. Une description visuelle dune tape est donne dans la gure 4.5 et les caractristiques compltes de la fonction RIPEMD-128 peuvent tre trouves dans [DBP96].

4.5.2

Scurit actuelle

Jusqu prsent, RIPEMD-128 et sa version 256 bits nont pas t attaques et peuvent donc tre considres comme sres. Les diffrences plus marques entre les deux branches semblent en effet grandement compliquer le travail du cryptanalyste. 37

Chapitre 4. Prsentation des fonctions de la famille MD-SHA


Ai3
L/R

Ai2 j
L/R

L/R

Ai1

L/R

Ai

L/R

n m w r t u s

128 16 32 4 4 16 64
Ai2
L/R L/R

Wi Kj

L/R
L/R < < < si

Ai1

L/R

Ai

L/R

Ai+1

L/R

F IG . 4.5 Une tape pour une branche de la fonction de compression de RIPEMD-128.

4.6
4.6.1

RIPEMD-160
Description

RIPEMD-160 [DBP96] est une fonction de hachage de 160 bits qui fut publie en mme temps que RIPEMD-128 et qui reprsente une version plus robuste en raison de sa taille de sortie plus grande, et aussi grce sa fonction de compression un peu plus complexe : un tour et un registre interne par branche sont rajouts. Comme pour RIPEMD-128, une version doublant la taille de sortie est dnie, permettant des hachs de 320 bits pour une scurit de 160 bits. Comme pour tous les membres de la famille RIPEMD, deux branches parallles sont utilises, mais chacune possdant cette fois r = 5 registres de w = 32 bits. On note AL i les registres cibles de la branche de gauche et AR ceux de la branche de droite. On initialise chaque i branche par la variable de chanage dentre :

> > >10 AL 4 = (h0 ) > > >10 AR 4 = (h0 )

> > >10 AL 3 = (h4 ) > > >10 AR 3 = (h4 )

> > >10 AL 2 = (h3 ) > > >10 AR 2 = (h3 )

AL 1 = h2 AR 1 = h2

AL 0 = h1 AR 0 = h1 .

chaque appel, m = 16 mots de message seront traits, avec t = 5 tours de u = 16 tapes chacun dans chaque branche (cest dire s = 80 tapes en tout). Comme pour RIPEMD-128, chaque tour j et pour chaque branche, des permutations de lordre des mots de message R et L sont dnies. Ainsi, nous avons pour la k -ime tape du tour j , avec 0 j j 4 et j 0 k 15 : WjL 16+k = M L (k)
j

WjR 16+k

= M R (k ) .
j

L et R sont dnies dans la section A.5 de lappendice. Comme dans Les permutations j j RIPEMD-128, chaque mot de M sera utilis une fois pour chaque tour dans chaque branche et lordonnancement des mots de message est diffrent dans les deux branches.

38

4.6. RIPEMD-160
R L Durant chaque tape i, les registres cibles AL i+1 et Ai+1 sont mis jour par les fonctions fj R , dpendantes du tour j auquel appartient i : et fj L L L L L L L L AL i+1 = fj (Ai , Ai1 , Ai2 , Ai3 , Ai4 , Wi , si )
< < <10 L L L < < <10 L < <si < < <10 = ((AL + L ) + WiL + Kj )< + (AL , i4 ) j (Ai , Ai1 , (Ai2 ) i3 ) L

R R R R R R R R AR i+1 = fj (Ai , Ai1 , Ai2 , Ai3 , Ai4 , Wi , si )


< < <10 R R R < < <10 R < <si < < <10 ) + WiR + Kj )< + (AR , = ((AR + R i4 ) j (Ai , Ai1 , (Ai2 ) i3 ) R

L et K R sont des constantes prdnies pour chaque tour et pour chaque branche, les o les Kj j L R si et si sont des valeurs de rotation prdnies pour chaque tape et pour chaque branche et R les fonctions L j et j sont des fonctions boolennes dnies pour chaque tour et pour chaque branche, et prenant 3 mots de 32 bits en entre (voir section A.5 de lappendice). En raison du rebouclage, la n des 80 tapes des deux branches, les mots de la sortie de la fonction de compression sont calculs par : R < < <10 h 0 = AL + A0 79 + (A78 )
< < <10 < < <10 < <10 h2 = (AL + (AR + (A2 )< 77 ) 76 ) < < <10 < < <10 h1 = (AL + (AR + A 1 78 ) 77 ) < < <10 < < <10 h3 = (AL + AR 76 ) 80 + (A3 )

R < < <10 h 4 = AL . 80 + A79 + (A4 )

Quant la version 320 bits, les deux branches sont gardes spares durant le rebouclage pour obtenir la bonne taille de sortie, un mlange soprant en inversant certains registres la n de chaque tour. Une description visuelle dune tape est donne dans la gure 4.6 et les caractristiques compltes de la fonction RIPEMD-160 peuvent tre trouves dans [DBP96].
Ai4
L/R

Ai3

L/R

Ai2
< < <10

L/R

Ai1

L/R

Ai

L/R

n m w r t u s

160 16 32 5 5 16 80
Wi Kj
L/R L/R

< < <10

L/R

L/R < < < si < < <10

Ai3

L/R

Ai2

L/R

Ai1

L/R

Ai

L/R

Ai+1

L/R

F IG . 4.6 Une tape pour une branche de la fonction de compression de RIPEMD-160.

4.6.2

Scurit actuelle

Avec son tat interne plus grand et un tour de plus, RIPEMD-160 semble un peu plus robuste que RIPEMD-128. Pour les mmes raisons que dans le cas de RIPEMD-128, aucune des versions de RIPEMD-160 na t attaque jusqu prsent. 39

Chapitre 4. Prsentation des fonctions de la famille MD-SHA

4.7
4.7.1

SHA-0
Description

Publi en 1993 [N-sha0], SHA-0 est le premier membre de la famille Secure Hash Standard, les fonctions de hachage standardises par le NIST. Trs inspire de celles de la famille MD, la fonction de compression de SHA-0 nen diffre quasiment que par lutilisation dune expansion de message novatrice : au lieu dutiliser des permutations des mots de message pour chaque tour, les mots de message tendu sont obtenus par un procd rcursif initialis par les mots du message dentre. Pour permettre une longvit sufsante de lalgorithme quant laugmentation de la puissance de calcul, SHA-0 produit des hachs de n = 160 bits pour un tat interne de r = 5 registres de w = 32 bits chacun, initialis par la variable de chanage dentre :
< <2 A4 = (h4 )< < <2 A3 = (h3 )< < <2 A2 = (h2 )<

A 1 = h 1

A0 = h 0 .

chaque appel, m = 16 mots de message seront traits, avec t = 4 tours de u = 20 tapes chacun (cest dire s = 80 tapes en tout). Lexpansion de message nutilise donc plus de permutation. Les 16 premiers mots du message tendu sont gaux aux 16 mots de message dentre de la fonction de compression. Le reste des Wi sont calculs par une formule de rcurrence : Mi , pour 0 i 15 Wi = Wi3 Wi8 Wi14 Wi16 , pour 16 i 79 Durant chaque tape i, la fonction fj , dpendante du tour j auquel i appartient, met jour le registre cible Ai+1 : Ai+1 = fj (Ai , Ai1 , Ai2 , Ai3 , Ai4 , Wi )
< <5 > >2 > >2 > >2 = (Ai )< + j (Ai1 , (Ai2 )> , (Ai3 )> ) + (Ai4 )> + W i + Kj ,

o les Kj sont des constantes prdnies pour chaque tour et les fonctions j sont des fonctions boolennes dnies pour chaque tour et prenant 3 mots de 32 bits en entre (voir section A.6 de lappendice). la n des 80 tapes, les mots de la sortie de la fonction de compression sont calculs par :

h0 = A80 + A0
> >2 > >2 h3 = (A77 )> + (A3 )>

h1 = A79 + A1
> >2 > >2 h4 = (A76 )> + (A4 )> .

> >2 > >2 h2 = (A78 )> + (A2 )>

Une description visuelle dune tape est donne dans la gure 4.7 et les caractristiques compltes de la fonction peuvent tre trouves dans [N-sha0].

4.7.2

Scurit actuelle

La fonction de hachage SHA-0 fut rapidement mise jour en 1995 pour donner naissance SHA-1 [N-sha1], sans quaucun dtail soit donn par la NSA quant aux vulnrabilits ventuelles. Un premier lment de rponse fut apport par Chabaud et Joux en 1998 [CJ98]. En effet, cette premire attaque thorique calculant des collisions pour SHA-0, dune complexit de 261 appels la fonction de compression, ne sapplique pas la version amliore SHA-1. On 40

4.7. SHA-0
Ai4 Ai3 Ai2 Ai1 Ai

n m w r t u s

160 16 32 5 4 20 80
Wi Kj

< < <30

< < <2 < < <2

< < <2

Ai3

Ai2

Ai1

Ai

Ai+1

F IG . 4.7 Une tape de la fonction de compression de SHA-0 ou de SHA-1.

peut donc penser que la NSA avait dj identi lun des problmes de SHA-0, savoir sa diffusion. Par comparaison la famille MD ou RIPEMD, le principe dune formule de rcurrence pour calculer les mots du message tendu semble une bonne ide. En termes de diffusion, de bien meilleures proprits sont obtenues. Par exemple, une perturbation sur un mot du message dentre M (modiant directement lun des premiers mots de W ) inuera trs rapidement sur lintgralit des mots suivants de W , ce qui nest pas vrai pour une permutation des mots de M par tour comme dans le cas des familles MD et RIPEMD. Cependant, dans le cas de SHA-0, cette diffusion ne sopre que sur une seule position de bit. Ainsi, si lon se cantonne ne modier M que sur une position j , cela naura des consquences que sur les bits en position j des mots de W . Cette faiblesse est directement corrige dans SHA-1, o une rotation est ajoute dans lexpansion de message.

Aprs cette premire attaque thorique pour la recherche de collisions, il fallut attendre plusieurs annes avant de voir progressivement apparatre de nouvelles amliorations. Tout dabord, Biham et Chen [BC04] introduisirent en 2004 la notion de bits neutres pour acclrer la recherche de collisions. Grce cette nouvelle technique, ils calculrent des presque collisions pour la fonction de compression. Ensuite, en 2005, en utilisant plusieurs blocs de message contenant des diffrences, Biham et al. [BCJ05] publirent la premire collision pour SHA-0 et apportrent ainsi une preuve pratique du bien-fond des hypothses des prcdents travaux. La complexit tant de lordre de 251 appels la fonction de compression, un trs grand nombre dordinateurs furent ncessaires pour trouver la collision en seulement trois semaines. Cette complexit fut amliore tout dabord par les travaux de Wang et al. [WYY05d], calculant des collisions pour une complexit annonce dapproximativement 239 appels la fonction de compression, puis par Naito et al. [NSS06]. Finalement, nous prsenterons dans cette thse la meilleure attaque connue ce jour [MP08], qui calcule des collisions en seulement une heure de calcul sur un ordinateur personnel (233 appels la fonction de compression). Mme si la rsistance de la fonction de compression quant la recherche de primages nest pour linstant toujours pas mise en dfaut, SHA-0 ne doit plus tre implante dans des applications cryptographiques. 41

Chapitre 4. Prsentation des fonctions de la famille MD-SHA

4.8
4.8.1

SHA-1
Description

SHA-1 est la version corrige de SHA-0, et fut publie en 1995 par le NIST [N-sha1]. Lexpansion de message mise part, la description de SHA-1 est absolument identique celle de SHA-0. La seule et unique diffrence consiste en une rotation dans la formule de rcurrence de lexpansion de message, ce qui implique une meilleure diffusion : Wi = Mi , < <1 (Wi3 Wi8 Wi14 Wi16 )< , pour 0 i 15 pour 16 i 79

Comme pour SHA-0, la description visuelle dune tape est donne dans la gure 4.7. Les caractristiques compltes de la fonction peuvent tre trouves dans [N-sha1].

4.8.2

Scurit actuelle

SHA-1 sembla rsister relativement bien aux attaques contre sa version antrieure SHA-0, seules des vulnrabilits sur des versions trs rduites furent publies [BCJ05]. Ceci tant d au fait que la diffusion des mots de message y est bien meilleure grce la rotation ajoute. Pour ces raisons, et cause des problmes de scurit rencontrs par les membres de la famille MD ou RIPEMD, SHA-1 est la fonction la plus implante et la plus utilise actuellement. Seulement, Wang et al. [WYY05b] surprirent toute la communaut de la recherche acadmique en cryptographie en exposant la premire attaque thorique contre SHA-1, en 269 appels la fonction de compression (amliore plus tard pour une complexit annonce de 263 appels la fonction de compression [WYY05a, WYY05c]). Cette attaque, assez complexe et difcile daccs, tait dautant plus surprenante quelle tait le fruit de plusieurs annes de recherche sans vraiment utiliser doutils informatiques. Plusieurs travaux sensuivirent pour essayer de mieux comprendre, thoriser, ou automatiser ces nouvelles attaques [CR06, JP07a]. prsent, la recherche de la premire collision relle est lun des principaux objectifs et un calcul distribu pour raliser ce but a rcemment t dmarr [MRR07] (pour une complexit annonce infrieure 261 appels la fonction de compression). Nous prsentons dans cette thse la meilleure attaque pratique [JP07c] qui calcule une collision sur une version rduite 70 tours de SHA-1 en moins de 4 jours sur un ordinateur personnel. Ainsi, mme si aucune collision sur la version complte na encore t trouve et mme si la rsistance en primage nest pour linstant toujours pas mise en dfaut, il est trs dconseill dutiliser SHA-1 dans une application cryptographique. Ceci explique en partie la dcision du NIST dorganiser un appel soumissions pour de nouvelles fonctions de hachage, dans le but de standardiser le futur SHA-3 [N-sha3].

4.9
4.9.1

SHA-256
Description

Publie en 2002 [N-sha2], SHA-256 fait partie des derniers membres en date de la famille MD-SHA. Outre sa taille de sortie, elle contient plusieurs nouveauts par rapport ses prdcesseurs. Par exemple, lexpansion de message est beaucoup plus complexe et corrige les prcdentes erreurs de SHA-0 ou SHA-1. De plus, la fonction dtape met jour deux registres la fois pour une meilleure diffusion. Nous notons dans la suite Ai et Bi ces registres 42

4.9. SHA-256 cibles. Aussi, il ny a plus rellement de notion de tour dans SHA-256, car les mmes fonctions boolennes sont utilises dans toutes les tapes. Comme son nom lindique, SHA-256 produit des hachs de n = 256 bits, mais il existe aussi une version 224 bits [N-sha2b] introduite 2 ans plus tard. On maintient donc un tat interne de r = 8 registres de w = 32 bits chacun, initialis par la variable de chanage dentre : A3 = h3 B3 = h7 A 2 = h 2 B2 = h6 A1 = h1 B1 = h5 A0 = h 0 B0 = h4 .

chaque appel, m = 16 mots de message seront traits, avec s = 64 tapes (on peut noter t = 1 et u = 64 dans notre formalisme). Lexpansion de message est beaucoup plus complexe que dans les autres versions de SHA, mais utilise toujours une formule de rcurrence : Wi = Mi , 1 (Wi2 ) + Wi7 + 0 (Wi15 ) + Wi16 , avec pour 0 i 15 pour 16 i 63

> >7 > >18 >3 0 (x) = (x> ) (x> ) (x> ) > > >17 > > >19 >10 1 (x) = (x ) (x ) (x> ).

Durant chaque tape i, les registres cibles Ai+1 et Bi+1 sont mis jour par les fonctions f et g respectivement : Ai+1 = f (Ai , Ai1 , Ai2 , Ai3 , Bi , Bi1 , Bi2 , Bi3 , Wi , Ki ) = 0 (Ai ) + MAJ(Ai , Ai1 , Ai2 ) + Bi3 + 1 (Bi ) + IF(Bi , Bi1 , Bi2 ) + Wi + Ki , Bi+1 = g (Ai , Ai1 , Ai2 , Ai3 , Bi , Bi1 , Bi2 , Bi3 , Wi , Ki ) = Ai3 + Bi3 + 1 (Bi ) + IF(Bi , Bi1 , Bi2 ) + Wi + Ki , o les Ki sont des constantes prdnies pour chaque tape et les fonctions MAJ et IF sont des fonctions boolennes dnies en section A de lappendice. Les fonctions 0 et 1 sont dnies par :
> >2 > >13 >22 0 (x) = (x> ) (x> ) (x> ) > >6 > >11 >25 1 (x) = (x> ) (x> ) (x> ).

la n des 64 tapes, les mots de la sortie de la fonction de compression sont calculs par : h0 = A64 + A0 h4 = B64 + B0 h1 = A63 + A1 h5 = B63 + B1 h2 = A62 + A2 h6 = B62 + B2 h3 = A61 + A3 h7 = B61 + B3 .

La version 224 bits ne diffre de la version 256 bits que par ses valeurs dinitialisation diffrentes et par sa troncature la n de la fonction de compression, an dobtenir la bonne taille de sortie (le dernier bloc h7 est retir). Une description visuelle dune tape est donne dans la gure 4.8 et les caractristiques compltes de la fonction 256 bits peuvent tre trouves dans [N-sha2] et dans [N-sha2b] pour la fonction 224 bits. 43

Chapitre 4. Prsentation des fonctions de la famille MD-SHA


Ai3 Ai2 Ai1 Ai Bi3
IF

Bi2

Bi1

Bi

n m w r t u s

256 16 32 8 1 64 64
M A J

Wi Ki 1

Ai2

Ai1

Ai

Ai+1

Bi2

Bi1

Bi

Bi+1

F IG . 4.8 Une tape de la fonction de compression de SHA-256.

4.9.2

Scurit actuelle

Pour linstant, aucune attaque na t publie pour la version complte de SHA-256. Les essais des cryptologues ne portant que sur des versions trs rduites [GH03, MPR06, NB08, IMP08, SS08]. Ceci peut sexpliquer par la nette amlioration de scurit apporte par SHA-256 par rapport ses anctres de la famille SHA. La mise jour de deux registres par tape permet une bien meilleure diffusion, mais surtout lexpansion de message nest plus linaire dans F2 comme cela tait le cas dans SHA-0 ou SHA-1. En effet, lutilisation dadditions modulaires rend le processus non linaire dans F2 et complique grandement le contrle du message tendu pour un attaquant. Au contraire, la perte de la notion de tour (et de lemploi de fonctions boolennes diffrentes chaque tour) semble faciliter le travail de lattaquant. Mais cette volution parait logique puisque lattention a t porte sur lintgration des mots de message qui fut largement sous-estime par le pass, compare au traitement assez robuste de la variable de chanage. Bien quaucune attaque nait encore t trouve, on peut se poser la question de la scurit inhrente aux membres de la famille MD-SHA du fait de leur pass tumultueux. Limplantation de SHA-256 dans des applications cryptographiques nest pas proscrire, mais par mesure de prcaution le NIST anticipe de futures avances en organisant un appel soumission pour de nouvelles fonctions de hachage, dans le but de standardiser le futur SHA-3 [N-sha3]. Cela permettra des fonctions de hachage trs diffrentes de MD-SHA de pouvoir peut-tre simposer comme nouveau standard.

4.10
4.10.1

SHA-512
Description

SHA-512 fut publie en mme temps [N-sha2] que SHA-256 et reprsente son quivalent pour les processeurs 64 bits, qui vont progressivement remplacer ceux de 32 bits dans les ordinateurs. Les mots traits seront donc de taille 64 bits pour proter pleinement de cette nou44

4.10. SHA-512 velle architecture. Les autres diffrences par rapport SHA-256 concernent la taille de sortie, qui est double pour obtenir une fonction viable sur le trs long terme, et le nombre dtapes qui est augment. Ainsi, SHA-512 produit des hachs de n = 512 bits, mais une version 384 bits [N-sha2] fut aussi introduite en mme temps. Comme pour SHA-256, deux registres sont mis jour durant une tape de SHA-512 et nous notons Ai et Bi ces registres cibles. On maintient donc un tat interne de r = 8 registres de w = 64 bits chacun, initialis par la variable de chanage dentre : A3 = h3 B3 = h7 A 2 = h 2 B2 = h6 A1 = h1 B1 = h5 A0 = h 0 B0 = h4 .

chaque appel, m = 16 mots de message sont traits, avec s = 80 tapes (t = 1 et u = 80 dans notre formalisme). Lexpansion de message, toujours de type rcursif, est similaire celle de SHA-256 except les fonctions 0 et 1 : Wi = Mi , 1 (Wi2 ) + Wi7 + 0 (Wi15 ) + Wi16 , avec pour 0 i 15 pour 16 i 79

> >1 > >8 >7 0 (x) = (x> ) (x> ) (x> ) > > >19 > > >61 > >6 1 (x) = (x ) (x ) (x ).

De la mme faon que dans SHA-256, durant chaque tape j , les registres cibles Aj +1 et Bj +1 sont mis jour par les fonctions f et g respectivement : Ai+1 = f (Ai , Ai1 , Ai2 , Ai3 , Bi , Bi1 , Bi2 , Bi3 , Wi , Ki ) = 0 (Ai ) + MAJ(Ai , Ai1 , Ai2 ) + Bi3 + 1 (Bi ) + IF(Bi , Bi1 , Bi2 ) + Wi + Ki , Bi+1 = g (Ai , Ai1 , Ai2 , Ai3 , Bi , Bi1 , Bi2 , Bi3 , Wi , Ki ) = Ai3 + Bi3 + 1 (Bi ) + IF(Bi , Bi1 , Bi2 ) + Wi + Ki , o les Ki sont des constantes prdnies pour chaque tape et les fonctions MAJ et IF sont des fonctions boolennes dnies en section A de lappendice. Les fonctions 0 et 1 sont diffrentes de celles qui sont utilises dans SHA-256 et sont dnies par :
> >28 > >34 >39 0 (x) = (x> ) (x> ) (x> ) > >14 > >18 >41 1 (x) = (x> ) (x> ) (x> ).

Enn, du fait du rebouclage, la n des 80 tapes, les mots de la sortie de la fonction de compression sont calculs par : h0 = A80 + A0 h4 = B76 + B0 h1 = A79 + A1 h5 = B75 + B1 h2 = A78 + A2 h6 = B74 + B2 h3 = A77 + A3 h7 = B73 + B3 .

La version 384 bits ne diffre de la version 512 bits que par ses valeurs dinitialisation diffrentes et par sa troncature la n de la fonction de compression, pour ainsi obtenir la bonne taille de sortie (les deux derniers blocs h6 et h7 sont retirs). Une description visuelle dune tape est donne dans la gure 4.9 et les caractristiques compltes des deux versions de la fonction peuvent tre trouves dans [N-sha2]. 45

Chapitre 4. Prsentation des fonctions de la famille MD-SHA


Ai3 Ai2 Ai1 Ai Bi3
IF

Bi2

Bi1

Bi

n m w r t u s

512 16 64 8 1 80 80
M A J

Wi Ki 1

Ai2

Ai1

Ai

Ai+1

Bi2

Bi1

Bi

Bi+1

F IG . 4.9 Une tape de la fonction de compression de SHA-512.

4.10.2

Scurit actuelle

Les remarques quant la scurit de SHA-256 sont tout aussi valables pour SHA-512, mme si laugmentation du nombre dtapes et la plus grande taille de sortie semblent la rendre encore plus rsistante des attaques pratiques. Ainsi, SHA-512 peut pour linstant toujours tre utilise dans des applications cryptographiques.

46

C HAPITRE 5

Historique de la cryptanalyse des fonctions de la famille SHA


Sommaire
5.1 5.2 Structure gnrale de la cryptanalyse dune fonction de hachage . . . Premires attaques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.1 Les collisions locales . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.2 Conditions sur le masque de perturbation . . . . . . . . . . . . . 5.2.3 Attaque de la vraie fonction de compression de la famille SHA 5.2.4 Rechercher une paire de messages valide . . . . . . . . . . . . . 5.2.5 Les bits neutres . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.6 Lattaque multiblocs . . . . . . . . . . . . . . . . . . . . . . . . . Attaques de Wang et al. . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.1 La modication de message . . . . . . . . . . . . . . . . . . . . . 5.3.2 La partie non linaire . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.3 La recherche de vecteurs de perturbation pour SHA-1 . . . . . . 5.3.4 Une analyse plus ne des conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 52 52 54 55 58 60 62 64 65 67 69 76

5.3

Nous tudions dans ce chapitre les diffrentes cryptanalyses qui sont apparues contre les fonctions de la famille SHA. Bien que les attaques contre les autres membres de la famille MD-SHA soient trs similaires tant donn le noyau de construction commun, nous ne les dcrirons pas ici. Nous considrerons des techniques gnriques de cryptanalyse, mais aussi et surtout les spcicits de SHA-0 et SHA-1. Sauf indication contraire, nous utilisons donc dans ce chapitre les paramtres de SHA-0 et SHA-1.

5.1

Structure gnrale de la cryptanalyse dune fonction de hachage

Tout dabord, il nous faut expliciter les diffrentes manires possibles daborder la cryptanalyse. Nous cherchons attaquer une fonction de hachage, ce qui peut tre interprt de diffrentes manires. Ici, nous nous intresserons exclusivement des attaques o lon cherche mettre en dfaut la rsistance en collision. Les fonctions de hachage de la famille MD-SHA utilisant le procd de Merkle-Damgrd comme algorithme dextension de domaine, toute la scurit repose sur la fonction de compression. Comme expliqu prcdemment, il doit ainsi 47

Chapitre 5. Historique de la cryptanalyse des fonctions de la famille SHA tre impossible pour un attaquant de calculer une pseudo-collision sur la fonction de compression, et plus gnralement il doit tre impossible pour lui de calculer deux messages qui aboutissent deux hachs dont la diffrence est prvue. Introduisons le principal outil utilis par les cryptanalystes des fonctions de hachage : le chemin diffrentiel ou caractristique diffrentielle dnit les diffrences qui seront introduites dans le message et la variable de chanage et celles attendues dans les registres internes chaque tape durant la recherche de collisions. Plus gnralement, le chemin diffrentiel peut aussi indiquer les valeurs de certains bits ou xer certaines conditions entre certains bits en plus des diffrences. Ainsi, cet outil est la base de travail lorsque lon souhaite partir dun masque de diffrences choisi (un ensemble de conditions imposes sur la diffrence) dans la variable de chanage et aboutir un autre masque de diffrences choisi en sortie de la fonction. Le rebouclage de la variable de chanage (feedforward) nest pour linstant pas considr ici, le chemin diffrentiel ne concernera que le chiffrement par blocs interne. Il existe plusieurs faons de conceptualiser un chemin diffrentiel, aucune nest parfaite. Dabord, les diffrences considres sont multiples : pour compliquer la cryptanalyse et viter de simples attaques algbriques, les oprations de base utilises dans la famille MD-SHA sont volontairement incompatibles. Par exemple, une diffrence sur une addition modulaire (dans Z2w ) ne se comportera pas de la mme faon quune diffrence binaire (dans Fw 2 ). Pour clarier, nous introduisons les types de diffrences utilises : La diffrence binaire entre deux nombres X {0, 1}w et Y {0, 1}w est dnie par le vecteur (X, Y ) {0, 1}w calcul par (X, Y ) = X Y . La diffrence additive (ou modulaire) entre deux nombres X {0, 1}w et Y {0, 1}w est dnie par (X, Y ) = X Y . Nous avons 2w < (X, Y ) < 2w . La diffrence binaire signe entre deux nombres X {0, 1}w et Y {0, 1}w utilise un ensemble de trois chiffres {1, 0, 1}. La paire (X, Y ) a une diffrence binaire signe (X, Y ) = (X 0 Y 0 , X 1 Y 1 , . . . , X w1 Y w1 ), cest--dire le i-ime chiffre de la diffrence est le rsultat de la soustraction des i-imes bits correspondants de X and Y . Pour reprsenter un chemin diffrentiel, nous utilisons la notation de [CR06], explicite dans le tableau 5.1. Relativement simple et claire pour utiliser la diffrence binaire ou binaire signe, elle prsente nanmoins le dsavantage de ne pas prendre en compte les conditions entre deux bits de positions diffrentes. En fait, cette reprsentation permet daller plus loin quune diffrence binaire signe puisque nimporte quel type de condition est pris en compte pour un couple de bits sur la mme position. Ainsi, on note (X, Y ) une caractristique diffrentielle pour un couple de mots de w bits X et Y . Par exemple, si w = 8, la diffrentielle (X, Y ) = {(X, Y ) | X 7 Y 7 = 0, X i = Y i pour 2 i 5, X 1 = Y 1 , X 0 = Y 0 = 0}

sera reprsente par (X, Y ) = [7 ?---x0]. Nous notons X la diffrence attendue sur un mot X et X le couple de mots (X, X ). Un tel couple satisfait la diffrence attendue si nous avons X X , cest--dire que la diffrence entre les mots X et X est lune des diffrences valides de X . Une caractristique diffrentielle pour une itration de la fonction de compression de SHA-0 ou de SHA-1 sera donc une collection A4 , . . . , A80 et W0 , . . . , W79 . Une paire de messages est i-valide pour un chemin diffrentiel (ou satisfait un chemin diffrentiel jusqu ltape i) si A A ,...,A Ai+1 4 4 i+1 W W0 , . . . , W W79
0 79

48

5.1. Structure gnrale de la cryptanalyse dune fonction de hachage (x, x ) ? x 0 u n 1 # (0, 0) (1, 0) (0, 1) (1, 1) (x, x ) 3 5 7 A B C D E (0, 0) (1, 0) (0, 1) (1, 1) -

TAB . 5.1 Notations utilises dans [CR06] pour reprsenter un chemin diffrentiel : x dsigne un bit du premier message et x dsigne le mme bit pour le deuxime message du couple. et une paire de messages est valide si elle est 79-valide dans le cas de SHA-0 et SHA-1. Supposons quun chemin diffrentiel nous soit donn. Il est possible dvaluer leffort en termes de calculs pour trouver une paire de messages vriant ce chemin laide dun algorithme trs simple de type profondeur en premier, xant les mots de message un par un en commenant par M0 [CR06]. Pour cela, il nous faut calculer le nombre moyen de noeuds visits dans larbre de recherche. Commenons par introduire quelques dnitions, provenant de larticle original de De Cannire et Rechberger [CR06] : Dnition 1 Le degr de libert L(i) dun chemin diffrentiel ltape i est gal au nombre de faons de choisir Wi Wi sans violer de conditions linaires imposes par le calcul du message tendu, tant donn des valeurs xes de Wj pour 0 j < i. Puisque le message tendu est totalement dtermin par les 16 premiers mots dans le cas de SHA-0 ou SHA-1, nous avons L(i) = 1 pour i 16. Dnition 2 La probabilit incontrle Pi (i) dun chemin diffrentiel ltape i est la probabilit que la sortie Ai+1 de ltape i soit valide pour ce chemin sachant que les mots dentre de cette tape sont aussi valides pour ce chemin : Pi (i) = P (Ai+1 Ai+1 | Aij Aij pour 0 j < 5 et Wi Wi ).

Cette dnition nous permet de facilement exprimer le nombre Ne (i) de noeuds visits chaque tape de la fonction de compression lors de la recherche dune paire de messages valide. Le nombre moyen de ls dun noeud ltape i est gal L(i) Pi (i). Ainsi, lorsque lon calcule le nombre de noeuds parcourir en moyenne en remontant les tapes, pour une tape i nous avons Ne (i) = Ne (i + 1) L1 (i) Pi1 (i). La recherche tant nie une fois arrive ltape s 1 = 79, on obtient alors la relation rcursive suivante :

Dans larticle original [CR06], les auteurs ont essay dintroduire une notion supplmentaire (la probabilit

49

Chapitre 5. Historique de la cryptanalyse des fonctions de la famille SHA

1 Ne (i) = Ne (i + 1) L1 (i) P 1 (i)


i

si i = s 1, si i < s 1,

et le nombre total de noeuds parcourus est gal


s 1

NT =
i=0

Ne (i).

An de faciliter la comprhension de ces diffrentes valeurs, nous donnons dans la gure 5.1 et 5.2 des exemples de chemins diffrentiels peu labors pour SHA-0. Pour plus de lisibilit, les probabilits Pi (i), les degrs de libert L(i) et les nombres de noeuds Ne (i) y sont donns en base logarithmique 2. Le premier chemin reprsente une caractristique trs simple o nous nimposons que la condition suivante : nous souhaitons obtenir une collision (aucune diffrence dans les 5 derniers registres mis jour) partir de la vritable valeur dinitialisation de la premire variable de chanage pour SHA-0 ou SHA-1. On remarque que lon doit alors parcourir plus de 2160 noeuds pour trouver une collision. Dans la deuxime gure, le nombre de noeuds parcourir est trs largement rduit grce quelques conditions imposes sur les registres internes et sur les mots de message tendu. La mthode de recherche de ces conditions sera explicite par la suite. On peut toutefois dj observer que les degrs de libert peuvent tre utiliss pour vrier les conditions dans les registres et ainsi potentiellement rduire le cot total de lattaque. De plus, le nombre de noeuds visiter est ncessairement croissant de ltape 79 ltape 15 puisquaucun degr de libert nest alors disponible, et Ne (16) sera en pratique presque toujours le terme maximal parmi les Ne (i) (ainsi NT Ne (16)). Les probabilits faibles sont donc moins contrariantes sur les 16 premires tapes que sur le reste de la fonction de compression, car les mots de messages sont dans ce cas entirement contrls par lattaquant. La condition Ne (s 1) = 1 dans notre mthode nous indique que nous calculons le nombre de noeuds visiter pour trouver une seule paire de messages vriant le chemin diffrentiel. Il est galement possible de gnraliser ce calcul pour trouver a paires valides distinctes en 1 (0) qui reposant Ne (s 1) = a. Ceci nous permet aussi de mieux cerner la signication de Ne prsente le nombre total de paires de messages valides que lon peut engendrer avec le chemin diffrentiel considr. Nous pouvons aussi considrer que cela reprsente le nombre de degrs de libert non utiliss pour rechercher une paire de messages. Il faut noter que la visite dun noeud ne correspond pas forcment au calcul complet dune itration de la fonction de compression. Il est donc prmatur de dire qutant donn un chemin diffrentiel, la complexit en temps pour trouver une paire de messages valide pour ce chemin est exactement gale NT appels la fonction de compression. Il faudra au pralable mesurer le cot moyen de parcours dun noeud, soit de manire thorique, soit de manire exprimentale. Une fois le chemin diffrentiel tabli, il reste lattaquant rechercher une paire de messages vriant ce chemin, ce qui constitue en gnral lessentiel de la complexit de lattaque. Ceci peut tre fait par la mthode trs simple dcrite prcdemment, mais de bien meilleures techniques sont possibles. Cette partie dacclration de recherche est quelquefois imbrique
contrle) pour prendre en compte certains cas particuliers darbres de recherche. Leur expression du nombre de noeuds parcourir dpend la fois de la probabilit contrle et de la probabilit incontrle. Cependant, dans les situations que lon considre, les deux expressions sont quivalentes et aboutissent la mme complexit nale de lattaque.

50

5.1. Structure gnrale de la cryptanalyse dune fonction de hachage


i -4 : -3 : -2 : -1 : 00 : 01 : 12 : 13 : 14 : 15 : 16 : 17 : 75 : 76 : 77 : 78 : 79 : 80 : Ai 00001111010010111000011111000011 01000000110010010101000111011000 01100010111010110111001111111010 11101111110011011010101110001001 01100111010001010010001100000001 ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? -----------------------------------------------------------------------------------------------------------------------------------------------------------Wi L(i) Pi (i) Ne (i)

???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ????????????????????????????????

64 64 64 64 64 64 0 0 0 0 0 0 0

0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -32.00 -32.00 -32.00 -32.00 -32.00

0.00 0.00 0.00 0.00 32.00 96.00 160.00 160.00 160.00 128.00 96.00 64.00 32.00

F IG . 5.1 Un premier chemin diffrentiel peu labor pour SHA-0.


i Ai 01100111010001010010001100000001 ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ---------------------------------------------------------------------------------------------------------------------------x-------------------------------------------------------------x------------------------------x ---------------------------------------------------------------------------------------------------------------------------x------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------------------------Wi -------------------------------------------------------------- x------------------------x-----------------------------------xx------------------------------x------------------------------x--------------------------------------------------------------------------------------------------------------------------x-------------------------x------------------------------------x------------------------x----xx------------------------x----- ------------------------------xx------------------------------x-----------------------------xx------------------------x-----------------------------------x ----------------------------------------------------------------------------------------------------------------------------L(i) Pi (i) Ne (i)

00 : 01 : 07 : 08 : 09 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : 18 : 43 : 44 : 45 : 46 : 47 : 76 : 77 : 78 : 79 : 80 :

32 32 32 32 32 32 32 32 32 32 32 0 0 0 0 0 0 0 0 0 0 0 0

0.00 0.00 0.00 0.00 0.00 0.00 -32.00 -32.00 -32.00 -32.00 -32.00 -2.00 -3.00 -4.00 -2.00 -1.00 -2.00 -1.00 -2.00 0.00 0.00 0.00 0.00

-255.00 -223.00 -31.00 1.00 33.00 65.00 97.00 97.00 97.00 97.00 97.00 97.00 95.00 92.00 59.00 57.00 56.00 54.00 53.00 0.00 0.00 0.00 0.00

F IG . 5.2 Un chemin diffrentiel plus labor pour SHA-0.

dans ltablissement du chemin diffrentiel et permet trs souvent une importante rduction de la complexit de lattaque. Cependant, la rapidit vient au dtriment de la facilit de descrip51

Chapitre 5. Historique de la cryptanalyse des fonctions de la famille SHA tion de lattaque et les techniques sont parfois tellement sophistiques que des erreurs sur des travaux publis peuvent rester plusieurs mois sans tre dtectes [LL05, YS05]. Notamment, nous avons dcouvert plusieurs nouvelles erreurs dans les travaux de Wang et al. [WYY05b, WYY05a] durant la rdaction de cette thse. Nous verrons aussi que lacclration de recherche a des limites, gnralement imposes par la consommation trop importante des degrs de libert. Ceci montre toute la complexit de lapproche du problme, o lattaquant se doit parfois de choisir entre un chemin diffrentiel ayant une relativement faible valeur NT , mais peu de degrs de libert (ce qui est souvent la meilleure stratgie), et un autre chemin ayant une valeur NT plus importante, mais permettant potentiellement une meilleure acclration grce un plus grand nombre de degrs de libert. Comme nous allons le voir, le cheminement historique des attaques contre les fonctions de hachage de la famille MD-SHA est marqu par des amliorations ponctuelles dun ou des deux outils de la cryptanalyse dune fonction de compression : ltablissement dun chemin diffrentiel et lacclration de la recherche de messages. Lamlioration de la comprhension des techniques donne la chance aux cryptanalystes de mieux mesurer la complexit de lapproche gnrale et lon peut supposer que lon verra apparatre dans le futur des mthodes qui permettent de choisir de faon automatise la meilleure stratgie possible.

5.2

Premires attaques

La premire attaque que nous allons dtailler fut publie en 1998 par Chabaud et Joux contre SHA-0 et reprsente lune des bases de la cryptanalyse moderne des fonctions de hachage. Relativement simple, cette attaque constitue nanmoins le squelette de toutes les attaques contre la famille SHA dcrites ultrieurement dans cette thse. Cette mthode utilise la diffrence binaire comme base de raisonnement pour simplier le schma, et considre ensuite la diffrence binaire signe pour amliorer la complexit. Ainsi, une diffrence, note x dans notre formalisme, a un sens et peut tre une diffrence montante n ou descendante u. Comme expliqu prcdemment, SHA-0 comporte des oprations incompatibles, ce qui complique grandement lanalyse. La premire tape de lattaque est de commencer par simplier lanalyse de lalgorithme en partant dun schma modi, puis de se rapprocher graduellement du schma original en corrigeant lattaque si ncessaire.

5.2.1

Les collisions locales

La diffrence binaire est trs facile tudier et peut constituer un premier point dappui pour le cryptanalyste. Ainsi, nous partons dun schma entirement linaire dans F32 2 en modiant les composantes non linaires : les additions modulaires sont transformes en ou exclusif bit bit et les fonctions boolennes MAJ et IF sont remplaces par la fonction XOR, dnie en appendice. Ce processus, appel linarisation de la fonction, aboutit donc la formule de mise jour suivante pour ltape i du tour k :
< <5 > >2 > >2 > >2 Ai+1 = (Ai )< Ai1 (Ai2 )> (Ai3 )> (Ai4 )> Wi Kk .

La deuxime ide de lattaque est dutiliser des collisions locales. Si lon introduit une diffrence a dans un mot du message, cette perturbation va ensuite simmiscer dans le prochain registre mis jour. Si aucune diffrence nest introduite dans les prochains mots du message, a va se propager dans les registres mis jour suivants et crer de nouvelles diffrences qui vont 52

5.2. Premires attaques leur tour se propager, etc. Bien videmment, ce comportement de diffusion des diffrences doit tre rapide dans une fonction de hachage pour viter des attaques o lon nintroduirait que trs peu de diffrences. Essayons prsent de compenser cette diffusion rapide en introduisant ds que possible les corrections adquates dans les mots de message qui suivent lintroduction de a. Supposons quaucune diffrence nest prsente dans les registres Ai4 , . . . , Ai et que lon introduit une premire diffrence binaire sur le mot Wi au niveau du bit j . ltape i, le registre Ai+1 sera mis jour et la diffrence sur Wij va sy propager. Le schma tant totalement linaris (les additions modulaires sont transformes en ou exclusif bit bit), la diffrence se propaj gera au bit Aj i+1 seulement. ltape suivante, la diffrence sur le bit Ai+1 va, en labsence de toute autre modication des entres de cette tape, se propager au prochain registre mis jour Ai+2 ; mais si lon introduit une nouvelle diffrence sur Wi+1 au niveau du bit j + 5 ( cause de la rotation de 5 positions sur Ai+1 ) alors les diffrences sannuleront et aucune diffrence ne sera prsente dans le registre Ai+2 . On continue de la mme manire aux tapes suivantes en 2 2 2 corrigeant Ai+3 , Ai+4 , Ai+5 et Ai+6 par Wij+2 , Wij+3 , Wij+4 et Wij+5 respectivement. Une fois le registre Ai+6 corrig ltape i + 5, la diffrence initiale dans le registre Ai+1 ne sexprimera plus par la suite. Nous avons donc cr une collision dans ltat interne sur ces quelques tapes en corrigeant exactement la diffusion de la perturbation introduite. Un tel motif est appel une collision locale et est dcrit dans la gure 5.3. On peut remarquer que si la perturbation se trouve en position j , les corrections se feront sur les positions j + 5, j et j 2 des mots de message tendu.
i Ai ------------------------------------------------------------------------------------------------------------------x--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Wi -----------------------------------------------------------------------------------x-------------------------x-----------------------------------x--------------------------------x------------------------------x------------------------------x---------------------------------------------------------------------

i2 i1 i i+1 i+2 i+3 i+4 i+5 i+6 i+7

F IG . 5.3 Une collision locale la position de bit j = 10.

Crer une collision locale est simple, mais cela ne suft pas construire une collision sur lensemble de la fonction puisque lattaquant na pas un contrle total sur les mots de message tendu, contrle qui pourrait sembler ncessaire pour raliser les corrections de la perturbation. cause de lexpansion de message, crer une collision locale une certaine tape impliquera srement lintroduction de diffrences non contrles dautres moments du calcul du hach, et ces nouvelles perturbations auront une trs faible probabilit dtre elles-mmes corriges. Il nous faut donc prcisment prvoir lintroduction des perturbations et des corrections dans tout le message tendu, de telle sorte que lexpansion de message entire dessine un motif de collisions locales imbriques, o chaque perturbation introduite est parfaitement corrige. Pour cela, on peut utiliser deux proprits de lexpansion de message de SHA-0 : sa linarit et le fait quil ny ait aucune rotation dans le calcul des mots de message tendu. Ainsi, les bits des mots de message tendu en position j voluent indpendamment de ceux en une position k = j . On 53

Chapitre 5. Historique de la cryptanalyse des fonctions de la famille SHA peut donc grandement simplier lanalyse puisquun raisonnement sur une seule position de bit est prsent possible : si nous introduisons les perturbations sur la position j uniquement, et si ces perturbations vrient lquation de rcurrence dexpansion de message pour SHA-0 Wi = Wi3 Wi8 Wi14 Wi16 alors nous aurons un motif de diffrences sur les mots de message tendu qui reprsente une succession de perturbations et les corrections appropries sur les bits en positions j + 5, j et j 2, et le tout vriant lexpansion de message. On appelle masque de perturbation ou vecteur de perturbation le vecteur qui dnit les tapes o des perturbations sont introduites (chaque perturbation correspondant une collision locale entire, avec les corrections adquates). partir dun masque de perturbation, le chemin diffrentiel correspondant sur les registres internes et sur les mots de message tendu peut tre entirement dduit.

5.2.2

Conditions sur le masque de perturbation

Un vecteur de perturbation vrie lexpansion de message et par consquent, nous avons seulement 216 candidats diffrents (lexpansion de message sur une position de bit est totalement dnie par les 16 premires tapes). Nanmoins, les candidats ne seront pas tous valides, car aucune perturbation tronque ne doit tre prsente. Une perturbation tronque est une perturbation qui apparat virtuellement dans une tape antrieure la premire tape de la fonction de compression. Le vecteur de perturbation peut en effet prendre en compte le cas o une perturbation est insre avant la premire tape et appliquer ainsi les corrections ncessaires (dont certaines seront prsentes dans les premires tapes de la fonction de compression). Aucune diffrence nest pourtant prsente dans la variable de chanage dentre et des corrections non voulues introduiront de nouvelles diffrences non corriges. Cette situation doit tre vite. Pour cela, on peut calculer lenvers la formule dexpansion de message pour le vecteur de perturbation et vrier quaucune perturbation napparat dans les 5 premires tapes virtuelles antrieures la premire tape de la fonction de compression. Nous pouvons dnir le masque de perturbation comme un vecteur de 85 bits M P5 , . . . , M P79 o M Pi impose linsertion dune perturbation ltape i et nous avons : Contrainte 1 Le vecteur de perturbation ne doit comporter aucune perturbation tronque : M P5 = . . . = M P1 = 0. En plus de cette premire contrainte, une condition supplmentaire doit tre satisfaite par les masques de perturbation. En effet, nous cherchons une collision la n des 80 tapes, ce qui nous impose de navoir aucune perturbation partir de ltape 75 puisquune collision locale entire ncessite en tout 6 tapes. Dans le cas contraire, une telle perturbation ne pourrait tre corrige totalement avant la n du calcul de la fonction de compression, et au moins une diffrence serait prsente en sortie. Nous avons donc : Contrainte 2 Le vecteur de perturbation ne doit comporter aucune perturbation non entirement corrige : M P75 = . . . = M P79 = 0. Seulement 128 masques de perturbation sur les 216 initiaux vrient les deux contraintes et en utilisant le chemin diffrentiel dni par lun de ces masques, le calcul dune collision 54

5.2. Premires attaques est immdiat, car le schma simpli que nous considrons est totalement linaire (chacun des 128 vecteurs conduit un chemin diffrentiel avec Ne (i) = 1 pour tout i, puisque nous avons P (i) = 1 chaque tape).

5.2.3

Attaque de la vraie fonction de compression de la famille SHA

Nous avons utilis la diffrence binaire pour trouver une cryptanalyse dune version linarise de SHA-0. Cependant, la fonction de compression nest pas F32 2 -linaire et il nous faut prsent rintroduire les lments rels, tels que laddition modulaire et les fonctions boolennes MAJ et IF. Dans larticle original de Chabaud et Joux, la rintroduction est trs progressive, mais nous tudions ici directement la fonction de compression relle de SHA-0. La diffrence binaire signe sera considre la place du ou exclusif , et nous allons voir que plusieurs nouveaux effets sont maintenant prendre en compte. En fait, nous passons dune attaque dterministe pour le schma simpli une attaque probabiliste pour le schma rel : les lments que nous avions remplacs se comporteront de faon linaire avec une certaine probabilit. Examinons tout dabord les fonctions boolennes. Deux tours sur les quatre utilisent la fonction XOR et ne ncessitent donc pas danalyse particulire (tout se comporte comme prvu avec probabilit 1). Les fonctions IF et MAJ ncessitent toutefois une analyse plus approfondie. Nous allons distinguer plusieurs cas diffrents suivant le nombre de diffrences en entre de la fonction boolenne sur une position de bit (trois bits en entre donc huit cas au total), ce nombre tant identique que lon considre les diffrences binaires ou celles binaires signes. Il est vident que lorsquaucune diffrence nest prsente en entre, les fonctions boolennes IF et MAJ se comportent comme la fonction XOR avec probabilit 1 puisquaucune diffrence ne sera cre. Nous pouvons donc exclure ce cas et il nous reste sept situations tudier : Situation 1 Seul le premier bit dentre de la fonction boolenne contient une diffrence. Situation 2 Seul le deuxime bit dentre de la fonction boolenne contient une diffrence. Situation 3 Seuls le premier et le deuxime bit dentre de la fonction boolenne contiennent une diffrence. Situation 4 Seul le troisime bit dentre de la fonction boolenne contient une diffrence. Situation 5 Seuls le premier et le troisime bit dentre de la fonction boolenne contiennent une diffrence. Situation 6 Seuls le deuxime et le troisime bit dentre de la fonction boolenne contiennent une diffrence. Situation 7 Tous les bits dentre de la fonction boolenne contiennent une diffrence. Pour toutes ces situations, il nous faut analyser si la propagation des diffrences se fait correctement (comme dans le cas du ou exclusif ) pour les fonctions boolennes IF et MAJ. De plus, si une diffrence doit apparatre en sortie de la fonction boolenne, il faut prendre en compte son signe pour corriger de manire approprie durant laddition avec une diffrence de signe oppos (mme pour la fonction boolenne XOR). Nous avons ainsi deux types deffet tudier : la propagation et laddition des diffrences binaires signes. 55

Chapitre 5. Historique de la cryptanalyse des fonctions de la famille SHA On peut se rendre compte quil est impossible davoir une diffrence la fois sur le premier et sur le deuxime bit dentre de la fonction boolenne (ou sur le premier et sur le troisime bit), car ils sont situs des positions diffrentes et nous avons conn les perturbations une seule position de bit. Ainsi, les situations 3, 5 et 7 sont impossibles et seules les situations 1, 2, 4 et 6 sont considrer . Par symtrie, les situations 2 et 4 sont quivalentes pour la fonction IF ; les situations 1, 2 et 4 sont quivalentes pour les fonctions MAJ et XOR comme les situations 3, 5, 6. Une table des valeurs permet de se rendre compte que dans les situations 1, 2 et 4 la fonction boolenne MAJ se comporte comme la fonction XOR avec probabilit 1/2 chaque tape. La situation 6 se comporte comme un XOR si et seulement si les deux diffrences ont un sens oppos. Ce qui veut dire que si lon prend la prcaution que ces deux perturbations conscutives insres aient un sens oppos, alors la fonction boolenne MAJ se comportera comme la fonction XOR avec probabilit 1 dans la situation 6 (et avec probabilit nulle sinon). Une probabilit nulle quivaut un chemin diffrentiel impossible et pour viter cette situation nous devons donc rajouter une nouvelle contrainte. Cette contrainte est nanmoins particulire, car elle concerne le sens des perturbations et non le masque des perturbations en lui-mme. Elle traduira simplement le fait que durant les tapes utilisant la fonction boolenne MAJ, nous ne devons pas observer de perturbations conscutives de mme sens (situation 6) : Contrainte sur signes 1 Le vecteur de perturbation ne doit pas comporter de perturbations conscutives de mme sens entre les tapes 36 et 56 : (M Pi M Pi+1 ) (Wij Wij+1 1) = 0 pour 36 i 55.

Pour la fonction boolenne IF, comme pour la fonction MAJ, tout se comporte comme une fonction XOR dans les situations 1, 2 et 4 avec une probabilit 1/2. La situation 6 est plus problmatique, car la probabilit dun comportement linaire est nulle : une diffrence sera ncessairement renvoye dans le cas de la fonction IF alors quaucune diffrence nest observe en sortie dans le cas de la fonction XOR. Cette situation doit donc tre vite sous peine dobtenir un chemin diffrentiel impossible vrier. Pour cela, il faut empcher davoir deux perturbations conscutives dans le premier tour, o la fonction IF est utilise. Plus prcisment, il faut viter davoir deux perturbations entre les tapes 4 et 16 puisque le problme se situe trois et quatre tapes aprs lintroduction de la perturbation. Cela nous rajoute ainsi une troisime contrainte sur le vecteur de perturbation : Contrainte 3 Le vecteur de perturbation ne doit pas comporter de perturbations conscutives entre les tapes 4 et 15 : M Pi M Pi+1 = 0 pour 4 i 15. Considrons prsent la rintroduction de laddition. Pour quune addition modulaire se comporte comme un ou exclusif , il faut quaucune retenue ne soit implique. En dautres termes, il faut quune perturbation introduite ne se propage pas sur les bits adjacents la position initiale par une modication de la valeur de la retenue sortante. Une simple table des valeurs indique que cela se produit avec une probabilit 1/2. Une condition supplmentaire est quune correction corrige exactement le bit vis, sans introduire de nouvelles diffrences dans les bits adjacents. Ici encore, la diffrence binaire signe devient utile. Si la perturbation
Mme si les perturbations ne sont pas connes une seule position de bit dans le cas de SHA-1, les situations 3, 5 et 7 napparatront que trs rarement en pratique.

56

5.2. Premires attaques que nous avons introduite est une diffrence montante n (respectivement descendante u) alors nous devons obtenir une diffrence montante (respectivement descendante) dans le premier registre mis jour (autrement la retenue a t modie et les bits adjacents comporteront aussi une diffrence), ce qui se produit avec probabilit 1/2. Les corrections devront se faire dans le sens inverse de celui dans lequel sexprime la diffrence concerne. Dans le cas de la premire et de la dernire correction, o la diffrence sexprime simplement comme un terme de laddition, il sufra dutiliser une diffrence de sens inverse la perturbation pour corriger avec probabilit 1. Les autres corrections sont plus complexes, car la perturbation sexprime alors dans la fonction boolenne et peut changer de sens suivant la valeur des autres bits dentre de la fonction. Reprenons les situations tudies prcdemment, sachant que lon ne garde que les cas o les fonctions boolennes se comportent de faon linaire. Pour la fonction XOR, la correction ne se fera dans le bon sens quavec probabilit 1/2 pour les situations 1, 2 et 4. Dans la situation 6, les diffrences sannulant, aucune correction ne sera ncessaire. Pour la fonction MAJ dans les situations 1, 2 et 4, si la diffrence est bien diffuse de faon linaire, son sens ne changera pas et lon peut la corriger avec probabilit 1 en utilisant une diffrence de sens inverse la perturbation. La situation 6 est identique au XOR, les diffrences sannulant. Pour la fonction IF, nous savons que la situation 6 est vite. Dans les situations 2 et 4, si la diffrence est bien diffuse de faon linaire, son sens ne changera pas et lon peut ainsi la corriger avec probabilit 1 en utilisant une diffrence de sens inverse la perturbation. Dans la situation 1, suivant la valeur des deux derniers bits dentre, le sens de la diffrence peut changer et nous corrigeons alors correctement avec probabilit 1/2. Il y a cependant une exception ce raisonnement concernant lopration daddition : si la position du bit considr est j = 31 (le bit de poids fort), alors la diffrence binaire signe na plus de sens puisque la retenue sera de toute faon absorbe par lapplication du modulo de laddition modulaire. cette position, on peut donc corriger sans se soucier du sens de la diffrence, et ceci avec probabilit 1. Il est de ce fait naturel de se servir de cette proprit pour augmenter le plus possible les probabilits de russite. Si nous introduisons les perturbations sur le bit j , la majorit des corrections se feront sur le bit j 2. On maximisera ainsi la russite en posant j 2 = 31, ce qui nous donne j = 33 = 1 (mod 32). Dans le cas de SHA-0, nous utilisons nalement la position j = 1 pour introduire les perturbations. Il existe une autre reprsentation des phnomnes analyss ci-dessus, car toutes les probabilits considres retent des conditions sur les registres internes ou sur les mots de message tendu. Une collision locale a une certaine probabilit de russite suivant son tape de dmarrage et sa position de bit, et ceci peut tre retranscrit en conditions. Nous rsumons dans le tableau 5.2 ces conditions et les probabilits de russite pour chaque tape dune collision locale dans les situations rencontres pour SHA-0 (les situations 1, 2, 4 et 6). Dans les tableaux B.1 et B.2 en appendice est donne une analyse plus complte, comportant toutes les situations. On appelle alors conditions sufsantes les conditions sur les bits de registres internes qui, une fois remplies, fournissent lattaquant une collision avec probabilit gale 1. Il devra donc tester 2b paires de messages, o b reprsente le nombre de conditions sufsantes, avant datteindre son but. Pour illustrer ce qui prcde de faon plus visuelle, la gure 5.4 reprsente un exemple de collision locale signe suivant la fonction boolenne considre. Nous notons C (i) le nombre de conditions prsentes sur Ai , sachant que toute condition portant sur n bits diffrents aura j un poids 1/n pour chacun deux. Par exemple, si nous avons la condition Aj i Ai+1 = 0,
Mme si j = 31, la probabilit ne peut tre gale 1 pour lintroduction de la perturbation, car le signe de la diffrence doit obligatoirement tre connu par lattaquant pour le reste de la collision locale.

57

Chapitre 5. Historique de la cryptanalyse des fonctions de la famille SHA


tape i i+1 i + 2 (IF) i + 2 (MAJ) i + 2 (XOR) i+3 IF i+3 MAJ i+3 XOR i+4 IF i+4 MAJ i+4 XOR i+5 type introduction correction corr. situation 1 corr. situation 1 corr. situation 1 corr. situation 2 (-,a,-) corr. situation 6 (-,a,p2 ) corr. situation 2 (-,a,-) corr. situation 6 (-,a,p2 ) corr. situation 2 (-,a,-) corr. situation 6 (-,a,p2 ) corr. situation 4 (-,-,a) corr. situation 6 (-,p2 ,a) corr. situation 4 (-,-,a) corr. situation 6 (-,p2 ,a) corr. situation 4 (-,-,a) corr. situation 6 (-,p2 ,a) correction
2 Wij+5 2 Aj i+3 j 2 Ai +3 2 Aj i+2 j 2 Ai +2 +2 Aj i1 j +2 Ai1

propagation Aj i+1
+2 Aj i j +2 Ai

addition = a et Wij =a

probabilit 1/2 1 1/4 (1/2 si j = 31) 1/2 a 1/2 (1 si j = 31) 1/2 0

= =

=1 Aj i

+5 Wij+1 =a j +2 j Ai1 = Wi+2 a Wij+2 = a +2 j +2 Aj = Wij+2 i1 Ai 2 Wij+3 =a

2 Wij+3

=a

1/2 1

p2 = a
j 2 j j 2 Ai +2 Ai = Wi+3 a

1/2 (1 si j = 1) 1

=0 Aj i+2
2 Aj i+3

2 Wij+4

=a

1/2 0

2 Wij+4

=a
2 Wij+4

1/2 1

p2 = a Aj i+2 = a

1/2 (1 si j = 1) 1

=a

TAB . 5.2 Conditions vrier pour la russite dune collision locale pour SHA-0 (ou dans la plupart des cas de SHA-1, voir tableaux B.1 et B.2 en appendice), avec une perturbation introduite ltape i et la position j . Le signe de la perturbation est donn par la contrainte Wij = a. La premire colonne dsigne ltape considre et la deuxime prcise le type daction applique et la situation le cas chant. La troisime colonne (respectivement la quatrime) donne les conditions pour que la propagation (respectivement laddition) des diffrences binaires signes se comporte de faon linaire. Enn, la dernire colonne donne la probabilit de russite. nous ajoutons 1/2 C (i) et C (i + 1). Nous donnerons dans la suite pour chaque tape soit les probabilits Pi (i), soit le nombre de conditions C (i) vrier (lanalyse tant quivalente).

5.2.4

Rechercher une paire de messages valide

Une fois lvaluation qualitative dun vecteur de perturbation introduite, on peut rechercher exhaustivement parmi les 216 candidats et garder celui minimisant le nombre de conditions ou celui minimisant Ne (i) pour une certaine tape i. Tout le problme, prsent, est de choisir le bon i. La partie recherche de vecteurs de perturbation reprsente en fait une phase de prcalcul et le vrai cot de lattaque est le cot durant la recherche dune paire de messages valide pour le chemin diffrentiel qui dcoule du vecteur de perturbation. Le i considrer peut varier suivant les mthodes de recherche. Il faut aussi noter que certaines conditions doivent tre vries sur le message tendu. En effet, en plus du masque de diffrences binaires dj prtabli, quelques bits du message tendu doivent vrier certaines relations comme lon peut le constater dans le tableau 5.2. Plusieurs techniques sont possibles pour maximiser la probabilit de succs, comme par exemple xer de faon approprie tous les prdcesseurs de ces bits pour 58

5.2. Premires attaques


fonction boolenne IF i i1 i i+1 i+2 i+3 i+4 i+5 i+6 Ai -----------------------------------------------------------------------------------n--------------------------------------------------------------------------------------------------------------------------------------------------------------------Wi ----------------------------------------------------n-------------------------u-----------------------------------u--------------------------------u------------------------------u------------------------------u--------------------------------------Pi (i) 0.00 -1.00 0.00 -2.00 -1.00 -1.00 0.00 0.00 C (i) 1.5 0.5 1.0 1.0 1.0 0.0 0.0 0.0

fonction boolenne XOR ou MAJ i Ai -----------------------------------------------------------------------------------n-------------------------------------------------------------------------------------------------------------------------------------------------------------------- Wi ----------------------------------------------------n-------------------------u-----------------------------------u--------------------------------u------------------------------u------------------------------u-------------------------------------- Pi (i) C (i)

i1 i i+1 i+2 i+3 i+4 i+5 i+6

0.00 -1.00 0.00 -1.00 -1.00 -1.00 0.00 0.00

0.5 1.0 1.0 1.0 0.5 0.0 0.0 0.0

F IG . 5.4 Une collision locale signe la position de bit j = 10, suivant la fonction boolenne utilise. Lavant-dernire colonne reprsente les probabilits de russite chaque tape (en base logarithmique 2) et la dernire donne le nombre de conditions. tre certain que les paires de messages testes vrieront ces conditions. Cela consommera des degrs de libert sur les messages, mais la recherche sera simplie et acclre, car le problme sera alors dnitivement rgl. On peut sinon exprimer les contraintes sur les mots de message non tendu pour ensuite ne tester que ceux qui appartiennent au sous-espace vriant les conditions durant la recherche dune paire valide. Une premire mthode de recherche trs nave serait de tirer alatoirement une paire de messages qui satisfait le masque de diffrence pour le vecteur W et desprer que le chemin diffrentiel soit aussi vri en ce qui concerne les registres. Toutes les conditions entre la premire et la dernire tape devraient alors tre pris en compte (le i considrer serait gal 0) et le cot total serait lev. Cette mthode nutilise aucun des degrs de libert qui nous sont offerts par les mots de message. Une mthode un peu plus sophistique, dj explicite prcdemment, serait de voir la recherche comme un algorithme de type profondeur en premier en xant tous les mots de message un par un et en commenant par M0 . Pour cette seconde mthode, le nombre total de noeuds visits NT est gal la somme pour chaque tape k des nombres moyens de noeuds visits Ne (k ). Nous avons dj expliqu quen gnral NT Ne (16), car lattaquant peut contrler compltement les 16 premiers mots de message durant les 16 premires tapes. Dans ce cas prsent, la valeur de i considrer est gale 16. Cette mthode utilise donc lgrement les degrs de libert offerts lattaquant, en xant simplement les mots de message des 16 premires tapes de faon indpendante. Nous considrerons par la suite que cette mthode reprsente la base de comparaison pour une recherche de paires de messages valides sans aucune acclration, et nous la nommerons mthode de rfrence. Notons que pour obtenir la complexit exacte 59

Chapitre 5. Historique de la cryptanalyse des fonctions de la famille SHA en termes de nombre dappels la fonction de compression, il nous faudrait valuer le cot du parcours des noeuds de larbre. Dans larticle de Chabaud et Joux [CJ98], une petite amlioration dans la recherche de messages est introduite. Il est remarqu que les conditions sur les registres A16 et A17 peuvent tre satisfaites directement en choisissant avec prcaution les instances du message. Cette amlioration utilise encore un peu plus les degrs de libert disponibles, et permet nalement dobtenir une complexit de 261 conditions pour trouver une collision sur SHA-0, au lieu de 269 pour la mthode de rfrence. Le vecteur de perturbation correspondant est donn en gure 5.5. On peut voir que les contraintes 1, 2 et 3 sont vries pour ce vecteur. Nous donnons aussi un chemin diffrentiel correspondant dans la gure 5.6. Les mots du registre interne Ai pour i = 4, . . . , 0 sont xes aux valeurs dinitialisation spcies pour SHA. Dans cet exemple, les perturbations sont bien toutes places sur la position de bit 1 et sont signes. Toute autre instance de ces signes est valide et quiprobable tant que toutes les contraintes sont vries. Enn, on remarque que les corrections du message tendu sur la position de bit 31 ne sont pas signes, car les signes des diffrences sont compltement sans effet quant la validit du chemin diffrentiel (aucune retenue ne se propage). 00000 00100010000000101111 01100011100000010100 01000100100100111011 00110000111110000000

F IG . 5.5 Vecteur de perturbation utilis pour lattaque en collision contre SHA-0 par Chabaud et Joux [CJ98]. Le vecteur se lit de la gauche vers la droite, les 5 premiers bits reprsentant les perturbations virtuelles sur la variable de chanage en entre.

5.2.5

Les bits neutres

Il faudra attendre six ans avant de voir une premire amlioration de lattaque de Chabaud et Joux sur SHA-0. Cette amlioration porte sur une meilleure utilisation des degrs de libert et non sur la construction du vecteur de perturbation. Cette technique, appele bits neutres et introduite pas Biham et Chen [BC04], est la premire mthode avance dacclration de recherche dune paire de messages valide pour la famille SHA. Lide essentielle est qutant donn une paire de messages i-valide trouve (lordre de grandeur de i en pratique tant entre 19 et 22), il existe des bits du message non tendu que lon peut modier simultanment sans changer la validit de la paire jusqu cette tape i. Chaque modication de ce type est appele bit neutre et peut donc concerner plusieurs bits de messages la fois (un bit neutre peut en fait tre compos de la modication de plusieurs bits de message). partir de la paire de messages i-valide considre, on cherche alors le plus grand ensemble possible Ebn de bits neutres, tel que toute modication compose dune paire de Ebn soit aussi un bit neutre. Cette recherche densemble peut tre conduite de manire assez rapide. Si lon note Nbn le nombre dlments de Ebn , il a t mesur exprimentalement que 1/8 des 2Nbn combinaisons possibles de cet ensemble (soit 2Nbn 3 ) sont des bits neutres pour ltape i. partir dun message i-valide original on peut donc gnrer approximativement 2Nbn 3 nouveaux messages i-valides en appliquant les modications correspondantes, et ce, sans recommencer la recherche entre les tapes 16 et i. 60

5.2. Premires attaques


i -4 : -3 : -2 : -1 : 00 : 01 : 02 : 03 : 04 : 05 : 06 : 07 : 08 : 09 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : 26 : 27 : 28 : 29 : 30 : 31 : 32 : 33 : 34 : 35 : 36 : 37 : 38 : 39 : 40 : 41 : 42 : 43 : 44 : 45 : 46 : 47 : 48 : 49 : 50 : 51 : 52 : 53 : 54 : 55 : 56 : 57 : 58 : 59 : 60 : 61 : 62 : 63 : 64 : 65 : 66 : 67 : 68 : 69 : 70 : 71 : 72 : 73 : 74 : 75 : 76 : 77 : 78 : 79 : 80 : Ai 00001111010010111000011111000011 01000000110010010101000111011000 01100010111010110111001111111010 11101111110011011010101110001001 01100111010001010010001100000001 ----------------------------1------------------------------0--------------------------------n1------------------------------0---------------------------1------------------------------0--------------------------------n1------------------------------0-------------------------------------------------------------------------------------------------------------------------------------------------------0------------------------------1------------------------------0-u1---------------------------1--0---------------------------0-u1---------------------------0-n----------------------------1-u------------------------------u-------------------------------------------------------------n------------------------------u---------------------------------------------------------------------------------------------------------------------------n------------------------------n------------------------------n------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------n-------------------------------------------------------------u---------------------------------------------------------------------------------------------------------------------------u---------------------------------------------------------------------------------------------------------------------------n--------------------------------------------------------------------------------------------u--------------------------------------------------------------------------------------------u--------------------------------------------------------------------------------------------u------------------------------n------------------------------u-------------------------------------------------------------u------------------------------u--------------------------------------------------------------------------------------------u------------------------------u----------------------------------------------------------------------------------------------------------------------------------------------------------n------------------------------n------------------------------u------------------------------u------------------------------u-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Wi L(i) Pi (i) Ne (i)

-------------------------1----1-------------------------1----0-------------------------0----n-------------------------u----1-------------------------1----nx------------------------1----0x------------------------0----nx------------------------u----0-------------------------0----nx------------------------1----0x------------------------0----1x------------------------1----1-------------------------1----0-------------------------0----1-------------------------1----u-------------------------n----1-------------------------1----0x------------------------n----nx------------------------u----0-------------------------n----0-------------------------n----nx------------------------1----1x------------------------u----u-------------------------n----u-------------------------0----n-------------------------1----0-------------------------0----nx------------------------u----n-------------------------u----1x------------------------u----u-------------------------0----nx------------------------1----1-------------------------1----1x------------------------1----0-------------------------0----1-------------------------1----n-------------------------u----0-------------------------0----0x------------------------n----1x------------------------1----n-------------------------1----1x------------------------1----ux------------------------n----0-------------------------0----nx------------------------1----0x------------------------0----nx------------------------u----0-------------------------0----ux------------------------0----ux------------------------n----1x------------------------1----nx------------------------1----ux------------------------n----0x------------------------0----nx------------------------1----ux------------------------n----nx------------------------u----0x------------------------n----u-------------------------0----0x------------------------n----u-------------------------n----u-------------------------0----u-------------------------0----u-------------------------n----ux------------------------n----nx------------------------1----n-------------------------1----1-------------------------1----0x------------------------0----n-------------------------u----n-------------------------u----0x------------------------n----0-------------------------n----0x------------------------n----nx------------------------1----nx------------------------1----0-------------------------0----0x------------------------0----0-------------------------0----1-------------------------1----1-

30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

-1.00 -1.00 -1.00 -1.00 -2.00 -1.00 -1.00 -1.00 -1.00 0.00 0.00 0.00 -1.00 -1.00 -2.00 -2.00 -3.00 -3.00 -2.00 -1.00 0.00 -1.00 -1.00 -1.00 -1.00 0.00 -1.00 -1.00 -2.00 -1.00 -1.00 0.00 0.00 0.00 0.00 -1.00 0.00 -2.00 0.00 -1.00 -1.00 -2.00 0.00 -1.00 -1.00 -2.00 0.00 -1.00 -2.00 -1.00 -1.00 -2.00 -1.00 -1.00 -2.00 -2.00 -2.00 -2.00 -2.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 0.00 0.00 -1.00 -1.00 -2.00 -2.00 -2.00 -1.00 -1.00 0.00 0.00 0.00 0.00 0.00

-398.00 -369.00 -340.00 -311.00 -282.00 -254.00 -225.00 -196.00 -167.00 -138.00 -108.00 -78.00 -48.00 -19.00 10.00 38.00 66.00 63.00 60.00 58.00 57.00 57.00 56.00 55.00 54.00 53.00 53.00 52.00 51.00 49.00 48.00 47.00 47.00 47.00 47.00 47.00 46.00 46.00 44.00 44.00 43.00 42.00 40.00 40.00 39.00 38.00 36.00 36.00 35.00 33.00 32.00 31.00 29.00 28.00 27.00 25.00 23.00 21.00 19.00 17.00 16.00 15.00 14.00 13.00 12.00 11.00 10.00 10.00 10.00 9.00 8.00 6.00 4.00 2.00 1.00 0.00 0.00 0.00 0.00 0.00

F IG . 5.6 Chemin diffrentiel utilis pour lattaque en collision contre SHA-0 par Chabaud et Joux [CJ98]. 61

Chapitre 5. Historique de la cryptanalyse des fonctions de la famille SHA Si lon arrive dtecter un ensemble assez grand (et puisque la recherche de Ebn ncessite un temps de calcul ngligeable), le cot pour trouver la paire de messages i-valide originale sera amorti et lon pourra dans ce cas considrer que la recherche dune collision commence ltape i. Plus exactement, il faut que la taille de lensemble des bits neutres valides soit au moins aussi grande que le nombre de conditions satisfaire entre ltape i et 80, soit :
79

Nbn 3 k =i

Pi1 (k ).

Cette ingalit doit tre vrie si lon souhaite que lattaque fonctionne partir dune seule paire de messages i-valide. On peut, si ncessaire, utiliser plusieurs paires de message i-valides pour relcher cette ingalit. Nanmoins, aprs application de la technique des bits neutres, on doit obtenir un nombre sufsant de paires i-valides pour esprer trouver une collision. On voit que le choix de ltape i considrer est crucial, car si i est trop petit il sera trs facile de trouver un ensemble Ebn trs grand, mais le gain nal ne sera pas sufsamment important. Inversement, choisir un i trop grand ne permettra pas de dtecter un ensemble Ebn contenant assez dlments pour trouver une collision parmi les messages obtenus grce aux bits neutres. Mme si ceci dpend du message i-valide original, on peut vrier exprimentalement que le choix i = 20 semble proche de loptimal pour SHA-0. Une limitation qui ne fut pas mentionne dans larticle original, car peu importante dans le cas de SHA-0, existe cependant. Comme prcis prcdemment, durant la recherche dun message i-valide, il faut tenir compte de contraintes sur le message tendu. Lapplication des modications dun bit neutre peut alors invalider ces contraintes pourtant vries pour le message i-valide original. Ainsi, lattaquant se retrouve rduit dans son espace de recherche de bits neutres : seuls peuvent tre considrs les bits du message non tendu qui ne sont pas prdcesseur dun bit du message tendu contraint (il est certes possible, mais trs rare, quun bit neutre modie plusieurs bits contraints du message non tendu, de telle sorte que les conditions sur le message tendu soient toujours vries). Ce problme nest pas trs contrariant dans le cas de SHA-0 : puisque les perturbations ne seront prsentes quexclusivement sur la position de bit 1, toutes les contraintes sur le message tendu seront situes sur les positions de bit 1, 6 ou 31. Aucune rotation ntant utilise dans lexpansion de message, toutes les contraintes sur le message non tendu seront aussi situes sur les positions de bit 1, 6 ou 31, et lespace de recherche de bits neutres nen sera que trs peu diminu. Par contre, comme nous le verrons plus tard dans le cas de SHA-1, les contraintes seront situes sur des positions de bits plus varies, mais surtout la rotation dans lexpansion de message inuera sur beaucoup plus de bits du message non tendu. Ceci explique pourquoi la technique des bits neutres est assez inefcace pour SHA-1. Finalement, grce cette nouvelle mthode, la complexit pour trouver une collision sur SHA-0 fut ramene 256 appels la fonction de compression.

5.2.6

Lattaque multiblocs

Lamlioration suivante [BCJ05] des cryptanalyses de SHA-0 concerna ltablissement de vecteurs de perturbation et non la recherche de paire de messages valide pour un vecteur donn. Lide est dessayer de relcher certaines des contraintes sur le vecteur de perturbation, et notamment les contraintes 1 et 2 stipulant quaucune diffrence ne doit tre prsente dans les variables de chanage dentre et de sortie. Ces contraintes ont un sens si lon recherche 62

5.2. Premires attaques une collision en nutilisant quune seule itration de la fonction de compression, mais on peut imaginer une collision pour laquelle des diffrences sur les blocs de message sont introduites dans plusieurs itrations conscutives. Lide de cette mthode, appele technique multiblocs, est ne de lobservation quil est plus facile de trouver une presque collision sur SHA-0 (quelques bits peuvent tre diffrents sur la variable de chanage de sortie) quune collision relle. Comment alors obtenir une collision laide de presque collisions successives ? Le rle du rebouclage tant ici important, nous considrerons les diffrences comme tant des diffrences i (respectivement i ) reprsente la diffrence modulaire en entre (respectivemodulaires : e s i la diffrence modulaire ment sortie) du chiffrement par blocs interne durant litration i, et M sur le bloc de message correspondant. Supposons que pour la premire itration o lon insre des diffrences dans le message, on puisse trouver un vecteur de perturbation sans diffrence 1 = 0) et aboutissant sur la variable de chanage dentre (vriant de ce fait la contrainte 1 : e 1 = 0). La nouvelle variable denune presque collision sur la variable de chanage de sortie (s 2 = 1 + 1 = 1 ) et lon tre pour la seconde itration comportera donc quelques diffrences (e e s s pourra essayer de chercher un autre vecteur de perturbation qui commence par ces diffrences 2 = 0). Il ne faut cependant pas oublier le et qui dbouche sur une autre presque collision (s i+1 = i + i ). On peut continuer, rebouclage qui rinjecte en sortie les diffrences dentre (e s e de la mme manire, sur plusieurs blocs de message jusqu aboutir une ultime itration k pour laquelle les diffrences dentre annuleront parfaitement celles de sortie lors du rebouk = k ). Il faut noter que puisque les diffrences en entre et en sortie dun vecteur clage (s e de perturbation peuvent tre signes comme le souhaite lattaquant, la dernire itration k fera en fait correspondre la mme diffrence binaire non signe en entre que celle en sortie (il sufra de forcer des signes inverses pour obtenir une collision aprs le rebouclage). la n du processus, nous obtenons une collision en ayant insr des diffrences sur les blocs de message durant plusieurs itrations conscutives (voir gure 5.7). La complexit totale sera alors gale la somme pour chaque itration des complexits pour trouver une paire de messages valide.

1 =0 e

1 M

2 e

2 M

k e

k M

Chemin diffrentiel 1
1 s 1 e

Chemin diffrentiel 2
2 s 2 e

Chemin diffrentiel
k
k = k s e k e

=0

F IG . 5.7 Principe de lattaque multiblocs. 63

Chapitre 5. Historique de la cryptanalyse des fonctions de la famille SHA Pour planier lattaque et prvoir quelles presque collisions nous allons tenter de parcourir, on peut construire au pralable un graphe orient dont les noeuds reprsentent les diffrences dans la variable de chanage et les artes sont des vecteurs de perturbation qui permettent de joindre un masque de diffrence sur la variable de chanage dentre un masque sur celle de sortie (toujours sans oublier le rebouclage). Il faut noter que puisque les perturbations sont toujours situes sur la position de bit 1, le nombre de masques possibles (le nombre de sommets) est gal 25 = 32. On associe ainsi chaque arte un poids qui correspond au cot estim de la recherche dune paire de messages valides pour le vecteur de perturbation correspondant. Une fois le graphe tabli grce des vecteurs de perturbation dont le cot nest pas trop grand, on recherche le chemin de poids le plus faible partant du sommet sans diffrence et arrivant ce mme sommet. Le chemin trouv dnira exactement les vecteurs de perturbation utiliser successivement. Cependant, dans le cas de SHA-0, le chemin de poids le plus faible dans ce graphe est le vecteur de perturbation dj trouv par Chabaud et Joux et ne ncessitant quune seule itration. Une autre amlioration est alors ncessaire. On peut augmenter la connectivit du graphe en analysant plus nement le comportement de la fonction boolenne IF utilise dans les premires tapes de SHA-0. Nous avons suppos prcdemment que cette fonction se comportait comme la fonction XOR avec une certaine probabilit et ceci nous a permis de construire des vecteurs de perturbation. Nanmoins, on peut aussi prendre en compte les situations ou cette approximation nest pas vrie, spcialement pour les 5 premires tapes (pour lesquelles sexpriment les diffrences sur la variable de chanage dentre). Concrtement, une diffrence dentre a pourra se comporter dune faon autre que celle prvue initialement. Ce comportement sera certaines fois identique celui dune autre diffrence dentre b se comportant elle de faon linaire pour aboutir la diffrence de sortie c. Ainsi, en plus de larte oriente b c, nous avons prsent larte a c pour un cot gal. Grce cette augmentation de la connectivit du graphe, il est prsent possible de trouver une attaque plus rapide que celle de Chabaud et Joux. Les vecteurs de perturbation de cette attaque, ncessitant 4 itrations o lon introduit des diffrences sur les blocs de message, sont explicits dans la gure 5.8. Pour tous les blocs, on peut observer que la contrainte 2 nest plus i = 0). De mme pour la contrainte 1 ( i = 0), sauf pour le premier bloc, car aucune vrie (s e 1 = 0). Enn, la contrainte 3 est toujours diffrence napparat dans la valeur dinitialisation (e prsente. La complexit nale est gale la somme des complexits pour trouver des paires de blocs de message valides pour chaque itration, soit 249 appels la fonction de compression. Cette valuation tient compte de la technique des bits neutres qui peut tre utilise dans la recherche de messages pour chaque itration. Ce travail a conduit au calcul de la premire collision pour SHA-0. Lamlioration multiblocs seule ne permet toujours pas dattaquer SHA-1, car la rotation dans lexpansion de message force les perturbations se situer sur des positions de bit diffrentes entre elles. Dans ce cas, le nombre de sommets dans le graphe augmente fortement et il est difcile de construire un graphe assez connexe pour trouver un chemin de poids faible.

5.3

Attaques de Wang et al.

partir de 2004, une quipe de recherche chinoise publia de nombreuses amliorations aux attaques dj connues sur les fonctions de hachage de la famille MD-SHA [WYY05d, WY05, WYY05c, WYY05b, WYY05a, WLF05, WFL04, YWY06]. Deux grandes nouveauts furent intro64

5.3. Attaques de Wang et al. Vecteur de perturbation Bloc 1 00000 (00000) 00010000101001000111 10010110000011100000 00000011000000110110 00000110001011011000 Bloc 2 01000 (11000) 10000000010000101001 00011110010110000011 10000000000011000000 11011000000110001011 Bloc 3 10001 (10011) 00100101000100101111 11000010000100001100 00101100100000000001 11010011101000010001 Bloc 4 11010 (00010) 00100000000100001010 01000111100101100000 11100000000000110000 00110110000001100010

F IG . 5.8 Vecteurs de perturbation pour lattaque multiblocs sur SHA-0 [BCJ05]. Chaque vecteur se lit de la gauche vers la droite, les 5 premiers bits reprsentant les perturbations virtuelles sur la variable de chanage en entre. Les bits entre parenthses reprsentent les vraies perturbations attendues en entre. duites, lune concernant ltablissement de vecteurs de perturbation et lautre permettant une meilleure recherche dune paire de messages valide.

5.3.1

La modication de message

Cette mthode permet dacclrer la recherche dune paire de messages valide pour un vecteur de perturbation donn. Cette avance tant le fruit dun travail indpendant des prcdents rsultats sur la famille SHA, la technique elle-mme de recherche dune paire de messages valide sera diffrente. On peut distinguer deux types : la modication de message simple et la modication de message avance. Lide gnrale dune modication de message consiste modier minutieusement certains bits du message de telle sorte quune condition sur les registres internes auparavant non vrie devienne valide, tout en vitant de perturber celles dj remplies pour les tapes prcdentes. Ces modications sont tablies juste aprs avoir trouv le chemin diffrentiel et utilises plus tard si ncessaire durant la recherche dune paire de messages valide. Plus exactement, une fois le vecteur de perturbation choisi et le chemin diffrentiel tabli, les conditions sur le message non tendu pourront tre dduites. On se place ainsi dans le sousespace des messages qui vrient ces contraintes et lon choisit un membre au hasard dans cet ensemble. On calcule alors tape par tape les valeurs des registres internes pour ce candidat. chaque rencontre de contrainte non vrie sur ces registres, on applique la modication de message correspondante pour forcer la validit et lon continue la condition suivante. Avec une probabilit relativement forte, aucune condition prcdemment force ne sera invalide par lapplication de la modication. Il faut noter que comme pour les bits neutres, on doit faire attention toujours vrier les conditions sur le message lorsque lon effectue une modication. La modication de message simple concerne seulement les conditions qui appartiennent aux tapes 0 15, pour lesquelles lattaquant possde un contrle total, car lexpansion de mes65

Chapitre 5. Historique de la cryptanalyse des fonctions de la famille SHA sage nest pas encore utilise. En gnral, ces modications ne se composent que dun seul bit changer, directement reli au bit du registre interne ventuellement corriger. Par exemple, j si une condition nest pas vrie sur le bit Aj i , on pourra modier le bit Wi (sous rserve quil ne soit pas impliqu dans une contrainte sur le message tendu). Cette technique remplace en fait notre prcdente recherche de messages sous forme de parcours darbre. Pour cette partie de lattaque, les conditions peuvent de toute faon tre xes de manire relativement indpendante. Ceci implique que le cot total de lattaque nest pas corrl cette premire phase et donc quaucune amlioration ne dcoulera des modications de message simples (par analogie, le nombre de noeuds parcourir dans larbre restera constant). La modication de message avance permet de satisfaire des conditions postrieures ltape 15 et induit ainsi une amlioration de la complexit totale. Approximativement, il est possible de corriger les conditions non valides jusqu ltape 25 dans le cas de SHA. Le reste des conditions seront satisfaites de manire probabiliste, en essayant de nombreuses instances de message. Les modications de message avances sont beaucoup plus complexes et ncessitent en gnral de changer plusieurs bits la fois. La mthode est aussi moins directe que celle des modications de message simples. Par exemple, on pourra modier un bit Wij du message, ce qui induira une modication de Aj i+1 (on suppose que la retenue ne se propage +5 pas). Cette modication dans le registre va se diffuser dans les mots suivants : dans Aj i+2 , puis 2 j j +10 dans Aj i+3 , puis dans Ai+4 et Ai+4 etc. et dautres modications seront aussi cres partir de Wij cause de lexpansion de message. Ces nouvelles modications vont leur tour ellesmmes crer dautres modications et ainsi de suite. On espre donc corriger prcisment une position de bit du registre interne des tapes relativement avances, sans pour autant invalider les prcdentes conditions remplies dautres positions. En pratique, les retenues se propageant certaines fois, il y aura une probabilit dchec associe toute modication. Pour cette raison, lordre dapplication des modications de message sera en fait trs important. Il faut aussi rappeler que lattaquant nest pas compltement libre de modier les bits de message cause des contraintes dues au chemin diffrentiel.

Une fois le chemin diffrentiel tabli, lattaquant peut engendrer lensemble des modications de message possibles en linarisant le schma (comme lors de la construction du vecteur de perturbation). En identiant les positions de bit o des conditions sont prsentes, il peut choisir les meilleures modications de message en tenant compte de leur probabilit de succs pour le schma rel (non linaris) et en slectionnant lordre dapplication optimal. Trouver des modications de message dpend aussi fortement du vecteur de perturbation considr. Dans les articles originaux sur SHA, trs peu de dtails furent donns sur ce sujet et il est suppos que toutes les modications de message furent tablies la main. Il tait de plus impossible de rellement valuer la complexit du processus dans le cas de SHA-0 ou de SHA-1 tant donn le ou concernant limplantation des modications de message. Le cas de MD concernant la modication de message est nalement assez diffrent de celui de SHA, car lexpansion de message est ici un lment trs important considrer.

On peut enn remarquer la dualit entre les bits neutres et les modications de messages : les premiers tentent de multiplier les instances de message valides tandis que les seconds corrigent les mauvaises instances. Dans les deux cas, ces techniques reprsentent une meilleure utilisation des degrs de libert durant lattaque. 66

5.3. Attaques de Wang et al.

5.3.2

La partie non linaire

La deuxime avance majeure concerne ltablissement du vecteur de perturbation. La technique multiblocs a dj permis de saffranchir des contraintes 1 et 2 sous rserve que lon russisse trouver un chemin de poids faible dans le graphe orient des connexions possibles entre les variables de chanage. Nous allons ici essayer de nous dbarrasser de la contrainte 3 qui nous impose de ne pas observer deux collisions locales conscutives durant le premier tour ( cause de la fonction boolenne IF qui ne se comporte jamais de faon linaire dans ce cas). Voir SHA-1 de faon linarise permet de grandement simplier lanalyse, le problme tant que le retour la fonction relle implique de fortes contraintes sur le vecteur de perturbation (contrainte 3). On peut alors essayer de laisser lvolution des diffrences se comporter de faon non linaire. En gnral, plus le schma se comportera de faon non linaire et plus les probabilits de succs seront faibles. Cependant, nous avons dj vu que les probabilits pour les 16 premires tapes ninuent que trs peu sur la complexit totale de lattaque, car nous avons un contrle absolu sur le message et les conditions peuvent tre vries de faon relativement indpendante. Il est donc naturel dessayer de permettre un comportement non linaire faible probabilit de succs durant ces premires tapes en laissant par exemple se propager les diffrences sur les retenues lors des additions ou en considrant la fonction boolenne IF relle.

1 =0 e

1 M

2 = e s

2 M

Partie NL1 Chemin diffrentiel 1


1 e

Partie NL2 Chemin diffrentiel 2


2 e

=0

F IG . 5.9 Attaque multiblocs avec partie non linaire pour les premires tapes. Cette technique est en fait trs similaire (bien que plus gnrale et beaucoup plus complexe mettre en oeuvre) celle utilise par Biham et al. [BCJ05] pour construire le graphe orient des connexions possibles entre les variables de chanage, o lon considrait que la fonction boolenne IF dans les 5 premires tapes peut se comporter de faon non linaire. Leffet sera identique : la connectivit du graphe sera augmente. De plus, la complexit totale tant relativement indpendante de cette partie non linaire, le poids de larte ne dpend que du vecteur 67

Chapitre 5. Historique de la cryptanalyse des fonctions de la famille SHA de perturbation entre les tapes 16 et 80. Thoriquement, si lon arrive toujours trouver une partie non linaire quelles que soient les diffrences prsentes sur la variable de chanage dentre, le graphe devient mme complet (tous les sommets sont relis deux deux par une arte). Autrement dit, on peut relier nimporte quel masque de diffrences sur la variable de chanage dentre nimporte quel masque de diffrences sur celle de sortie (sous rserve quun vecteur de perturbation existe), avec des poids relativement faibles. videmment, le deuxime effet sera aussi que la contrainte 3 nest plus vrier puisque lon ne se place plus dans un comportement linaire et que par consquent, de meilleurs vecteurs de perturbation peuvent tre utiliss.

1 1 = 0 M = 0 e

2 =0 e

2 M

Bloc sans diffrence


1 =0 s

Partie NL Chemin diffrentiel


2 =0 s

1 e

2 e

=0

F IG . 5.10 Attaque en un bloc de diffrence avec partie non linaire pour SHA-0 [WYY05d]. Dans le cadre dune attaque multiblocs, nous navons prsent besoin que de deux itrations. Nous nallons en fait utiliser quun seul vecteur de perturbation pour les deux blocs de message qui contiennent des diffrences. Ceci est explicit dans la gure 5.9. On recherche tout dabord le meilleur vecteur de perturbation (celui avec la plus forte probabilit de russite entre les tapes i et 80, o i reprsente ltape partir de laquelle les modications de message ne peuvent plus tre appliques) sans tenir compte des contraintes 1, 2 et 3 et quelles que soient les diffrences prsentes sur la variable de chanage dentre et celle de sortie. Soit V ce vec teur, qui fait correspondre une diffrence binaire e en entre une diffrence binaire s en sortie. Ce vecteur tant recherch en linarisant le schma, il est par consquent non sign au dpart. Les conditions sur les mots de messages tendus, au choix de lattaquant, permettront de le signer lors de la recherche dune instance de paire de messages valide. Son masque de diffrences binaires en entre et en sortie peut de ce fait correspondre des diffrences binaires signes montantes ou descendantes, fournissant directement les diffrences modulaires correspondantes. Ainsi, V peut tre utilis comme un vecteur possdant une diffrence modulaire s ou s sur la variable de chanage de sortie, il suft dinverser les signes. Le cot de ce vecteur restera inchang, quels que soient les signes utiliss. On choisit donc au hasard une 68

5.3. Attaques de Wang et al. instance s de diffrence modulaire. Le premier bloc commence par une diffrence nulle et lon cherchera une partie non linaire N L1 permettant de se replacer dans les 16 premires tapes sur le vecteur de perturbation V partir dune diffrence nulle. On obtient alors une diffrence modulaire s avant et aprs application du rebouclage la n du premier bloc. Cette mme diffrence sera prsente en entre de la deuxime itration et il faudra rechercher une autre partie non linaire N L2 partant cette fois de s et se replaant sur V dans les 16 premires tapes. la n de V , nous avons une diffrence s qui aprs application du rebouclage aboutit une diffrence nulle, une collision. On peut remarquer que le masque de diffrences en entre de V na aucune importance et seul celui de sortie est considrer. Nous avons considr jusquici quil tait toujours possible de trouver une partie non linaire. Toutefois, dans les articles originaux, aucun dtail ne fut donn ce sujet et il semble que les parties non linaires de SHA-0 et de SHA-1 furent, comme les modications de message, trouves la main. Il faut noter que mme si une partie non linaire fut utilise par lquipe de recherche chinoise pour SHA-0, aucune technique multiblocs ne fut considre, contrairement au cas de SHA-1. Cela peut sexpliquer par lincapacit de trouver la main un chemin non linaire pour les deux itrations pour SHA-0. Lattaque ncessite cependant deux blocs, dont le premier ne contient aucune diffrence. En effet, certaines conditions sur la valeur des bits dans la variable de chanage dentre sont requises par la partie non linaire du deuxime et dernier bloc (conditions non vries dans les valeurs dinitialisation spcies par lalgorithme). Ceci est explicit dans la gure 5.10 00111 01111001010010101000 01100010001011100000 01000001000000000100 11001101011101000000

F IG . 5.11 Vecteur de perturbation utilis pour lattaque en un bloc sur SHA-0 [WYY05d]. Le vecteur se lit de la gauche vers la droite, les 5 premiers bits reprsentant les perturbations virtuelles sur la variable de chanage en entre. Finalement, le vecteur de perturbation utilis pour SHA-0 est donn dans la gure 5.11. On peut remarquer que les contraintes 1 et 3 nont plus besoin dtre vries grce la partie non linaire. Par contre, la contrainte 2 est toujours vrie, car nous ne sommes pas en prsence dune attaque multiblocs. Le chemin diffrentiel nal est donn dans la gure 5.12, les auteurs ont annonc la recherche dune collision en approximativement 239 appels la fonction de compression laide de la technique de modication de message.

5.3.3

La recherche de vecteurs de perturbation pour SHA-1

Nous nous sommes jusqu prsent surtout concentrs sur le cas de SHA-0, car les prcdentes amliorations ne sufsaient pas attaquer SHA-1. La modication de message et la partie non linaire aboutirent en fait la premire attaque thorique contre SHA-1 [WYY05b, WYY05c, WYY05a]. Les mthodes sont identiques celles utilises pour SHA-0, except la recherche de vecteurs de perturbation. En effet, la rotation dans lexpansion de message change compltement la situation et il a fallu crer une nouvelle heuristique pour trouver de bons candidats. 69

Chapitre 5. Historique de la cryptanalyse des fonctions de la famille SHA


i -4 : -3 : -2 : -1 : 00 : 01 : 02 : 03 : 04 : 05 : 06 : 07 : 08 : 09 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : 26 : 27 : 28 : 29 : 30 : 31 : 32 : 33 : 34 : 35 : 36 : 37 : 38 : 39 : 40 : 41 : 42 : 43 : 44 : 45 : 46 : 47 : 48 : 49 : 50 : 51 : 52 : 53 : 54 : 55 : 56 : 57 : 58 : 59 : 60 : 61 : 62 : 63 : 64 : 65 : 66 : 67 : 68 : 69 : 70 : 71 : 72 : 73 : 74 : 75 : 76 : 77 : 78 : 79 : 80 : Ai ------------------------------------------------------------------------------------1-----1-1----------------------1-----1-0--------11110011111--11110-----u-------01001110111-101nuu--1-u0-0--11111nuuuuuuuuuu1-unnun1--1-1--111110-0nuu0010u0u--01010n1----1-nuuuuu000--1111-n110011-0------n-000100100100-0-01-nu---------011011110nu0-unn--0--10n0------11101111u0100--000----1n---------unnnnnnnnnnn-111---1--1----------000000011001-----0-------------111111111111-------n0---------------------n-----1--0-----------------------0---0--------------------------1---0-n1---------------------------1--0---------------------------1-u1---------------------------0--0-----------------------------u1---------------------------------------------------------------------------------------------------------------------------------------------------------u------------------------------n---------------------------------------------------------------------------------------------------------------------------n---------------------------------------------------------------------------------------------------------------------------n-------------------------------------------------------------u------------------------------n------------------------------u------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------n-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------u---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------n--------------------------------------------------------------------------------------------u------------------------------n--------------------------------------------------------------------------------------------u------------------------------u-------------------------------------------------------------u-------------------------------------------------------------n------------------------------u------------------------------n-------------------------------------------------------------u------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Wi L(i) Pi (i) Ne (i)

n------------------------n----u-------------------------1----1n------------------------n----n-------------------------u----0-------------1100-0------u----1----------101------------n----nn--------0---------------0----un------------------------1----n-----------0-------------u----0n----------111010--------0----1n------------------------n----0n------------------------0----n-------------------------0----nn------------------------u----0n------------------------0----0n------------------------u----0x------------------------0----1-------------------------n----0x------------------------0----u-------------------------1----1x------------------------1----0x------------------------0----u-------------------------n----n-------------------------u----ux------------------------1----n-------------------------0----1-------------------------1----nx------------------------u----1-------------------------1----ux------------------------1----1x------------------------1----nx------------------------u----0-------------------------0----1x------------------------n----nx------------------------u----1-------------------------n----n-------------------------0----ux------------------------1----0-------------------------0----0x------------------------0----1-------------------------1----1-------------------------1----n-------------------------u----1-------------------------1----ux------------------------1----0x------------------------0----0x------------------------0----0-------------------------0----u-------------------------n----1-------------------------1----nx------------------------0----0x------------------------0----0x------------------------0----1-------------------------1----1-------------------------1----1-------------------------1----1-------------------------1----0-------------------------0----n-------------------------u----0-------------------------0----ux------------------------1----ux------------------------n----nx------------------------u----ux------------------------1----u-------------------------1----u-------------------------n----ux------------------------n----nx------------------------0----1-------------------------n----0-------------------------0----0-------------------------u----ux------------------------n----0-------------------------u----u-------------------------1----1x------------------------n----1-------------------------1----u-------------------------1----1x------------------------1----0x------------------------0----0-------------------------0----1-

29 30 29 30 25 27 28 29 29 23 29 29 30 29 29 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

-20.00 -25.00 -29.03 -22.00 -14.00 -16.00 -18.00 -16.00 -13.00 -7.00 -3.00 -3.00 -3.00 -2.00 -3.00 -2.00 -2.00 -1.00 0.00 0.00 0.00 -1.00 -1.00 -1.00 -1.00 0.00 -1.00 0.00 -1.00 0.00 -1.00 0.00 -2.00 -1.00 -2.00 -1.00 -1.00 0.00 0.00 0.00 0.00 -1.00 0.00 -1.00 -1.00 -1.00 0.00 -1.00 0.00 -1.00 -1.00 -1.00 0.00 0.00 0.00 0.00 0.00 -1.00 0.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -1.00 -2.00 0.00 -2.00 -1.00 -2.00 -1.00 -2.00 0.00 -1.00 0.00 0.00 0.00 0.00

-212.97 -203.97 -198.97 -199.00 -191.00 -180.00 -169.00 -159.00 -146.00 -130.00 -114.00 -88.00 -62.00 -35.00 -8.00 18.00 45.00 43.00 42.00 42.00 42.00 42.00 41.00 40.00 39.00 38.00 38.00 37.00 37.00 36.00 36.00 35.00 35.00 33.00 32.00 30.00 29.00 28.00 28.00 28.00 28.00 28.00 27.00 27.00 26.00 25.00 24.00 24.00 23.00 23.00 22.00 21.00 20.00 20.00 20.00 20.00 20.00 20.00 19.00 19.00 18.00 17.00 16.00 15.00 14.00 13.00 12.00 11.00 9.00 9.00 7.00 6.00 4.00 3.00 1.00 1.00 0.00 0.00 0.00 0.00

F IG . 5.12 Chemin diffrentiel utilis pour lattaque en un bloc sur SHA-0 avec partie non linaire [WYY05d]. 70

5.3. Attaques de Wang et al. Tout dabord, les remarques prcdentes sur la position des perturbations pour SHA-0 restent valides : la position de bit 1 est privilgier pour introduire une perturbation, car cest celle qui ncessite le moins de conditions en gnral. Hlas, dans le cas de SHA-1, il est impossible de conner une seule position lensemble des perturbations cause de la rotation dans lexpansion de message. Cette rotation engendre deux problmes : on ne peut plus se contenter facilement de choisir la position de bit 1, et lespace de recherche parmi les vecteurs de perturbations devient immense. Dans le cas de SHA-0, nous avions pu rduire lespace de recherche un vecteur de 16 bits. Pour SHA-1, lespace est prsent de 16 mots de 32 bits chacun : un bit pour chaque position dintroduction. Les vecteurs de perturbation entiers (pour les 80 tapes) peuvent tre dduits en utilisant comme prcdemment la formule dexpansion de message ou son inverse si ncessaire.
i 16 : 17 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : 26 : 27 : 28 : 29 : 30 : 31 : 32 : 33 : 34 : 35 : 36 : 37 : 38 : 39 : 40 : 41 : 42 : 43 : 44 : 45 : 46 : 47 : vecteur de perturbation 1-----------------------------1-------------------------------------------------------------1-------------------------------------------------------------11 -------------------------------------------------------------1------------------------------1-------------------------------1 -------------------------------------------------------------1------------------------------1-------------------------------1 --------------------------------------------------------------------------------------------1------------------------------11 -------------------------------------------------------------1------------------------------1--------------------------------------------------------------------------------------------1---------------------------------------------------------------------------------------------------------------------------1-------------------------------------------------------------1-------------------------------------------------------------1-------------------------------i 48 : 49 : 50 : 51 : 52 : 53 : 54 : 55 : 56 : 57 : 58 : 59 : 60 : 61 : 62 : 63 : 64 : 65 : 66 : 67 : 68 : 69 : 70 : 71 : 72 : 73 : 74 : 75 : 76 : 77 : 78 : 79 : vecteur de perturbation ------------------------------1--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------1-------------------------------------------------------------------------------------------1-------------------------------------------------------------------------------------------1--------------------------------------------------------------1----------------------------1-------------------------------------------------------------------------------------------1--------------------------------------------------------------1-1--------------------------1-------

F IG . 5.13 Vecteur de perturbation pour lattaque multiblocs sur SHA-1 en 269 appels la fonction de compression [WYY05b]. Les 16 premires tapes ont t tes, car remplaces par la partie non linaire en pratique. Les caractres 0 ont t remplacs par - pour une meilleure lisibilit. Wang et al. [WYY05c] choisirent une mthode assez simple pour valuer rapidement la qualit dun vecteur de perturbation. Chaque perturbation commenant dans une tape utilisant la fonction boolenne XOR induit 2 conditions si elle est base sur la position de bit 1, et 4 conditions sinon. Pour une perturbation commenant dans une tape utilisant la fonction boolenne IF (respectivement MAJ), on compte 5 conditions (respectivement 4 conditions) quelle que soit la position de bit. Les situations o des perturbations affectent deux fonctions boolennes diffrentes (perturbations introduites ltape 37 par exemple) sont aussi prises en compte et traites au cas par cas. Une fois la mthode dvaluation dun vecteur dnie, Wang et al. testent une sous-partie de lespace des candidats possibles : tous les vecteurs sur 16 tapes dont les 71

Chapitre 5. Historique de la cryptanalyse des fonctions de la famille SHA perturbations sont connes aux positions de bit 0 ou 1. On considre aussi les vecteurs dcals dun certain nombre dtapes positif ou ngatif. Cela demande donc de traiter peu prs 64 232 vecteurs diffrents (232 vecteurs et 64 dcalages possibles). Parmi ces candidats, ils gardrent alors celui ayant le moins de conditions entre les tapes 16 et 80. Cette mthode aboutit au vecteur prsent dans la gure 5.13. On peut voir quun trs petit nombre de perturbations sont introduites dans le troisime tour. Cela semble logique puisque la fonction boolenne MAJ impose de nombreuses conditions et est donc coteuse pour lattaquant. De plus, cette forme de vecteur, de trs faible poids de Hamming dans les tours intermdiaires et de poids plus fort dans les premiers et les derniers tours (ce qui est invitable du fait de lexpansion de message et de sa rotation), permet de maximiser le ratio de perturbations introduites la position de bit 1, position qui est trs avantageuse dans le deuxime et dernier tour cause de la fonction boolenne XOR. Nous donnons dans la gure 5.15 le chemin diffrentiel nal pour le premier bloc fourni dans larticle original. Il faut noter que ce chemin comportait une erreur que nous avons corrig dans notre gure : la valeur dinitialisation spcie contredit certaines conditions pourtant ncessaires quant la validit de la partie non linaire. Cest la raison pour laquelle la valeur initiale de la variable de chanage dentre na pas t ajoute dans la gure.
i 16 : 17 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : 26 : 27 : 28 : 29 : 30 : 31 : 32 : 33 : 34 : 35 : 36 : 37 : 38 : 39 : 40 : 41 : 42 : 43 : 44 : 45 : 46 : 47 : vecteur de perturbation 1-----------------------------1------------------------------11-----------------------------1-------------------------------------------------------------1-------------------------------------------------------------11 -------------------------------------------------------------1------------------------------1-------------------------------1 -------------------------------------------------------------1------------------------------1-------------------------------1 --------------------------------------------------------------------------------------------1------------------------------11 -------------------------------------------------------------1------------------------------1--------------------------------------------------------------------------------------------1---------------------------------------------------------------------------------------------------------------------------1-------------------------------------------------------------1-------------------------------i 48 : 49 : 50 : 51 : 52 : 53 : 54 : 55 : 56 : 57 : 58 : 59 : 60 : 61 : 62 : 63 : 64 : 65 : 66 : 67 : 68 : 69 : 70 : 71 : 72 : 73 : 74 : 75 : 76 : 77 : 78 : 79 : vecteur de perturbation ------------------------------1-------------------------------------------------------------1--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------1-------------------------------------------------------------------------------------------1-------------------------------------------------------------------------------------------1--------------------------------------------------------------1----------------------------1-------------------------------------------------------------------------------------------1-------------------------------------

F IG . 5.14 Vecteur de perturbation pour lattaque multiblocs sur SHA-1 en 263 appels la fonction de compression [WYY05a]. Les 16 premires tapes ont t tes, car elles sont en pratique remplaces par la partie non linaire. Les caractres 0 ont t remplacs par - pour une meilleure lisibilit. Wang et al. ont estim que grce la technique de modication de message une complexit dapproximativement 269 appels la fonction de compression pouvait tre atteinte pour trouver une collision sur SHA-1 en deux blocs [WYY05b]. Quelques mois plus tard, un 72

5.3. Attaques de Wang et al.


i -4 : -3 : -2 : -1 : 00 : 01 : 02 : 03 : 04 : 05 : 06 : 07 : 08 : 09 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : 26 : 27 : 28 : 29 : 30 : 31 : 32 : 33 : 34 : 35 : 36 : 37 : 38 : 39 : 40 : 41 : 42 : 43 : 44 : 45 : 46 : 47 : 48 : 49 : 50 : 51 : 52 : 53 : 54 : 55 : 56 : 57 : 58 : 59 : 60 : 61 : 62 : 63 : 64 : 65 : 66 : 67 : 68 : 69 : 70 : 71 : 72 : 73 : 74 : 75 : 76 : 77 : 78 : 79 : 80 : Ai ----------------------------------------------------------------------------------------------11-----------------------------00-----------------------------nn-------------1---------0001-nuu10-----------0----0--nuu-0nu0-100-------------nuuu--0111n-0u u0010--------nuuu----01n10011-u0 0011n-----nu-00-100-1111-0un-111 1-0-0nu11-1001-nu11xxx-1-10-001n--110111-0111--101---10-un-u1-n -01---unnnnnnn--001--111---01-1-00-----1000unnnnnnnnnn----11-u0---------------111000000-----n--------------10111111nu1------0-----------------------10--u--------------------------11-----n -1--------------------------0-1u0--------------------------1-0--1-------------------------0-nn-0---------------------------u--1----------------------------------------------------------n-------------------------------------------------------------xx -------------------------------------------------------------x------------------------------x-------------------------------x -------------------------------------------------------------x------------------------------x-------------------------------x --------------------------------------------------------------------------------------------x------------------------------xx -------------------------------------------------------------x------------------------------x--------------------------------------------------------------------------------------------x---------------------------------------------------------------------------------------------------------------------------x-------------------------------------------------------------x-------------------------------------------------------------x-------------------------------------------------------------x--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------x-------------------------------------------------------------------------------------------x-------------------------------------------------------------------------------------------x--------------------------------------------------------------x----------------------------x-------------------------------------------------------------------------------------------x--------------------------------------------------------------x-x--------------------------x------Wi L(i) Pi (i) Ne (i)

-nn----------------------------nuu-----------------------n-u-u--n----------------------u----nn u-un---------------------n-----nn-n---------------------n-u--un nn-n----------------------u---u--n-----------------------------nn-----------------------uu--u-uu----------------------u----un --u----------------------n-----unu----------------------u----n-uu---------------------------nn------------------------------n --------------------------u------1---------------------------nu -u-----------------------u-n--n-x-----------------------u-----xnn----------------------n-u--ux-n---------------------1----1-x------------------------u-------x----------------------------x --u----------------------xx----x------------------------------x -x-----------------------x----xxx-----------------------x----xx -x------------------------x---x------------------------------xx -x-----------------------x----xxx-----------------------x----xx xx------------------------x---x-------------------------------x -x----------------------------xxx-----------------------x----xx -x-----------------------xx---xx------------------------------x -x-----------------------x----x-x-----------------------x----x-x----------------------------x------------------------------x-------------------------x-----x-----------------------------xx------------------------------x-----------------------------xx------------------------x------------------------------------x------------------------x-----x-------------------------------------------------------x-----x-------------------------------------------------------x-----x-----------------------------x-------------------------------x------------------------------x---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------x-------------------------x-----------------------------------x-----------------------------x--x -----------------------x-------x ----------------------------x--x ---------------------------x--x----------------------x-------x---------------------------xx-x-----------------------x--x--x----------------------x------xx---------------------------x--xx-------------------------x--x-x--------------------x-------x-x-------------------------xx-------------------------x-xx--x----

30 26 28 28 25 27 31 27 27 30 27 29 30 31 29 28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

-7.00 -13.00 -17.42 -27.19 -25.00 -27.09 -26.42 -24.87 -21.83 -12.00 -16.00 -10.00 -3.00 -4.00 -6.00 -3.00 -4.00 -1.00 -1.00 0.00 -3.00 -2.00 -2.00 -3.00 -4.00 -3.00 -2.00 -3.00 -4.00 -3.00 -1.00 -2.00 -4.00 -4.00 -2.00 -3.00 -3.00 -2.00 -1.00 -1.00 -2.00 -1.00 -2.00 -1.00 -2.00 -2.00 -3.00 -2.00 -3.00 -2.00 -3.00 -1.00 -1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -1.00 -1.00 -1.00 -2.00 -2.00 -2.00 -2.00 -2.00 -3.00 -3.00 -3.00 -3.00 -3.00 -3.00 -3.00 -4.00

-88.19 -65.19 -52.19 -41.60 -40.79 -40.79 -40.89 -36.30 -34.17 -29.00 -11.00 0.00 19.00 46.00 73.00 96.00 121.00 117.00 116.00 115.00 115.00 112.00 110.00 108.00 105.00 101.00 98.00 96.00 93.00 89.00 86.00 85.00 83.00 79.00 75.00 73.00 70.00 67.00 65.00 64.00 63.00 61.00 60.00 58.00 57.00 55.00 53.00 50.00 48.00 45.00 43.00 40.00 39.00 38.00 38.00 38.00 38.00 38.00 38.00 38.00 38.00 38.00 38.00 38.00 38.00 37.00 36.00 35.00 33.00 31.00 29.00 27.00 25.00 22.00 19.00 16.00 13.00 10.00 7.00 4.00

F IG . 5.15 Chemin diffrentiel pour le premier bloc de lattaque multiblocs sur SHA-1 en 269 appels la fonction de compression [WYY05b]. 73

Chapitre 5. Historique de la cryptanalyse des fonctions de la famille SHA


i -4 : -3 : -2 : -1 : 00 : 01 : 02 : 03 : 04 : 05 : 06 : 07 : 08 : 09 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : 26 : 27 : 28 : 29 : 30 : 31 : 32 : 33 : 34 : 35 : 36 : 37 : 38 : 39 : 40 : 41 : 42 : 43 : 44 : 45 : 46 : 47 : 48 : 49 : 50 : 51 : 52 : 53 : 54 : 55 : 56 : 57 : 58 : 59 : 60 : 61 : 62 : 63 : 64 : 65 : 66 : 67 : 68 : 69 : 70 : 71 : 72 : 73 : 74 : 75 : 76 : 77 : 78 : 79 : 80 : Ai 00001111010010111000011111000011 01000000110010010101000111011000 01100010111010110111001111111010 11101111110011011010101110001001 01100111010001010010001100000001 nun-------------0-----0----00-0u -1n00-1---------00----111-00-u01 nu01-----unnnnnnnnnnnnnnn1---n01 n-101------0000000un0010nun---u0-01n-0--u-1111111111-0un0nu0100 u-011-0--0-1111-----nu---101-0---0-nuuuuuuuuuuuu---0-10-00-01-n 110---0111101111111-1-11----n0-n0----1111111111111---un----1-0u -11---------------------11--1-n100-------------------un11--0--0-----------------------01----n0-----------------------11-----1-------------------------------------------------------------n -1-----------------------------x0----------------------------x--1---------------------------xx-----------------------------x-------------------------------------------------------------x-------------------------------------------------------------xx -------------------------------------------------------------x------------------------------x-------------------------------x -------------------------------------------------------------x------------------------------x-------------------------------x --------------------------------------------------------------------------------------------x------------------------------xx -------------------------------------------------------------x------------------------------x--------------------------------------------------------------------------------------------x---------------------------------------------------------------------------------------------------------------------------x-------------------------------------------------------------x-------------------------------------------------------------x-------------------------------------------------------------x--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------x-------------------------------------------------------------------------------------------x-------------------------------------------------------------------------------------------x--------------------------------------------------------------x----------------------------x-------------------------------------------------------------------------------------------x------------------------------------Wi L(i) Pi (i) Ne (i)

u0u---------------------------un --n-----------------------nu----nn--------------1-0-1--0----000 unu-------------11--------u-u-u--n----------------------n---1nu n-nu---------------------u-----nn-n---------------------n-u--nu nn-n----------------------n---u--u-----------------------------un-----------------------nn--u-nn----------------------u----un --u----------------------n-----nnu----------------------u----u-uu---------------------------nn-0----------------------------n --------------------------n-----1----------------------------xx -u-----------------------x-x--x-x-----------------------x-----xxx----------------------x-x--xx-x----------------------------x------------------------x-------x----------------------------x --x----------------------xx----x------------------------------x -x-----------------------x----xxx-----------------------x----xx -x------------------------x---x------------------------------xx -x-----------------------x----xxx-----------------------x----xx xx------------------------x---x-------------------------------x -x----------------------------xxx-----------------------x----xx -x-----------------------xx---xx------------------------------x -x-----------------------x----x-x-----------------------x----x-x----------------------------x------------------------------x-------------------------x-----x-----------------------------xx------------------------------x-----------------------------xx------------------------x------------------------------------x------------------------x-----x-------------------------------------------------------x-----x-------------------------------------------------------x-----x-----------------------------x-------------------------------x------------------------------x---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------x-------------------------x-----------------------------------x-----------------------------x--x -----------------------x-------x ----------------------------x--x ---------------------------x--x----------------------x-------x---------------------------xx-x-----------------------x--x--x----------------------x------xx---------------------------x--xx-------------------------x--x-x--------------------x-------x-x-

27 29 23 24 27 28 25 27 31 27 27 30 27 29 29 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

-4.01 -13.68 -16.00 -19.75 -38.05 -17.42 -22.00 -19.42 -24.00 -4.74 -10.00 -4.00 -5.00 -1.00 -1.00 -1.00 -4.00 -4.00 -4.00 -6.00 -2.00 -2.00 -3.00 -3.00 -2.00 -3.00 -4.00 -3.00 -2.00 -3.00 -4.00 -3.00 -1.00 -2.00 -4.00 -4.00 -2.00 -3.00 -3.00 -2.00 -2.00 -2.00 -2.00 -1.00 -2.00 -1.00 -2.00 -2.00 -3.00 -2.00 -3.00 -2.00 -3.00 -1.00 -1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -1.00 -1.00 -1.00 -2.00 -2.00 -2.00 -2.00 -2.00 -3.00 -3.00 -3.00 -3.00 -3.00 -3.00

-106.93 -83.95 -68.63 -61.63 -57.38 -68.43 -57.84 -54.84 -47.26 -40.26 -18.00 -1.00 25.00 47.00 75.00 103.00 133.00 129.00 125.00 121.00 115.00 113.00 111.00 108.00 105.00 103.00 100.00 96.00 93.00 91.00 88.00 84.00 81.00 80.00 78.00 74.00 70.00 68.00 65.00 62.00 60.00 58.00 56.00 54.00 53.00 51.00 50.00 48.00 46.00 43.00 41.00 38.00 36.00 33.00 32.00 31.00 31.00 31.00 31.00 31.00 31.00 31.00 31.00 31.00 31.00 31.00 31.00 30.00 29.00 28.00 26.00 24.00 22.00 20.00 18.00 15.00 12.00 9.00 6.00 3.00

F IG . 5.16 Chemin diffrentiel pour le premier bloc de lattaque multiblocs sur SHA-1 en 263 appels la fonction de compression [WYY05a]. 74

5.3. Attaques de Wang et al.


i -4 : -3 : -2 : -1 : 00 : 01 : 02 : 03 : 04 : 05 : 06 : 07 : 08 : 09 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : 26 : 27 : 28 : 29 : 30 : 31 : 32 : 33 : 34 : 35 : 36 : 37 : 38 : 39 : 40 : 41 : 42 : 43 : 44 : 45 : 46 : 47 : 48 : 49 : 50 : 51 : 52 : 53 : 54 : 55 : 56 : 57 : 58 : 59 : 60 : 61 : 62 : 63 : 64 : 65 : 66 : 67 : 68 : 69 : 70 : 71 : 72 : 73 : 74 : 75 : 76 : 77 : 78 : 79 : 80 : Ai 00001111010010111000011111000011 01000000110010010101000111011000 01100010111010110111001111111010 11101111110011011010101110001001 01100111010001010010001100000001 nun0000001000000011000011110010u 11n00011010010000010111110001u01 nu0110100unnnnnnnnnnnnnnn1101n01 n01010100000000000un0010nun110u0 0101n0011u11111111111-0un0nu0100 u0011001101111101011nu-1-1010010 0001nuuuuuuuuuuuu-110010-000011n 110010011110111111101011-000n000 n001111111111111111---un---0110u 11100011011-------------11-110n0 10010110--------------un11-00011 011--0------------------01---0n1 0-----------------------11---0-1---1------------------------1-----------------------------0--n -1--------------------------1--u0--------------------------0-u0-1-------------------------0-nn-0---------------------------u--0----------------------------------------------------------u-------------------------------------------------------------un -------------------------------------------------------------n------------------------------n-------------------------------u -------------------------------------------------------------n------------------------------u-------------------------------n --------------------------------------------------------------------------------------------u------------------------------nn -------------------------------------------------------------n------------------------------u--------------------------------------------------------------------------------------------u---------------------------------------------------------------------------------------------------------------------------u-------------------------------------------------------------u-------------------------------------------------------------u-------------------------------------------------------------u--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------n-------------------------------------------------------------------------------------------u-------------------------------------------------------------------------------------------u--------------------------------------------------------------u----------------------------n-------------------------------------------------------------------------------------------n------------------------------------Wi L(i) Pi (i) Ne (i)

u0u000001000101111001001001100un 01n10100100010110010010111nu1000 1nn00010000010010110110101011000 unu10010111110001110100001u0u0u1 00n011010101011111010-110n0001nu n1nu110001011010-111-----u111011 nn0n111001010100011-1010-n0u10nu nn0n01101010-000011-0----1n001u1 11u10110100100000-0-0------00000 1un011000111111-111------0nn00u1 1nn10100111111111-----01-u1110un 01u010001001111--0-0----0n011101 nnu001001-1011-001-------u0110u0 0uu100000010-000----1-----0000n1 n00010110010-1--0-0-------11001n 01011001-1111-101-------00n10010 01001000011-010----1------0101uu 0u000010010-0--0-1-------n0n01n0 1n00010-1011-111--------0u101010 unn1110010-100----0------n1u01n1 u1n01011-1-1--1-0-------10000100 n10111-0110-101----------n101111 11n111101-1-0----1--------11110n 10u1000-1-1--1-0--------1nu00100 u1101-0110-000------------00010n 0u110000-0-0----1--------u0011n0 nn0010-0-0--0-0---------1u0111nu 1u01-0110-0-1------------1n110u0 0010100---1----1---------10000nu 1u111-1-0----0-----------u0000u0 un0-1101-1---------------n0001un nn0001---1----1---------11u001u1 1011-1-0----0------------111011u 0u-0011-0---------------111101u0 un000---0----1---------11n1010nn 0u0-1-1----0------------0uu011u1 u-1101-------------------001111n 0n10---0----0-----------1u0000u1 1u-0-0-------------------n1000u1 -u100-------------------001000u0 111---1----0-------------10110u0 0-0-1-------------------1n000110 u000--------------------001011nn0---0------------------01011011 x0-1--------------------101111u0 u01---------------------1n0101-0 1---0-------------------00010011 n-1--------------------10n01101u1----------------------00100-10 ---0-------------------00n011001 x0----------------------000000-1 0----------------------11n10-011 x-0---------------------001101n1----------------------011101-0x-----------------------100-0011 x0---------------------1000101-------------------------0111-0-0 -----------------------010-01110----------------------100001-------------------------0001-1-0-----------------------00-1011------------------------01101---0 -----------------------100-1-1-----------------------00-1110-------------------------1000---1----------------------000-0-0--------------------------1001-n-----------------------00u1---0------------------------1-0-1-x------------------------1011-u--x -----------------------n0---1--x ----------------------0-1-1-x--u -----------------------000-u--x----------------------n1---1--x-----------------------0-0-xu-n----------------------0n0-n--x----------------------u1---1-xx-----------------------1-1-x--nx----------------------00-n--x-x--------------------u1---1--x-n-

0 0 0 0 1 6 2 6 8 7 6 7 9 10 11 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0.00 0.00 0.00 0.00 0.00 -4.00 -1.00 -5.00 -3.51 -1.00 -4.00 -1.42 -4.46 -3.00 -1.00 -2.00 -4.00 -4.00 -4.00 -1.00 -1.00 0.00 -4.00 0.00 -3.00 -2.00 -3.00 -1.00 -2.00 -2.00 -3.00 -1.00 -1.00 -2.00 -3.00 -1.00 -3.00 -2.00 -2.00 -1.00 -1.00 -1.00 -1.00 -1.00 -2.00 0.00 -2.00 -1.00 -3.00 -1.00 -3.00 -1.00 -2.00 -1.00 -1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -1.00 0.00 -1.00 -2.00 -1.00 -1.00 -2.00 -1.00 -2.00 -2.00 -2.00 -2.00 -3.00 -1.00

40.38 40.38 40.38 40.38 40.38 41.38 43.38 44.38 45.38 49.87 55.87 57.87 63.46 68.00 75.00 85.00 92.00 88.00 84.00 80.00 79.00 78.00 78.00 74.00 74.00 71.00 69.00 66.00 65.00 63.00 61.00 58.00 57.00 56.00 54.00 51.00 50.00 47.00 45.00 43.00 42.00 41.00 40.00 39.00 38.00 36.00 36.00 34.00 33.00 30.00 29.00 26.00 25.00 23.00 22.00 21.00 21.00 21.00 21.00 21.00 21.00 21.00 21.00 21.00 21.00 21.00 21.00 20.00 20.00 19.00 17.00 16.00 15.00 13.00 12.00 10.00 8.00 6.00 4.00 1.00

F IG . 5.17 Une instance signe du chemin diffrentiel de la gure 5.16. 75

Chapitre 5. Historique de la cryptanalyse des fonctions de la famille SHA autre vecteur fut trouv, lequel aboutit une complexit annonce de 263 appels la fonction de compression [WYY05a]. Ce nouveau vecteur, en fait identique au premier, mais dcal de 2 tapes, est prsent dans la gure 5.14. Il comporte plus de conditions que le prcdent, mais les modications de message y sont plus efcaces et permettent en n de compte un gain pour lattaquant. Le chemin diffrentiel non sign correspondant pour le premier bloc est donn dans la gure 5.16. Une instance possible des signes des perturbations est enn donne dans la gure 5.17. Il faut noter que nous avons encore corrig une nouvelle erreur prsente dans [WYY05a] concernant la partie non linaire du chemin diffrentiel originellement propos. Les complexits annonces par Wang et al. furent assez controverses sur plusieurs points. Dune part, trs peu de dtails taient donns sur lattaque et sur toute possible implantation. Plusieurs erreurs furent dcouvertes quelque temps aprs la publication des attaques. Au cours de la rdaction de cette thse, nous avons nous-mme trouv plusieurs erreurs auparavant inconnues. De plus, tant donn que seul le chemin diffrentiel pour le premier bloc tait explicit, on peut supposer que celui pour le deuxime est beaucoup plus difcile trouver la main. Un travail non automatis pour trouver des parties non linaires conduit souvent des conditions sur la variable de chanage dentre, ce qui nest pas trs contrariant pour le premier bloc (puisquil est facile de rajouter pralablement un bloc sans diffrence pour vrier ces conditions sur la variable de chanage dentre), mais qui peut ltre beaucoup plus pour le deuxime : les conditions sur la variable de chanage dentre du deuxime bloc devront tre comptes durant le calcul du nombre de conditions total pour le premier bloc, ce qui aura une inuence signicative sur la complexit nale de lattaque. Dautre part, le cot rel dune modication de message pouvait sembler assez imprcis. Lattaque nale tant trs complexe, aucune implantation na ce jour t publie pour vrier ce cot suppos. De nombreux travaux ont cependant combl ce manque de dtails et il est maintenant admis quune telle attaque est ralisable avec une complexit dapproximativement 263 appels la fonction de compression [Coc07].

5.3.4

Une analyse plus ne des conditions

La complexit annonce par Wang et al. pour SHA-1 tient compte dune analyse assez ne des conditions dun chemin diffrentiel. Tout dabord, on peut se concentrer sur la n du vecteur, savoir les 5 dernires tapes. On remarque que ces 5 dernires tapes produisent les variables de chanage qui seront effectivement utilises lors du rebouclage. Dans ce cas prcis, le rebouclage nutilisant que laddition modulaire, il nest plus ncessaire de considrer plusieurs types de diffrences et lon peut se contenter de la diffrence modulaire. Pour le premier bloc, on pourra donc laisser les diffrences introduites se propager arbitrairement, sans imposer de conditions ( part leur signe modulaire durant lintroduction qui est choisi par lattaquant travers le message tendu). Pour le deuxime bloc, il sufra dinsrer des perturbations inverses dun point de vue de laddition modulaire pour corriger parfaitement et ainsi obtenir une collision aprs le rebouclage (la propagation des diffrences binaires nest plus importante). Hlas, sil y a propagation de diffrences, cela impliquera aussi la propagation de beaucoup de diffrences binaires dont le signe est inconnu aprs application de la fonction boolenne XOR. On souhaite viter cette situation et lon peut laisser les diffrences se propager tant quelles ne sont pas utilises comme entre de la fonction boolenne XOR. Cette situation se prsente pour les deux dernires tapes. Toutes les perturbations insres sur les deux dernires tapes peuvent donc tre considres sans conditions pour les deux blocs (puisque mme si les diffrences se 76

5.3. Attaques de Wang et al. propagent travers les retenues, elles ne sexprimeront pas dans la fonction boolenne). Une analyse encore plus pousse met en vidence que pour le premier bloc, toutes les conditions relatives aux corrections des deux dernires tapes peuvent tre omises. Autrement dit, nous aurons Pi (78) = Pi (79) = 1. Ceci est d au fait que pour les deux dernires tapes, mme si la correction dune diffrence lentre de la fonction boolenne XOR ne se passe pas bien, nous pourrons corriger ce comportement dans le deuxime bloc avec la mme probabilit que si tout avait t parfaitement corrig au premier. Seules les deux dernires tapes sont concernes pour les mmes raisons que prcdemment (tout comportement invalide ne doit pas pouvoir sexprimer travers la fonction boolenne). Ainsi, nous navons pas contrler la moindre condition pour les deux dernires tapes du premier bloc, sans pour autant changer la probabilit de succs pour le deuxime. Ceci explique aussi pourquoi le premier bloc cote moins cher que le deuxime lors de la recherche dune collision pour SHA, le cot de ce dernier tant le terme dominant pour la complexit totale de lattaque.
non compress i i1 i i+1 i+2 i+3 i+4 i+5 i+6 Ai ---------------------------------------------------------------------------------unn--------------------------------------------------------------------------------------------------------------------------------------------------------------------Wi --------------------------------------------------unn-----------------------nuu---------------------------------nuu------------------------------nuu----------------------------nuu----------------------------nuu--------------------------------------compress i i1 i i+1 i+2 i+3 i+4 i+5 i+6 Ai -----------------------------------------------------------------------------------u--------------------------------------------------------------------------------------------------------------------------------------------------------------------Wi --------------------------------------------------unn-----------------------nuu---------------------------------nuu------------------------------nuu----------------------------nuu----------------------------nuu--------------------------------------Pi (i) 0.00 -1.00 0.00 -1.00 -1.00 -1.00 0.00 0.00 C (i) 0.5 1.0 1.0 1.0 0.5 0.0 0.0 0.0 Pi (i) 0.00 -3.00 0.00 -3.00 -3.00 -3.00 0.00 0.00 C (i) 1.5 3.0 3.0 3.0 1.5 0.0 0.0 0.0

F IG . 5.18 Compression de bits de 3 collisions locales adjacentes aux positions de bit 10, 11 et 12. Les probabilits pour cet exemple correspondent aux fonctions boolennes XOR ou MAJ. Moins quune relle avance de cryptanalyse, la compression de bits (terme introduit par Yajima et al. dans [YIN08a, YIN08b]) permet aussi de gagner quelques conditions tant donn un vecteur de perturbation. Elle intervient lorsque lon introduit plusieurs diffrences conscutives sur des bits adjacents dun mme mot. Dans ce cas prcis, lintroduction de ces perturbations peut tre vue comme une seule et unique perturbation, positionne sur le bit de poids le plus faible des bits concerns. Nous ne compterons alors que les conditions pour cette unique perturbation. Ceci sexplique par le fait quau lieu de contrler que la premire diffrence ne se propage pas, nous allons au contraire la forcer se diffuser (le cot restant le mme). On peut de ce fait gratuitement continuer de propager cette diffrence puis arrter la propagation par la dernire perturbation (celle de poids fort). Le cot est nul, puisque tout est contrl par le signe de lintroduction des perturbations adjacentes, choisies pralablement par lattaquant dans le message tendu. Dans le registre interne, une seule diffrence apparatra et nous naurons donc que celle-ci corriger lorsquelle inuencera la sortie de la fonction boolenne. Il faut cependant noter que certaines exceptions existent : il ne doit pas y avoir de diffrences conscutives sur les positions 1 et 2, 26 et 27 ou 31 et 0, car la propagation de la diffrence par laddition modulaire ne serait plus assure cause des rotations de 2 ou de 5 positions dans la formule de 77

Chapitre 5. Historique de la cryptanalyse des fonctions de la famille SHA mise jour des registres internes (la propagation des diffrences binaires signes serait arrte par le modulo de laddition modulaire). De plus, si au moins lune des perturbations se trouve dans une situation o deux diffrences sont prsentes dans la fonction boolenne (situations 3, 5 ou 6), alors la technique ne sapplique plus pour les mmes raisons que prcdemment. Bien entendu, cette mthode ne sera pas utile dans le cas de SHA-0 puisque toutes les perturbations sont positionnes sur le bit 1 uniquement. Par contre, elle pourra tre utilise dans le cas de SHA-1, par exemple pour les perturbations insres ltape 34 du vecteur de la gure 5.17. Nous donnons un exemple de compression de bit dans la gure 5.18. Toutes ces petites amliorations permettent, lorsquelles sont considres, un gain assez signicatif en complexit. On peut gnraliser ces techniques : certaines tapes, plusieurs tronons de chemin diffrentiels diffrents pourront convenir (ils aboutissent tous nalement au mme masque de diffrences sur les registres internes aprs quelques tapes). On peut donc observer la ralisation de nimporte lequel de ces tronons de chemin, et lon peut ainsi additionner leurs probabilits de succs respectives pour obtenir la probabilit relle lorsque lon cherchera une paire de messages valide.

78

C HAPITRE 6

Amlioration des mthodes de cryptanalyse


Sommaire
6.1 6.2 Un problme plusieurs dimensions . . . . . . . . . . . . . . . . . . . . . Recherche de chemin : le vecteur de perturbation . . . . . . . . . . . . . . 6.2.1 La technique de Wang et al. . . . . . . . . . . . . . . . . . . . . . . . 6.2.2 Les techniques avances . . . . . . . . . . . . . . . . . . . . . . . . . Recherche de chemin : la partie non linaire . . . . . . . . . . . . . . . . . 6.3.1 Calcul efcace de probabilit pour un chemin diffrentiel . . . . . . 6.3.2 Calcul efcace de rafnage de conditions . . . . . . . . . . . . . . . 6.3.3 Structure de lalgorithme . . . . . . . . . . . . . . . . . . . . . . . . . Recherche de candidats valides : les attaques boomerang . . . . . . . . . 6.4.1 Lattaque boomerang pour les algorithmes de chiffrement par blocs 6.4.2 Adapter lattaque boomerang aux fonctions de hachage itres . . . 6.4.3 Les diffrentes approches possibles . . . . . . . . . . . . . . . . . . . 6.4.4 Application la famille SHA . . . . . . . . . . . . . . . . . . . . . . 79 82 82 83 84 85 87 89 94 94 95 98 101

6.3

6.4

Nous tudions ici de nouvelles mthodes ou des amliorations de cryptanalyses existantes pour la famille de fonctions de hachage SHA. Ces avances ont toutes pour point de dpart commun dessayer de mieux comprendre les concepts sous-jacents des attaques de Wang et al., trs peu dcrites et difciles vrier. Cela permet soit la dcouverte de nouvelles techniques, soit une automatisation des anciennes, apportant ainsi une amlioration des rsultats.

6.1

Un problme plusieurs dimensions

Aprs la publication des attaques de lquipe chinoise contre les nombreuses fonctions de hachage de la famille MD-SHA, il fallut au reste de la communaut de recherche en cryptographie une assez longue priode pour comprendre le fonctionnement rel de ces techniques et pour vrier leur exactitude. Cela ne fut pas ais, du fait que peu de dtails taient donns et que lattaque complte est assez complexe. La preuve en est que, certaines erreurs furent dcouvertes aprs la publication des travaux et que lattaque contre SHA-1 en 263 appels la fonction de compression na ce jour toujours pas t publie, ni dcrite en dtail. Une premire tape de thorisation de ces avances fut ncessaire. 79

Chapitre 6. Amlioration des mthodes de cryptanalyse Les chercheurs ont rencontr une autre difcult dans lanalyse des avances de Wang et al.. En effet, tout ayant t tabli la main et tait dcrit sans amples explications, il est en pratique impossible de rutiliser ces attaques en essayant dy apporter une amlioration puisque tout le travail initial devrait alors tre refait. Par exemple, la recherche dune partie non linaire ou les modications de message devront tre reconstitues la main par le cryptanalyste. Un premier sujet dtude pourrait donc tre de trouver des algorithmes permettant deffectuer ces tches de manire automatise dans lespoir dobtenir de meilleures attaques sans pour autant apporter des concepts innovants de cryptanalyse. Une seconde voie pourrait ensuite tre, grce ces nouveaux outils, dessayer de mettre au point de nouvelles mthodes pour une ou plusieurs tapes de lattaque de Wang et al.. Par exemple, on pourra tenter damliorer la recherche de modications de message ou de trouver de nouvelles heuristiques en ce qui concerne les vecteurs de perturbation. Une question subsiste mme si lon dispose doutils automatiss et de nouvelles mthodes : comment obtenir la meilleure attaque nale possible partir de toutes les techniques connues ? On se rend rapidement compte que le problme est complexe et nest pas unidimensionnel. Utiliser les outils dans un ordre prcis napporte en gnral pas la meilleure attaque. Un attaquant pourrait tre tent de choisir tout dabord un vecteur de perturbation qui possde un poids de Hamming faible pour minimiser la complexit, puis de trouver les parties non linaires (si ncessaire) pour aboutir un chemin diffrentiel complet ; et enn, de rechercher une paire de messages valide laide dune mthode avance dacclration (modications de message, bits neutres, etc.). Cependant, il ne sait pas lavance si une partie non linaire peut tre trouve de manire efcace pour le vecteur de perturbation choisi, ou quel sera leffet de lacclration de recherche de paires valides suivant ce vecteur. Une telle stratgie est sous-optimale et il faut en pratique prendre en compte le plus de paramtres possible en mme temps. Cest ce qui explique, pour SHA-1, le passage contre-intuitif par Wang et al. de lattaque en 269 appels la fonction de compression [WYY05b] lattaque amliore [WYY05a] de complexit 263 : la premire possde a priori un meilleur vecteur de perturbation que la seconde, mais lacclration de recherche y est bien moins efcace. De plus, il est possible que le nombre de degrs de libert dans le chemin diffrentiel nal soit insufsant pour trouver une collision, ce qui obligera lattaquant tout recommencer depuis le dbut. Le sens inverse dutilisation des outils nest pas plus efcace puisquil nest pas vident de deviner lavance lefcacit de lacclration de recherche sans connatre le vecteur de perturbation ou la partie non linaire. Une mthode de proche en proche semble pour linstant tre la meilleure approche possible. Par exemple, si aprs avoir choisi un vecteur de perturbation et engendr une partie non linaire, on observe que lacclration de recherche est difcile mettre en oeuvre, on peut essayer dengendrer dautres parties non linaires pour corriger ce problme. Si cela ne suft toujours pas, il faudra sans doute changer le vecteur de perturbation ou modier la technique dacclration de recherche. Lattaque comporte donc plusieurs parties considrer et ne peut juste se rduire au chemin diffrentiel nal. Nous avons alors quatre paramtres interdpendants qui inuent sur la complexit totale de lattaque : le vecteur de perturbation, les parties non linaires, lacclration de la recherche dune paire de messages valide et la quantit de degrs de libert disponibles dans le chemin diffrentiel nal. Ceci est explicit dans la gure 6.1. Le vecteur de perturbation est bien entendu la colonne vertbrale de lattaque et dtermine approximativement la complexit de celle-ci. Il nous oblige xer les positions de diffrences sur les mots de message et consomme donc au moins la moiti des degrs de libert initialement disponibles (puisque dcider si lon souhaite ou non la prsence dune diffrence sur une 80

6.1. Un problme plusieurs dimensions

vecteur de perturbation

parties non linaires

degrs de libert

acclration de la recherche

F IG . 6.1 La cryptanalyse de SHA, un problme plusieurs dimensions. position de bit consomme un degrs de libert). Il est assez difcile de prdire la possibilit de trouver une partie non linaire tant donn un vecteur, la seule mthode tant concrtement de chercher cette partie. Concernant lacclration de la recherche dune paire de messages valide, on peut utiliser une heuristique naturelle en raisonnant sur le nombre de conditions prsentes juste aprs la partie non linaire. Ces conditions sont en effet celles susceptibles dtre contrles durant cette phase dacclration, et lon tentera destimer grossirement leur nombre. Comme expliqu prcdemment, la partie non linaire ninue pas directement sur la complexit nale de lattaque, mais elle est une condition sine qua none pour obtenir un chemin diffrentiel valide. En outre, on peut juger de la qualit de ce morceau de chemin diffrentiel : si la partie non linaire impose beaucoup de conditions, on consommera beaucoup de degrs de libert, essentiels pour obtenir une acclration de recherche puissante. Les degrs de libert naux doivent aussi tre en nombre sufsant pour esprer trouver une collision avec le chemin diffrentiel nal. Comme nous le verrons dans les sections suivantes, lacclration de la recherche existe sous de nombreuses formes, chacune de ces formes ayant des qualits et des dfauts. On peut gnralement observer quune acclration puissante consommera de nombreux degrs de libert. Il faudra alors utiliser les formes adquates et tablir un compromis entre la rapidit de vrication du chemin diffrentiel nal (le nombre de conditions) et la probabilit de trouver 1 (0) et donc directement dpendante des une collision avec ce chemin (probabilit gale Ne degrs de libert disponibles) pour obtenir la meilleure complexit nale. En effet, on peut trs bien imaginer une attaque o lon engendre pour le mme bloc plusieurs chemins diffrentiels diffrents partir du mme vecteur de perturbation : partir du vecteur de perturbation considr, on peut varier la manire de signer les perturbation ou encore engendrer plusieurs parties non linaires diffrentes. Chacun de ces chemins aura une probabilit relativement faible daboutir une collision cause du manque de degrs de libert, mais la vrication sera rapide grce lacclration de recherche puissante. En engendrant plusieurs chemins, la somme de ces probabilits sera sufsante pour obtenir une collision. Lavantage ici serait dobtenir une acclration trs puissante (et demandant donc beaucoup de degrs de libert) pour chacun des chemins diffrentiels. Dans ce cas, il faut bien entendu compter lensemble des tapes dans 81

Chapitre 6. Amlioration des mthodes de cryptanalyse la complexit nale, savoir, pour chaque chemin diffrentiel : la gnration des parties non linaires, ltablissement de lacclration de recherche et bien entendu la recherche nale dune paire de messages valide. Lattaquant doit tre capable de trouver en un temps relativement faible les parties non linaires et les acclrations de recherche pour chaque chemin diffrentiel. On saperoit que les degrs de libert sont les lments essentiels considrer pour optimiser lattaque. Nous prsentons dans les sections suivantes des mthodes avances pour chaque tape de lattaque, tout en gardant lesprit la problmatique des degrs de libert. Nanmoins, la meilleure technique ce jour pour SHA-1 semble tre une utilisation de proche en proche, tout en utilisant fortement lintuition de lattaquant. Dans le cas de SHA-0, les choses sont beaucoup plus simples puisque nous disposons dune trs grande quantit de degrs de libert (grce la physionomie du chemin diffrentiel, born une seule position de bit). Il reste un dernier point clarier : le calcul du cot nal. Les attaques mettant en dfaut la rsistance la recherche de collisions pour SHA-0 ou SHA-1 sont devenues trs complexes, et leur cot total est assez difcile valuer de manire thorique. En gnral, la plupart des estimations thoriques diffrent dun facteur non ngligeable des implantations. Ceci peut aussi tre expliqu par une implantation non optimale. Une manire naturelle pour rigoureusement comparer deux attaques diffrentes, ou deux outils diffrents, serait de mesurer le nombre moyen dappels la fonction de compression en une unit de temps donne et sur une plate-forme donne, avec une bonne implantation de lalgorithme (pour cela, on utilisera par exemple OpenSSL [OpenSLL]). On pourra ainsi obtenir une comparaison assez prcise du cot pratique en excutant les attaques sur des plates-formes similaires. Dans la suite, nous parlerons de complexit mesure lorsque nous utilisons cette mthode de comparaison.

6.2

Recherche de chemin : le vecteur de perturbation

Nous nous occupons dans cette section de trouver un vecteur de perturbation adquat. Nous avons dj expliqu des techniques avances pour chercher un bon vecteur, mais nous essayons ici de montrer les diffrences entre ces techniques et la mthode de Wang et al..

6.2.1

La technique de Wang et al.

Lalgorithme de recherche de vecteurs de perturbation de Wang et al. est assez simple. On construit tous les vecteurs sur 16 tapes conscutives ayant des perturbations sur les positions de bit 0 ou 1 (232 vecteurs possibles), puisque la position 1 est privilgier pour des raisons de probabilits dj expliques. Chacun de ces petits vecteurs dnit entirement un vecteur de perturbation entier, grce la formule dexpansion de message. On considre toutes les fentres de 16 tapes conscutives (80 16 = 64 possibilits en tout), ce qui nous donne nalement 64 232 candidats. Pour chaque vecteur test, on calcule de faon trs simple les conditions du chemin diffrentiel induit : dans le cas de la fonction boolenne XOR, chaque perturbation sur la position de bit 1 induit 2 conditions et 4 conditions sinon. Pour la fonction boolenne IF (respectivement MAJ), on compte 5 conditions (respectivement 4) quelle que soit la position de bit considre. On tient aussi compte des perturbations qui affectent deux fonctions boolennes diffrentes. Une compression de bits simple est considre (seulement dans le cas de deux perturbations 82

6.2. Recherche de chemin : le vecteur de perturbation adjacentes sur les positions de bit 0 et 1). On tient aussi compte des conditions qui peuvent tre relaxes la n du chemin diffrentiel. Enn, parmi tous les candidats, Wang et al. choisissent le vecteur imposant le moins de conditions entre les tapes 16 et 79. Un autre vecteur fut propos ultrieurement (il sagit en fait du mme vecteur dcal de 2 tapes), contenant plus de conditions, mais permettant une meilleure acclration de recherche dune paire de messages valide.

6.2.2

Les techniques avances

La technique dcrite par Wang et al. est assez simple et donne des vecteurs de perturbation relativement bons. Il est nanmoins possible dafner cette recherche. Une premire amlioration simple consisterait considrer une compression de bit gnralise, et non uniquement borne aux positions de bit 0 et 1. Lattaquant peut aussi remarquer que les conditions comptes pour une perturbation introduite la position de bit 31 sont trop nombreuses. Ceci est d au fait que lune des corrections de la perturbation seffectue sur cette mme position de bit, et leffet de propagation de la retenue peut tre relax. Ensuite, les cas o deux perturbations sont utilises en mme temps en entre dune fonction boolenne ne sont pas pris en compte. Ces cas permettent gnralement une diminution du nombre de conditions. Enn, Wang et al. ayant sous-estim lavantage pour un attaquant dintroduire des perturbations la position de bit 31, on pourra tendre la recherche cette position en plus de 0 et 1 dans les petits vecteurs sur 16 tapes. Ceci nous donne en tout 64 248 vecteurs, mais on peut rduire ce nombre en ne testant que ceux dont le poids de Hamming nest pas trop grand. Cette heuristique semble naturelle et nte que des vecteurs comportant vraisemblablement beaucoup de conditions. Plus gnralement, toutes ces amliorations peuvent tre dduites des tableaux B.1 et B.2 en Appendice. En programmant cette recherche, nous obtenons le tableau 6.1 pour SHA-0 et le tableau 6.2 pour SHA-1 qui rsument les rsultats en fonction de ltape de dpart considre. On peut remarquer que ce programme nous fournit de meilleurs chemins diffrentiels que ceux de Wang et al.. Une premire version de ces travaux a t publie par Yajima et al. [YIN08a] puis nous avons particip lamlioration de ces rsultats dans [YIN08b]. i 16 17 18 19 20 21 22 23 nombre de conditions 40 (39) 38 (38) 37,5 (36,5) 36 (36) 35,5 (34,5) 35 (34) 33,5 (32,5) 33 (32) i 24 25 26 27 28 29 30 31 nombre de conditions 32 (31) 32 (31) 32 (31) 30 (30) 30,5 (29,5) 30 (29) 29 (28) 29,5 (27,5)

TAB . 6.1 Nombre de conditions suivant ltape i de dbut de comptage dans le cas de SHA-0. Les nombres entre parenthses tiennent compte des conditions qui peuvent tre relaxes la n du chemin diffrentiel (cest le nombre rel de conditions pour le premier bloc).

83

Chapitre 6. Amlioration des mthodes de cryptanalyse i 16 17 18 19 20 21 22 23 nombre de conditions 87 (85) 83,5 (81,5) 79,5 (77,5) 76,5 (73,5) 74 (71) 72 (69) 70,5 (67,5) 67,5 (64,5) i 24 25 26 27 28 29 30 31 nombre de conditions 64,5 (61,5) 62 (59) 59 (57) 56,5 (54,5) 53,5 (51,5) 50,5 (48,5) 48 (46) 45,5 (43,5)

TAB . 6.2 Nombre de conditions suivant ltape i de dbut de comptage dans le cas de SHA-1. Les nombres entre parenthses tiennent compte des conditions qui peuvent tre relaxes la n du chemin diffrentiel (cest le nombre rel de conditions pour le premier bloc).

6.3

Recherche de chemin : la partie non linaire

Lune des composantes les plus importantes des attaques de Wang et al. [WYY05d, WYY05b, WYY05a, WYY05c] concerne la gnration de la partie non linaire. Hlas, ces recherches ayant t ralises de faon non automatise, grce un long et patient travail des chercheurs, toute rutilisation des chemins diffrentiels de Wang et al. est impossible moins daccomplir une nouvelle fois cette tche fastidieuse. Il est donc important de pouvoir engendrer des parties non linaires de manire automatise. Dans cette section, nous dcrivons les travaux de De Cannire et Rechberger [CR06] pour SHA-0 ou SHA-1, permettant de construire des parties non linaires de faon automatise et assez rapide, tant donn un vecteur de perturbation et une variable de chanage dentre initiale. Grce ces travaux ont pu tre engendres une collision pour SHA-1 rduit 64 tapes [CR06], puis une collision sur une version rduite 70 tapes [CMR07]. Larticle original ne fournit cependant que trs peu de dtails, insufsants pour permettre une implantation par le lecteur. Nous donnons donc ici tous les dtails ncessaires la programmation de cet outil trs utile et efcace la fois pour SHA-0 et SHA-1. La rapidit dexcution de lalgorithme tant un critre trs important, nous proposons galement des mthodes pour amliorer ce paramtre. Il faut noter que nous explicitons ici notre propre implantation, ce qui peut se traduire par quelques diffrences en comparaison des travaux originaux de De Cannire et al. Mme si cet algorithme constitue la meilleure approche actuelle, on peut citer dautres avances dans le domaine des outils automatiss pour la recherche de parties non linaires, par exemple le travail de Yajima et al. [YSN07]. Pour construire des parties non linaires dun chemin diffrentiel, nous aurons besoin de deux procdures. Ces procdures devront tre trs rapides excuter. Nous consacrons les deux sections suivantes cette problmatique. Nous examinerons ensuite comment lalgorithme gnral utilise ces procdures pour trouver des parties non linaires de manire heuristique. 84

6.3. Recherche de chemin : la partie non linaire

6.3.1

Calcul efcace de probabilit pour un chemin diffrentiel

Tout dabord, nous devons tre en mesure de calculer efcacement et exactement la probabilit incontrle Pi (i) pour chaque tape i, et ce, de manire trs rapide et pour nimporte quel type de chemin diffrentiel. Une manire trs nave et trs lente de calculer Pi (i) serait de parcourir toutes les possibilits suivant les conditions imposes sur les mots dtat interne Ai4 , . . . , Ai et sur le mot de message Wi , puis de compter les candidats qui vrient les conditions sur le mot de sortie Ai+1 . Par exemple, considrons le tronon de chemin diffrentiel trs simple de la gure 6.2. On testera tous les mots possibles pour le registre Ai4 , au nombre de 232 puisque chaque bit contient la condition aucune diffrence dnote par le caractre - . Pour chaque candidat de Ai4 , on testera toutes les valeurs possibles pour Ai3 (231 candidats), puis Ai2 (231 candidats), etc. Pour chaque combinaison, on regarde si les contraintes sur Ai+1 sont vries. On saperoit que la complexit devient trs vite rdhibitoire.
i Ai -----------------------------------------------------------1------------------------------0----------------------------------------------------------------------------------------------x Wi

i4 i3 i2 i1 i i+1

------------------------------x

termes Ai3 Ai2 Ai1 i (Ai1 , Ai2 , Ai3 ) Ai4 Ai Wi Ki Ai+1

contraintes ------------------------------1------------------------------0----------------------------------------------------------------------------------------------------------------------------------------------------------x01101110110110011110101110100001 ------------------------------x-

F IG . 6.2 Un exemple de calcul de Pi (i), en supposant que ltape i appartienne au deuxime tour. Le tableau du bas prend en compte les rotations de la formule de mise jour du registre interne Ai+1 . Cette mthode tant bien trop coteuse, nous lamliorons en faisant un calcul position de bit par position de bit. Pour cela, nous allons devoir considrer la retenue qui se propage entre chaque position durant laddition. Cette retenue ne pourra atteindre quun nombre limit de valeurs quil nous faut dterminer au pralable. Nous avons faire une addition 5 termes : deux mots dtat interne Ai et Ai4 , la sortie de la fonction boolenne (prenant en entre Ai1 , Ai2 et Ai3 ), le mot de message Wi et la constante Ki . Si pour une position de bit donne tous ces lments sont 1, le total sera 5 et nous aurons donc une retenue sortante gale 2 (la retenue initiale tant nulle). Si pour la position de bit suivante nous avons toujours tous 85

Chapitre 6. Amlioration des mthodes de cryptanalyse les lments 1, le total sera 7 cause de la nouvelle retenue arrivant et nous aurons par consquent une retenue sortante gale 3. Nous continuons, ainsi de suite, la prochaine tape aboutissant un total de 8, la retenue sortante tant gale 4. Enn, le total suivant est de 9 et la retenue reste gale 4. Finalement, nous avons montr que la retenue ne pouvait prendre que des valeurs situes entre 0 et 4 compris. Nous allons calculer la probabilit Pi (i) comme le produit des probabilits conditionnelles de succs pour chaque position de bit. Nous allons donc aussi maintenir un tableau de probabilits concernant la retenue entre chaque position de bit. Ce tableau sera compos pour chaque position de bit dune matrice 5 5 : il existe 5 valeurs de retenue possibles et il faut prendre en compte des transitions puisque lon a faire un chemin diffrentiel (mme si certaines transitions de retenue sont impossibles, par exemple de 4 vers 0). On commence par la position 0, en considrant bien entendu que la retenue arrivant en cette position est nulle. On parcourt alors toutes les possibilits pour chaque bit concern, suivant les contraintes du chemin diffrentiel, et lon compte le nombre de candidats qui vrient la condition sur le bit de sortie vis. On peut de cette faon rapidement calculer la probabilit de succs pour cette position de bit, ainsi que la matrice de probabilit de la retenue sortante, en ne prenant en compte que les candidats valides (ceux qui sont invalides ne doivent pas inuer sur les probabilits de la matrice de retenue sortante). On continue la position suivante en prenant maintenant en compte les probabilits de la matrice de retenue entrante et ainsi de suite jusquau bit 31. Pour illustrer cette mthode, prenons lexemple de la gure 6.2, o le tableau du bas est le plus lisible du fait que nous y avons incorpor les rotations des registres internes durant la mise jour de Ai+1 . En commenant la position de bit 0, le calcul est trs simple puisque nous avons uniquement des contraintes aucune diffrence sur tous les termes de laddition. Ainsi, nous avons une probabilit gale 1 de navoir aucune diffrence en sortie sur le bit 0 de Ai+1 , ce qui est bien attendu dans notre chemin diffrentiel (si nous avions la contrainte 1 sur le bit 0 de Ai+1 , la probabilit de succs aurait t de 1/2). Pour ce qui concerne la matrice de retenue sortante, sans expliciter le calcul exact, nous avons une probabilit de 1/16 davoir la transition 0 0, 10/16 davoir 1 1, 5/16 davoir 2 2, et une probabilit nulle pour les 22 transitions restantes (puisquaucune diffrence nest prsente en entre, la retenue ne change jamais). Pour la position de bit 1, nous avons une diffrence en entre de Ai et une diffrence attendue en sortie sur Ai+1 . On peut facilement sapercevoir que cela se produit avec probabilit 1, mais il faudra tout de mme parcourir tous les cas pour calculer la nouvelle matrice de retenue sortante. En effet, la retenue en sortie aura cette fois une probabilit de 1/2 de contenir une diffrence (une transition i j avec i = j ), selon que nous ayons une propagation de retenue ou non. Du fait que pour la position de bit 2 nous ne souhaitons aucune diffrence sur Ai+1 et puisquaucune diffrence napparat sur les entres, nous avons une probabilit de succs gale 1/2 pour cette position de bit. Seules les instances valides (celles ne propageant pas la diffrence sur la retenue) seront considres pour le calcul de la nouvelle matrice de probabilits de retenue. Cette matrice comporte de ce fait des probabilits nulles pour toutes les transitions i j avec i = j . Finalement, tous les cas des autres positions de bit sont trs simples parce que plus aucune diffrence napparat ni dans les entres, ni dans les retenues et nous attendons constamment la condition aucune diffrence sur Ai+1 , ce qui se produit toujours avec probabilit 1. Nous pouvons conclure que Pi (i) = 1/2. Cette fonction de calcul de Pi (i) tant cruciale et frquemment utilise, pour obtenir une bonne vitesse dexcution il est trs important durant limplantation dviter de recalculer une valeur dj calcule auparavant, en nhsitant pas pour ce faire stocker des rsultats. Pour acclrer le calcul, il est recommand de prcalculer et de stocker dans des tableaux, suivant les 86

6.3. Recherche de chemin : la partie non linaire entres possibles pour une position de bit, les sorties possibles correspondantes pour le registre Ai+1 et la retenue sortante. Enn, on peut utiliser certaines symtries existantes, par exemple entre les mots de registre interne dans les fonctions boolennes MAJ et XOR, ou encore entre Ai et Ai4 durant laddition.

6.3.2

Calcul efcace de rafnage de conditions

La seconde procdure dont nous avons besoin est un algorithme de rafnage des conditions. Par rafnage, nous entendons la dtermination de conditions non encore tablies et ncessaires au bon droulement du chemin diffrentiel, sur les registres internes ou sur les mots de message. Prenons par exemple le cas de la gure 6.3, qui est trs similaire celui de la gure 6.2. Nous y avons relax un certain nombre de conditions sur le mot de registre interne Ai+1 en ajoutant des ? . Lanalyse prcdente nous a montr que nous avons deux possibilits quiprobables : soit la diffrence prsente sur la position de bit 1 dans Wi provoque une propagation dans la retenue lors du calcul de laddition, soit elle reste borne la position de bit 1 de Ai+1 . Dans les deux cas, nous nous apercevons quune diffrence existera ncessairement sur le bit 1 de Ai+1 et quaucune diffrence ne sera prsente sur le bit 0. De ce fait, nous pouvons rafner ces conditions en remplaant les ? par un - pour le bit 0 et par un x pour le bit 1 dans le chemin diffrentiel de la gure 6.3. Pour le reste des positions de bit, rien ne peut tre dduit.
i Ai -----------------------------------------------------------1------------------------------0----------------------------------------------------------------???????????????????????????????? Wi

i4 i3 i2 i1 i i+1

------------------------------x

Ai -----------------------------------------------------------1------------------------------0----------------------------------------------------------------??????????????????????????????x

Wi

i4 i3 i2 i1 i i+1

------------------------------x

F IG . 6.3 Un exemple de rafnage. Le premier chemin nest pas rafn et nous pouvons trouver deux nouvelles conditions sur les bits 0 et 1 de Ai+1 . Nous obtenons ainsi une caractristique rafne pour le deuxime chemin diffrentiel. Comment maintenant implanter une telle fonction dans des cas beaucoup plus complexes que celui de la gure 6.3 ? En premier lieu, nous allons maintenir un grand tableau, que nous appellerons tableau de rafnage, indiquant pour chaque bit de chaque tape si un rafnage cette position de bit est ncessaire ou non (cela peut tre implant grce un tableau de 80 32 variables boolennes, une entre est gale 1 pour rafner et 0 pour dj rafn). Nous tendons 87

Chapitre 6. Amlioration des mthodes de cryptanalyse le chemin diffrentiel en considrant aussi les matrices de retenue entre chaque position de bit durant laddition. En effet, nous pouvons aussi rafner les conditions sur les retenues, mme si cela nest pas visible directement sur le chemin diffrentiel que nous afchons. Lalgorithme est trs simple : nous parcourons tous les bits de toutes les tapes et nous vrions quaucun bit du tableau de rafnage nest 1. Si nous rencontrons un tel bit, nous devons analyser cette position et agir en consquence. Soit aucune nouvelle condition ne peut tre dduite et nous modions le bit correspondant du tableau de rafnage 0 pour indiquer quaucun rafnage nest possible, soit nous trouvons une nouvelle condition et nous lappliquons au chemin diffrentiel. Cependant, tout ajout dune nouvelle condition impose lalgorithme de revrier certains bits puisque ltat a chang (de nouveaux bits du tableau de rafnage sont donc 1). Tout le problme est danalyser en dtail quels nouveaux bits peuvent potentiellement tre inuencs par cette modication pour obtenir une bonne rapidit dexcution de lalgorithme. Par exemple, revrier toutes les positions de bit possibles pour toutes les tapes possibles lorsque nous navons ajout quune seule condition reprsente un gaspillage doprations. Nous pouvons dduire assez facilement les rgles de mise jour suivantes, en fonction du type de condition modie : si nous modions une condition de ltat interne la position j de ltape i, soit Aj i : nous devons rafner six positions, savoir le bit j des tapes i et i + 2, le bit j + 5 de ltape i + 1, et enn les bits j 2 des tapes i + 3, i + 4 et i + 5. si nous modions une condition du mot de message la position j de ltape i, soit Wij : nous devons rafner nouveau la mme position, savoir le bit j de ltape i. si nous modions une condition de la matrice de retenue entre les positions j et j +1 de ltape i (matrice entrante pour la position de bit j +1, matrice sortante pour la position de bit j ) : nous devons rafner deux positions, savoir les bits j et j + 1 de ltape i. Il faut noter que les matrices de retenue sortantes des positions de bit 31 peuvent tre oublies puisque laddition sopre modulo 232 . De mme, les matrices de retenue entrantes la position de bit 0 ne peuvent tre rafnes du fait que la retenue est toujours nulle dans ce cas. Une fois ces rgles de mise jour dnies, il nous reste dcrire la fonction qui rafne une position de bit si besoin est. Pour cela, nous pouvons utiliser une version lgrement modie de lalgorithme de calcul de probabilit incontrle Pi (i) de la section prcdente. Pour une position de bit donne j une tape i, nous avons en entre les conditions dduites du chemin diffrentiel sur le bit j du mot de message Wi et les bits correspondants des mots de ltat interne Ai4 Ai (nous avons aussi les contraintes sur la matrice de retenue entrante la position j ). Nous allons simplement tester toutes les possibilits qui vrient ces conditions dentre et retenir celles compatibles avec les contraintes imposes en sortie sur le bit j de Ai+1 et sur la matrice de retenue sortante. Nous pouvons alors dduire plusieurs informations. Tout dabord, en ce qui concerne le rafnage des sorties, lespace de sortie atteint peut tre diffrent de celui dni par la condition sur le bit j de Ai+1 . Si tel est le cas, soit les espaces sont disjoints (ce qui implique une impossibilit et donc un chemin diffrentiel invalide), soit nous pouvons prciser la condition sur le bit j de Ai+1 (et donc ensuite mettre jour les nouveaux bits vrier suivant les rgles tablies prcdemment). De plus, nous pouvons aussi rafner exactement de la mme manire la matrice de retenue sortante la position j . Pour ce qui concerne les entres, nous pouvons examiner quel espace a permis datteindre de faon valide la condition sur le bit j de Ai+1 et celles sur la matrice de retenue sortante la position j . Cela nous permettra de prciser les contraintes sur les entres si ncessaire (puis de mettre jour les nouveaux bits 88

6.3. Recherche de chemin : la partie non linaire vrier le cas chant), ou dinvalider le chemin diffrentiel si nous avons affaire des espaces disjoints. Cette mthode est prsente graphiquement dans la gure 6.4. Il faut tre attentif durant limplantation moduler le rafnage suivant ltape dans laquelle on se trouve, puisque la formule de mise jour est diffrente suivant le tour considr.
+2 Aj i4

+2 Aj i3

Entres

+2 Aj i2

Aj i1
j 5 Ai

Entres
Wij

1er rafnage

2me rafnage

Ci

j +1/j

Aj i+1

Ci

j/j 1

Sorties

Sorties
F IG . 6.4 Technique de rafnage pour une position j de ltape i. Une fois lensemble des espaces possibles parcourus et ceux valides dduits, on rafne les sorties (le bit j de Ai+1 et j +1/j la matrice de retenue sortante note Ci ) et les entres (les bits du message Wij , les bits correspondants des mots de ltat interne Ai4 Ai et la matrice de retenue entrante note j/j 1 Ci ). Chaque modication dduite (si cela se produit) doit tre suivie de la mise jour des nouveaux bits rafner dans le tableau de rafnage. Nous avons ainsi entirement dcrit une technique qui permet de trouver des conditions non prcdemment dduites sur un chemin diffrentiel : chaque bit gal 1 du tableau de rafnage sera trait (plus dautres si des modications ont eu lieu), et le tableau de rafnage en sortie de lalgorithme sera entirement nul. La procdure propose ne permet de rafner qu un degr 1 puisquon ne cherche pas tablir dautres conditions plus complexes qui pourraient tre dduites si lon augmentait le champ de vision de lalgorithme. Mme si un rafnage de degrs suprieur tait possible implanter (quoiquassez complexe), son cot serait excessif compte tenu de lutilisation que nous voulons en faire. La mthode de rafnage propose prsente lavantage dtre assez simple dimplantation, mais galement trs rapide.

6.3.3

Structure de lalgorithme

Nous disposons prsent dun algorithme qui calcule la probabilit incontrle Pi (i), mais aussi et surtout dune fonction permettant le rafnage de conditions non prcdemment d89

Chapitre 6. Amlioration des mthodes de cryptanalyse duites. Cette dernire nous renvoie de plus une impossibilit si un chemin diffrentiel possde des conditions contradictoires. Avant de dcrire le coeur de lalgorithme de recherche de parties non linaires, nous devons prparer le chemin diffrentiel de dpart. Nous avons en entre de lalgorithme un vecteur de perturbation et une valeur de variable de chanage (pouvant potentiellement comporter des diffrences). Nous crons donc en premier lieu le squelette du chemin diffrentiel grce ces deux entres, mais nous allons relaxer toutes les conditions sur les registres internes entre A0 et Ak . Ce paramtre k dpend grandement du vecteur de perturbation et devra tre dtermin empiriquement par lattaquant pour faciliter la tche de lalgorithme. Bien entendu, nous ne modions pas les conditions sur les mots de message entre ces tapes puisque la partie non linaire ne concernera que les registres internes. En outre, nous avons observ quen relaxant lgrement les conditions sur les positions de bit de poids trs faible ou trs fort des registres internes aprs ltape k , lalgorithme prsente un meilleur comportement. Une fois ce premier squelette cr, nous appelons la fonction de rafnage pour aboutir un chemin diffrentiel CDdepart qui sera notre point de dpart. Nous donnons un exemple dun tel squelette dans la gure 6.5.
i -4 : -3 : -2 : -1 : 00 : 01 : 02 : 03 : 04 : 05 : 06 : 07 : 08 : 09 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : 18 : Ai 00001111010010111000011111000011 01000000110010010101000111011000 01100010111010110111001111111010 11101111110011011010101110001001 01100111010001010010001100000001 ????x--------------------------???????????????????????????????x ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???????????????????????????????? ???----------------????????????? ???------------------??????????? ???--------------------????????? ???----------------------??????? ??-------------------------????? ??x---------------------------?? ??-----------------------------? Wi L(i) Pi (i) Ne (i)

xxx-x------------------------------x-----------------------xx----xx--------------------------x-xxx-----------------------x-xxx--x----------------------x-----x-xx---------------------x---xxxx-x---------------------x-x-x-xx-x----------------------x------x--------------------------x--xx-----------------------xx-xx-xx----------------------x-------x----------------------x---x-xxx----------------------x---x--xx---------------------------xx--------------------------------------------------------x--xx-----------------------------x--x-----------------------x-x----x-----------------------x---

32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 0 0 0

0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -16.00 -18.00 -20.00 -22.00 -25.00 -12.28 -11.16 -9.33

-244.40 -212.40 -180.40 -148.40 -116.40 -84.40 -52.40 -20.40 11.60 43.60 75.60 107.60 123.60 137.60 149.60 159.60 166.60 154.31 143.15

F IG . 6.5 Un exemple de squelette de dpart CDdepart , avec k = 11. Nous ne montrons ici quun tronon du chemin diffrentiel total tant donn que la partie non linaire se situe dans les premires tapes. On peut observer que les conditions sur le registre A1 ont t rafnes puisquau dpart ce registre tait entirement non contraint. Nous avons remarqu empiriquement que la forme en triangle des conditions relaxes aprs ltape k donne de bons rsultats. Le coeur de lalgorithme est alors trs simple : nous allons tirer alatoirement un bit des registres internes entre les tapes 0 et k , et ragir suivant sa valeur. Si ce bit ne possde aucune condition ( ? ), nous imposons quaucune diffrence ny soit prsente ( - ), nous mettons 1 le bit du tableau de rafnage correspondant la modication et nous rafnons le chemin diffrentiel. Si ce bit possde dj une diffrence ( x ), nous forons son signe en tirant alatoirement une diffrence montante ( n ) ou descendante ( u ), ensuite nous mettons jour le tableau de rafnage et nous rafnons le chemin. Pour tout autre type de condition, nous ne faisons rien. On poursuit de la mme manire, et si lon rencontre une impossibilit un moment donn, on peut revenir une tape en arrire en annulant la prcdente modication (ou 90

6.3. Recherche de chemin : la partie non linaire


i -4 : -3 : -2 : -1 : 00 : 01 : 02 : 03 : 04 : 05 : 06 : 07 : 08 : 09 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : 18 : Ai 00001111010010111000011111000011 01000000110010010101000111011000 01100010111010110111001111111010 11101111110011011010101110001001 01100111010001010010001100000001 -0u0u111011001000-------0-0----1 -01-1nnnnnnnnnnnnnnnnnnnnnn-nnnn -n-uu-010000111-------u---u---00 x---10111101n010u-----????-----E -x-0-00------un-nn-nnD-?--?-?----x0----------00n-n---???-?---D---01------n---01B5x---B?-D-B??x n-n-0--------0----0-u0--u-?-?---n--0--------0------1--------x---010------------Bx---u---??---? --u--------------Bx-0---Ex-u-n-0 ----1-------------------1-n--uu1 ?-n-1--------------------n-----n x1--1-------------------DB--Dx?0 ?-n-1--------------------n-----0 -x--1-------------------------?1 -?u11--------------------------x ----0-------------------------- Ai 00001111010010111000011111000011 01000000110010010101000111011000 01100010111010110111001111111010 11101111110011011010101110001001 01100111010001010010001100000001 -0u0u11101100100001010000-0010-1 -01-1nnnnnnnnnnnnnnnnnnnnnn-nnnn -n-uu-0100001111001100u010u11000 n1--10111101n010u01110uu1n1---1n -u-0-00------un-nn0nnn0u11u0u----u0----------00n1n1-1n1u--01-0---01------n---01-0u101u00n00u1u n0n-0--------0----0-u0--u1n1n1-1 -n1-0--------0------100110-0-u01 --010------------un---u001u0011n 01u--------------un00---1n-u1n-0 01--1-------------------1-n10uu1 1-n-1--------------11----n00110n u1--1-------------------nu-1nun0 n1n-1--------------------n--1110 1n1-1---------------------10-0u1 -uu11----------------------1---n ----0-------------------------- Wi L(i) Pi (i) Ne (i)

xnn0u1111010111110-------------0 -1--n1001100----------------uu10 -1-nu-11111111-----------------0 x-nuu001101-----------------u-xxx--n----------------------x-----x-xn---------------------x---xxxx-n---------------------x-x-x-xx-n----------------------x------x--------------------------x--xx-----------------------xx-xx-xx----------------------x-------n----------------------x---x-xxx----------------------u---x--un---------------------------xx--------------------------------------------------------x--0 xx-----------------------------x--x-----------------------x-x----x-----------------------x--- Wi

14 19 20 22 31 31 31 31 32 32 32 31 31 30 32 31 0 0 0

-2.00 -16.07 -4.00 -12.42 -20.42 -17.43 -16.65 -22.51 -21.36 -16.82 -21.69 -19.85 -16.02 -8.74 -15.49 -8.53 -9.50 -8.68 -5.63

-60.68 -48.68 -45.75 -29.75 -20.16 -9.58 4.00 18.35 26.84 37.48 52.66 62.98 74.13 89.11 110.37 126.88 149.36 139.86 131.18

i -4 : -3 : -2 : -1 : 00 : 01 : 02 : 03 : 04 : 05 : 06 : 07 : 08 : 09 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : 18 :

L(i)

Pi (i)

Ne (i)

xnn0u1111010111110001111--01---0 -1--n10011001010001--001----uu10 -1-nu-1111111110100----1001-1--0 x-nuu001101001010011011101--u-n0 xx--n--------00-1--------10n-----u-xn--------10000--------x---xuux-n----------1-----1----u-u-x-xx-n------------------0---n------u---------------0----------x--xn-------------------1---xx-xn-nu----------------------x-------n---------------------1u1--x-nxx----------------------u---0 x--un--------------------------1 -un-1--------------------------1 ----1-----------------