Rechnernetze
Home Nach oben

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:
  1. Zerlege Mi in 16 32 Bit-Worte W0, W1, 2, ..., W15, wobei W0 das Wort ganz links ist.
  2. Für t=16 bis 79 berechne:
        Wt:=CSL1(Wt-3 xor Wt-8 xor Wt-14 xor Wt-16).
  3. Setze A := H0, B := H1, C := H2, D := H3, E :=H4.
  4. 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