AES: wie Generiere Schlüssel aus Passwort für jeden Algorithmus Größe
Ist es möglich, schreiben Sie eine einzelne Methode, die erzeugt gültige Schlüssel von einem Passwort für die AES-128, AES-192 und AES-256?
Dachte ich an etwas wie dieses:
SecretKeyFactory f;
try {
f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
} catch (NoSuchAlgorithmException e) {
throw new Exception("Key derivation algorithm not available.", e);
}
KeySpec ks = new PBEKeySpec(password.toCharArray());
SecretKey s;
try {
s = f.generateSecret(ks);
} catch (InvalidKeySpecException e) {
throw new Exception("Key generation failed.", e);
}
Key k = new SecretKeySpec(s.getEncoded(),"AES");
War ich mit einem ähnlichen Ansatz zu generieren, gesalzen Schlüssel für die AES-256. Jetzt habe ich jedoch zum erzeugen der Schlüssel nur aus einem Kennwort (mit kein Salz und keine Iterationen), und ich brauche Sie, um die Arbeit für die AES-128, AES-192 und AES-256. Meine Frage ist, hat dieser code die return-Taste kompatibel mit jedem AES-XXX Größe, oder sollte ich schreiben Sie den folgenden code für jede Größe?
Außerdem gibt es ein besseres (in Bezug auf Sicherheit oder Einfachheit) Möglichkeit der Generierung eines Schlüssels aus einem Passwort?
UPDATE: Endlich habe ich ein paar tests und es stellt sich heraus, dass dieser Konstruktor:
KeySpec ks = new PBEKeySpec(password.toCharArray());
Wirft immer ein InvalidKeySpecException auf diesem block:
try {
s = f.generateSecret(ks);
} catch (InvalidKeySpecException e) {
throw new Exception("Key generation failed.", e);
}
So, ich bin stecken mit den anderen Konstruktor, der braucht Salz als parameter:
KeySpec ks = new PBEKeySpec(password.toCharArray(), "somepredefinedsalt".getBytes(), numIters, keySizeInBits);
Da habe ich kein Salz habe ich dachte in hardcoding ein vordefiniertes. Nun weiß ich nicht, welche option ist sicherer, die Kodierung eines vordefinierten Salz ant mit PBKDF2 oder mit einer verkürzten hash.
Wenn ich einen Teil einer 256-bit-hash, um einen Schlüssel von 128 oder 192 bit, dann zwei unterschiedliche Passwörter generieren konnte derselben abgeschnitten-Taste.
,, ach, ist so sehr wahr. Leider eine unendliche Anzahl von Passwörter generieren könnten die gleichen Schlüssel (mit dem Hash-Funktionen. Sie müssen nur nehmen Sie Trost in der Tatsache, dass es wirklich blutigen schwierig absichtlich zu tun.
Jedes bit, das ist sehr schwer vorherzusagen, so die Vorhersage, und Sie kollidieren nur die oberen 128 bits oder die unteren 128 bits, oder jedes zweite bit ist nur so schwer (pro bit). Deshalb ist es eine wünschenswerte Eigenschaft von kryptographischen hashes. Wenn man bedenkt, dass Sie effektiv random der Angreifer die Sicht, eine Teilmenge von einem zufälligen Satz von Ziffern ist immer noch random, und ist genauso gut wie eine andere, kleinere, anders generiert zufällige Reihe von zahlen.
zwei unterschiedliche Passwörter generieren konnte derselben abgeschnitten Schlüssel" Es ist wahnsinnig unwahrscheinlich. Wenn Sie sich über solche Quoten, warum nicht davon ausgehen, Ihre Widersacher finden den 128-bit-Schlüssel nach dem Zufallsprinzip zu versuchen 128-bit-zahlen? 😉
InformationsquelleAutor Mister Smith | 2011-09-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie können, tun Sie das nicht. Ein Benutzer-Passwort ausgewählt hat in der Regel sehr schlechte Entropie.
Wenn das "Passwort" ist kein Benutzer ausgewählt wurde, aber stattdessen erzeugt eine kryptografisch starke RNG, verwenden Sie das Kennwort, oder einen hash des Passworts. In diesem Fall brauchen Sie nicht PBKDF2.
PBKDF2 ist wirklich der Letzte Ausweg Lösung.
Bitte Lesen Sie auch Lehren und Missverständnisse in Bezug auf Verschlüsselung und Kryptologie
Was ist der Punkt der Zugabe von Salz?
Ich habe gehört das Salz, weil es keinen anderen Weg, um erstellen Sie eine neue
PBEKeyspec
- Instanz mit einer bestimmten Schlüssellänge.Was soll ' s? PBKDF2 verwendet eine hash in seinem Betrieb. Ich weiß nicht, warum es ein 'last resort', als einfache hashing nicht :S möchten Sie vielleicht zu Lesen, auf seine definition.
Sorry, habe ich falsch interpretiert. Was Sie fordern ein Passwort gibt, würde ich einfach anrufen, einen Schlüssel.
InformationsquelleAutor curiousguy
Abschneiden einer 256-bit Länge Schlüssel, um die Größe benötigt. Der Schlüssel sollte zufällig sein, oder generiert, die mit einem sicheren Verfahren wie PBKDF2. Im Zweifelsfall ist der hash für mehr Länge /noch-Zufall-Verteilung vor dem abschneiden.
Können Sie auch sehen, dass PBEKeySpec können Sie Optional angeben, die key-Länge.
Bitte beschreiben Sie, wie PBKDF2 ist "sicher". Halten Sie es für "sicher", weil es langsam ist?
Ich verwenden, dass in Bezug auf die vielen benutzerdefinierten, nicht-sichere Wege-Programmierer kommen mit für die Ableitung eines Schlüssels aus einem Passwort.
PBKDF2 ist keine Magie, es ist mathematische Funktion. Wenn Sie ableiten, einen kryptographischen Schlüssel von einem niedrigen Entropie Passwort ein, dann Ihr Schlüssel haben eine geringe Entropie. Es gibt keinen Weg darum herum.
InformationsquelleAutor Ivo