Utilisateur:Qwyvin/BLAKE (fonction de hachage)

Une page de Wikipédia, l'encyclopédie libre.

BLAKE est une fonction de hachage cryptographique basée sur le chiffrement de flux ChaCha de Daniel J. Bernstein, mais une copie permutée du bloc d'entrée, XORé avec des constantes de tour, est ajoutée avant chaque tour ChaCha. Comme SHA-2, il existe deux variantes qui diffèrent par la taille des mots. ChaCha fonctionne sur un tableau de mots de dimensions 4x4. BLAKE combine à plusieurs reprises une valeur de hachage de 8 mots avec 16 mots du message, tronquant le résultat de ChaCha pour obtenir la valeur de hachage suivante. BLAKE-256 et BLAKE-224 utilisent des mots de 32 bits et produisent respectivements des tailles de condensé de 256 bits et 224 bits, tandis que BLAKE-512 et BLAKE-384 utilisent des mots de 64 bits et produisent respectivement des tailles de condensé de 512 bits et 384 bits.

La fonction de hachage BLAKE2, basée sur BLAKE, a été annoncée en 2012. La fonction de hachage BLAKE3, basée sur BLAKE2, a été annoncée en 2020.

Histoire[modifier | modifier le code]

BLAKE a été proposé au concours de fonctions de hachage du NIST par Jean-Philippe Aumasson, Luca Henzen, Willi Meier et Raphael C.-W. Phan. Parmi les 51 candidats proposés en 2008, BLAKE a atteint le tour final composé de cinq candidats mais a perdu contre Keccak en 2012, qui a été sélectionné pour l'algorithme SHA-3.

Algorithme[modifier | modifier le code]

Comme SHA-2, BLAKE se décline en deux variantes : une qui utilise des mots de 32 bits, utilisée pour calculer des hachages d'une longueur maximale de 256 bits, et une qui utilise des mots de 64 bits, utilisée pour calculer des hachages d'une longueur maximale de 512 bits. La transformation de bloc de base combine 16 mots d'entrée avec 16 variables, mais seulement 8 mots (256 ou 512 bits) sont conservés entre les blocs.

Il utilise une table de 16 mots constants (les premiers 512 ou 1024 bits de la partie fractionnaire de π) et une table de 10 permutations de 16 éléments :

σ[0] = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
σ[1] = 14 10 4 8 9 15 13 6 1 12 0 2 11 7 5 3
σ[2] = 11 8 12 0 5 2 15 13 10 14 3 6 7 1 9 4
σ[3] = 7 9 3 1 13 12 11 14 2 6 5 10 4 0 15 8
σ[4] = 9 0 5 7 2 4 10 15 14 1 11 12 6 8 3 13
σ[5] = 2 12 6 10 0 11 8 3 4 13 7 5 15 14 1 9
σ[6] = 12 5 1 15 14 13 4 10 0 7 6 3 9 2 8 11
σ[7] = 13 11 7 14 12 1 3 9 5 0 15 4 8 6 2 10
σ[8] = 6 15 14 9 11 3 0 8 12 2 13 7 1 4 10 5
σ[9] = 10 2 8 4 7 6 1 5 15 11 9 14 3 12 13 0

L'opération de base, équivalente au quart de tour de ChaCha, opère sur une colonne ou diagonale de 4 mots abcd, qui est combinée avec 2 mots du message m[] et deux mots constants n[] . Cette opération est effectuée 8 fois par tour complet :

j ← σ[r%10][2×i] // Calculs d'index
k ← σ[r%10][2×i+1]
a ← a + b + (m[j] ⊕ n[k]) // Étape 1 (avec entrée)
d ← (d ⊕ a) >>> 16
c ← c + d // Étape 2 (pas d'entrée)
b ← (b ⊕ c) >>> 12
a ← a + b + (m[k] ⊕ n[j]) // Étape 3 (avec entrée)
d ← (d ⊕ a) >>> 8
c ← c + d // Étape 4 (pas de saisie)
b ← (b ⊕ c) >>> 7

Dans l'algorithme ci-dessus, r est le nombre du tour (0–13) et i varie de 0 à 7.


On peut remarquer que, par rapport à la fonction du quart de tour de ChaCha, la fonction de BLAKE ajoute des mots du message, et les sens de rotation ont été inversés.


Ajustements[modifier | modifier le code]

Tout au long du concours de fonctions de hachage du NIST, les participants sont autorisés à "modifier" leurs algorithmes pour résoudre les problèmes découverts. Le nombre de tours de BLAKE est ainsi passé de 10 à 14 et de 14 à 16 pour les variantes à 32 et 64 bits respectivement.

Exemples de résumés[modifier | modifier le code]

Valeurs de hachage des différentes variantes de BLAKE pour une chaîne de caractères vide :

BLAKE-224("") =
7dc5313b1c04512a174bd6503b89607aecbee0903d40a8a569c94eed
BLAKE-256("") =
716f6e863f744b9ac22c97ec7b76ea5f5908bc5b2f67c61510bfc4751384ea7a
BLAKE-384("") =
c6cbd89c926ab525c242e6621f2f5fa73aa4afe3d9e24aed727faaadd6af38b620bdb623dd2b4788b1c8086984af8706
BLAKE-512("") =
a8cfbbd73726062df0c6864dda65defe58ef0cc52a5625090fa17601e1eecd1b628e94f396ae402a00acc9eab77b4d4c2e852aaaa25a636d80af3fc7913ef5b8

La modification d'un seul bit entraîne la modification de chaque bit de la sortie avec une probabilité de 50 %, démontrant l'effet d'avalanche:

BLAKE-512("The quick brown fox jumps over the lazy dog") =
1f7e26f63b6ad25a0896fd978fd050a1766391d2fd0471a77afb975e5034b7ad2d9ccf8dfb47abbbe656e1b82fbc634ba42ce186e8dc5e1ce09a885d41f43451
BLAKE-512("The quick brown fox jumps over the lazy dof") =
a701c2a1f9baabd8b1db6b75aee096900276f0b86dc15d247ecc03937b370324a16a4ffc0c3a85cd63229cfa15c15f4ba6d46ae2e849ed6335e9ff43b764198a

[[Catégorie:Somme de contrôle]] [[Catégorie:Pages avec des traductions non relues]]