匯入金鑰材料步驟 3:加密金鑰材料 - AWS Key Management Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

匯入金鑰材料步驟 3:加密金鑰材料

在您下載公有金鑰和匯入字符之後,請使用您下載的公有金鑰與您指定的包裝演算法來加密金鑰資料。如果您需要替換公有金鑰或匯入字符,或要變更包裝算法,則必須下載新的公有金鑰和匯入字符。如需有關 AWS KMS 支援之公開金鑰和包裝演算法的資訊,請參閱選取包裝公有金鑰規格選取包裝演算法

金鑰材料必須是二進位格式。如需詳細資訊,請參閱 匯入金鑰資料需求

注意

對於非對稱金鑰配對,請僅加密和匯入私密金鑰。 AWS KMS 衍生自私密金鑰的公開金鑰。

NOT支援下列組合:ECC_ NIST _P521 金鑰材料、RSA _2048 公開包裝金鑰規格以及 RSAES _ _ OAEP _* 換行演算法。SHA

您無法使用 ECC NIST _ RSA 2048 公開換行金鑰直接包裝 _ _P521 金鑰材料。使用較大的包裝鍵或 RSA _ _ AES _ _ KEY WRAP SHA _ * 換行演算法。

中國地區不支援 RSA AES KEY WRAP SHA _ RSA _ _ AES _ _256 和 KEY WRAP _ _ _ _ SHA _1 換行演算法。

一般而言,當您從硬體安全模組 (HSM) 或金鑰管理系統匯出金鑰材料時,會加密金鑰材料。如需有關如何以二進位格式匯出金鑰材料的詳細資訊,請參閱您HSM或金鑰管理系統的說明文件。您也可以參考下一節,其中提供使用「開啟」的概念證明示範SSL。

當加密金鑰資料時,請使用您在下載包裝公有金鑰與匯入字符時所指定的包裝演算法。若要尋找您指定的環繞演算法,請參閱關聯GetParametersForImport要求的 CloudTrail 記錄事件。

產生用於測試的金鑰資料

下列「開啟」SSL 指令會產生每種受支援類型的關鍵材料以進行測試。這些範例僅供測試和 proof-of-concept 示範使用。對於生產系統,請使用更安全方法 (例如商業 HSM 或金鑰管理系統) 來產生並存放您的金鑰資料。

若要將非對稱金鑰配對的私密金鑰轉換為 DER-coded 格式,請將金鑰材料產生指令傳送至下列openssl pkcs8指令。topk8參數會指示 Open SSL 以私密金鑰做為輸入,並傳回 PKCS #8 格式化的金鑰。(預設行為是相反。)

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

下列範例會示範如何使用 Open SSL 來使用您下載的公開金鑰來加密金鑰內容。若要使用公開金鑰加密金SM2鑰資料 (僅限中國地區),請使用SM2OfflineOperationHelper類別。如需每個環繞演算法所支援之金鑰材料類型的詳細資訊,請參閱〈〉選取包裝演算法

重要

此範例僅為概念驗證示範。對於生產系統,請使用更安全的方法(例如商業HSM或金鑰管理系統)來產生並儲存您的金鑰材料。

NOT支援下列組合:ECC_ NIST _P521 金鑰材料、RSA _2048 公開包裝金鑰規格以及 RSAES _ _ OAEP _* 換行演算法。SHA

您無法使用 ECC NIST _ RSA 2048 公開換行金鑰直接包裝 _ _P521 金鑰材料。使用較大的包裝鍵或 RSA _ _ AES _ _ KEY WRAP SHA _ * 換行演算法。

RSAES_OAEP_SHA_1

AWS KMS 支援對稱加密金鑰 SHA (RSAESOAEPSYMMETRIC_DEFAULT)、橢圓曲線 (ECC) 私密金鑰、私密金鑰和金鑰的 _ _ _1。SM2 HMAC

