SHA-3
Keccak (prononciation: [kÉtÊak], comme âketchakâ)[1] est une fonction de hachage cryptographique conçue par Guido Bertoni, Joan Daemen, MichaĂ«l Peeters et Gilles Van Assche Ă partir de la fonction RadioGatĂșn.
SHA-3 est issu de la NIST hash function competition qui a Ă©lu l'algorithme Keccak[2] le . Elle nâest pas destinĂ©e Ă remplacer SHA-2, qui nâa Ă l'heure actuelle pas Ă©tĂ© compromise par une attaque significative, mais Ă fournir une autre solution Ă la suite des possibilitĂ©s d'attaques contre les standards MD5, SHA-0 et SHA-1.
Keccak est une fonction éponge[3] - [4] dans laquelle les blocs du messages sont XORés avec des bits initiaux, ensuite permutés de maniÚre réversible.
L'algorithme Keccak tel que soumis initialement est parfois utilisé, il diffÚre de l'algorithme spécifié par le NIST car le NIST a spécifié la maniÚre de compléter le message lorsque la longueur du message n'est pas égale à la taille requise en entrée par la fonction éponge. Les résultats sont différents[5].
La permutation par bloc de Keccak
Keccak est une fonction Ă©ponge dont nous allons dĂ©crire la transformation, appelĂ©e f dans la terminologie de la construction de lâĂ©ponge. Cette transformation est une permutation valable en choisissant un mot dâune taille qui soit une puissance de deux w = 2â. Dans le cas de Keccak les mots sont de 64-bits, soit â=6.
LâĂ©tat interne de cette fonction sera vu comme une matrice de dimension 5Ă5Ăw. sera le bit de lâentrĂ©e. Le calcul des indices est effectuĂ© modulo 5 pour les deux premiĂšres dimensions, et modulo w pour la troisiĂšme.
La fonction f de Keccak est une permutation qui consiste en 12+2â itĂ©rations (soit 24) de cinq sous routines assez simples :
- La routine Ξ
- Calculer la paritĂ© des 5Ăw colonnes (de 5 bits) de lâĂ©tat, puis calculer le ou exclusif entre deux colonnes voisines.
- La routine Ï
- DĂ©caler circulairement les 25 mots dâun nombre triangulaire (0, 1, 3, 6, 10, 15, âŠ). nâest pas dĂ©calĂ©, et :
- pour chaque 0 †t < 24 :
- La routine Ï
- Permutation des 25 mots avec un motif fixé:
- La routine Ï
- Combiner bit Ă bit des lignes selon la formule :
- Cette opération est la seule dite non linéaire.
- La routine Îč
- Calculer le ou exclusif dâune constante avec un mot de lâĂ©tat, qui dĂ©pend du numĂ©ro de lâitĂ©ration ( n ):
- pour chaque 0 †m †â : est XorĂ© avec le bit numĂ©rotĂ© m+7n dâune sĂ©quence LFSR de degrĂ© 8.
- Cette derniÚre étape a pour objectif de casser les derniÚres symétries laissées par les précédentes.
Hacher des messages de taille variable
SHA-3 utilise la construction de lâĂ©ponge, dans laquelle lâentrĂ©e est, mĂ©taphoriquement dans une premiĂšre phrase absorbĂ©e par lâĂ©tat, Ă une certaine vitesse, et dans une deuxiĂšme essorĂ©e, Ă la mĂȘme vitesse.
Pour absorber r bits des donnĂ©es, la donnĂ©e est XORĂ©e dans les premiers bits de lâĂ©tat, puis la permutation par blocs est appliquĂ©e si une sortie additionnelle est dĂ©sirĂ©e.
La capacitĂ© de la fonction de hachage, les c=25w-r bits dâĂ©tats qui ne sont jamais directement touchĂ©s par lâentrĂ©e ou la sortie, est un paramĂštre important. Elle peut ĂȘtre ajustĂ©e en fonction de la sĂ©curitĂ© attendue de la construction, mais la norme SHA-3 la fixe raisonnablement Ă c=2n, avec n la taille de lâempreinte voulue.
Ainsi r, la quantitĂ© de bits du message traitĂ©e Ă chaque permutation, dĂ©pend de la taille dâempreinte dĂ©sirĂ©e. Les diffĂ©rents choix de taux r sont 1152, 1088, 832, ou 576 (144, 136, 104 ou 72 octets) pour des tailles dâempreinte de 224, 256, 384 et 512 bits, respectivement, pour w fixĂ© Ă 64.
Pour aligner le message sur une taille multiple de la taille dâun bloc de r bits, il est comblĂ© (par remplissage, ou padding en anglais) avec le motif binaire 10...01 : un premier bit Ă 1, suivi Ă©ventuellement du nombre appropriĂ© de bits Ă 0 (au maximum r-1 bits), mais toujours suivi dâun autre bit Ă 1. Ce dernier bit est une prĂ©condition nĂ©cessaire Ă la preuve de sĂ©curitĂ© de la construction de lâĂ©ponge (le dernier bloc de message doit ĂȘtre non nul).
Lâalgorithme se dĂ©roule ainsi : lâĂ©tat est initialisĂ© Ă 0, lâentrĂ©e est comblĂ©e, dĂ©coupĂ©e en blocs de r bits. LâentrĂ©e est absorbĂ©e par lâĂ©tat, câest-Ă -dire que pour chaque bloc elle est XORĂ©e avec lâĂ©tat puis la permutation est appliquĂ©e sur le rĂ©sultat.
Une fois toutes les permutations effectuĂ©es, lâempreinte rĂ©sultat est constituĂ©e des n premiers bits de lâĂ©tat. r est toujours plus grand que n, il nây a par consĂ©quent jamais besoin dâappliquer plusieurs permutations lors de la phase dâessorage. Dans dâautres applications comme Optimal Asymmetric Encryption Padding (OAEP) une sortie de taille variable est utile. Dans ce cas, n est un paramĂštre de sĂ©curitĂ© plus quâune simple taille de sortie.
Des variantes de la fonction de permutation permettant de gĂ©nĂ©rer des hachages plus petits sont Ă©galement disponibles pour des tailles de hachage allant jusquâĂ la moitiĂ© de la taille de leur Ă©tat interne, si le taux r est suffisamment faible. Elles nâĂ©taient pas nĂ©cessaire pour la candidature Ă la compĂ©tition SHA. Par exemple, il est possible de calculer une empreinte de 256 bits en utilisant 25 mots de 32 bits si r=800â2Ă256=288, soit 32 octets par itĂ©ration.
SHA-3, instanciation la construction de lâĂ©ponge, pourrait sâĂ©crire en pseudo-code :
- fonction SHA-3(flux) :
- paramĂštres de la construction :
- f : une transformation de b bits â b bits, dĂ©crite dans la prĂ©cĂ©dente section
- r : le nombre de bits par bloc de sortie
- pad : une fonction de comblement du flux dâentrĂ©e en blocs entiers de r bits
- ns : le nombre de blocs de sortie
- variables internes :
- état : un tableau de b bits, initialisés à 0, divisé en état[1..r] et état[r+1..b]
- blocs : un tableau de blocs de r bits chacun
- z : une chaĂźne Ă retourner, de longueur nsĂr, initialisĂ©e vide
- algorithme :
- (* phase dâabsorption *)
- blocs â dĂ©coupe pad(flux) en blocs de taille r bits
- pour chaque p dans blocs :
- Ă©tat â f(Ă©tat[1..r] â p)
- (* phase dâessorage *)
- répéter ns fois :
- z â concatĂšne(z, Ă©tat[1..r])
- Ă©tat â f(Ă©tat)
- retourne z
Notes et références
- (en) Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche, « The Keccak sponge function family: Specifications summary », sur http://keccak.noekeon.org/ (consulté le )
- Patrick Guignot, « Keccak remporte la mise et devient SHA-3 », sur Linuxfr
- (en) Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche, « Sponge Functions », Ecrypt Hash Workshop 2007
- (en) Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche, « On the Indifferentiability of the Sponge Construction », EuroCrypt 2008
- Valeur de hash de la chaine 'abc' pour plusieurs variantes de l'algorithme