MD5

Der MD5 Nachrichtenauswahl-Algorithmus ist eine weit verwendete kryptografische Kuddelmuddel-Funktion, die einen 128 Bit (16 Bytes) Kuddelmuddel-Wert erzeugt. Angegeben RFC 1321 ist MD5 in einem großen Angebot an Sicherheitsanwendungen verwendet worden, und wird auch allgemein verwendet, um Datenintegrität zu überprüfen. MD5 wurde von Ron Rivest 1991 entworfen, um eine frühere Kuddelmuddel-Funktion, MD4 zu ersetzen. Ein MD5 Kuddelmuddel wird normalerweise als eine 32-stellige hexadecimal Zahl ausgedrückt.

Jedoch ist es seitdem gezeigt worden, dass MD5 nicht widerstandsfähige Kollision ist; als solcher ist MD5 für Anwendungen wie SSL Zertifikate oder Digitalunterschriften nicht passend, die sich auf dieses Eigentum verlassen. 1996 wurde ein Fehler mit dem Design von MD5 gefunden, und während es nicht eine klar tödliche Schwäche war, haben Kryptographen begonnen zu empfehlen, dass, wie man seitdem gefunden hat, der Gebrauch anderer Algorithmen, wie SHA-1-which auch verwundbar gewesen ist. 2004 wurden ernstere Fehler in MD5 entdeckt, weiteren Gebrauch des Algorithmus zu Sicherheitszwecken zweifelhaft — spezifisch machend, eine Gruppe von Forschern hat beschrieben, wie man ein Paar von Dateien schafft, die dieselbe MD5 Kontrollsumme teilen. Weitere Fortschritte wurden im Brechen von MD5 2005, 2006, und 2007 gemacht. Im Dezember 2008 hat eine Gruppe von Forschern diese Technik verwendet, um SSL Zertifikat-Gültigkeit zu fälschen, und US-CERT sagt jetzt, dass MD5 "kryptografisch gebrochen und unpassend für den weiteren Gebrauch betrachtet werden sollte." und die meisten amerikanischen Regierungsanwendungen verlangen jetzt die SHA-2 Familie von Kuddelmuddel-Funktionen.

Geschichte und cryptanalysis

MD5 ist ein in einer Reihe von Nachrichtenauswahl-Algorithmen, die von Professor Ronald Rivest von MIT (Rivest, 1994) entworfen sind. Als analytische Arbeit angezeigt hat, dass MD5's Vorgänger MD4 konnte wahrscheinlich, MD5 unsicher sein, 1991 entworfen wurde, um ein sicherer Ersatz zu sein. (Schwächen wurden tatsächlich später in MD4 von Hans Dobbertin gefunden.)

1993 haben Bastelraum-Bure und Bosselaers einen frühen, obwohl beschränkt, Ergebnis gegeben, eine "Pseudokollision" der MD5 Kompressionsfunktion zu finden; d. h. zwei verschiedene Initialisierungsvektoren, die eine identische Auswahl erzeugen.

1996 hat Dobbertin eine Kollision der Kompressionsfunktion von MD5 (Dobbertin, 1996) bekannt gegeben. Während das nicht ein Angriff auf die volle MD5 Kuddelmuddel-Funktion war, war es für Kryptographen nah genug, um zu empfehlen, auf einen Ersatz, wie SHA-1 oder RIPEMD-160 umzuschalten.

Die Größe des Kuddelmuddels — 128 Bit — ist klein genug, um über einen Geburtstag-Angriff nachzudenken. MD5CRK war ein verteiltes Projekt angefangen im März 2004 mit dem Ziel des Demonstrierens, dass MD5 durch die Entdeckung einer Kollision mit einem Geburtstag-Angriff praktisch unsicher ist.

MD5CRK hat kurz danach am 17. August 2004 geendet, als Kollisionen für den vollen MD5 von Xiaoyun Wang, Dengguo Feng, Xuejia Lai und Hongbo Yu bekannt gegeben wurden. Wie man berichtete, hat ihr analytischer Angriff nur eine Stunde auf einer Traube von IBM p690 genommen.

