Aller au contenu

SHA-2

Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuisSHA-512)

SHA-2(Secure Hash Algorithm) est une famille defonctions de hachagequi ont été conçues par laNational Security AgencydesÉtats-Unis(NSA), sur le modèle des fonctionsSHA-1etSHA-0,elles-mêmes fortement inspirées de la fonctionMD4deRon Rivest(qui a donné parallèlementMD5). Telle que décrite par leNational Institute of Standards and Technology(NIST), elle comporte les fonctionsSHA-256etSHA-512dont les algorithmes sont similaires mais opèrent sur des tailles de mot différentes (32 bits pour SHA-256 et 64 bits pour SHA-512),SHA-224etSHA-384qui sont essentiellement des versions des précédentes dont la sortie est tronquée, et plus récemmentSHA-512/256etSHA-512/224qui sont des versions tronquées de SHA-512. Le dernier suffixe indique le nombre de bits du haché.

Les algorithmes de la famille SHA-2, SHA-256, SHA-384 et SHA-512, sont décrits et publiés en compagnie de SHA-1 comme standard du gouvernement fédéral des États-Unis (Federal Information Processing Standard) dans leFIPS 180-2 (Secure Hash Standard)datant de 2002 (une prépublication pour appels à commentaires a été faite en 2001). La fonction SHA-224 est ajoutée un peu plus tard. La dernière version à ce jour, leFIPS 180-4 (Secure Hash Standard)date deet ajoute les fonctions SHA-512/256 et SHA-512/224[1].

En 2005, des problèmes de sécurité deSHA-1ont été mis en évidence: il existe pour la recherche de collisions une attaque théorique nettement plus rapide que l'attaque générique des anniversairessur les fonctions de hachage. Bien que l'algorithme de SHA-2 partage des similarités avec celui de SHA-1, ces attaques n'ont actuellement pas pu être étendues à SHA-2. Le NIST a cependant organisé un concours pour sélectionner une nouvelle fonction de hachage,SHA-3.Le concours a débouché fin 2012 sur le choix d'une nouvelle famille de fonctions dont la conception est très différente de SHA-1 et de SHA-2. La nouvelle famille de fonctions est présentée comme un autre choix possible, elle ne remet pas en cause l'utilisation de SHA-2 du moins dans l'immédiat.

Les fonctions de la famille SHA-2 adoptent le schéma itératif de laconstruction de Merkle-Damgård
Un tour de la fonction de compression de SHA-2, celle-ci en comporte 64 (SHA-256) ou 80 (SHA-512):
A,B,C,D,E,F,GetHsont des mots de 32 bits (SHA-256) ou 64 bits (SHA-512);
est l'addition modulo 232(SHA-256) ou 264(SHA-512), soit l'addition des entiers machines non signés de 32 ou 64 bits, qui est non linéaire surF2;
les fonctions Ch et Ma se calculent paropérations bit à bitlogiques, elles sont non linéaires;
les fonctions Σ0 et Σ1 se calculent pardécalage circulaireet xor (somme surF2);
Ktest une constante (32 ou 64 bits) qui dépend du numéro de tourt;
Wtest un mot de 32 (SHA-256) ou 64 bits (SHA-512) qui dépend du numéro de tourt;il est obtenu par une procédure d'expansion à partir du bloc de donnée (512 ou 1024 bits) dont le traitement est en cours.

Comme toutes les fonctions de hachage les fonctions SHA-2 prennent en entrée un message de taille arbitraire, avec une borne (toute théorique) pour celle-ci, et produisent un résultat (appelé «hash»,haché,condensatou encoreempreinte…) de taille fixe. La taille du haché est indiquée par le suffixe: 224bitspour SHA-224, 256 bits pour SHA-256, 384 bits pour SHA-384 et 512 bits pour SHA-512.

