キーマテリアルのインポート ステップ 3: キーマテリアルを暗号化する - AWS Key Management Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

キーマテリアルのインポート ステップ 3: キーマテリアルを暗号化する

パブリックキーとインポートトークンをダウンロードした後、ダウンロードしたパブリックキーと指定したラップアルゴリズムを使用してキーマテリアルを暗号化します。パブリックキーまたはインポートトークンを置き換える必要がある場合、あるいはラップアルゴリズムを変更する必要がある場合は、新しいパブリックキーとインポートトークンをダウンロードする必要があります。AWS KMS がサポートするパブリックキーとラップアルゴリズムについては、「ラップパブリックキーの仕様を選択」および「ラップアルゴリズムの選択」を参照してください。

キーマテリアルはバイナリ形式である必要があります。詳細については、「インポートされたキーマテリアルの要件」を参照してください。

注記

非対称キーペアの場合は、プライベートキーのみを暗号化してインポートします。AWS KMS は、プライベートキーからパブリックキーを取得します。

ECC_NIST_P521 キーマテリアル、RSA_2048 パブリックラップキー仕様、および RSAES_OAEP_SHA_* ラップアルゴリズムの組み合わせはサポートされていません。

RSA_2048 パブリックラップキーを使用して、ECC_NIST_P521 のキーマテリアルを直接ラップすることはできません。大きなラップキー、または RSA_AES_KEY_WRAP_SHA_* ラップアルゴリズムを使用してください。

通常、ハードウェアセキュリティモジュール (HSM) またはキー管理システムからエクスポートする場合、キーマテリアルを暗号化します。バイナリ形式でキーマテリアルをエクスポートする方法については、HSM またはキー管理システムに関するドキュメントを参照してください。OpenSSL を使用して、概念実証デモを提供する、次のセクションを参照できます。

キーマテリアルを暗号化する場合、パブリックキーとインポートトークンをダウンロードしたときに指定した、同じラップアルゴリズムを使用します。指定したラップアルゴリズムを確認するには、関連するGetParametersForImportリクエストの CloudTrail ログイベントを参照してください。

テスト用のキーマテリアルを生成

次の OpenSSL コマンドは、サポートされている各タイプのテスト用のキーマテリアルを生成します。これらの例は、テストと proof-of-concept デモンストレーションのみを目的としています。本稼働システムの場合、ハードウェアセキュリティモジュールやキー管理システムなど、より安全な方法を使用してキーマテリアルを生成します。

非対称キーペアのプライベートキーを 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

OpenSSL によるキーマテリアルの暗号化の例

以下の例は、OpenSSL を使用して、ダウンロードしたパブリックキーでキーマテリアルを暗号化する方法を示しています。

重要

これらの例では、概念実証デモのみです。本稼働システムの場合、より安全な方法 (商用 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) プライベートキー、および 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 ファイルに保存します。

この例では、以下のようになっています。

  • WrappingPublicKey.bin は、ダウンロードしたラップパブリックキーを含むファイルです。

  • PlaintextKeyMaterial.bin は、PlaintextKeyMaterial.binHMAC_384_PlaintextKey.binECC_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:sha1
RSAES_OAEP_SHA_256

AWS KMS は、対称暗号化キー (SYMMETRIC_DEFAULT)、楕円曲線 (ECC) プライベートキー、および 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.binHMAC_384_PlaintextKey.binECC_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 つの暗号化オペレーションオペレーションが含まれています。

  1. 生成した AES 対称キーと AES 対称暗号化アルゴリズムを使用してキーマテリアルを暗号化します。

  2. 使用した AES 対称キーを、ダウンロードしたパブリックキーと RSAES_OAEP_SHA_1 ラップアルゴリズムで暗号化します。

AWS KMS は、サポートされているすべてのタイプのインポートされたキーマテリアルとサポートされているすべてのパブリックキー仕様の RSA_AES_KEY_WRAP_SHA_* ラップアルゴリズムをサポートします。RSA_AES_KEY_WRAP_SHA_* アルゴリズムは、RSA キーマテリアルのラップでサポートされている唯一のラップアルゴリズムです。

