4. Message Padding and Parsing (Remplissage et analyse du message)
Les fonctions de hachage spécifiées dans ce document sont utilisées pour calculer un résumé de message pour un message ou un fichier de données fourni en entrée. Le message ou le fichier de données doit être considéré comme une chaîne de bits. La longueur du message est le nombre de bits dans le message (le message vide a une longueur de 0). Si le nombre de bits dans un message est un multiple de 8, pour des raisons de compacité, nous pouvons représenter le message en hexadécimal. Le but du remplissage du message est de rendre la longueur totale d'un message rempli un multiple de 512 pour SHA-224 et SHA-256 ou un multiple de 1024 pour SHA-384 et SHA-512.
Ce qui suit spécifie comment ce remplissage doit être effectué. En résumé, un "1" suivi de m "0" suivi d'un entier de 64 bits ou 128 bits sont ajoutés à la fin du message pour produire un message rempli de longueur 512n ou 1024n. L'entier ajouté est la longueur du message original. Le message rempli est ensuite traité par la fonction de hachage comme n blocs de 512 bits ou 1024 bits.
4.1. SHA-224 et SHA-256
Supposons qu'un message a une longueur L < 2^64. Avant d'être entré dans la fonction de hachage, le message est rempli à droite comme suit :
a. "1" est ajouté. Exemple : si le message original est "01010000", celui-ci est rempli en "010100001".
b. K "0" sont ajoutés où K est la plus petite solution non négative à l'équation
( L + 1 + K ) mod 512 = 448
c. Puis ajouter le bloc de 64 bits qui est L en représentation binaire. Après avoir ajouté ce bloc, la longueur du message sera un multiple de 512 bits.
Exemple : Supposons que le message original est la chaîne de bits
01100001 01100010 01100011 01100100 01100101
Après l'étape (a), cela donne
01100001 01100010 01100011 01100100 01100101 1
Puisque L = 40, le nombre de bits dans ce qui précède est 41 et K = 407 "0" sont ajoutés, ce qui porte le total maintenant à 448. Cela donne ce qui suit en hexadécimal :
61626364 65800000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000
La représentation de 64 bits de L = 40 est l'hexadécimal 00000000 00000028. Par conséquent, le message rempli final est l'hexadécimal suivant :
61626364 65800000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000028
4.2. SHA-384 et SHA-512
Supposons qu'un message a une longueur L < 2^128. Avant d'être entré dans la fonction de hachage, le message est rempli à droite comme suit :
a. "1" est ajouté. Exemple : si le message original est "01010000", celui-ci est rempli en "010100001".
b. K "0" sont ajoutés où K est la plus petite solution non négative à l'équation
( L + 1 + K ) mod 1024 = 896
c. Puis ajouter le bloc de 128 bits qui est L en représentation binaire. Après avoir ajouté ce bloc, la longueur du message sera un multiple de 1024 bits.
Exemple : Supposons que le message original est la chaîne de bits
01100001 01100010 01100011 01100100 01100101
Après l'étape (a), cela donne
01100001 01100010 01100011 01100100 01100101 1
Puisque L = 40, le nombre de bits dans ce qui précède est 41 et K = 855 "0" sont ajoutés, ce qui porte le total maintenant à 896. Cela donne ce qui suit en hexadécimal :
61626364 65800000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
La représentation de 128 bits de L = 40 est l'hexadécimal 00000000 00000000 00000000 00000028. Par conséquent, le message rempli final est l'hexadécimal suivant :
61626364 65800000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000028