Les algorithmes de la famille SHA-2 sont très semblables, il y a essentiellement deux fonctions différentes, SHA-256 et SHA-512, les autres étant des variantes de l'une ou l'autre. Les fonctions SHA-256 et SHA-512 ont la même structure mais diffèrent par la taille des mots et des blocs utilisés. Cette structure est assez proche de celle de SHA-1, mais un peu plus complexe et en évite certaines faiblesses connues. Elle se rattache plus généralement à une famille de fonctions de hachage inspirées deMD4etMD5deRon Rivest.On retrouve comme primitives l'addition pour des entiers de taille fixensoit une addition modulo 2n,opération non linéaire (au sens de l'algèbre linéaire) sur le corps des booléensF2,ainsi que desopérations bit à bit(xor et autres).

Comme toutes les fonctions de cette famille (sauf SHA-3, reposant sur unefonction éponge), elles suivent un schéma itératif qui suit laconstruction de Merkle-Damgård(sans opération de finalisation). Lafonction de compressionitérée possède deux entrées de taille fixe, la seconde entrée étant de même taille que la sortie de la fonction:

  • une donnée obtenue par découpage du message à traiter, la taille est de 512 bits pour SHA-256 et SHA-224 et de 1024 bits pour SHA-512 et SHA-384,
  • le résultat de la fonction de compression à l'itération précédente (256 bits pour SHA-256 et SHA-224, 512 pour SHA-512 et SHA-384).

Les entrées de la fonction de compression sont découpées

  • en mots de 32 bits pour SHA-256 et SHA-224,
  • en mots de 64 bits pour SHA-512 et SHA-384.

La fonction de compression répète les mêmes opérations un nombre de fois déterminé, on parle detourou deronde,64 tours pour SHA-256, 80 tours pour SHA-512. Chaque tour fait intervenir comme primitives l'addition entière pour des entiers de taille fixe, soit une addition modulo 232ou modulo 264,des opérations bit à bit: opérations logiques, décalages avec perte d'une partie des bits etdécalages circulaires,et des constantes prédéfinies, utilisées également pour l'initialisation.

Avant traitement, le message est complété parbourragede façon que sa longueur soit un multiple de la taille du bloc traité par la fonction de compression. Le bourrage incorpore la longueur (en binaire) du mot à traiter: c'est le renforcement de Merkle-Damgård ((en)Merkle-Damgård strengthening), ce qui permet de réduire larésistance aux collisionsde la fonction de hachage à celle de la fonction de compression. Cette longueur est stockée en fin de bourrage sur 64 bits dans le cas de SHA-256 (comme pour SHA-1), sur 128 bits dans le cas de SHA-512, ce qui « limite » la taille des messages à traiter à 264bits pour SHA-256 (et SHA-224) et à 2128bits pour SHA-512 (et SHA-384).

La fonction SHA-256 devient en 2002 un standard fédéral de traitement de l'information (FIPSduNIST). Elle produit un haché de 256bits. Les caractéristiques de SHA-256 sont les suivantes:

  • taille du message: 264bits maximum
  • taille des blocs: 512 bits
  • taille des mots: 32 bits
  • taille du condensé: 256 bits
  • niveau de sécurité attendu (collisions): 2128bits (attaque des anniversaires)
  • nombre de tours (fonction de compression): 64

L'algorithme peut être découpé en deux phases

  • Le prétraitement: le message est complété parremplissagecomprenant la taille du message (renforcement de Merkle-Damgård) de façon à pouvoir le découper en blocs de 512 bits;
  • Le calcul du condensé par itération de la fonction de compression sur la suite des blocs obtenus en découpant le message (schéma itératif de Merkle-Damgård).

Symboles et termes utilisés

[modifier|modifier le code]

