12. 共通鍵の交換(2) --KeyAgreementクラス
2006.12.08 株式会社四次元データ 里見玲爾
- 12.1. KeyAgreementオブジェクトの生成
- 12.2. KeyAgreementオブジェクトの初期化
- 12.3. KeyAgreementフェーズの実行
- 12.4. 共通情報の生成
KeyAgreementクラスは11章で解説した鍵交換に関する機能を提供します。この章ではこのKeyAgreementクラスについて解説します。
12.1. KeyAgreementオブジェクトの生成
KeyAgreementオブジェクトの生成には、次のgetInstanceファクトリメソッドを利用します。
static KeyAgreement getInstance(String algorithm); static KeyAgreement getInstance(String algorithm, String provider); static KeyAgreement getInstance(String algorithm, Provider provider);
algorithmには鍵交換アルゴリズム、providerにはプロバイダを指定します。SunJCE標準プロバイダでは DiffieHellman以外に2種類のアルゴリズムが実装されています。
12.2. KeyAgreementオブジェクトの初期化
KeyAgreementオブジェクトの初期化には、次のinitメソッドを利用します。
void init(Key key); void init(Key key, AlgorithmParameterSpec params); void init(Key key, SecureRandom random); void init(Key key, AlgorithmParameterSpec params, SecureRandom random);
initメソッドでは必ず鍵オブジェクトを引数に指定し、オプションとしてパラメータ仕様や乱数の発生源を指定します。 DH法では鍵オブジェクトとして非公開数の情報を持ったDHPrivateKeyオブジェクトを渡します。
12.3. KeyAgreementフェーズの実行
KeyAgreementフェーズとは鍵交換に関係する誰かの公開鍵またはセッション鍵を利用して次のセッション鍵を 生成する段階のことを意味します。このフェーズでは下のdoPhaseメソッドを実行します。
Key doPhase(Key key, boolean lastPhase);
keyには公開鍵またはセッション鍵を指定し、lastPhaseはそれが最後のフェーズであるかどうかを指定します。 返り値は次のセッション鍵で、もしそのフェーズが鍵を生成しないフェーズの場合はnullを返します。 たとえば2ユーザのDH法ではKeyAgreementフェーズは1回で、セッション鍵は生成されないのでこのフェーズの doPhaseの返り値はnullとなります。
12.4. 共通情報の生成
KeyAgreementフェーズをすべて実行した後、KeyAgreementオブジェクトには鍵交換に関係するすべてのユーザの 情報が格納されます。このKeyAgreementオブジェクトに対して次のgenerateSecretメソッドを実行すると、 共通情報を生成することができます。
byte[] generateSecret(); SecretKey generateSecret(String algorithm); int generateSecret(byte[] sharedSecret, int offset);
1つめのメソッドは秘密情報を返します。 2つめのメソッドではalgorithmにどの暗号化アルゴリズムの鍵を生成するかを指定し、その共通鍵オブジェクトを返します。 3つめのメソッドではsharedSecretに秘密情報を格納するバッファ、offsetにはsharedSecretのオフセットを指定し、 sharedSecretに格納されたバイト数を返します。