Am 1. März 2005 haben Arjen Lenstra, Xiaoyun Wang und Benne de Weger Aufbau von zwei X.509 Zertifikaten mit verschiedenen öffentlichen Schlüsseln und demselben MD5 Kuddelmuddel, einer beweisbar praktischen Kollision demonstriert. Der Aufbau hat private Schlüssel für beide öffentlichen Schlüssel eingeschlossen. Ein paar Tage später hat Vlastimil Klima einen verbesserten Algorithmus, fähig beschrieben, MD5 Kollisionen in ein paar Stunden auf einem einzelnen Notizbuchcomputer zu bauen. Am 18. März 2006 hat Klima einen Algorithmus veröffentlicht, der eine Kollision innerhalb einer Minute auf einem einzelnen Notizbuchcomputer mit einer Methode finden kann, die er tunneling nennt.

2009 hat der USA-Cyber-Befehl ein MD5 Kuddelmuddel ihrer Missionsbehauptung als ein Teil ihres offiziellen Emblems verwendet.

Am 24. Dezember 2010 haben Tao Xie und Dengguo Feng die erste veröffentlichte Kollision des einzelnen Blocks MD5 (zwei 64-Byte-Nachrichten mit demselben MD5 Kuddelmuddel bekannt gegeben, das in wenig endian Notation gegeben ist). Vorherige Kollisionsentdeckungen haben sich auf Mehrblock-Angriffe verlassen. Für "Sicherheitsgründe" haben Xie und Feng die neue Angriffsmethode nicht bekannt gegeben. Sie haben eine Herausforderung an die kryptografische Gemeinschaft ausgegeben, eine Belohnung von 10,000 US$ dem ersten Finder einer verschiedenen 64-Byte-Kollision vor dem 1. Januar 2013 anbietend.

2011 wurde ein Informations-RFC genehmigt, um die Sicherheitsrücksichten in RFC 1321 (MD5) und RFC 2104 (HMAC-MD5) zu aktualisieren.

Sicherheit

Die Sicherheit der MD5 Kuddelmuddel-Funktion wird streng in Verlegenheit gebracht. Ein Kollisionsangriff besteht, der Kollisionen innerhalb von Sekunden auf einem Computer mit einem 2.6 GHz Pentium 4 Verarbeiter (Kompliziertheit 2) finden kann. Weiter gibt es auch einen Kollisionsangriff des gewählten Präfixes, der eine Kollision für zwei gewählte willkürlich verschiedene Eingänge innerhalb von Stunden, mit der Standardrechenhardware (Kompliziertheit 2) erzeugen kann.

Der Fähigkeit, Kollisionen zu finden, ist durch den Gebrauch von Standard-GPUs außerordentlich geholfen worden. Auf NVIDIA GeForce 8400GS Grafikverarbeiter kann 16-18 Millionen Kuddelmuddel pro Sekunde geschätzt werden. NVIDIA GeForce 8800 Extreme kann mehr als 200 Millionen Kuddelmuddel pro Sekunde berechnen.

Diese Kuddelmuddel und Kollisionsangriffe sind im Publikum in verschiedenen Situationen, einschließlich kollidierender Dokumentendateien und Digitalzertifikate demonstriert worden.

Kollisionsverwundbarkeit

1996 wurden Kollisionen in der Kompressionsfunktion von MD5 gefunden, und Hans Dobbertin hat in den RSA Laboratorien technisches Rundschreiben geschrieben, "Der präsentierte Angriff droht praktischen Anwendungen von MD5 noch nicht, aber es kommt eher nahe... im zukünftigen MD5, sollte nicht mehr durchgeführt werden..., wo eine gegen die Kollision widerstandsfähige Kuddelmuddel-Funktion erforderlich ist."

