本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
匯入金鑰材料步驟 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
。
在此範例中:
$
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.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 包裝算法涉及兩個加密操作。
-
使用您產生的對稱金鑰和AES對稱加密演算法來加密金AES鑰資料。
-
加密您用於下載的公開金鑰和 RSAES _ OAEP _ SHA _1 換行AES演算法的對稱金鑰。
RSA_ _ _ AES KEY WRAP _ SHA _1 包裝演算法需要開啟SSL版本 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
。
以下是範例命令:
# 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鑰加密您的對稱加密金鑰
此指令會使用您下載的公開金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
-
產生要匯入的檔案
將文件與加密的密鑰材料和文件與加密密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 包裝算法涉及兩個加密操作。
-
使用您產生的對稱金鑰和AES對稱加密演算法來加密金AES鑰資料。
-
加密您與下載的公開金AES鑰和 RSAES _ OAEP _ SHA _256 換行演算法搭配使用的對稱金鑰。
RSA_ _ _ AES KEY WRAP _ SHA _256 包裝演算法需要「開啟」SSL 版本 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
。
以下是範例命令:
# 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. 斌
是包含下載的公共包裝密鑰的文件。如果從主控台下載公有金鑰,此檔案名稱為 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:匯入金鑰材料」。