Rechnernetze
Home Nach oben

MD5

MD5 verarbeitet Blöcke der Länge 512 Bits oder 64 Bytes
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 
 
Zu Anfang werden vier Verkettungsvariablen initialisiert:
A := 0123456716
B: = 89ABCDEF16
C := FEDCBA9816
D := 7654321016
512-Bit-Worte wird in 16 32-Bit-Worte zerlegt
k-ter Teilblock: Mkj, j=0..15
Es werden vier Funktionen definiert:
F(X,Y,Z)  =  (XLY)V(~XLZ),
G(X,Y,Z)  =  (XLZ)V(YL~Z),
H(X,Y,Z)  =  X xor Y xor Z,
I(X,Y,Z)  =  Y xor (X xor ~Z).
Wenn Mk den j-ten Teilblock des k-ten Teilworts bezeichnet und CSLk das zyklische Schieben nach links um k Stellen bedeutet, so erhält man die Funktionen:
FF(a,b,c,d,Mij,s,ti)  steht für 
a = b + CSLs(a+F(b,c,d)+Mij+ti),
GF(a,b,c,d, Mij,s,ti)  steht für 
a = b + CSLs(a+G(b,c,d)+ Mij+ti),
HH(a,b,c,d, Mij,s,ti)  steht für 
a = b + CSLs(a+H(b,c,d)+ Mij+ti),
II(a,b,c,d, Mij,s,ti) steht für 
a = b + CSLs(a+I(b,c,d)+ Mij+ti).
vier Runden mit jeweils 16 Schritten
also insgesamt 64 Schritte:
Runde 1:
FF(a,b,c,d, Mi0, 7, d76aa47816)
FF(d,a,b,c,Mi1, 12, E8C7B75616)
FF(c,d,a,b,Mi2, 17, 242070DB16)
FF(b,c,d,a,Mi3, 22, C1BDCEEE16)
FF(a,b,c,d, Mi4, 7, F57C0FAF16)
FF(d,a,b,c,Mi5, 12, 4787C62A16)
FF(c,d,a,b,Mi6, 17, A830461316)
FF(b,c,d,a,Mi7, 22, FD46950116)
FF(a,b,c,d, Mi8, 7, 698098D816)
FF(d,a,b,c,Mi9, 12, 8B44F7AF16)
FF(c,d,a,b,Mi10,17, FFFF5BB116)
FF(b,c,d,a,Mi11,22, 895CD7BE16)
FF(a,b,c,d, Mi12,7, 6B90112216)
FF(d,a,b,c,Mi13,12, FD98719316)
FF(c,d,a,b,Mi14,17, A679438E16)
FF(b,c,d,a,Mi15,22, 49B4082116)
Runde 2:
GG(a,b,c,d, Mi1, 5, F61E256216)
GG(d,a,b,c, Mi6, 9, C040B34016)
GG(c,d,a,b, Mi11,14,265E5A5116)
GG(b,c,d,a, Mi0, 20,E9B6C7AA16)
GG(a,b,c,d, Mi5, 5, D62F105D16)
GG(d,a,b,c, Mi10,9, 0244145316)
GG(c,d,a,b, Mi15,14,D8A1E68116)
GG(b,c,d,a, Mi4, 20,E7D3FBC816)
GG(a,b,c,d, Mi9, 5, 21E1CDE616)
GG(d,a,b,c, Mi14,9, C33707D616)
GG(c,d,a,b, Mi3, 14,F4D50D8716)
GG(b,c,d,a, Mi8, 20,455A14ED16)
GG(a,b,c,d, Mi12,5, A9E3E90516)
GG(d,a,b,c, Mi2, 9, FCEFA3F816)
GG(c,d,a,b, Mi7, 14,676F02D916)
GG(b,c,d,a, Mi12,20,8D2A4C8A16)
Runde 3:
HH(a,b,c,d, Mi5, 4, FFFA394216)
HH(d,a,b,c, Mi6, 11,8771F68116)
HH(c,d,a,b, Mi11,16,6D9D612216)
HH(b,c,d,a, Mi14,23,FDE5380C16)
HH(a,b,c,d, Mi1, 4, A4BEEA4416)
HH(d,a,b,c, Mi4, 11,4BDECFA916)
HH(c,d,a,b, Mi7, 16,F6BB4B6016)
HH(b,c,d,a, Mi10,23,BEBFBC7016)
HH(a,b,c,d, Mi13,4, 289B7EC616)
HH(d,a,b,c, Mi0, 11,EAA127FA16)
HH(c,d,a,b, Mi3, 16,D4EF308516)
HH(b,c,d,a, Mi6, 23,04881D0516)
HH(a,b,c,d, Mi9, 4, D9D4D03916)
HH(d,a,b,c, Mi12,11,E6DB99E516)
HH(c,d,a,b, Mi15,16,1FA27CF816)
HH(b,c,d,a, Mi2, 23,C4AC566516)
Runde 4:
II(a,b,c,d, Mi0, 6, F429224416)
II(d,a,b,c, Mi7, 10,432AFF9716)
II(c,d,a,b, Mi14,15,AB9423A716)
II(b,c,d,a, Mi5, 21,FC93A03916)
II(a,b,c,d, Mi12, 6,655B59C316)
II(d,a,b,c, Mi3, 10,8F0CCC9216)
II(c,d,a,b, Mi10,15,FFEFF47D16)
II(b,c,d,a, Mi1, 21,85845DD116)
II(a,b,c,d, Mi8,  6,6FA87E4F16)
II(d,a,b,c, Mi15,11,FE2CE6E016)
II(c,d,a,b, Mi6, 15,A301431416)
II(b,c,d,a, Mi13,21,4E0811A116)
II(a,b,c,d, Mi4,  6,F7537E8216)
II(d,a,b,c, Mi11,10,BD3AF23516)
II(c,d,a,b, Mi2, 15,2AD7D2BB16)
II(b,c,d,a, Mi9, 21,EB86D39116)
Anmerkungen:
a, b, c und d zu A, B, C und D addiert 
mit nächstem Datenblock Mi+1 fortgefahren
Ausgabe ist Konkatenation der Werte in A, B, C und D,
A, B, C und D = 128 Bits.
keine ernsthaften Sicherheitsbedenken gegen MD5, 
kurze Länge des Digest macht Geburtstagsangriff möglich 
Schneier 
MD5 habe "Schwachstelle in Kompressionsfunktion"
nach Ansicht der Autoren keine Auswirkung auf Sicherheit