AccueilđŸ‡«đŸ‡·Chercher

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

Illustration d'une fonction Ă©ponge
La construction de l’éponge pour les fonctions de hachages. Les pi sont l’entrĂ©e, les zi sont l’empreinte en sortie. La « capacitĂ© » c, inutilisĂ©e, devrait ĂȘtre le double de la rĂ©sistance voulue aux collisions ou aux attaques de prĂ©image.

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) Cet article est partiellement ou en totalitĂ© issu de l’article de WikipĂ©dia en anglais intitulĂ© « Keccak » (voir la liste des auteurs).
  1. (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 )
  2. Patrick Guignot, « Keccak remporte la mise et devient SHA-3 », sur Linuxfr
  3. (en) Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche, « Sponge Functions », Ecrypt Hash Workshop 2007
  4. (en) Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche, « On the Indifferentiability of the Sponge Construction », EuroCrypt 2008
  5. Valeur de hash de la chaine 'abc' pour plusieurs variantes de l'algorithme

Annexes

Articles connexes

Liens externes

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.