2014-06-09 10 views
5

Ich bin verwirrt, warum ich einen Algorithmus wie „AES“ angeben müssen, wenn einen Schlüssel für die Verschlüsselung zu erzeugen, zB ..Was genau bedeutet die Angabe von "AES" als Algorithmus in KeyGenerator.getInstance()?

KeyGenerator kg = KeyGenerator.getInstance("AES"); 

Es eindeutig nicht zur Festlegung der Größe der verwendet wird, Schlüssel, da AES-Schlüssel 128, 192 oder 256 Bits sein können. Der Teil über init erfolgen würde() ...

kg.init(256, new SecureRandom()); 
SecretKey key = kg.generateKey(); 

Für das, was es wert ist, das obige Codebeispiel wurde entlehnt http://android-developers.blogspot.de/2013/02/using-cryptography-to-store-credentials.html

Außerdem NIST FIPS-197 Staaten ...

Es wurden keine schwachen oder halbschwachen Schlüssel für den AES-Algorithmus identifiziert und es gibt keine Einschränkung bei der Schlüsselauswahl.

... das würde dazu führen, mich so zu glauben, dass jeden 128, 192 oder 256 Bit als Schlüssel verwendet werden könnten.

eindeutig Angabe „AES“, wenn ich eine Chiffre-Instanz zu erhalten, z ...

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding"); 

... ist notwendig, den Verschlüsselungsalgorithmus, um anzuzeigen, Gebrauch zu sein. Ich verstehe einfach nicht, was der Zweck ist, es für die Schlüsselgenerierung zu spezifizieren.

Danke.

+0

Einige Algorithmen erfordern möglicherweise Schlüssel mit speziellen Eigenschaften, wie zum Beispiel DES. Die Methode getInstance() verwendet also einen Algorithmusparameter. –

+0

DES benötigt einen 56-Bit-Schlüssel, der in 64 Bits mit 8 Bits Padding (eigentlich Paritätsbits) gespeichert ist. Andere Chiffren haben bekannte "schwache Schlüssel", die vermieden werden müssen; vielleicht ist bekannt, dass alle Bits-Null oder bestimmte andere Bitmuster unsicher sind. –

Antwort

2

Wie in den Kommentaren erwähnt, erfordern andere Schlüssel als AES möglicherweise mehr Aufmerksamkeit. Und es ist am besten, eine symmetrische Methode für DES und AES zu haben, damit Sie zwischen den Algorithmen wechseln können.

Darüber hinaus können nicht alle kryptografischen Anbieter Schlüssel im Speicher erstellen. Der Java JCA ist auch mit Hardware-Schlüsselspeichern kompatibel. Für PKCS # 11-Provider (zum Beispiel) ist es erforderlich, den Typ des Schlüssels zu kennen, wenn er erzeugt wird.

+0

Beantwortet dies Ihre Frage? –