RSAESRSA私密金鑰不支援 OAEP SHA _ _ _1。此外,您不能將 RSA _2048 公開包裝金鑰與任何 RSAES _ _ _ SHA * 換行演算法搭配使用來包裝 OAEP ECC _ NIST _P521 (secp521r1) 私密金鑰。您必須使用較大的公共包裝密鑰或 RSA AES _ KEY _ WRAP 包裝算法。

下列範例會使用您下載的公開金鑰和 RSAES _ OAEP _ SHA _1 環繞演算法來加密金鑰材料,並將其儲存在檔案中EncryptedKeyMaterial.bin

在此範例中:

  • WrappingPublicKey. 斌 是包含下載的包裝公鑰的文件。

  • PlaintextKeyMaterial. 斌 是包含您正在加密的金鑰材料的檔案,例如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 支援對稱加密金鑰 (RSAESOAEPSHASYMMETRIC_DEFAULT)、橢圓曲線 (ECC) 私密金鑰、私密金鑰和金鑰的 _ _ _256。SM2 HMAC

RSAESRSA私密金鑰不支援 OAEP SHA _ _ _256。此外,您不能將 RSA _2048 公開包裝金鑰與任何 RSAES _ _ _ SHA * 換行演算法搭配使用來包裝 OAEP ECC _ NIST _P521 (secp521r1) 私密金鑰。您必須使用較大的公鑰或 RSA _ _ AES KEY _ WRAP 包裝算法。

下列範例會使用您下載的公開金鑰和 RSAES _ OAEP _ SHA _256 環繞演算法加密金鑰材料,並將其儲存在檔案中EncryptedKeyMaterial.bin

在此範例中:

  • WrappingPublicKey. 斌 是包含下載的公共包裝密鑰的文件。如果從主控台下載公有金鑰,這個檔案名稱為 wrappingKey_KMS key_key_ID_timestamp (例如 wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909)。

  • PlaintextKeyMaterial. 斌 是包含您正在加密的金鑰材料的檔案,例如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 WRAP _ SHA _1 包裝算法涉及兩個加密操作。

  1. 使用您產生的對稱金鑰和AES對稱加密演算法來加密金AES鑰資料。

  2. 加密您用於下載的公開金鑰和 RSAES _ OAEP _ SHA _1 換行AES演算法的對稱金鑰。

RSA_ _ _ AES KEY WRAP _ SHA _1 包裝演算法需要開啟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. 斌 是包含您要匯入的關鍵材料的檔案,例如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 _ OAEP _ SHA _1 包裝演算法加密您的對稱加密金鑰,然後將其DER編碼並儲存在檔案中。aes-key-wrapped.bin

    以下是範例命令:

    • WrappingPublicKey. 斌 是包含下載的公共包裝密鑰的文件。如果從主控台下載公有金鑰,此檔案名稱為 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. 斌 是包含您加密密鑰材料的文件。

    • aes-key-wrapped. 斌 是包含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 包裝算法涉及兩個加密操作。

  1. 使用您產生的對稱金鑰和AES對稱加密演算法來加密金AES鑰資料。

  2. 加密您與下載的公開金AES鑰和 RSAES _ OAEP _ SHA _256 換行演算法搭配使用的對稱金鑰。

RSA_ _ _ AES KEY WRAP _ SHA _256 包裝演算法需要「開啟」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. 斌 是包含您要匯入的關鍵材料的檔案,例如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鑰加密您的對稱加密金鑰

    此指令會使用您下載的公開金鑰和 RSAES _ OAEP _ SHA _256 環繞演算法加密您的AES對稱加密金鑰,然後將其DER編碼並儲存在檔案中。aes-key-wrapped.bin

    以下是範例命令:

    • WrappingPublicKey. 斌 是包含下載的公共包裝密鑰的文件。如果從主控台下載公有金鑰,此檔案名稱為 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. 斌 是包含您加密密鑰材料的文件。

    • aes-key-wrapped. 斌 是包含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:匯入金鑰材料」。