こんにちは、Habr! Javaの暗号化の基礎を学びたい初心者向けの一連の記事から、Jakob Jenkovによる6、7、および8の記事の翻訳を紹介します。
目次:
- Java暗号化
- Java暗号
- メッセージダイジェスト
- Mac
- 署名
- キーペア
- キージェネレーター
- KeyPairGenerator
- キーストア
- キーツール
- 証明書
- CertificateFactory
- 証明書パス
キーペア
KeyPairクラス( java.security.KeyPair )は、非対称キーのペア(公開キー+秘密キー)です。 KeyPairインスタンスは、一般的に非対称暗号化(データ暗号化または署名)で使用されます。 通常、KeyPairインスタンスはJavaキーストアまたはKeyPairGeneratorから取得されます。これについては、この記事で後述します。
公開鍵アクセス
getPublic()メソッドを呼び出すことにより、KeyPairのインスタンスの公開鍵にアクセスできます。 公開鍵を取得する例:
PublicKey publicKey = keyPair.getPublic();
秘密鍵アクセス
getPrivate()メソッドを呼び出すことにより、KeyPairインスタンスの秘密鍵にアクセスすることもできます。 秘密鍵を取得する例を次に示します。
PrivateKey privateKey = keyPair.getPrivate();
キージェネレーター
KeyGeneratorクラス( javax.crypto.KeyGenerator )は、対称暗号化キーを生成するために使用されます。 対称暗号化キーは、対称暗号化アルゴリズムを使用してデータを暗号化および復号化するために使用されるキーです。
KeyGeneratorのインスタンスを作成する
KeyGeneratorクラスを使用する前に、KeyGeneratorのインスタンスを作成する必要があります。 KeyGeneratorインスタンスは、静的メソッドgetInstance()を呼び出して、キーが作成される暗号化アルゴリズムの名前を取るパラメーターとして作成されます。 KeyGeneratorのインスタンスを作成する例を次に示します。
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
この例では、AES暗号化アルゴリズムのキーを生成できるKeyGeneratorのインスタンスを作成します。
KeyGeneratorの初期化
KeyGeneratorのインスタンスを作成したら、それを初期化する必要があります。 インスタンスの初期化は、 init()メソッドを呼び出すことで実行されます。 KeyGeneratorインスタンスの初期化の例:
SecureRandom secureRandom = new SecureRandom(); int keyBitSize = 256; keyGenerator.init(keyBitSize, secureRandom);
init()メソッドは、キーの長さとキーの生成中に使用されるSecureRandomの 2つのパラメーターを受け入れます。
キー生成
KeyGeneratorインスタンスを初期化した後、それを使用してキーを生成できます。 キー生成は、 generateKey()メソッドを呼び出すことにより実行されます。 対称キーを生成する例を次に示します。
SecretKey secretKey = keyGenerator.generateKey();
キーペアジェネレーター
KeyPairGeneratorクラス( java.security.KeyPairGenerator )は、非対称キーペアを生成するために使用されます。 非対称キーのペアは2つのキーで構成されます。通常、最初のキーはデータの暗号化に使用され、2番目のキーは最初のキーで暗号化されたデータの解読に使用されます。
公開鍵と秘密鍵
非対称キーペアの最も有名なタイプは、キーペアタイプのタイプ:公開キー+秘密キーです。 秘密鍵はデータの暗号化に使用され、公開鍵はデータの復号化に使用されます。 実際、公開鍵を使用してデータを暗号化し、秘密鍵を使用してデータを復号化することもできます。 通常、秘密鍵は秘密にされ、公開鍵は誰にでも知られる可能性があります。 したがって、Jackが自分の秘密鍵でデータを暗号化すると、Jackの公開鍵を所有する人は誰でもそれを解読できます。
KeyPairGeneratorのインスタンスを作成する
KeyPairGeneratorを使用するには、最初にKeyPairGeneratorクラスのインスタンスを作成する必要があります。 KeyPairGeneratorのインスタンスは、 getInstance()メソッドを呼び出すことによって作成されます。 インスタンスを作成する例を次に示します。
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
getInstance()メソッドは、使用する暗号化アルゴリズムの名前を受け入れます。 この例では、RSAアルゴリズムを使用します。
初期化KeyPairGenerator
アルゴリズムによっては、KeyPairGeneratorのインスタンスを初期化する必要がある場合があります。 KeyPairGeneratorは、そのinitialize()メソッドを呼び出すことにより初期化されます。 KeyPairGeneratorインスタンスの初期化の例:
keyPairGenerator.initialize(2048);
この例では、KeyPairGeneratorを初期化して2048ビットキーを生成します。
キーペアの生成
KeyPairGeneratorを使用してキーペアを生成するには、 generateKeyPair()メソッドが呼び出されます。 キーペア生成の例を次に示します。
KeyPair keyPair = keyPairGenerator.generateKeyPair();