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.

Eine gesalzene, verlängert hash ist ziemlich stark. Sie konnte einfach abschneiden, das Ergebnis zu, was Länge, die Sie benötigen nach der Generierung 256 bits.
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

Schreibe einen Kommentar