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 |
|
|