WikiDer > MD5
MD5 (Message Digest-Algorithmus 5) ist ein häufig verwendetes Hash-Funktion mit einem 128-Bit-Hash-Wert. Obwohl MD5 ursprünglich als kryptografischHash-Funktion es gab viele fehler im design. MD5 ist eher ein Internetstandard[1] wird in vielen Sicherheitsanwendungen verwendet und wird auch verwendet, um die Integrität von Dateien zur Überprüfung auf versehentliche Korruption. MD5 wurde genehmigt von Ronald Rivest im 1991 entwickelt, um die frühere Hash-Funktion zu verwenden MD4 ersetzen. 1996 wurde ein Fehler im MD5-Design gefunden; Obwohl es kein schwerwiegender Fehler war, wurde es anderen empfohlen? Algorithmen wie SHA-1 benutzen. (obwohl dieser auch ähnliche Fehler enthält).[2]
2007 gelang es einer Gruppe von Wissenschaftlern, zwölf verschiedene twelve PDFDateien mit dem gleichen Hash-Code, genannt Hash-Kollisionen. Die Autoren haben damit gezeigt, dass MD5 nicht mehr als Verifikationsmethode verwendet werden sollte. Am 30. Dezember 2008 gaben sie ein praktisches Beispiel dafür, indem sie eine SSLBehördenzertifikat Fälschung zu Demonstrationszwecken. Im Jahr 2012 wurde ein MD5-Kollisionsangriff verwendet, um Microsoft-Zertifikate von der FlammeSchadsoftware.[3]
Um als MD5-Hash kodierte Passwörter zu "knacken", verwendet man oft Regenbogentische.
Pseudocode
Pseudocode für den MD5-Algorithmus folgt.
//Hinweis: Alle Variablen werden während der Berechnung mit einer 32-Bit-Ganzzahl ohne Vorzeichen eingegeben
//Definiere r wie folgtvarint[64] r, kr[ 0..15] := {7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22}r[16 ..31] := {5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20}r[32..47] := {4 , 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23}r[48..63] := {6, 10, 15, 21, 6 , 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21}//Verwenden Sie den binären Bruchteil des Sinus von ganzen Zahlen als Konstanten:zum ich von 0 zu 63k[i] := Boden(abs(sin(i 1)) × 2^32)
//Initialisieren Sie die Variablen:varint h0 := 0x67452301varint h1 := 0xEFCDAB89varint h2 := 0x98BADCFEvarint h3 := 0x10325476
//Vorbearbeitung:hinzufügen "1"-Bit zur Nachrichthinzufügen Hinzufügen von "0"-Bits zur Nachricht bis Nachrichtenlänge in Bits ≡ 448 (mod 512)hinzufügen Bitlänge der Originalnachricht als 64-Bit-Little-Endian-Ganzzahl zur Nachricht hinzufügen
//Verarbeiten Sie die Nachricht in aufeinanderfolgenden 512-Bit-Blöcken:für jedes512 Bit Brocken oder Messagebreak-Block in sechzehn 32-Bit-Little-Endian-Wörter w(i), 0 ≤ i ≤ 15
//Initialisieren Sie den Hashwert für diesen Block:varint a := h0varint b := h1varint c := h2varint d := h3
//Hauptschleife:zum ich von 0 zu 63wenn 0 und 15 dannf := (b und c) oder ((nicht b) und d)g := isonst wenn 16 ≤ i ≤ 31f := (d und b) oder ((nicht d) und c)g := (5×i 1) mod 16sonst wenn 32 ≤ i ≤ 47f := b xor c xor dg := (3×i 5) mod 16sonst wenn 48 i ≤ 63f := c xor (b oder (nicht d))g := (7×i) mod 16
temp := dd := cc := bb := ((a f k(i) w(g)) links drehen r(i)) ba := temp
//Fügen Sie den Hash dieses Blocks zum bisherigen Ergebnis hinzu:h0 := h0 ah1 := h1 bh2 := h2 ch3 := h3 d
varint verdauen := h0 anhängen h1 anhängen h2 anhängen h3 //(ausgedrückt als Little Endian)
Hinweis: Anstelle des ursprünglichen Wortlauts RFC 1321[1] wie hier gezeigt, kann zur Effizienzsteigerung verwendet werden:
(0 i ≤ 15): f := d xor (b und (c xor d))(16 ≤ i ≤ 31): f := c xor (d und (b xor c))
MD5-Hashes
Die 128 Bit (16 Byte) MD5-Hashes werden normalerweise als 32 Stellen dargestellt hexadezimal Zahlen. Das Folgende hinterlässt ein 46 Byte-ASCIIsiehe Eingabe und den entsprechenden MD5-Hash:
- MD5("Pas weiser Luchs beobachtete fromm das kräftige Aquädukt") = b06c0444f37249a0a8f748d3b823ef2a
Schon eine kleine Änderung im Text erzeugt (höchstwahrscheinlich) einen völlig anderen Hash, z.B. Ersetzen p zu ich:
- MD5("Mutters weiser Luchs beobachtete fromm das kräftige Aquädukt") = de1c058b9a0d069dc93917eefd61f510
Der Hash eines leeren Strings ist:
- MD5("") = d41d8cd98f00b204e9800998ecf8427e
Siehe auch
Externe Links
- (und) MD5 Kollisionsdemo, Peter Selinger. Erstellen verschiedener ausführbarer Programme mit dem gleichen MD5.
| Quellen, Anmerkungen und/oder Verweise |