RSA_AES_KEY_WRAP_SHA_1 ラップアルゴリズムには OpenSSL バージョン 3.x 以降が必要です。

  1. 256 ビット AES 対称暗号化キーを生成する

    このコマンドは、256 ランダムビットで構成される AES 対称暗号化キーを生成し、aes-key.bin ファイルに保存します

    # Generate a 32-byte AES symmetric encryption key $ openssl rand -out aes-key.bin 32
  2. AES 対称暗号化キーを使用してキーマテリアルを暗号化する

    このコマンドは、AES 対称暗号化キーを使用してキーマテリアルを暗号化し、暗号化されたキーマテリアルを key-material-wrapped.bin ファイルに保存します。

    このコマンド例では、

    • PlaintextKeyMaterial.bin は、PlaintextKeyMaterial.binHMAC_384_PlaintextKey.binRSA_3072_PrivateKey.derECC_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
  3. 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
  4. インポートするファイルを生成する

    暗号化されたキーマテリアルを含むファイルと暗号化された AES キーを含むファイルを連結します。これらを EncryptedKeyMaterial.bin ファイルに保存します。このファイルは、ステップ 4: キーマテリアルのインポート にインポートするファイルです。

    このコマンド例では、

    • key-material-wrapped.bin は、暗号化されたキーマテリアルを含むファイルです。

    • aes-key-wrapped.bin は、暗号化された AES 暗号化キーを含むファイルです。

    # 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 つの暗号化手順が含まれています。

  1. 生成した AES 対称キーと AES 対称暗号化アルゴリズムを使用してキーマテリアルを暗号化します。

  2. 使用した AES 対称キーを、ダウンロードしたパブリックキーと RSAES_OAEP_SHA_256 ラップアルゴリズムで暗号化します。

AWS KMS は、サポートされているすべてのタイプのインポートされたキーマテリアルとサポートされているすべてのパブリックキー仕様の RSA_AES_KEY_WRAP_SHA_* ラップアルゴリズムをサポートします。RSA_AES_KEY_WRAP_SHA_* アルゴリズムは、RSA キーマテリアルのラップでサポートされている唯一のラップアルゴリズムです。

RSA_AES_KEY_WRAP_SHA_256 ラップアルゴリズムには OpenSSL バージョン 3.x 以降が必要です。

  1. 256 ビット AES 対称暗号化キーを生成する

    このコマンドは、256 ランダムビットで構成される AES 対称暗号化キーを生成し、aes-key.bin ファイルに保存します

    # Generate a 32-byte AES symmetric encryption key $ openssl rand -out aes-key.bin 32
  2. AES 対称暗号化キーを使用してキーマテリアルを暗号化する

    このコマンドは、AES 対称暗号化キーを使用してキーマテリアルを暗号化し、暗号化されたキーマテリアルを key-material-wrapped.bin ファイルに保存します。

    このコマンド例では、

    • PlaintextKeyMaterial.bin は、PlaintextKeyMaterial.binHMAC_384_PlaintextKey.binRSA_3072_PrivateKey.derECC_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
  3. 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
  4. インポートするファイルを生成する

    暗号化されたキーマテリアルを含むファイルと暗号化された AES キーを含むファイルを連結します。これらを EncryptedKeyMaterial.bin ファイルに保存します。このファイルは、ステップ 4: キーマテリアルのインポート にインポートするファイルです。

    このコマンド例では、

    • key-material-wrapped.bin は、暗号化されたキーマテリアルを含むファイルです。

    • aes-key-wrapped.bin は、暗号化された AES 暗号化キーを含むファイルです。

    # Combine the encrypted AES key and encrypted key material in a file $ cat aes-key-wrapped.bin key-material-wrapped.bin > EncryptedKeyMaterial.bin

ステップ 4: キーマテリアルのインポート に進みます。