SHA-1

 | SHA-1
 | verarbeitet Blöcke fester Länge
 | 512 Bits oder |
 | 64 Bytes, |
|
 |
Nachricht wird durch Auffüllen (100000...) auf Länge
gebracht
 | erstes angehängte Bit auf jeden Fall 1 |
 | letzten 64 Bits oder 8 Bytes zur Darstellung der Länge der
Originalnachricht verwendet |
 | gegebenenfalls mehr als 512
Bits anhängen |
|
 | Nachricht in n Worten zu 512 Bits zerlegt,
 | als M0, M1, ..., Mn bezeichnet |
|
 | zwei Puffer mit jeweils fünf 32 Bit-Worten
 | A, B, C, D, E und |
 | H0, H1, H2, H3, H4
|
|
 | Feld mit achtzig 32 Bit-Worten,
 | W0, W1,
2, ..., W79 |
|
 | Hi initialisiert
 | H0 := 6745230116 |
 | H1: = EFCDAB8916 |
 | H2 := 98BADCFE16 |
 | H3 := 1032547616 |
 | H4 := C3D2E1F016 |
|
 | M0, M1, ..., Mn
iterativ berechnet: |
|
- Zerlege Mi in 16 32 Bit-Worte W0, W1,
2, ..., W15, wobei W0 das Wort ganz links
ist.
- Für t=16 bis 79 berechne:
Wt:=CSL1(Wt-3 xor Wt-8
xor Wt-14 xor Wt-16).
- Setze A := H0, B := H1, C := H2,
D := H3, E :=H4.
- 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;
Setze
H0 := H0+A,
H1 := H1+B,
H2 := H2+C,
H3 := H3+D,
H4
:= H4+E.
 |
Fingerabdruck: H0, H1, H2, H3, H4,
wenn Mn bearbeitet
 | CSLk(X),
 | 32 Bit-Wort X um k Bits zirkulär
nach links rotiert |
|
 | 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, |
|
|
 | Standard nennt zweiten Algorithmus
 |
berechnet gleichen Wert |
 | statt achtzig 32 Bit-Worten W0, W1, 2,
..., W79 nur 16 Worte |
 | etwas langsamer |
|
|