Ich mache Passwort-basierte Dateiverschlüsselung in Java; Ich verwende AES als zugrundeliegenden Verschlüsselungsalgorithmus und PBKDF2WithHmacSHA1
, um einen Schlüssel aus einer Salz- und Passwortkombination mit dem folgenden Code abzuleiten (den ich von einem anderen großzügigen Poster auf dieser Seite bekommen habe).Passwort-Verifizierung mit PBKDF2 in Java
SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec ks = new PBEKeySpec(password,salt,1024,128);
SecretKey s = f.generateSecret(ks);
Key k = new SecretKeySpec(s.getEncoded(),"AES");
ich das Salz teilen, gibt der Benutzer sein Passwort an jedem Ende und die Verschlüsselung und Entschlüsselung funktionieren :-) Mein Problem ist, dass ich überprüfen möchte in der Lage sein, dass das Passwort der Benutzer richtig hineingeht, ist vor Einstieg in den (möglicherweise langen) Entschlüsselungsprozess. Ich weiß, dass die PBKD-Spezifikation einen optionalen 2-Byte-Verifizierungswert enthält, aber ich bin mir nicht sicher, wie ich diesen Wert mithilfe des obigen Ansatzes erzeugen kann. Bietet Java Unterstützung dafür oder wenn nicht, was wäre eine sichere Alternative?
Danke für Ihre Zeit.
Hallo, vielen Dank für Ihre Antwort. Ich hatte den Eindruck, dass der Zweck von PBKDF2 und dessen wiederholtes Kombinieren von "salt" und "password" zum Ableiten des Schlüssels darin bestand, den Prozess des Errechnens des Schlüssels aus dem Klartext-Passwort teuer zu machen und daher Angriffe im Wörterbuchstil zu erschweren. Wie gesagt, die PBKDF2-Spezifikation enthält einen optionalen Passwortverifizierungswert, ich weiß einfach nicht, wie ich in der Java-Implementierung darauf zugreifen kann. – PinkyNoBrain
Ich stimme zu, dass ein Brute-Force-Angriff leichter wird, wenn eine schnelle Überprüfung nach Abschluss des Prozesses der Schlüsselableitung möglich ist, da der Angreifer nichts entschlüsseln muss, um den Schlüssel zu überprüfen, aber ich hätte den großen Suchraum von 256-Bit-AES-Schlüsseln gedacht macht einen reinen Brute-Force-Angriff ohnehin unmöglich? – PinkyNoBrain
@pinkynobrain: Das Problem mit der Schnellprüfung ist, dass es den Schlüsselraum sehr verkleinert: Sie haben eine schnelle Möglichkeit, alle Passphrasen zu finden, für die die Schnellprüfung erfolgreich ist. Daher haben Sie viel weniger Schlüssel, um das AES brutal zu erzwingen. –