2009-05-19 8 views
7

Sunのkeytoolプログラムを使用して暗号化に適した128ビット鍵ペアを生成する方法はありますか? http://java.sun.com/javase/6/docs/technotes/guides/security/StandardNames.html#KeyPairGeneratorで利用可能なアルゴリズムは、サポートされていないか、512ビットよりも短いキーを許可していないようです。keytoolで128ビット鍵を生成する

鍵ペアはffとともに使用されます。コードスニペット:

出力は暗号化されたデータが保存され、入力が平文データが読み込まれますいくつかのInputStreamであるいくつかのOutputStreamある
Security.addProvider(new BouncyCastleProvider()); 

KeyStore keyStore = KeyStore.getInstance("PKCS12"); 

FileInputStream keyStoreSource = new FileInputStream("keystore"); 

try { 
    keyStore.load(keyStoreSource, "password".toCharArray()); 
} finally { 
    keyStoreSource.close(); 
} 

String alias = (String) keyStore.aliases().nextElement(); 
PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, "password".toCharArray()); 
X509Certificate certificate = (X509Certificate) keyStore.getCertificate(alias); 

CMSEnvelopedDataStreamGenerator generator = new CMSEnvelopedDataStreamGenerator(); 

generator.addKeyTransRecipient(certificate); 

OutputStream output2 = generator.open(output, CMSEnvelopedDataGenerator.AES128_CBC, BouncyCastleProvider.PROVIDER_NAME); 

try { 
    IOUtils.copy(input, output2); 
} finally { 
    output2.close(); 
    output.close(); 
} 

答えて

0

512ビットのキーペアよりも短いものは生成できません。公開鍵暗号方式では、同じレベルのセキュリティを維持するために、対称鍵暗号方式よりも長い鍵が必要です。 128ビットの鍵ペアは、公開鍵暗号化にはお勧めできません。

+0

異なるstoretypeを指定する必要があります。私は間違ったやり方をしていますか? –

+1

達成したいことをもう少し詳しく説明できますか? –

+0

生成されたキーペアが使用されるコードスニペットで質問を更新しました。 –

2

証明書は公開鍵暗号化に使用され、対称ブロック暗号AES-128の暗号化キーは含まれません。代わりに、公開鍵暗号化は128ビットAES鍵の暗号化またはネゴシエーションにのみ使用され、残りの会話ではAESが使用されます。

128ビットAESキーは証明書ではなく、暗号的に強力な乱数ジェネレータの128ビットか、PBKDF2などのハッシュアルゴリズムを使用したパスフレーズから派生したものです。これらのビットをどのように取得するかは、アプリケーションによって異なります。 SSL/TLSはランダムキーをネゴシエートする必要がありますが、ハードディスク暗号化プログラムはパスフレーズからキーを導出します。

+0

生成されたキーペアが使用されるコードスニペットで質問を更新しました。うまくいけば、私は混乱を取り除いた。しかし、ええ、私は暗号の初心者です。 :P –

5

あなたはちょうど私がAES-128で使用するテスト証明書を生成するために探していた

keytool -genseckey -alias check2 -keyalg AES -keysize 128 -storepass changeit -storetype JCEKS -keystore ks.jck

関連する問題