a, b, c,..., h = variables de travail (en l'occurrence des mots de w bits), utilisées dans le calcul des hachés

= la valeur de hachage n° i.est la valeur initiale du hachage.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.

= 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
= 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.
= le mot n° t du tableau déduit du message

La notation hexadécimale utilisée ici sera:

exemple:

= opération binaire AND
= opération binaire OR
= opération binaire XOR
= complément binaire
= addition modulo
= décalage binaire à gauche, oùs'obtient en supprimant les n bits de gauche de x et ajoutant n zéros à droite.
= décalage binaire à droite, oùs'obtient en supprimant les n bits de droite de x et ajoutant n zéros à gauche.

Opérations sur les mots

[modifier|modifier le code]

Les opérations utilisées sont les suivantes:

  • lesopérations bit à bitsur les mots de 32 bits (voir le paragraphe#Symbolespour les notations utilisées);
  • l'opération sur les mots correspondant à l’addition modulo232,c'est-à-dire que la sommez=x+yde deux motsxetyreprésentant des entiers naturelsXetY(0 ≤X< 232et0 ≤Y< 232) est la représentation binaire de l'entierZ,tel queZ=X+Ymod 232,0 ≤Z< 232,
  • l'opération de décalage des bits à droite,où x est un mot de 32 bits et,est définie par:
    ;
  • l'opération de rotation binaire vers la droite,où x est un mot de 32 bits et,est définie par:
    .

Fonctions et constantes

[modifier|modifier le code]

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.

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 premiersnombres premiers.Les valeurs suivantes sont exprimées en notation hexadécimale (base 16).

0x428a2f98 0x71374491 0xb5c0fbcf 0xe9b5dba5 0x3956c25b 0x59f111f1 0x923f82a4 0xab1c5ed5
0xd807aa98 0x12835b01 0x243185be 0x550c7dc3 0x72be5d74 0x80deb1fe 0x9bdc06a7 0xc19bf174
0xe49b69c1 0xefbe4786 0x0fc19dc6 0x240ca1cc 0x2de92c6f 0x4a7484aa 0x5cb0a9dc 0x76f988da
0x983e5152 0xa831c66d 0xb00327c8 0xbf597fc7 0xc6e00bf3 0xd5a79147 0x06ca6351 0x14292967
0x27b70a85 0x2e1b2138 0x4d2c6dfc 0x53380d13 0x650a7354 0x766a0abb 0x81c2c92e 0x92722c85
0xa2bfe8a1 0xa81a664b 0xc24b8b70 0xc76c51a3 0xd192e819 0xd6990624 0xf40e3585 0x106aa070
0x19a4c116 0x1e376c08 0x2748774c 0x34b0bcb5 0x391c0cb3 0x4ed8aa4a 0x5b9cca4f 0x682e6ff3
0x748f82ee 0x78a5636f 0x84c87814 0x8cc70208 0x90befffa 0xa4506ceb 0xbef9a3f7 0xc67178f2

Prétraitement

[modifier|modifier le code]

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

Il s'agit ici de compléter le messageMpour qu'il soit d'une taille multiple de 512 bits. Lebourrageutilise la représentation binaire de l'entierlqui est la longueur en bits du messageM(renforcement deMerkle-Damgård). Pour ce faire on ajoute successivement:

  • un bit à 1 à la fin du messageM,
  • kbits à 0 de bourrage, oùkest le plus petitentier naturelvérifiantl+ 1 +k≡ 448 mod 512
  • un bloc de 64 bits qui donne la représentation binaire del.

Exemples:

  • PourM= "abc",l= 3 × 8 = 24bits,k≡ 448 - (24 + 1) ≡ 423 mod 512,donck= 423;
    • on ajoute àM
      • d'abord un bit à 1,
      • puis 423 bits à 0,
      • puis 64 bits représentant 24 en binaire, soit « 0000... 0000 0001 1000 »
    on obtient alors un message complété dont la longueur est le plus petit multiple de 512 bits supérieur à la longueur initiale deM.
  • PourMde longueurbits,k≡ 448 - (500 + 1) ≡ -53 mod 512;donck= 512 - 53 = 459;
    • on ajoute àM
      • d'abord un bit à 1,
      • puis 459 bits à 0,
      • puis 64 bits représentant 500 en binaire, soit « 0000... 0000 0001 1111 0100 »
    on obtient alors un message complété dont la longueur est supérieure de 512 bits au plus petit multiple de 512 bits supérieur à la longueur initiale deM.
Découpage en blocs
[modifier|modifier le code]

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
[modifier|modifier le code]

Les huit variables suivantes sont affectées de valeurs initiales comme suit:








Calcul du condensé (haché)

[modifier|modifier le code]

Pour ce traitement on utilisera

  • un tableau de 64 mots, notés
  • huit variables notées
  • huit variables contenant les valeurs de hachage, notéeset 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,mots de 32 bits.

On traite successivement les N blocs de M selon les étapes suivantes

Pour i = 1 à N
{

1. On remplit le tableaupour t de 0 à 63, 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 de 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 parconcaténationdes valeurs

La fonction SHA-224 est publiée pour la première fois en 2004. Le résultat produit (haché, « hash » ou condensat) est de 224bits.Elle a été spécialement conçue pour fournir une empreinte dont la taille correspond à quatre clésDESde 56 bits chacune. L'algorithme est celui de SHA-256 avec pour seules différences

  • des valeurs différentes pour l'initialisation (variables h0,…, h7);
  • une sortie tronquée à 224 bits (concaténationdes contenus des 7 premières variables h0,…, h6).

La fonction SHA-512 est apparue en même temps que SHA-256 et devient comme celle-ci en 2002 un standard fédéral de traitement de l'information (FIPSduNIST). Elle produit un haché de 512bits.

L'algorithme est très similaire à celui de SHA-256 mais avec une différence importante dans la taille des données traitées: la taille de bloc est de 1024 bits (et non 512 bits), et l'algorithme opère sur des mots de 64 bits (la taille de mot-mémoire de beaucoup de processeurs modernes). En particulier les opérations arithmétiques, particulièrement optimisées sur ces processeurs se font sur 64 bits.

La structure de l'algorithme est la même que celle de SHA-256 mais

  • le message est découpé en blocs de 1024 bits;
  • les nombres qui apparaissent (variables h0,…, h7, constantes…) sont sur 64 bits et l'addition se fait modulo 264;
  • les valeurs des initialisations et des constantes sont différentes (forcément puisque sur 64 et non 32 bits);
  • la fonction de compression utilise 80 tours (au lieu de 64);
  • la longueur du message (en binaire) ajoutée à celui-ci dans la phase de bourrage (renforcement deMerkle-Damgård) est un entier de 128 bits (big-endian) et non 64 bits, ce qui limite la taille théorique maximale du message à 2128bits et non plus 264bits;
  • les valeurs des décalages et décalages circulaires sont modifiées de façon à tenir compte de la nouvelle longueur des mots.

La fonction SHA-384 est apparue en compagnie de SHA-256 et SHA-512. Elle produit un haché de 384bits.L'algorithme est celui de SHA-512 avec pour seules différences

  • des valeurs différentes pour l'initialisation (variables h0,…, h7);
  • une sortie tronquée à 384 bits (concaténationdes contenus des 6 premières variables h0,…, h5).

SHA-256 est devenu le nouveau standard recommandé en matière de hachage cryptographique après les attaques surMD5etSHA-1.Les autres membres de lafamille SHAont été relativement peu cryptanalysés par rapport àSHA-0etSHA-1.En2003,Helena HandschuhetHenri Gilbertont publié une analyse de SHA-256, 384 et 512. Leur étude montre que les autres membres de SHA ne sont pas atteints par les attaques qui avaient fait leurs preuves sur les autres fonctions de hachage (MD4,MD5etSHA-1entre autres). Lacryptanalyse linéaireetdifférentiellene s’appliquent pas.

En revanche, les deux cryptologues ont mis en évidence des faiblesses significatives sur des versions modifiées. En changeant les constantes ou les paramètres d’initialisation de manière à les rendre symétriques tout en remplaçant l’addition modulaire par unXOR,on obtient un hachage qui produit une empreinte symétrique si le message en entrée l’est également.

Bibliographie

[modifier|modifier le code]
  • (en)Henri Gilbert, Helena Handschuh:Security Analysis of SHA-256 and Sisters.Selected Areas in Cryptography2003: 175-193
  • Versions successives duSecure Hash Standarddu NIST à partir de l'apparition de SHA-2 (voir aussi la pageSecure Hashing)

Articles connexes

[modifier|modifier le code]

Liens externes

[modifier|modifier le code]