MD5 und SHA (allgemeine Informationen)

Können bei MD5 alle ASCI-Zeichen heraus kommen im Hash? Dann müsste man mal eben 255 hoch 32 rechnen um die Zahl der verschiedenen Kombinationsmöglichkeiten herauszufinden! Leider macht mein Taschenrechner da nicht mit ;)
Also die Wahrscheinlichkeit dass 2 md5()s gleich sind ist doch relativ gering ^^
 
Genau genommen besteht eine Hexxdezimalzahl aus den Ziffern 0 bis F ;)

Da man also 16 Ziffern zur Verfügung hat, die man auf 32 Stellen verwenden kann, kommt man summa summarum auf 16^32 Möglichkeiten, was so im Bereich von 3,4E+38 liegt.
 
In dem Artikel steht aber, dass Kollisionen nur für SHA-0 und reduzierte SHA-1 gefunden wurden, die Forscher aber nicht davon ausgehen, demnächst auch SHA-1 komplett brechen zu können. Selbst wenn dies gelingen sollte, kann man immer noch ausweichen: die SHA-2-Familie, Whirlpool, Tiger. Haval mit 5 Runden ist, sowei ich weiß, ebenfalls noch sicher (nicht allerdings mit 3 oder 4). Blöd nur, dass zum derzeitigen Standpunkt die meisten Programmiersprachen dies nicht mit den Standardbibliotheken liefern, dabei ist ein SHA-256 in 20 Minuten programmiert.
Zur Funktionsweise von Message Digest wurde die mathematische Seite schon hervorragend erklärt. In der Praxis sieht die Sache so aus: MD5 verwaltet intern 4 32-Bit-Integer (SHA-1 entsprechend 5: 5*32=160Bit). Der Input wird in Blöcken von meist 64 Bytes (unsigned Characters, also numerischer Wert 0-255) gegliedert (128 Bytes im Falle von Haval und SHA-512). Ist ein Block voll, wird eine Transform-Methode aufgerufen, in der diese Integer-Werte neu berechnet werden, und zwar mittels komplizierter bitweiser Operationen. Dazu gehören bitweise Rechts- (und auch Linksrotationen), logische Bit-Polynome, Verrechnung mit Konstanten (die meist eine Zufallssequenz abbilden). Die so erzeugte Hash-Summe wird dann meist auf die alten Integer-Werte aufaddiert und so in die nächste Transform-Runde übertragen. Ist die Eingabe kein vielfaches von 64 Bytes (oder 128), wird "gepaddet", d.h. zuerst 128 (oder 1 im Falle von Tiger) angehängt, dann eine Reihe von Nullen, und in jedem Fall die Angabe der Länge der Eingabe.
Man bekommt also zum Schluss 4 (bzw. 5 oder mehr, je nach Länge des Digests) 32-Bit-Integer-Werte, die man in 16 bzw. 20 Bytes (oder entsprechend) aufsplitten kann. Die Hexadezimal-Darstellung dient nur der Lesbarkeit für Bildschirmanzeigen, denn zwischen 0 und 32 siehst du im Char-Code nicht sonderlich viel.
 
Wie ver- und entschlüssle ich nun aber am geschicktesten passwörter?
Kann ich nicht davon ausgehen dass niemand auf meine Datenbank zugreifen kann?
 
Zurück