翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ステップ 3: キーマテリアルを暗号化する
パブリックキーとインポートトークンをダウンロードした後、ダウンロードしたパブリックキーと指定したラップアルゴリズムを使用してキーマテリアルを暗号化します。パブリックキーまたはインポートトークンを置き換える必要がある場合、あるいはラップアルゴリズムを変更する必要がある場合は、新しいパブリックキーとインポートトークンをダウンロードする必要があります。AWS KMS がサポートするパブリックキーとラップアルゴリズムについては、「ラップパブリックキーの仕様を選択」および「ラップアルゴリズムの選択」を参照してください。
キーマテリアルはバイナリ形式である必要があります。詳細については、「インポートされたキーマテリアルの要件」を参照してください。
非対称キーペアの場合は、プライベートキーのみを暗号化してインポートします。AWS KMS は、プライベートキーからパブリックキーを取得します。
ECC_NIST_P521 キーマテリアル、RSA_2048 パブリックラップキー仕様、および RSAES_OAEP_SHA_* ラップアルゴリズムの組み合わせはサポートされていません。
RSA_2048 パブリックラップキーを使用して、ECC_NIST_P521 のキーマテリアルを直接ラップすることはできません。大きなラップキー、または RSA_AES_KEY_WRAP_SHA_* ラップアルゴリズムを使用してください。
RSA_AES_KEY_WRAP_SHA_256 および RSA_AES_KEY_WRAP_SHA_1 ラッピングアルゴリズムは、中国リージョンではサポートされていません。
通常、ハードウェアセキュリティモジュール (HSM) またはキー管理システムからエクスポートする場合、キーマテリアルを暗号化します。バイナリ形式でキーマテリアルをエクスポートする方法については、HSM またはキー管理システムに関するドキュメントを参照してください。OpenSSL を使用して、概念実証デモを提供する、次のセクションを参照できます。
キーマテリアルを暗号化する場合、パブリックキーとインポートトークンをダウンロードしたときに指定した、同じラップアルゴリズムを使用します。指定したラップアルゴリズムを見つけるには、関連付けられた GetParametersForImport リクエストの CloudTrail ログイベントを確認してください。
テスト用のキーマテリアルを生成
次の OpenSSL コマンドは、サポートされている各タイプのテスト用のキーマテリアルを生成します。これらの例は、テストと概念実証デモのみを目的としています。本稼働システムの場合、ハードウェアセキュリティモジュールやキー管理システムなど、より安全な方法を使用してキーマテリアルを生成します。
非対称キーペアのプライベートキーを DER でエンコードされた形式に変換するには、パイプを使ってキーマテリアル生成コマンドを次の openssl pkcs8
コマンドに渡します。この topk8
パラメータは、プライベートキーを入力として受け取り、PKCS#8 形式のキーを返すように OpenSSL に指示します。(デフォルトの動作は逆です)
openssl pkcs8 -topk8 -outform der -nocrypt
次のコマンドは、サポートされている各キータイプのテストキーマテリアルを生成します。
-
対称暗号化キー (32 バイト)
このコマンドは、256 ビット対称キー (32 バイトのランダム文字列) を生成し、PlaintextKeyMaterial.bin
ファイルに保存します。このキーマテリアルをエンコードする必要はありません。
openssl rand -out PlaintextKeyMaterial.bin 32
中国リージョンでのみ、128 ビット対称キー (16 バイトのランダム文字列) を生成する必要があります。
openssl rand -out PlaintextKeyMaterial.bin 16
-
HMAC キー
このコマンドは、指定したサイズのランダムバイト文字列を生成します。このキーマテリアルをエンコードする必要はありません。
HMAC キーの長さは、KMS キーのキー仕様で定義されている長さと一致する必要があります。例えば、KMS キーが HMAC_384 の場合、384 ビット (48 バイト) キーをインポートする必要があります。
openssl rand -out HMAC_224_PlaintextKey.bin 28
openssl rand -out HMAC_256_PlaintextKey.bin 32
openssl rand -out HMAC_384_PlaintextKey.bin 48
openssl rand -out HMAC_512_PlaintextKey.bin 64
-
RSA プライベートキー
openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:2048 | openssl pkcs8 -topk8 -outform der -nocrypt > RSA_2048_PrivateKey.der
openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:3072 | openssl pkcs8 -topk8 -outform der -nocrypt > RSA_3072_PrivateKey.der
openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:4096 | openssl pkcs8 -topk8 -outform der -nocrypt > RSA_4096_PrivateKey.der
-
ECC プライベートキー
openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-256 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_NIST_P256_PrivateKey.der
openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-384 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_NIST_P384_PrivateKey.der
openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-521 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_NIST_P521_PrivateKey.der
openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:secp256k1 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_SECG_P256K1_PrivateKey.der
-
SM2 プライベートキー (中国リージョンのみ)
openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:sm2 | openssl pkcs8 -topk8 -outform der -nocrypt > SM2_PrivateKey.der
OpenSSL によるキーマテリアルの暗号化の例
以下の例は、OpenSSL を使用して、ダウンロードしたパブリックキーでキーマテリアルを暗号化する方法を示しています。SM2 パブリックキー (中国リージョンのみ) を使用してキーマテリアルを暗号化するには、SM2OfflineOperationHelper クラスを使用します。各ラッピングアルゴリズムがサポートするキーマテリアルタイプの詳細については、「ラップアルゴリズムの選択」を参照してください。
これらの例では、概念実証デモのみです。本稼働システムの場合、より安全な方法 (商用 HSM またはキー管理システムなど) を使用して、キーマテリアルを生成し、保存します。
ECC_NIST_P521 キーマテリアル、RSA_2048 パブリックラップキー仕様、および RSAES_OAEP_SHA_* ラップアルゴリズムの組み合わせはサポートされていません。
RSA_2048 パブリックラップキーを使用して、ECC_NIST_P521 のキーマテリアルを直接ラップすることはできません。大きなラップキー、または RSA_AES_KEY_WRAP_SHA_* ラップアルゴリズムを使用してください。
- RSAES_OAEP_SHA_1
-
AWS KMS は、対称暗号化キー (SYMMETRIC_DEFAULT)、楕円曲線 (ECC) プライベートキー、SM2 プライベートキー、および HMAC キー用の RSAES_OAEP_SHA_1 をサポートしています。
RSAES_OAEP_SHA_1 は RSA プライベートキーではサポートされていません。また、任意の RSAES_OAEP_SHA_* ラップアルゴリズムの RSA_2048 パブリックラップキーを使用して ECC_NIST_P521 (secp521r1) プライベートキーをラップすることはできません。より大きいサイズのパブリックラップキーまたは RSA_AES_KEY_WRAP ラップアルゴリズムを使用する必要があります。
次の例では、ダウンロードしたパブリックキーと RSAES_OAEP_SHA_1 ラップアルゴリズムを使用してキーマテリアルを暗号化し、EncryptedKeyMaterial.bin
ファイルに保存します。
この例では、以下のようになっています。
$
openssl pkeyutl \
-encrypt \
-in PlaintextKeyMaterial.bin
\
-out EncryptedKeyMaterial.bin \
-inkey WrappingPublicKey.bin
\
-keyform DER \
-pubin \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:sha1
- RSAES_OAEP_SHA_256
-
AWS KMS は、対称暗号化キー (SYMMETRIC_DEFAULT)、楕円曲線 (ECC) プライベートキー、SM2 プライベートキー、および HMAC キー用の RSAES_OAEP_SHA_256 をサポートしています。
RSAES_OAEP_SHA_256 は RSA プライベートキーではサポートされていません。また、任意の RSAES_OAEP_SHA_* ラップアルゴリズムの RSA_2048 パブリックラップキーを使用して ECC_NIST_P521 (secp521r1) プライベートキーをラップすることはできません。より大きいサイズのパブリックキーまたは RSA_AES_KEY_WRAP ラップアルゴリズムを使用する必要があります。
次の例では、ダウンロードしたパブリックキーと RSAES_OAEP_SHA_256 ラップアルゴリズムを使用してキーマテリアルを暗号化し、EncryptedKeyMaterial.bin
ファイルに保存します。
この例では、以下のようになっています。
-
WrappingPublicKey.bin
は、ダウンロードしたパブリックラップキーを含むファイルです。コンソールからパブリックキーをダウンロードした場合、このファイルの名前は wrappingKey_KMS key_key_ID
_timestamp
(例えば、wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909
) となります。
-
PlaintextKeyMaterial.bin
は、PlaintextKeyMaterial.bin
、HMAC_384_PlaintextKey.bin
、ECC_NIST_P521_PrivateKey.der
など、暗号化するキーマテリアルを含むファイルです。
$
openssl pkeyutl \
-encrypt \
-in PlaintextKeyMaterial.bin
\
-out EncryptedKeyMaterial.bin \
-inkey WrappingPublicKey.bin
\
-keyform DER \
-pubin \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:sha256 \
-pkeyopt rsa_mgf1_md:sha256
- RSA_AES_KEY_WRAP_SHA_1
-
RSA_AES_KEY_WRAP_SHA_1 ラップアルゴリズムには 2 つの暗号化オペレーションオペレーションが含まれています。
-
生成した AES 対称キーと AES 対称暗号化アルゴリズムを使用してキーマテリアルを暗号化します。
-
使用した AES 対称キーを、ダウンロードしたパブリックキーと RSAES_OAEP_SHA_1 ラップアルゴリズムで暗号化します。
RSA_AES_KEY_WRAP_SHA_1 ラップアルゴリズムには OpenSSL バージョン 3.x 以降が必要です。
-
256 ビット AES 対称暗号化キーを生成する
このコマンドは、256 ランダムビットで構成される AES 対称暗号化キーを生成し、aes-key.bin
ファイルに保存します
# Generate a 32-byte AES symmetric encryption key
$
openssl rand -out aes-key.bin 32
-
AES 対称暗号化キーを使用してキーマテリアルを暗号化する
このコマンドは、AES 対称暗号化キーを使用してキーマテリアルを暗号化し、暗号化されたキーマテリアルを key-material-wrapped.bin
ファイルに保存します。
このコマンド例では、
-
PlaintextKeyMaterial.bin
は、PlaintextKeyMaterial.bin
、HMAC_384_PlaintextKey.bin
、RSA_3072_PrivateKey.der
、ECC_NIST_P521_PrivateKey.der
など、インポートするキーマテリアルを含むファイルです。
-
aes-key.bin
は、前のコマンドで生成した 256 ビット AES 対称暗号化キーを含むファイルです。
# Encrypt your key material with the AES symmetric encryption key
$
openssl enc -id-aes256-wrap-pad \
-K "$(xxd -p < aes-key.bin
| tr -d '\n')" \
-iv A65959A6 \
-in PlaintextKeyMaterial.bin
\
-out key-material-wrapped.bin
-
AES 対称暗号化キーをパブリックキーで暗号化する
このコマンドは、ダウンロードしたパブリックキーと RSAES_OAEP_SHA_1 ラップアルゴリズムで AES 対称暗号化キーを暗号化し、DER エンコードして aes-key-wrapped.bin
ファイルに保存します。
このコマンド例では、
-
WrappingPublicKey.bin
は、ダウンロードしたパブリックラップキーを含むファイルです。コンソールからパブリックキーをダウンロードした場合、このファイルの名前は wrappingKey_KMS key_key_ID
_timestamp
(例えば、wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909
) となります
-
aes-key.bin
は、このシーケンスの例の最初のコマンドで生成した 256 ビット AES 対称暗号化キーを含むファイルです。
# Encrypt your AES symmetric encryption key with the downloaded public key
$
openssl pkeyutl \
-encrypt \
-in aes-key.bin
\
-out aes-key-wrapped.bin \
-inkey WrappingPublicKey.bin
\
-keyform DER \
-pubin \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:sha1 \
-pkeyopt rsa_mgf1_md:sha1
-
インポートするファイルを生成する
暗号化されたキーマテリアルを含むファイルと暗号化された AES キーを含むファイルを連結します。これらを EncryptedKeyMaterial.bin
ファイルに保存します。このファイルは、ステップ 4: キーマテリアルのインポート にインポートするファイルです。
このコマンド例では、
# Combine the encrypted AES key and encrypted key material in a file
$
cat aes-key-wrapped.bin
key-material-wrapped.bin
> EncryptedKeyMaterial.bin
- RSA_AES_KEY_WRAP_SHA_256
-
RSA_AES_KEY_WRAP_SHA_256 ラップアルゴリズムには 2 つの暗号化手順が含まれています。
-
生成した AES 対称キーと AES 対称暗号化アルゴリズムを使用してキーマテリアルを暗号化します。
-
使用した AES 対称キーを、ダウンロードしたパブリックキーと RSAES_OAEP_SHA_256 ラップアルゴリズムで暗号化します。
RSA_AES_KEY_WRAP_SHA_256 ラップアルゴリズムには OpenSSL バージョン 3.x 以降が必要です。
-
256 ビット AES 対称暗号化キーを生成する
このコマンドは、256 ランダムビットで構成される AES 対称暗号化キーを生成し、aes-key.bin
ファイルに保存します
# Generate a 32-byte AES symmetric encryption key
$
openssl rand -out aes-key.bin 32
-
AES 対称暗号化キーを使用してキーマテリアルを暗号化する
このコマンドは、AES 対称暗号化キーを使用してキーマテリアルを暗号化し、暗号化されたキーマテリアルを key-material-wrapped.bin
ファイルに保存します。
このコマンド例では、
-
PlaintextKeyMaterial.bin
は、PlaintextKeyMaterial.bin
、HMAC_384_PlaintextKey.bin
、RSA_3072_PrivateKey.der
、ECC_NIST_P521_PrivateKey.der
など、インポートするキーマテリアルを含むファイルです。
-
aes-key.bin
は、前のコマンドで生成した 256 ビット AES 対称暗号化キーを含むファイルです。
# Encrypt your key material with the AES symmetric encryption key
$
openssl enc -id-aes256-wrap-pad \
-K "$(xxd -p < aes-key.bin
| tr -d '\n')" \
-iv A65959A6 \
-in PlaintextKeyMaterial.bin
\
-out key-material-wrapped.bin
-
AES 対称暗号化キーをパブリックキーで暗号化する
このコマンドは、ダウンロードしたパブリックキーと RSAES_OAEP_SHA_256 ラップアルゴリズムで AES 対称暗号化キーを暗号化し、DER エンコードして aes-key-wrapped.bin
ファイルに保存します。
このコマンド例では、
-
WrappingPublicKey.bin
は、ダウンロードしたパブリックラップキーを含むファイルです。コンソールからパブリックキーをダウンロードした場合、このファイルの名前は wrappingKey_KMS key_key_ID
_timestamp
(例えば、wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909
) となります
-
aes-key.bin
は、このシーケンスの例の最初のコマンドで生成した 256 ビット AES 対称暗号化キーを含むファイルです。
# Encrypt your AES symmetric encryption key with the downloaded public key
$
openssl pkeyutl \
-encrypt \
-in aes-key.bin
\
-out aes-key-wrapped.bin \
-inkey WrappingPublicKey.bin
\
-keyform DER \
-pubin \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:sha256 \
-pkeyopt rsa_mgf1_md:sha256
-
インポートするファイルを生成する
暗号化されたキーマテリアルを含むファイルと暗号化された AES キーを含むファイルを連結します。これらを EncryptedKeyMaterial.bin
ファイルに保存します。このファイルは、ステップ 4: キーマテリアルのインポート にインポートするファイルです。
このコマンド例では、
# Combine the encrypted AES key and encrypted key material in a file
$
cat aes-key-wrapped.bin
key-material-wrapped.bin
> EncryptedKeyMaterial.bin
ステップ 4: キーマテリアルのインポート に進みます。