Hallo,
ich habe eine Frage an die Kryptographie-Experten:
Ist es möglich, ein Passwort, das mit einem einfachen
# echo -n "geheim" | md5sum e8636ea013e682faf61f56ce1cb1ab5c -
gehasht wurde, in die Form
# pwcrypt -m -s salt geheim $1$salt$3Q0Ci6p8QjNcX/f6P6IFa/
zu bringen oder umgekehrt?
Ich hab schon versucht, __md5_crypt_r in der glibc zu verstehen, aber so richtig schlau geworden bin ich nicht. Mag auch daran liegen, dass ich (noch) nicht weiß, wie md5 genau geht.
MfG
Frank Benkstein.
Frank Benkstein said:
ich habe eine Frage an die Kryptographie-Experten:
Ist es möglich, ein Passwort, das mit einem einfachen
# echo -n "geheim" | md5sum e8636ea013e682faf61f56ce1cb1ab5c -
==hex(md5(passwd))
gehasht wurde, in die Form
# pwcrypt -m -s salt geheim $1$salt$3Q0Ci6p8QjNcX/f6P6IFa/
=="$1$"+salt+"$"+base64(md5(salt+passwd))
zu bringen oder umgekehrt?
Nein. MD5 ist ein "Falltueralgorithmus", sprich: was da drin ist kommt nicht mehr raus. MD5 mit und ohne salt bringt also sehr unterschiedliche Ergebnisse (im Durchschnitt sollte sich die Haelfte der Bits unterscheiden).
...es sei denn Du findest einen Algorithmus, der MD5 knacken kann (Kollisionswahrscheinlichkeit 1:2**64, gilt als einigermassen sicher). Aber dann ist er auch nicht mehr fuer Passworte geeignet.
...bei genauerem Ueberlegen: crypt(2) ist eigentlich auch nicht mehr fuer Passworte geeignet.
Aber so etwas aehnliches wie echo -n "saltgeheim" | md5sum sollte wandelbar sein, indem man hex nach base64 konvertiert. Aber wozu die Muehe, wenn es schon ein Tool dazu gibt?
Ich hab schon versucht, __md5_crypt_r in der glibc zu verstehen, aber so richtig schlau geworden bin ich nicht. Mag auch daran liegen, dass ich (noch) nicht weiß, wie md5 genau geht.
Kann ich verstehen.... ;-)
Ich ignoriere normalerweise die Mathematik und konzentriere mich auf das Interface bei solchen Algorithmen, aber dazu muss man erstmal wissen, wo welches von beiden aufhoert. Tipp: schau Dir die Sourcen von libgcrypt an, das Interface ist bei den Algos (cipher/*) immer ganz unten, die Mathematik sind die ellenlangen Formeln darueber (bei MD5&Co. die Funktion transform). Also von unten nach oben lesen...
Vom Konzept ist MD5 (genau wie MD4, SHA*, RIPE-MD*) recht einfach aufgebaut:
Man zerstueckele den Input in Bloecke (MD5: 16 Byte) und jage jeden dieser Bloecke durch die Transformation. In der T. werden die Bits des aktuell gespeicherten MD-Zwischenergebnis und des Input miteinander verknuepft, wobei man heutzutage mehrere Runden von Operationen nimmt, die die Bits gruendlich durchschuetteln (sorry, liebe Mathematiker...). Die letzten Bytes Input werden noch mit vordefinierten Werten aufgefuellt und dann ebenfalls "geschuettelt", das Ergebnis dieser letzten Transformation ist der Message Digest.
Das "Durchschuetteln" ist selbstverfreilich eine recht komplizierte Wissenschaft fuer sich, von der selbst die meisten normalsterblichen Mathematiker einen respektvollen Abstand halten (nicht weil es keiner begreift, sondern weil man sich da trefflich blamieren kann, wenn man einen kleinen Fehler macht).
Konrad
Hallo.
On Thu, 22 Apr 2004 16:16:47 +0200 (CEST) "Konrad Rosenbaum" konrad@silmor.de wrote:
Frank Benkstein said:
ich habe eine Frage an die Kryptographie-Experten:
Ist es möglich, ein Passwort, das mit einem einfachen
# echo -n "geheim" | md5sum e8636ea013e682faf61f56ce1cb1ab5c -
==hex(md5(passwd))
gehasht wurde, in die Form
# pwcrypt -m -s salt geheim $1$salt$3Q0Ci6p8QjNcX/f6P6IFa/
=="$1$"+salt+"$"+base64(md5(salt+passwd))
zu bringen oder umgekehrt?
Nein. MD5 ist ein "Falltueralgorithmus", sprich: was da drin ist kommt nicht mehr raus. MD5 mit und ohne salt bringt also sehr unterschiedliche Ergebnisse (im Durchschnitt sollte sich die Haelfte der Bits unterscheiden).
Mist, ich hab da zwei Passwort-Datenbasen, die ich gerne syncronisieren würde. Und ich hatte mir das so einfach vorgestellt.
...es sei denn Du findest einen Algorithmus, der MD5 knacken kann (Kollisionswahrscheinlichkeit 1:2**64, gilt als einigermassen sicher). Aber dann ist er auch nicht mehr fuer Passworte geeignet.
Hatte ich nicht vor. (Wieder "noch". ;-)
...bei genauerem Ueberlegen: crypt(2) ist eigentlich auch nicht mehr fuer Passworte geeignet.
Meinst du crypt(3)?
Aber so etwas aehnliches wie echo -n "saltgeheim" | md5sum sollte wandelbar sein, indem man hex nach base64 konvertiert. Aber wozu die Muehe, wenn es schon ein Tool dazu gibt?
Die Datenbasen sind beide in SQL und die eine (mit den normalen md5 Summen) wird von meiner Groupware (PHP) generiert. Da wollte ich nicht 'rummurksen. - Hab' gerade, 'rausgefunden, was passiert, wenn man den Passwortspeicheralgorithmus von md5 auf md5_crypt umschaltet. Siehe da, alle Passwörter sind ungültig :-(, aber ich kann jetzt die Synchronierung durchführen :-). Problem gelöst. (Workaround)
Ich hab schon versucht, __md5_crypt_r in der glibc zu verstehen, aber so richtig schlau geworden bin ich nicht. Mag auch daran liegen, dass ich(noch) nicht weiß, wie md5 genau geht.
Kann ich verstehen.... ;-)
[...]
Ich danke dir für deine Hinweise.
Gruß Frank.
Frank Benkstein said:
Mist, ich hab da zwei Passwort-Datenbasen, die ich gerne syncronisieren würde. Und ich hatte mir das so einfach vorgestellt.
Das muss man normalerweise schon beim Passwort-eintippen synchronisieren, indem man dafuer sorgt, dass PAM oder was man auch immer nutzt alle notwendigen Passwort-DBs fuellt.
...bei genauerem Ueberlegen: crypt(2) ist eigentlich auch nicht mehr fuer Passworte geeignet.
Meinst du crypt(3)?
Aehh, ja. Richtig.
Konrad
On Thu, 22 Apr 2004 16:45:42 +0200 (CEST) "Konrad Rosenbaum" konrad@silmor.de wrote:
Frank Benkstein said:
Mist, ich hab da zwei Passwort-Datenbasen, die ich gerne syncronisieren würde. Und ich hatte mir das so einfach vorgestellt.
Das muss man normalerweise schon beim Passwort-eintippen synchronisieren, indem man dafuer sorgt, dass PAM oder was man auch immer nutzt alle notwendigen Passwort-DBs fuellt.
Es handelt sich ja nicht um Maschinen-Nutzer, obwohl das jetzt auch drausmachen könnte, sondern um Nutzer von zwei unterschiedlichen Diensten (nämlich Groupware und IMAP). Ich müsste also die Groupware verändern und das will ich nicht. Hab eben copy&paste probiert. Geht. Also Skript drumbauen. Fertig.
lug-dd@mailman.schlittermann.de