2005 sind Forscher im Stande gewesen, Paare von Dokumenten von PostScript und X.509 Zertifikaten mit demselben Kuddelmuddel zu schaffen. Später in diesem Jahr hat MD5's Entwerfer Ron Rivest geschrieben, "md5 und sha1 werden beide klar (in Bezug auf den Kollisionswiderstand) gebrochen."

Am 30. Dezember 2008 hat eine Gruppe von Forschern auf dem 25. Verwirrungsnachrichtenkongress bekannt gegeben, wie sie MD5 Kollisionen verwendet hatten, um ein Zwischenzertifikat-Autoritätszertifikat zu schaffen, das geschienen ist, wenn überprüft, über sein MD5 Kuddelmuddel legitim zu sein. Die Forscher haben eine Traube der Playstation von Sony 3 Einheiten am EPFL in Lausanne, die Schweiz verwendet, um ein normales SSL Zertifikat zu ändern, das von RapidSSL in ein Arbeiten CA Zertifikat für diesen Aussteller ausgegeben ist, der dann verwendet werden konnte, um andere Zertifikate zu schaffen, die scheinen würden, legitim und durch RapidSSL ausgegeben zu sein. VeriSign, die Aussteller von Zertifikaten von RapidSSL, hat gesagt, dass sie aufgehört haben, neue Zertifikate mit MD5 als ihr Kontrollsumme-Algorithmus für RapidSSL auszugeben, sobald die Verwundbarkeit bekannt gegeben wurde. Obwohl Verisign abgelehnt hat, das unterzeichnete Verwenden der vorhandenen Zertifikate MD5 zu widerrufen, wurde ihre Antwort entsprechend von den Autoren der Großtat (Alexander Sotirov, Marc Stevens, Jacob Appelbaum, Arjen Lenstra, David Molnar, Dag Arne Osvik und Benne de Weger) betrachtet. Bruce Schneier hat über den Angriff geschrieben, dass" [w] e bereits gewusst hat, dass MD5 eine gebrochene Kuddelmuddel-Funktion ist", und dass "keiner MD5 mehr verwenden sollte." Die SSL Forscher haben geschrieben, "Unser gewünschter Einfluss ist, dass Zertifikat-Behörden aufhören werden, MD5 in der Ausgabe neuer Zertifikate zu verwenden. Wir hoffen auch, dass der Gebrauch von MD5 in anderen Anwendungen ebenso nachgeprüft wird."

MD5 verwendet den Merkle-Damgård Aufbau so, wenn zwei Präfixe mit demselben Kuddelmuddel gebaut werden können, kann eine allgemeine Nachsilbe zu beiden hinzugefügt werden, um die Kollision zu machen, um wahrscheinlicher als gültige Daten durch die Anwendung damit akzeptiert zu werden. Außerdem erlauben aktuelle Kollision findende Techniken, ein willkürliches Präfix anzugeben: Ein Angreifer kann zwei kollidierende Dateien schaffen, die beide mit demselben Inhalt beginnen. Der ganze Angreifer muss zwei kollidierende Dateien erzeugen ist eine Schablone-Datei mit einem 128-Byte-Datenblock, der an einer 64-Byte-Grenze ausgerichtet ist, die frei durch den Kollision findenden Algorithmus geändert werden kann. Ein Beispiel MD5 Kollision, mit den zwei Nachrichten, die sich in 6 Bit unterscheiden, ist:

d131dd02c5e6eec4 693d9a0698aff95c 2fcab5712467eab 4004583eb8fb7f89

55ad340609f4b302 83e48883251415a 085125e8f7cdc99f d91dbd280373c5b

d8823e3156348f5b ae6dacd436c919c6 dd53e2487da03fd 02396306d248cda0

e99f33420f577ee8 ce54b6708080d1e c69821bcb6a88393 96f965b6ff72a70

