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

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

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

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

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

注記

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

次の組み合わせがサポートされNOTています: ECC_NIST_P521 キーマテリアル、RSA_2048 パブリックラッピングキー仕様、および RSAESOAEP__SHA* ラッピングアルゴリズム。

ECC_NISTP521 キーマテリアルを RSA_2048 パブリックラッピングキーで直接ラップすることはできません。より大きなラッピングキーまたは RSA_AES_KEYWRAP_SHA_* ラッピングアルゴリズムを使用します。

RSA_AESKEY_WRAP_SHA_256 および RSA_AESKEY_WRAP_SHA_1 ラップアルゴリズムは、中国リージョンではサポートされていません。

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

キーマテリアルを暗号化する場合、パブリックキーとインポートトークンをダウンロードしたときに指定した、同じラップアルゴリズムを使用します。指定したラッピングアルゴリズムを見つけるには、関連する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
  • SM2 プライベートキー (中国リージョンのみ)

    openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:sm2 | openssl pkcs8 -topk8 -outform der -nocrypt > SM2_PrivateKey.der

Open を使用したキーマテリアルの暗号化の例SSL

次の例は、OpenSSL を使用して、ダウンロードしたパブリックキーでキーマテリアルを暗号化する方法を示しています。SM2 パブリックキー (中国リージョンのみ) を使用してキーマテリアルを暗号化するには、 SM2OfflineOperationHelper クラス を使用します。各ラッピングアルゴリズムがサポートするキーマテリアルタイプの詳細については、「」を参照してくださいラップアルゴリズムの選択

重要

これらの例では、概念実証デモのみです。本番システムの場合は、より安全な方法 (商用HSMまたはキー管理システムなど) を使用して、キーマテリアルを生成して保存します。

次の組み合わせがサポートされNOTています: ECC_NIST_P521 キーマテリアル、RSA_2048 パブリックラッピングキー仕様、および RSAESOAEP__SHA* ラッピングアルゴリズム。

ECC_NISTP521 キーマテリアルを RSA_2048 パブリックラッピングキーで直接ラップすることはできません。より大きなラッピングキーまたは RSA_AES_KEYWRAP_SHA_* ラッピングアルゴリズムを使用します。

RSAES_OAEP_SHA_1

AWS KMS は、対称暗号化キー (RSAESOAEPSHA_DEFAULT)、楕円曲線 (ECC) プライベートキー、SM2プライベートキー、および HMACキーの SYMMETRIC__1 をサポートします。

RSAES_OAEPSHA_1 はRSAプライベートキーではサポートされていません。また、RSA___OAEPSHA* ラップアルゴリズムで RSAES_2048 パブリックラッピングキーを使用して ECC_NIST_P521 (secp521r1) プライベートキーをラップすることはできません。より大きなパブリックラッピングキーまたは RSA_AESKEY_WRAP ラップアルゴリズムを使用する必要があります。

次の例では、ダウンロードしたパブリックキーと RSAES_OAEPSHA_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 は、対称暗号化キー (RSAESOAEPSHA_DEFAULT)、楕円曲線 (ECC) プライベートキー、SM2プライベートキー、および HMACキーの SYMMETRIC__256 をサポートしています。

RSAES_OAEPSHA_256 はRSAプライベートキーではサポートされていません。また、RSA___OAEPSHA* ラップアルゴリズムで RSAES_2048 パブリックラッピングキーを使用して ECC_NIST_P521 (secp521r1) プライベートキーをラップすることはできません。より大きなパブリックキーまたは RSA_AES_WRAP KEYラップアルゴリズムを使用する必要があります。

次の例では、ダウンロードしたパブリックキーと RSAES_OAEPSHA_256 ラップアルゴリズムを使用してキーマテリアルを暗号化し、 EncryptedKeyMaterial.bin ファイルに保存します。

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

  • WrappingPublicKey.bin は、ダウンロードしたパブリックラッピングキーを含むファイルです。コンソールからパブリックキーをダウンロードした場合、このファイルの名前は wrappingKey_KMS key_key_ID_timestamp (例えば、wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909) となります。

  • PlaintextKeyMaterial.bin は、、PlaintextKeyMaterial.binHMAC_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_WRAPSHA__1 ラップアルゴリズムには、2 つの暗号化オペレーションが含まれます。

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

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

RSA_AES_KEY_WRAPSHA__1 ラップアルゴリズムには Open SSLバージョン 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.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
  3. AES パブリックキーを使用して対称暗号化キーを暗号化する

    このコマンドは、ダウンロードしたパブリックキーと AES RSAES_OAEPSHA_1 ラップアルゴリズムを使用して対称暗号化キーを暗号化し、 DERでエンコードして、 aes-key-wrapped.bin ファイルに保存します。

    このコマンド例では、

    • WrappingPublicKey.bin は、ダウンロードしたパブリックラッピングキーを含むファイルです。コンソールからパブリックキーをダウンロードした場合、このファイルの名前は wrappingKey_KMS key_key_ID_timestamp (例えば、wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909) となります

    • aes-key.bin は、このシーケンス例の最初のコマンドで生成した AES 256 ビット対称暗号化キーを含むファイルです。

    # 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_WRAPSHA__256 ラップアルゴリズムには、2 つの暗号化オペレーションが含まれます。

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

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

RSA_AES_KEYWRAP_SHA__256 ラップアルゴリズムには Open SSLバージョン 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.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
  3. AES パブリックキーを使用して対称暗号化キーを暗号化する

    このコマンドは、ダウンロードしたパブリックキーと AES RSAES_OAEPSHA_256 ラップアルゴリズムを使用して対称暗号化キーを暗号化し、 DERでエンコードして、 aes-key-wrapped.bin ファイルに保存します。

    このコマンド例では、

    • WrappingPublicKey.bin は、ダウンロードしたパブリックラッピングキーを含むファイルです。コンソールからパブリックキーをダウンロードした場合、このファイルの名前は wrappingKey_KMS key_key_ID_timestamp (例えば、wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909) となります

    • aes-key.bin は、このシーケンス例の最初のコマンドで生成した AES 256 ビット対称暗号化キーを含むファイルです。

    # 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: キーマテリアルのインポート に進みます。