翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
JCE プロバイダーをクライアント SDK 3 からクライアント SDK 5 に移行する
このトピックでは、JCE プロバイダーを Client SDK 3 から Client SDK 5 に移行します。移行の利点については、「」を参照してくださいClient SDK 5 の利点。
では AWS CloudHSM、顧客アプリケーションは AWS CloudHSM クライアントソフトウェア開発キット (SDK) を使用して暗号化オペレーションを実行します。Client SDK 5 は、引き続き新機能とプラットフォームサポートが追加されているプライマリ SDK です。
Client SDK 3 JCE プロバイダーは、標準 JCE 仕様に含まれていないカスタムクラスと APIs を使用します。JCE プロバイダーのクライアント SDK 5 は JCE 仕様に準拠しており、特定の領域ではクライアント SDK 3 と下位互換性がありません。お客様のアプリケーションでは、クライアント SDK 5 への移行の一環として変更が必要になる場合があります。このセクションでは、移行を成功させるために必要な変更点の概要を説明します。
すべてのプロバイダーの移行手順を確認するには、「」を参照してくださいClient SDK 3 から Client SDK 5 への移行。
重大な変更に対処して準備する
これらの重大な変更を確認し、それに応じて開発環境でアプリケーションを更新します。
プロバイダークラスと名前が変更されました
変更点 | クライアント SDK 3 の内容 | Client SDK 5 の内容 | 例 |
---|---|---|---|
プロバイダークラスと名前 |
Client SDK 3 の JCE プロバイダークラスは と呼ばれ |
クライアント SDK 5 では、プロバイダークラス が呼び出 |
|
明示的なログインが変更されましたが、暗黙的な は変更されていません
変更点 | クライアント SDK 3 の内容 | Client SDK 5 の内容 | 例 |
---|---|---|---|
明示的なログイン |
クライアント SDK 3 は、明示的なログイン に |
クライアント SDK 5 では、 |
Client SDK 5 で明示的なログインを使用する方法の例については、AWS CloudHSM LoginRunner サンプルリポジトリ のサンプルを参照してください。 AWS CloudHSM GitHub |
暗黙的なログイン |
暗黙的なログインに変更は必要ありません。Client SDK 3 から Client SDK 5 に移行する場合、暗黙的なログインでは、同じプロパティファイルとすべての環境変数が引き続き機能します。 |
Client SDK 5 で暗黙的なログインを使用する方法の例については、LoginRunner サンプル |
-
[1] クライアント SDK 3 コードスニペット:
LoginManager lm = LoginManager.getInstance(); lm.login(partition, user, pass);
-
[2] クライアント SDK 5 コードスニペット:
// Construct or get the existing provider object AuthProvider provider = new CloudHsmProvider(); // Call login method on the CloudHsmProvider object // Here loginHandler is a CallbackHandler provider.login(null, loginHandler);
Client SDK 5 で明示的なログインを使用する方法の例については、LoginRunner サンプル
AWS CloudHSM GitHub リポジトリのサンプルを参照してください。
キー生成が変更されました
変更点 | クライアント SDK 3 の内容 | Client SDK 5 の内容 | 例 |
---|---|---|---|
キー生成 |
Client SDK 3 では、 |
Client SDK 5 では、 |
|
キーペアの生成 |
Client SDK 3 では、 |
クライアント SDK 5 では、 |
|
-
[1] クライアント SDK 3 キー生成コードスニペット:
KeyGenerator keyGen = KeyGenerator.getInstance("AES", "Cavium"); CaviumAESKeyGenParameterSpec aesSpec = new CaviumAESKeyGenParameterSpec( keySizeInBits, keyLabel, isExtractable, isPersistent); keyGen.init(aesSpec); SecretKey aesKey = keyGen.generateKey();
-
[2] クライアント SDK 5 キー生成コードスニペット:
KeyGenerator keyGen = KeyGenerator.getInstance("AES", CloudHsmProvider.PROVIDER_NAME); final KeyAttributesMap aesSpec = new KeyAttributesMap(); aesSpec.put(KeyAttribute.LABEL, keyLabel); aesSpec.put(KeyAttribute.SIZE, keySizeInBits); aesSpec.put(KeyAttribute.EXTRACTABLE, isExtractable); aesSpec.put(KeyAttribute.TOKEN, isPersistent); keyGen.init(aesSpec); SecretKey aesKey = keyGen.generateKey();
-
[3] クライアント SDK 3 キーペア生成コードスニペット::
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("rsa", "Cavium"); CaviumRSAKeyGenParameterSpec spec = new CaviumRSAKeyGenParameterSpec( keySizeInBits, new BigInteger("65537"), label + ":public", label + ":private", isExtractable, isPersistent); keyPairGen.initialize(spec); keyPairGen.generateKeyPair();
-
[4] クライアント SDK 5 キーペア生成コードスニペット:
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA", providerName); // Set attributes for RSA public key final KeyAttributesMap publicKeyAttrsMap = new KeyAttributesMap(); publicKeyAttrsMap.putAll(additionalPublicKeyAttributes); publicKeyAttrsMap.put(KeyAttribute.LABEL, label + ":Public"); publicKeyAttrsMap.put(KeyAttribute.MODULUS_BITS, keySizeInBits); publicKeyAttrsMap.put(KeyAttribute.PUBLIC_EXPONENT, new BigInteger("65537").toByteArray()); // Set attributes for RSA private key final KeyAttributesMap privateKeyAttrsMap = new KeyAttributesMap(); privateKeyAttrsMap.putAll(additionalPrivateKeyAttributes); privateKeyAttrsMap.put(KeyAttribute.LABEL, label + ":Private"); // Create KeyPairAttributesMap and use that to initialize the // keyPair generator KeyPairAttributesMap keyPairSpec = new KeyPairAttributesMapBuilder() .withPublic(publicKeyAttrsMap) .withPrivate(privateKeyAttrsMap) .build(); keyPairGen.initialize(keyPairSpec); keyPairGen.generateKeyPair();
キーの検索、削除、参照が変更されました
AWS CloudHSM を使用して、 で既に生成されたキーを検索する KeyStore。Client SDK 3 には、 Cavium
と の 2 つの KeyStore タイプがありますCloudHSM
。クライアント SDK 5 には KeyStore 、タイプ が 1 つだけありますCloudHSM
。
から Cavium
KeyStore に移行するには、 KeyStore タイプの変更CloudHSM
KeyStore が必要です。さらに、クライアント SDK 3 はキーを参照するためにキーハンドルを使用し、クライアント SDK 5 はキーラベルを使用します。結果として生じる動作の変更を以下に示します。
変更点 | クライアント SDK 3 の内容 | Client SDK 5 の内容 | 例 |
---|---|---|---|
キーリファレンス |
Client SDK 3 では、アプリケーションはキーラベルまたはキーハンドルを使用して HSM 内のキーを参照します。でラベルを使用してキー KeyStore を検索するか、ハンドルを使用して |
Client SDK 5 では、アプリケーションは を使用してラベルでキーAWS CloudHSM KeyStore Java クラスの使用を検索できます。ハンドルでキーを検索するには、 AWS CloudHSM |
|
複数のエントリの検索 |
|
AWS CloudHSM |
|
すべてのキーを検索する |
Client SDK 3 では、 を使用して HSM 内のすべてのキーを検索できます |
Client SDK 5 では、 |
|
キー削除 |
Client SDK 3 は |
Client SDK 5 の |
削除キー機能を示すサンプルコードは、CloudHSM Github サンプルリポジトリ |
-
[1] スニペットを以下に示します。
KeyAttributesMap findSpec = new KeyAttributesMap(); findSpec.put(KeyAttribute.LABEL, label); findSpec.put(KeyAttribute.KEY_TYPE, keyType); KeyStoreWithAttributes keyStore = KeyStoreWithAttributes.getInstance("CloudHSM"); keyStore.load(null, null); keyStore.getKey(findSpec);
-
[2] Client SDK 3 でキーを削除する:
Util.deleteKey(key);
Client SDK 5 でキーを削除する:
((Destroyable) key).destroy();
暗号アンラップオペレーションが変更され、他の暗号オペレーションは変更されていません
注記
暗号の暗号化/復号/ラップオペレーションに変更は必要ありません。
アンラップオペレーションでは、Client SDK 3 CaviumUnwrapParameterSpec
クラスを、リストされている暗号化オペレーションに固有の次のいずれかのクラスに置き換える必要があります。
GCMUnwrapKeySpec
AES/GCM/NoPadding
アンラップ用IvUnwrapKeySpec
AESWrap unwrap
および 用AES/CBC/NoPadding unwrap
RSA OAEP unwrap
の場合はOAEPUnwrapKeySpec
のスニペットの例OAEPUnwrapkeySpec
:
OAEPParameterSpec oaepParameterSpec = new OAEPParameterSpec( "SHA-256", "MGF1", MGF1ParameterSpec.SHA256, PSpecified.DEFAULT); KeyAttributesMap keyAttributesMap = new KeyAttributesMap(KeyAttributePermissiveProfile.KEY_CREATION); keyAttributesMap.put(KeyAttribute.TOKEN, true); keyAttributesMap.put(KeyAttribute.EXTRACTABLE, false); OAEPUnwrapKeySpec spec = new OAEPUnwrapKeySpec(oaepParameterSpec, keyAttributesMap); Cipher hsmCipher = Cipher.getInstance( "RSA/ECB/OAEPPadding", CloudHsmProvider.PROVIDER_NAME); hsmCipher.init(Cipher.UNWRAP_MODE, key, spec);
署名オペレーションが変更されていない
署名オペレーションに変更は必要ありません。
Client SDK 5 への移行
このセクションの手順に従って、Client SDK 3 から Client SDK 5 に移行します。
注記
Amazon Linux、Ubuntu 16.04、Ubuntu 18.04 CentOS 6、CentOS 8、および RHEL 6 は現在、クライアント SDK 5 ではサポートされていません。現在、クライアント SDK 3 でこれらのプラットフォームのいずれかを使用している場合は、クライアント SDK 5 に移行するときに別のプラットフォームを選択する必要があります。
-
Client SDK 3 の JCE プロバイダーをアンインストールします。
-
Client SDK 3 のクライアントデーモンをアンインストールします。
注記
カスタム設定を再度有効にする必要があります。
-
「」の手順に従って、クライアント SDK JCE プロバイダーをインストールしますClient SDK 5 の AWS CloudHSM JCE プロバイダーをインストールして使用する。
-
Client SDK 5 では、新しい設定ファイル形式とコマンドラインブートストラップツールが導入されています。Client SDK 5 JCE プロバイダーをブートストラップするには、 のユーザーガイドに記載されている手順に従ってくださいクライアント SDK をブートストラップする。
-
開発環境で、アプリケーションをテストします。既存のコードを更新して、最終的な移行前に重大な変更を解決します。