d131dd02c5e6eec4 693d9a0698aff95c 2fcab5712467eab 4004583eb8fb7f89 55ad340609f4b302 83e48883251415a 085125e8f7cdc99f d91dbd280373c5b d8823e3156348f5b ae6dacd436c919c6 dd53e2487da03fd 02396306d248cda0 e99f33420f577ee8 ce54b6708080d1e c69821bcb6a88393 96f965b6ff72a70

Beide erzeugen das MD5 Kuddelmuddel 79054025255fb1a26e4bc422aef54eb4.

Vorbildverwundbarkeit

Im April 2009 wurde ein Vorbildangriff gegen MD5 dass Brechungen MD5's Vorbildwiderstand veröffentlicht. Dieser Angriff ist nur, mit einer rechenbetonten Kompliziertheit 2 für das volle Vorimage theoretisch.

Andere Verwundbarkeit

Mehrere Projekte haben MD5 Regenbogen-Tische online veröffentlicht, die verwendet werden können, um vieles MD5 Kuddelmuddel in Schnuren umzukehren, die mit dem ursprünglichen Eingang gewöhnlich zu den Zwecken des Kennwort-Knackens kollidieren.

Der Gebrauch von MD5 in URL-ADRESSEN einiger Websites bedeutet, dass Suchmotoren wie Google auch manchmal als ein beschränktes Werkzeug für die Rückseite lookup vom MD5 Kuddelmuddel fungieren können.

Beide diese Techniken werden unwirksam durch den Gebrauch eines genug langen Salzes gemacht.

Anwendungen

MD5 Auswahlen sind in der Softwarewelt weit verwendet worden, um eine Versicherung zur Verfügung zu stellen, dass eine übertragene Datei intakt angekommen ist. Zum Beispiel stellen Dateiserver häufig einen vorgeschätzten MD5 (bekannt als Md5sum) Kontrollsumme für die Dateien zur Verfügung, so dass ein Benutzer die Kontrollsumme der heruntergeladenen Datei dazu vergleichen kann. Mit Sitz in Unix Betriebssysteme schließen MD5-Summe-Dienstprogramme in ihre Vertriebspakete ein, wohingegen Windows-Benutzer Drittanwendungen verwenden. Androide ROMs verwertet auch diesen Typ der Kontrollsumme.

Jedoch, jetzt wo es leicht ist, MD5 Kollisionen zu erzeugen, ist es für die Person möglich, die die Datei geschaffen hat, um eine zweite Datei mit derselben Kontrollsumme zu schaffen, so kann diese Technik nicht gegen einige Formen des böswilligen Herumbastelns schützen. Außerdem in einigen Fällen kann der Kontrollsumme nicht vertraut werden (zum Beispiel, wenn sie über denselben Kanal wie die heruntergeladene Datei erhalten wurde), in welchem Fall MD5 nur fehlerüberprüfende Funktionalität zur Verfügung stellen kann: Es wird ein korruptes oder unvollständiges Download anerkennen, das wahrscheinlicher wird, wenn es größere Dateien herunterlädt.

MD5 wurde weit verwendet, um Kennwörter zu versorgen. Der gesunde Gebrauch von MD5 schließt (auch bekannt als GUID) Version 3 ein, die in RFC 4122 angegeben ist, angegeben in RFC 2195, und die IETF Lotterie, die in RFC 3797 angegeben ist.

MD5 und andere Kuddelmuddel-Funktionen werden auch im Feld der elektronischen Entdeckung verwendet, um einen einzigartigen Bezeichner für jedes Dokument zur Verfügung zu stellen, das während des gesetzlichen Entdeckungsprozesses ausgetauscht wird. Diese Methode kann verwendet werden, um das Marke-Zählen-System von Bates zu ersetzen, das seit Jahrzehnten während des Austausches von Papierdokumenten verwendet worden ist.

Algorithmus

