4. ジェネレータによる鍵オブジェクトの生成
2006.05.01 株式会社四次元データ 里見玲爾
- 4.1. KeyGeneratorオブジェクトの生成
- 4.2. KeyGeneratorオブジェクトの初期化
- 4.3. 共通鍵の生成
暗号化に必要となる鍵オブジェクトの生成方法について解説します。 新しい鍵オブジェクトを生成する方法にはジェネレータを使った生成と、ファクトリを使った生成の2つがあります。 ファクトリを使った生成については別途「ファクトリによる鍵オブジェクトの生成」の章で解説することにして、 まずこの章では3章で使ったジェネレータによる生成について解説します。
ジェネレータはアルゴリズム名とプロバイダから鍵ペアまたは共通鍵オブジェクトを生成するクラスです。 以降はこのプロバイダについて特に記述しない限り、標準のSunJCEプロバイダを使用します。 公開鍵と非公開鍵の鍵ペア(KeyPair)を生成するジェネレータはjava.security.KeyPairGenerator、 共通鍵オブジェクトを生成するジェネレータはjavax.crypto.KeyGeneratorです。 以下ではKeyGeneratorについて解説します。
4.1. KeyGeneratorオブジェクトの生成
KeyGeneratorオブジェクトの生成には下のgetInstanceファクトリメソッドを使用します。 またファクトリメソッドとは、クラスのインスタンスを返すstaticメソッドのことです。
static KeyGenerator getInstance(String algorithm) static KeyGenerator getInstance(String algorithm, String provider) static KeyGenerator getInstance(String algorithm, Provider provider)
providerにはalgorithmで要求されたアルゴリズムを実装するプロバイダを指定します。 Providerはjava.security.Providerで、プロバイダのクラス表現です。アルゴリズムを実装したプロバイダを 自分で実装するときなどに使いますが、プロバイダの実装方法はここでは割愛します。
4.2. KeyGeneratorオブジェクトの初期化
KeyGeneratorオブジェクトの初期化には2つの方法があります。
1. アルゴリズム独立型 DES等のように鍵の生成に乱数やキーサイズのみを使用し、アルゴリズム 特有のパラメータを必要としない場合はこの方法で初期化します。 void init(int keysize); void init(SecureRandom random); void init(int keysize, SecureRandom random);
2. アルゴリズム特定型 アルゴリズム特有のパラメータが必要な場合、アルゴリズムパラメータ についての情報を持ったAlgorithmParameterSpecオブジェクトを引数 に加えます(AlgorithmParameterSpecについては後述します)。 void init(AlgorithmParameterSpec param); void init(AlgorithmParameterSpec param, SecureRandom random);
SecureRandomとは乱数の発生源を表すクラスで、java.securityパッケージに含まれています。
明示的に初期化しない場合、プロバイダがデフォルトの初期化を提供する必要があります。
4.3. 共通鍵の生成
上のようにして生成、初期化したKeyGeneratorオブジェクトに下のgenerateKeyメソッドを 実行して、共通鍵を生成します。
SecretKey generateKey();
KeyGenratorについて解説しましたが、KeyPairGeneratorの場合もほとんど同じです。 多少違うのは初期化にinitializeメソッドを使うことと、generateKeyPairメソッドで KeyPairオブジェクトを生成してからKeyPairに対してgetPrivateメソッドとgetPublicメソッドで 非公開鍵と公開鍵を生成することぐらいです。
次の章ではCipherクラスについて解説します。