2012-04-12 12 views
3

ich weiß, es ist möglich, Anmeldeinformationen des Benutzers von Windows (zB Domain) mit programmatisch zu validieren:Validieren Sie das Passwort eines Benutzers mit dem Hash?

es eine Zeit gekommen ist, als ich diese bestehen bleiben wollen Anmeldeinformationen.

Ich benutze die Data Protection API (über die CredUI API), um das Passwort zu verschlüsseln. Dies bedeutet, dass die verschlüsselten Daten nur für den Benutzer selbst zugänglich sind. Mein Programm, das als Benutzer ausgeführt wird, kann dann die geschützten Daten entschlüsseln.

Aber es bedeutet auch, dass ein böswillige Programm ausgeführt wird, wie der Benutzer die geschützten Daten entschlüsseln kann; Stehlen der verschlüsselten Anmeldeinformationen des Benutzers.

ich weiß, dass Windows selbst password des Benutzers nicht speichert. Was sie speichern, ist die gesalzene Version des Passworts. und bildet das "shared secret" zwischen dem Benutzer und Windows.

Gibt es eine API, mit der ich Windows fragen kann, ob das Passwort eines Benutzers gültig ist, wenn ich den gesalzenen Hash des Passworts kenne?

+0

Dies ist nicht wirklich relevant für Ihre Frage, aber ich glaube nicht, dass Windows Salze Passwort Hashes. –

Antwort

0

Wenn Sie einen Domänencontroller haben, können Sie das Kerberos-Protokoll sprechen und den vom Kennwort abgeleiteten Schlüssel senden, um die Benutzeridentität zu überprüfen. Obwohl das Schadprogramm das ursprüngliche Passwort nicht aus dem Schlüssel ableiten kann, kann es dennoch immer noch den Hashwert verwenden, um Domänenanmeldeinformationen im Auftrag des Benutzers zu erhalten.

Schauen Sie hier, um herauszufinden, wie Sie den Schlüssel aus dem Passwort

http://www.opensource.apple.com/source/Heimdal/Heimdal-172.18/kuser/kinit.c

Durch die Art und Weise abzuleiten, wird Kerberos nicht schlicht gesalzen Hashes des Passworts verwenden. Die eigentliche Schlüsselgenerierungsfunktion ist ein bisschen mehr involviert, da die Passphrase selbst nicht genug Entropie hat, um nicht identifizierbare Schlüssel zu erzeugen. Denken Sie daran, dass Kerberos gegen Lauschangriffe resistent sein sollten.

0

Sie möchten den Windows-Kennwort-Hash wirklich nicht speichern, da, wie bereits erwähnt wurde, der Hash zur Identität des Benutzers verwendet werden kann, wenn ein Domänencontroller vorhanden ist. Tatsächlich ist das Wissen um den eigentlichen Schlüssel in Kerberos genauso schlimm wie das Wissen um das Kennwort eines Angreifers. Stattdessen sollten Sie das Passwort mit einem anderen Salz aufbereiten als Windows verwenden und speichern. Ich würde empfehlen, nach einer Implementierung eines guten Passwort-Hash wie PBKDF2 zu suchen und diese zu verwenden. Siehe Wikipedia's Liste der Implementierungen. Informationen darüber, was Kerberos für das Passwortsalting tut, finden Sie unter RFC 3962. Windows verwendet diesen Prozess für AES und verwendet einen anderen Prozess für NTLM und RC4 Kerberos.

Ich bin mir ziemlich sicher, dass es keine öffentliche API gibt, die Kerberos gesalzene Passwörter vergleichen kann. Ich bin weniger vertraut mit den NTLM-APIs.

+0

Ich möchte wirklich nicht den Windows-Passwort-Hash (verschlüsselt) speichern. Aber jetzt speichere ich das Windows-Passwort selbst (verschlüsselt). Ich würde lieber ein abstraktes * "Token" * als das Passwort speichern.Die Geheimhaltung des Passworts einer Person ist wichtiger als die Fähigkeit, sie zu imitieren (es ist mir egal, ob Sie meine Domänenanmeldeinformationen bei der Arbeit vervielfältigen können - aber ich verliere meine Meinung, wenn Sie mein persönliches * persönliches Passwort kennen). –

+0

Sicher, und ich habe Sie auf eine Lösung hingewiesen, die Ihre Einschränkungen mindestens so erfüllt, wie Sie sie angegeben haben. –

Verwandte Themen