MD5 bearbeitet eine Nachricht der variablen Länge in eine Produktion der festen Länge von 128 Bit. Die Eingangsnachricht wird in Klötze von 512-Bit-Blöcken (sechzehn endian kleine ganze 32-Bit-Zahlen) zerbrochen; die Nachricht wird ausgepolstert, so dass seine Länge durch 512 teilbar ist. Das Polstern arbeitet wie folgt: Zuerst wird ein einzelnes Bit, 1, am Ende der Nachricht angehangen. Dem wird von so vielen Nullen gefolgt, wie erforderlich sind, die Länge der Nachricht bis zu 64 Bit weniger zu bringen, als ein Vielfache 512. Die restlichen Bit werden mit einer 64 Bit großen endian ganzen Zahl voll gefüllt, die die Länge der ursprünglichen Nachricht, in Bit, modulo 2 vertritt. Die Bytes in jedem 32-Bit-Block sind großer endian, aber die 32-Bit-Blöcke werden in wenig Endian-Format eingeordnet.

Der MD5 Hauptalgorithmus funktioniert auf einem 128-Bit-Staat, der in vier 32-Bit-Wörter geteilt ist, hat A, B, C und D angezeigt. Diese werden zu bestimmten festen Konstanten initialisiert. Der Hauptalgorithmus funktioniert dann auf jedem 512-Bit-Nachrichtenblock der Reihe nach, jeder Block, der den Staat modifiziert. Die Verarbeitung eines Nachrichtenblocks besteht aus vier ähnlichen Stufen, genannten Runden; jede Runde wird aus 16 ähnlichen Operationen zusammengesetzt, die auf einer nichtlinearen Funktion F, Modulhinzufügung und linker Folge gestützt sind. Abbildung 1 illustriert eine Operation innerhalb einer Runde. Es gibt vier mögliche Funktionen F; ein verschiedener wird in jeder Runde verwendet:

::::

zeigen Sie den XOR, UND, ODER und NICHT Operationen beziehungsweise an.

Pseudocode

Das MD5 Kuddelmuddel wird gemäß diesem Algorithmus berechnet:

interne

Var-Nummer [64] r, k

r [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 }\

weil ich von 0 bis 63

k [ich]: = Fußboden (abs (Sünde (ich + 1)) × (2 pow 32))

Ende für

k [0.. 3]: = {0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee }\

k [4.. 7]: = {0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501 }\

k [8.. 11]: = {0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be }\

k [12.. 15]: = {0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821 }\

k [16.. 19]: = {0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa }\

k [20.. 23]: = {0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8 }\

k [24.. 27]: = {0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed }\

k [28.. 31]: = {0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a }\

k [32.. 35]: = {0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c }\

k [36.. 39]: = {0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70 }\

k [40.. 43]: = {0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05 }\

k [44.. 47]: = {0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665 }\

k [48.. 51]: = {0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039 }\

k [52.. 55]: = {0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1 }\

k [56.. 59]: = {0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1 }\

k [60.. 63]: = {0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391 }\

interne

Var-Nummer h0: = 0x67452301

interne

Var-Nummer h1: = 0xefcdab89

interne

Var-Nummer h2: = 0x98badcfe

interne

Var-Nummer h3: = 0x10325476

hängen Sie "1" Bit an der Nachricht </Spanne> an

