Variousible ホーム Developers' Room トップ

共通鍵の生成

2005/ 8/ 7

Tiger で JCE (Java Cryptography Extension) を使って AES 鍵を生成する方法です。

セキュリティに関する API の解説ですが、 作者はセキュリティの専門家ではありません。 本情報をもちいて発生したいかなる問題にも責任を負いかねますので、 あらかじめご了承ください。

鍵の生成

共通鍵を生成するには、生成する鍵のアルゴリズムを決める必要があります。 ここでは AES を挙げています。

アルゴリズム説明
AES共通鍵暗号化方式で使用する AES 鍵

以下に鍵生成コードを示します。なお、例外処理などはすべて省略しています。

AES 鍵の生成
KeyGenerator generator = KeyGenerator.getInstance("AES"); SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); generator.init(128, random); Key key = generator.generateKey();

KeyGenerator クラスは共通鍵を生成するためのクラスです。 アルゴリズムを指定して getInstance() メソッドにより インスタンスを取得します。

SecureRandom クラスはセキュリティを考慮した乱数ジェネレータです。 インスタンス取得時にアルゴリズムを指定しますが、 J2SDK では、SunJCE により提供されるアルゴリズムは SHA1PRNG のみです。

先ほど生成した KeyGenerator インスタンスに対し、 生成する鍵サイズと SecureRandom を指定して generateKey() メソッドを使用して初期化します。

初期化後、generateKey() メソッドを呼び出すことで、 共通鍵を示す Key インスタンスを得られます。

符号化

生成した共通鍵は他に渡す場合などのために、 符号化してバイト列として取り出せます。

符号化
byte[] keyBytes = key.getEncoded();

Key インタフェースの getEncoded() メソッドは鍵のバイト列を返します。

バイト列からの生成

符号化されたバイト列から鍵を生成することができます。

バイト列からの生成
Key key = new SecretKeySpec(keyBytes, "AES");

バイト列から鍵を生成する場合は、SecretKeySpec クラスを直接操作します。 コンストラクタにバイト列と鍵のアルゴリズムを指定して鍵を表す Key インスタンスを得られます。

Variousible ホーム Developers' Room トップ
※Java およびすべての Java に関する標章は、米国およびその他の国における米国 Sun Microsystems, Inc. の商標または登録商標です。
※その他の登場する製品名は、各社の商標または登録商標です。
本サイトについて
Copyright © 2005 KURIHARA, Yusuke. All rights reserved.