2011-01-06 12 views
2

Ich habe meinen Mail-Server wie diktiert here implementiert.Postfix + MySQL ENCRYPT(), Wie überprüft es das Passwort mit randomizing Salz?

Es funktioniert einwandfrei. Meine curiousity dreht sich um Benutzer in die Datenbank eingeben und

Lauf Authentifizierung:

INSERT INTO users (email, password) VALUES ('[email protected]', ENCRYPT('password')); 

Mehrere Male geben einen anderen Hash für das verschlüsselte Passwort als unter Verwendung eines Zufalls Salz. I.e. Wenn ich drei mal [email protected] mit dem gleichen Passwort eingebe, ist jeder Hash unterschiedlich ...

Meine Frage dazu ist, wie kann der Postfix-Server das Passwort authentifizieren, wenn sich ein Benutzer über einen anmeldet E-Mail-Client?

Es gibt kein Problem pro sagen, wie es gut funktioniert, mehr nur um meine Neugier zu befriedigen, damit ich völlig verstehen kann, was hinter den Kulissen passiert, um das verschlüsselte Passwort ordnungsgemäß zu authentifizieren.

Antwort

2

Lesen Man Krypta: Es gibt das Salz in den ersten beiden Zeichen des Rückgabewerts zurück.

Damit das Salz nicht verloren geht, können Sie die verschlüsselte Zeichenfolge mit dem Ergebnis von crypt vergleichen ('pass', $ first_two_chars_of_encrypted_value).

-3

Sie müssen ENCRYPT ('pass', 'salt') verwenden, um ein Salz zu erzwingen, andernfalls ist das Salz für immer verloren und Sie haben keine Möglichkeit, es wiederzugewinnen. Ziemlich sinnlose Funktion ohne sie. Es ist eine schreckliche Funktion zu verwenden, weil die Sicherheit so minimal ist; Verwenden Sie stattdessen PASSWORD() oder OLD_PASSWORD().

ENCRYPT() verwendet das System crypt(), das alle oder nur die ersten 8 Zeichen verwenden kann, 7-Bit-ascii druckbar sein muss, im Allgemeinen 1 Runde eines DES-basierten Hashes verwendet und vollständig nicht portierbar ist. Vermeide es.

+1

Wenn das Salz für immer verloren ist, dann würde seine Konfiguration nicht wirklich funktionieren. Ich stimme zu, dass sich Verschlüsselung nicht wie eine gute Lösung anhört, aber gibt es eine Möglichkeit, Postfix dazu zu bringen, etwas anderes zu akzeptieren? – Dwayne

3

Postfix vergleicht das Passwort von der Datenbank mit einer neuen Verschlüsselung, die mit dem Salt durchgeführt wurde (Passwort von db).

verschlüsseln:

update user set password = ENCRYPT('1234') where id = 1 

Passwort überprüfen:

SELECT u.* FROM user u where u.email ='[email protected]' 
and ENCRYPT('1234', u.password) = u.password