4. Message Padding and Parsing (Nachrichtenauffüllung und -analyse)
Die hierin spezifizierten Hash-Funktionen werden verwendet, um einen Message Digest für eine Nachricht oder Datendatei zu berechnen, die als Eingabe bereitgestellt wird. Die Nachricht oder Datendatei sollte als Bitfolge betrachtet werden. Die Länge der Nachricht ist die Anzahl der Bits in der Nachricht (die leere Nachricht hat Länge 0). Wenn die Anzahl der Bits in einer Nachricht ein Vielfaches von 8 ist, können wir die Nachricht für Kompaktheit hexadezimal darstellen. Der Zweck der Nachrichtenauffüllung besteht darin, die Gesamtlänge einer aufgefüllten Nachricht zu einem Vielfachen von 512 für SHA-224 und SHA-256 oder einem Vielfachen von 1024 für SHA-384 und SHA-512 zu machen.
Das Folgende spezifiziert, wie diese Auffüllung durchgeführt werden soll. Zusammenfassend wird eine "1", gefolgt von m "0"en, gefolgt von einer 64-Bit- oder 128-Bit-Ganzzahl an das Ende der Nachricht angehängt, um eine aufgefüllte Nachricht der Länge 512n oder 1024n zu erzeugen. Die angehängte Ganzzahl ist die Länge der ursprünglichen Nachricht. Die aufgefüllte Nachricht wird dann von der Hash-Funktion als n 512-Bit- oder 1024-Bit-Blöcke verarbeitet.
4.1. SHA-224 und SHA-256
Nehmen Sie an, eine Nachricht hat Länge L < 2^64. Bevor sie in die Hash-Funktion eingegeben wird, wird die Nachricht rechts wie folgt aufgefüllt:
a. "1" wird angehängt. Beispiel: Wenn die ursprüngliche Nachricht "01010000" ist, wird diese zu "010100001" aufgefüllt.
b. K "0"en werden angehängt, wobei K die kleinste nicht-negative Lösung der Gleichung ist
( L + 1 + K ) mod 512 = 448
c. Dann wird der 64-Bit-Block angehängt, der L in binärer Darstellung ist. Nach dem Anhängen dieses Blocks wird die Länge der Nachricht ein Vielfaches von 512 Bits sein.
Beispiel: Nehmen Sie an, die ursprüngliche Nachricht ist die Bitfolge
01100001 01100010 01100011 01100100 01100101
Nach Schritt (a) ergibt dies
01100001 01100010 01100011 01100100 01100101 1
Da L = 40 ist die Anzahl der Bits im Obigen 41 und K = 407 "0"en werden angehängt, wodurch die Gesamtzahl jetzt 448 beträgt. Dies ergibt das Folgende in Hexadezimal:
61626364 65800000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000
Die 64-Bit-Darstellung von L = 40 ist hexadezimal 00000000 00000028. Daher ist die endgültige aufgefüllte Nachricht das folgende Hexadezimal:
61626364 65800000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000028
4.2. SHA-384 und SHA-512
Nehmen Sie an, eine Nachricht hat Länge L < 2^128. Bevor sie in die Hash-Funktion eingegeben wird, wird die Nachricht rechts wie folgt aufgefüllt:
a. "1" wird angehängt. Beispiel: Wenn die ursprüngliche Nachricht "01010000" ist, wird diese zu "010100001" aufgefüllt.
b. K "0"en werden angehängt, wobei K die kleinste nicht-negative Lösung der Gleichung ist
( L + 1 + K ) mod 1024 = 896
c. Dann wird der 128-Bit-Block angehängt, der L in binärer Darstellung ist. Nach dem Anhängen dieses Blocks wird die Länge der Nachricht ein Vielfaches von 1024 Bits sein.
Beispiel: Nehmen Sie an, die ursprüngliche Nachricht ist die Bitfolge
01100001 01100010 01100011 01100100 01100101
Nach Schritt (a) ergibt dies
01100001 01100010 01100011 01100100 01100101 1
Da L = 40 ist die Anzahl der Bits im Obigen 41 und K = 855 "0"en werden angehängt, wodurch die Gesamtzahl jetzt 896 beträgt. Dies ergibt das Folgende in Hexadezimal:
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
Die 128-Bit-Darstellung von L = 40 ist hexadezimal 00000000 00000000 00000000 00000028. Daher ist die endgültige aufgefüllte Nachricht das folgende Hexadezimal:
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