Rechnernetze
Home Nach oben Stichworte

SHA-1

SHA-1 verarbeitet Blöcke der Länge 512 Bits oder 64 Bytes, so dass jede Nachricht durch Auffüllen mit einer 1 und weiteren 0en auf diese Länge gebracht werden muss. Da das erste angehängte Bit auf jeden Fall eine 1 ist und die letzten 64 Bits oder 8 Bytes zur Darstellung der Länge der Originalnachricht verwendet werden, müssen gegebenenfalls sogar mehr als 512 Bits angehängt werden. Die Nachricht wird in n Worten zu 512 Bits zerlegt, die als M0, M1, ..., Mn bezeichnet werden. 

SHA-1 verwendet zwei Puffer mit jeweils fünf 32 Bit-Worten (als A, B, C, D und H0, H1, H2, H3, H4 bezeichnet) sowie ein Feld mit achtzig 32 Bit-Worten, die als W0, W1, 2, ..., W79 bezeichnet werden.

Zu Anfang werden die Hi initialisiert:

H0 := 6745230116
H1: = EFCDAB8916
H2 := 98BADCFE16
H3 := 1032547616
H4 := C3D2E1F016

Danach werden die M0, M1, ..., Mn bearbeitet. Iterativ wird berechnet:

a.  Zerlege Mi in 16 32 Bit-Worte W0, W1, 2, ..., W15, wobei W0 das Wort ganz links ist.

b.  Für t=16 bis 79 berechne:
         Wt:=CSL1(Wt-3 xor Wt-8 xor Wt-14 xor Wt-16).

c.  Setze A := H0, B := H1, C := H2, D := H3, E := H4.

d.  Für t=0 bis 79 berechne:
     TEMP := CSL5(A)+ft(B,C,D)+D+Wt+Kt;
     E:=D; D:=C; C:=CSL30(B); B:=A; A:=TEMP;
e.  Setze H0 := H0+A, H1 := H1+B, H2 := H2+C, H3 := H3+D, H4 := H4+E.

Nachdem das letzte Wort Mn bearbeitet worden ist, steht der Fingerabdruck in H0, H1, H2, H3, H4.

Dabei bedeutet CSLk(X), dass das 32 Bit-Wort X um k Bits zirkulär nach links rotiert wird. ft(X,Y,Z) sind Funktionen, die folgendermaßen definiert sind:

ft(X,Y,Z)  =  (XLY)V(~XLZ) für t=0..19,
ft(X,Y,Z)  =  X xor Y xor Z für t=20..39,
ft(X,Y,Z)  =  (XLY)V(XLZ)V(YLZ) für t=40..59,
ft(X,Y,Z)  =  X xor Y xor Z für t=60..79,

Der Standard gibt einen zweiten Algorithmus an, der den gleichen Wert berechnet jedoch statt achtzig 32 Bit-Worten W0, W1, 2, ..., W79 nur 16 solcher Worte bedarf, dafür aber etwas langsamer ist.