/* Benachrichtigung: Die Eingangsbytes werden betrachtet, weil Bit, spannt

wo das erste Bit das bedeutendste Bit des Bytes ist.

Mit anderen Worten: Die Ordnung von Bit in einem Byte ist GROßER ENDIAN,

aber die Ordnung von Bytes ist kurzum WENIG ENDIAN * / </span>

hängen Sie "0" Bit bis zur Nachrichtenlänge in Bit  448 (mod 512) an

hängen Sie Länge mod (2 pow 64) zur Nachricht an

</Spanne>

für jeden 512-Bit-Klotz der Nachricht

Brechungsklotz in sechzehn 32 Bit wenig-endian Wörter w [j], 0  j  15

interne

Var-Nummer a: = h0

interne

Var-Nummer b: = h1

interne

Var-Nummer c: = h2

interne

Var-Nummer d: = h3

weil ich von 0 bis 63

wenn 0  i  15 dann

f: = (b und c) oder ((nicht b) und d)

g: = ich

sonst, wenn 16  i  31

f: = (d und b) oder ((nicht d) und c)

g: = (5×i + 1) mod 16

sonst, wenn 32  i  47

f: = b xor c xor d

g: = (3×i + 5) mod 16

sonst, wenn 48  i  63

f: = c xor (b oder (nicht d))

g: = (7×i) mod 16

Zeitsekretärin: = d

d: = c

c: = b

b: = b + leftrotate ((+ f + k [ich] + w [g]), r [ich])

a: = Zeitsekretärin

Ende für

h0: = h0 + ein

h1: = h1 + b

h2: = h2 + c

h3: = h3 + d

Ende für

Var-Rotforelle-Auswahl [16]: = hängen h0 h1 an hängen h2 an hängen h3 an

leftrotate (x, c)

kehren Sie zurück (x

Zeichen: Statt der Formulierung von ursprünglichem RFC gezeigtem 1321 kann der folgende für die verbesserte Leistungsfähigkeit verwendet werden (nützlich, wenn Zusammenbau-Sprache - sonst verwendet wird, wird der Bearbeiter allgemein den obengenannten Code optimieren. Da jede Berechnung von einem anderen in diesen Formulierungen abhängig ist, ist das häufig langsamer als die obengenannte Methode, wo der nand/and parallelised sein kann):

(0  i  15): f: = d xor (b und (c xor d))

(16  i  31): f: = c xor (d und (b xor c))

MD5 Kuddelmuddel

Das MD5 128 Bit (16 Bytes) Kuddelmuddel (auch genannte Nachrichtenauswahlen) wird normalerweise als eine Folge von 32 hexadecimal Ziffern vertreten. Der folgende demonstriert einen ASCII 43-Byte-Eingang und das entsprechende MD5 Kuddelmuddel:

MD5 ("Der schnelle braune Fuchs springt über den faulen Hund")

= 9e107d9d372bb6826bd81d3542a419d6

Sogar ein Kleingeld in der Nachricht wird (mit der überwältigenden Wahrscheinlichkeit) laufen auf ein größtenteils verschiedenes Kuddelmuddel wegen der Lawine-Wirkung hinaus. Zum Beispiel, eine Periode zum Satzende hinzufügend:

MD5 ("Der schnelle braune Fuchs springt über den faulen Hund.")

= e4d909c290d0fb1ca068ffaddf22cbd0

Das Kuddelmuddel der Nulllänge-Schnur ist:

MD5 ("")

= d41d8cd98f00b204e9800998ecf8427e

Der MD5 Algorithmus wird für Nachrichten angegeben, die aus jeder Zahl von Bit bestehen; es wird auf Vielfachen von acht Bit (Oktette, Bytes), wie gezeigt, in den Beispielen oben nicht beschränkt. Einige MD5 Durchführungen wie md5sum könnten auf Oktette beschränkt werden, oder sie könnten Einteilung für Nachrichten einer am Anfang unentschiedenen Länge nicht unterstützen.

Siehe auch

  • Der Vergleich des kryptografischen Kuddelmuddels fungiert
  • md5deep
  • md5sum
  • HashClash
  • MD6

Referenzen

  • Hans Dobbertin, Cryptanalysis der MD5 Kompresse. Ansage im Internet, Mai 1996.

Links

  • RFC 1321 Der MD5 Nachrichtenauswahl-Algorithmus
  • RFC 6151 Aktualisierte Sicherheit Rücksichten für die MD5 Nachrichtenauswahl und die HMAC-MD5 Algorithmen
  • W3C Empfehlung auf MD5
  • REXX MD5 Testgefolge bedeckt MD5 Beispiele in verschiedenem RFCs (incl. Errata)

Motion Picture Patents Company / Magie: Das Sammeln
Impressum & Datenschutz