Moin!
Das Passwort sei muroffles (selfforum rückwärts), und verschlüsselt asjdj2309uklckjaöwuoudjcn. An den Server muss ich die Zeichenkette muroffles übergeben (natürlich verschlüsselte Übertragung), dazu muss ich aus asjdj2309uklckjaöwuoudjcn muroffles machen. Und das ist eben mein Problem. Das muss irgendwie schon beim Anwedner geschehen. Und da das Programm Open Source ist ...
Nein, du mußt nicht das gespeicherte, codierte Passwort wiederherstellen, sondern du mußt das von Benutzer übermittelte Passwort ebenfalls codieren und gucken, ob es mit dem gespeicherten, codierten Passwort übereinstimmt. :)
Wenn der Benutzer sich erstmals ein Passwort wählt, codierst du es mit MD5. Der MD5-Algorithmus kann nicht rückgängig gemacht werden, also kommt keiner an das Passwort ran, auch wenn er den verschlüsselten Text kennt.
Wenn später das Passwort verifiziert werden soll, codierst du es einfach nochmal und vergleichst. Gleiche Passworte führen zu gleichen Ergebnissen der MD5-Codierung, unterschiedliche Passworte führen zu unterschiedlichen Ergebnissen.
Man kann ein MD5-codiertes Passwort nur durch Ausprobieren aller möglichen Buchstabenkombinationen wiederherstellen - was eine gewisse Zeit dauert. Allerdings gibt es einen ganz winzigen Nachteil: MD5-codierte Strings sind immer gleich lang. Der Input dafür kann aber unterschiedlich lang sein, und auch wesentlich länger, als der MD5-String. Das bedeutet: Irgendwelche zwei Inputs haben als Ergebnis den gleichen Output. Zwei Tatsachen machen das aber vernachlässigbar: 1. Eine winzige Änderung im Input sorgt für große Veränderungen im Output. Man kann sich also nicht durch Raten dem Passwort annähern. 2. Der Output ist eine 128-Bit-Zahl. Es gibt also 2^128 (bzw. 3,4*10^38) verschiedene Outputs - aber es gibt nur 6*10^9 Menschen auf der Welt, also kann sich jeder Mensch 5*10^28 verschiedene Passwörter ausdenken - das sollte ausreichen.
Wie hat man es beim Mozilla gemacht? Da kann man doch auch Passwörter speichern.
Simpel: Die Passwörter wandern vermutlich im Klartext irgendwo auf die Festplatte. Und selbst wenn es verschlüsselt gespeichert würde, würde das ja nichts helfen: Es muß zur Übermittlung wieder im Klartext vorliegen. Deshalb ist eines der grundlegenden Prinzipien, wenn man seine Passwörter sicher aufbewahren will: Niemals "Passwort speichern" wählen, wenn der Rechner grundsätzlich auch von anderen genutzt werden kann.
Allerdings ist das Risiko bei einem Client-Rechner auch ein viel geringeres. Normalerweise laufen auf ihm keine Serverdienste, also ist er von außen nicht erreichbar (ok, die Windows-Laufwerksfreigabe ist ein Serverdienst, der häufig läuft - aber das ist Sache des Computerbesitzers, den fürs Internet abzuschalten oder mit Passwort zu sichern). Insofern gibt es fast keine Ansatzpunkte, dass ein Fremder von außen die Passwortdatei in die Finger kriegt . Bei einem Server ist das etwas ganz anderes: Der muß erreichbar sein und wird manchmal fehlerhaft konfiguriert oder programmiert. Also ist es besser, wenn niemand mit einer Passwortdatei was anfangen kann - deshalb MD5-codieren, denn das kann niemand decodieren.
Beachte, dass ich (hoffentlich überall) nicht von MD5-_Verschlüsselung_ spreche - eine Verschlüsselung kann man wieder entschlüsseln. Auch "MD5-Codierung" ist im strengen Sinne falsch - was man codieren kann, kann man auch decodieren. MD5 ist ein Prüfsummenverfahren, und als solches ist es für die Kontrolle von "korrekten Inhalten" wie Passwörtern prima geeignet. Aber ich kenne kein Verb für "Prüfsumme erstellen", welches sich flüssig in einen Satz einfügt. "Passwort MD5-codieren" ist irgendwie deutlich (insbesondere zeigt es, dass nichts _verschlüsselt_ wird), "Passwort md5-prüfsummieren" klingt blöd. :)
- Sven Rautenberg
Diese Signatur gilt nur am Freitag.