- Specifications SHA-256
-
Spécifications SHA-256
SHA-256 est une fonction de hachage cryptographique dérivée de SHA-1 qui fournit une empreinte de 256 bits. Pour l'histoire, la cryptanalyse et d'autres aspects liés à cette fonction, voir l'article SHA-256.
Sommaire
Introduction
Ce texte est adapté du document officiel FIPS 180-2 (Secure Hash Standard)[1]. Il décrit les spécifications du standard SHA-256, dont l'objectif est de calculer une représentation condensée de données électroniques (message).
Quand un message inférieur à 264 bits est passé à l'algorithme implémentant SHA-256, on obtient en sortie ce qu'on appelle un haché, ou condensé de ce message. La longueur d'un condensé obtenu via SHA-256 est de 256 bits.Cet algorithme peut être découpé en deux phases : le prétraitement et le calcul du condensé.
- Le prétraitement implique
-
- de compléter le message par des informations le rendant compatible avec l'algorithme SHA-256 (remplissage)
- son analyse pour le découper en blocs de 512 bits
- l'initialisation de variables de travail
- Le calcul du condensé génère un tableau à partir du message complété, puis le transforme via l'utilisation de fonctions, de constantes, d'opérations binaires détaillées plus loin. L'ensemble effectué de manière itérative permet de générer des séries de valeurs de hachage à chaque tour. Le condensé final est le dernier état de ces valeurs de hachage.
Les caractéristiques de SHA-256 sont les suivantes :
- taille du message : 264 bits maximum
- taille des blocs : 512 bits
- taille des mots : 32 bits
- taille du condensé : 256 bits
- niveau de sécurité : 2128 bits (attaque anniversaire)
Symboles et termes utilisés
Paramètres
a, b, c, ..., h = variables de travail (en l'occurrence des mots de w bits), utilisées dans le calcul des hachés
H(i) = la valeur de hachage n° i. H(0) est la valeur initiale du hachage. H(N) est la dernière valeur de hachage.
= le mot (w bits) n° j de la valeur de hachage n° i, où est le mot de poids le plus fort (à gauche) de la valeur de hachage i.
Kt = constantes itératives selon la valeur de t, utilisées dans le calcul de hachage
k = nombre de 0 ajoutés au message lors du prétraitement (complément)
l = longueur du message M, en bits
m = nombre de bits contenus dans un bloc, soit 512 bits
M = message à traiter
M(i) = bloc n° i (m bits), du message M
= mot (w bits) n° j, du bloc (m bits) n° i, du message M
n = nombre de bits de décalage ou de rotation à appliquer au mot quand associé à une fonction binaire
N = nombre de blocs de m bits contenus dans le message M après complément
T = variable temporaire, mot de w bits, utilisée dans le calcul de condensé
w = nombre de bits contenus dans un mot, soit 32 bits.
Wt = le mot n° t du tableau déduit du messageSymboles
La notation hexadécimale utilisée ici sera: 0x
- exemple:
= opération binaire AND
= opération binaire OR
= opération binaire XOR
= complément binaire
+ = addition modulo 2w
< < = décalage binaire à gauche, où x < < n s'obtient en supprimant les n bits de gauche de x et ajoutant n zéros à droite.
> > = décalage binaire à droite, où x > > n s'obtient en supprimant les n bits de droite de x et ajoutant n zéros à gauche.Opérations sur les mots
Elles utilisent les conventions suivantes :
- opérations binaires bit à bit (cf. symboles)
- addition modulo 2w, soit 232
-
- L'opération x + y est définie comme suit. Soient deux mots x et y représentant les nombres entiers X et Y, tels que , on a Z le résultat de l'addition modulo 232 de X et Y.
- . On convertit Z en un mot z, et on définit alors z = x + y
- l'opération de décalage binaire à droite , où x est un mot de 32 bits et , est définie par :
- l'opération de rotation binaire par la droite , où x est un mot de 32 bits et , est définie par :
Fonctions et constantes
Fonctions
Cette section décrit les fonctions utilisées lors du calcul des valeurs de hachage. SHA-256 utilise 6 fonctions logiques travaillant sur des mots de 32 bits notés x, y, z. Le résultat de chacune de ces fonctions est un nouveau mot de 32 bits en sortie.
Constantes
SHA-256 utilise 64 valeurs constantes de mots de 32 bits, notés . ces nombres représentent les 32 premiers bits de la partie décimale des racines cubiques des 64 premiers nombres premiers. Les valeurs suivantes sont exprimées en notation hexadécimale (base 16).
428a2f98 71374491 b5c0fbcf e9b5dba5 3956c25b 59f111f1 923f82a4 ab1c5ed5 d807aa98 12835b01 243185be 550c7dc3 72be5d74 80deb1fe 9bdc06a7 c19bf174 e49b69c1 efbe4786 0fc19dc6 240ca1cc 2de92c6f 4a7484aa 5cb0a9dc 76f988da 983e5152 a831c66d b00 327c8 bf597fc7 c6e00bf3 d5a79 147 06ca6351 14292967 27b70a85 2e1b2138 4d2c6dfc 53380d13 650a7354 766a0abb 81c2c92e 92722c85 a2bfe8a1 a81a664b c24b8b70 c76c51a3 d192e819 d6 990 624 f40e3585 106aa070 19a4c116 1e376c08 2748774c 34b0bcb5 391c0cb3 4ed8aa4a 5b9cca4f 682e6ff3 748f82ee 78a5636f 84c87 814 8cc70 208 90befffa a4506ceb bef9a3f7 c67 178f2 Prétraitement
Cette opération se déroule en trois étapes : compléter le message M, découper le résultat en blocs, et initialiser les valeurs de hachage
Complément de M
Il s'agit ici d'ajouter des informations à M pour qu'il soit d'une taille multiple de 512 bits.
pour ce faire, l'on ajoute un bit "1" à la fin du message M, puis k zéros, où k est la plus petite solution non négative de l'équation: l + 1 + k = 448 mod 512
On ajoute alors un bloc de 64 bits correspondant à la représentation binaire de l.Exemples :
- M = "abc", l = 8 x 3 = 24, k = 448 - (l + 1) = 448 - (24 + 1) = 423
-
- On ajoute "1", puis quatre cent vingt trois "0", puis 64 bits finissant par "011000" (pour 24) à M.
- On obtient alors un message complété à 512 bits.
- M quelconque tel que l = 500 bits, k = 448 - (l + 1) = 448 - (500 + 1) = -53
-
- Comme k ne peut pas être négatif, on lui ajoute 512 en prenant en compte le modulo de l'équation, pour obtenir k = 459
- On ajoute "1", puis quatre cent cinquante neuf "0", puis 64 bits finissant par "111110100" (pour 500) à M.
- On obtient alors un message complété à 512 bits.
Découpage en blocs
Le message complété est découpé en N blocs de 512 bits, notés . Chaque bloc de 512 bits est ensuite découpé en 16 mots de 32 bits, notés .
Initialisations
Les huit variables suivantes sont affectées de valeurs initiales comme suit :
Calcul du condensé (haché)
Pour ce traitement on utilisera
- un tableau de 64 mots, notés
- huit variables notées
- huit variables contenant les valeurs de hachage, notées et initialisées précédemment en
-
- Ces variables contiendront itérativement de nouvelles valeurs de hachage, , pour finalement contenir le condensé de M, dans .
- deux variables, notées T1 et T2, mots de 32 bits.
On traite successivement les N blocs de M selon les étapes suivantes
Pour i = 1 à N
{- 1. On remplit le tableau , selon
- 2. On initialise a,b, c, d, e, f, g et h avec les valeurs de hachage du tour précédent
- 3. Pour t = 0 à 63
- {
- }
- 4. Calcul des valeurs de hachage intermédiaires
}
Après répétition des quatre étapes ci-dessus pour les N blocs du message M, (i.e., après traitement de ), le condensé de 256 bits de M est obtenu par concaténation des valeurs
Liens externes
- ↑ FIPS PUB 180-2, Secure Hash Standard (incluant SHA-1, SHA-256, SHA-384 et SHA-512)
Fonctions de hachage cryptographiques ModifierAlgorithmes : AR | Boognish | FFT-hash | HAS-160 | Haval | MD2 | MD4 | MD5 | MD6 | N-hash | PANAMA | RIPEMD | RIPEMD-128 | RIPEMD-160 | RIPEMD-256 | SHA-0 | SHA-1 | SHA-224 | SHA-256 | SHA-384 | SHA-512 | Snefru | StepRightUp | Tiger | VSH | Whirlpool Cryptanalyse : Paradoxe des anniversaires | Linéaire / Différentielle | Attaque par force brute | Effet avalanche | Pseudo-collision Architecture : Remplissage | Fonction de compression | Construction de Merkle-Damgard | Construction de Miyaguchi-Preneel | Construction de Matyas-Meyer-Oseas | Construction de Davies-Meyer
- Portail de la cryptologie
Catégorie : Algorithme de hachage
Wikimedia Foundation. 2010.