View a markdown version of this page

步骤 2:下载包装公有密钥和导入令牌 - AWS Key Management Service

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

步骤 2:下载包装公有密钥和导入令牌

创建不 AWS KMS key 带密钥材料的后,使用 AWS KMS 控制台或 GetParametersForImportAPI 下载包装公钥和该 KMS 密钥的导入令牌。包装公有密钥和导入令牌是一个不可分割的集合,必须一起使用。

您将使用包装公有密钥来加密您的密钥材料以供传输。在下载 RSA 封装密钥对之前,请选择 RSA 封装密钥对的长度(密钥规范),以及将用于加密导入的密钥材料以便在步骤 3 中传输的封装算法。 AWS KMS 还支持 SM2 包装密钥规范(仅限中国地区)。

每个包装公有密钥和导入令牌集的有效期为 24 小时。如果您不在 24 小时的下载期限内使用它们导入密钥材料,则必须下载新的公有密钥和令牌集。您可以随时下载新的包装公有密钥和导入令牌集。这使您可以更改 RSA 包装密钥长度(“密钥规范”)或替换丢失的集。

您也可以下载包装公有密钥和导入令牌,以将相同的密钥材料重新导入 KMS 密钥中。您可以执行此操作来设置或更改密钥材料的过期时间,或者恢复过期或删除的密钥材料。每次将密钥材料导入时,都必须下载并重新加密密钥材料。 AWS KMS

包装公有密钥的使用

下载内容包括您独有的公钥 AWS 账户,也称为封装公钥

在导入密钥材料之前,请使用公共封装密钥对密钥材料进行加密,然后将加密的密钥材料上传到 AWS KMS。 AWS KMS 收到您的加密密钥材料后,它会使用相应的私钥对密钥材料进行解密,然后在 AES 对称密钥下重新加密密钥材料,所有这些都在 AWS KMS 硬件安全模块 (HSM) 中完成。

使用导入令牌

下载包括一个带有元数据的导入令牌,以确保您的密钥材料导入正确。将加密的密钥材料上传到时 AWS KMS,必须上传在此步骤中下载的相同导入令牌。

选择包装公有密钥规范

为了在导入过程中保护您的密钥材料,您可以使用从中 AWS KMS下载的封装公钥和支持的封装算法对其进行加密。您在下载包装公有密钥和导入令牌之前选择密钥规范。所有封装密钥对都是在 AWS KMS 硬件安全模块 (HSMs) 中生成的。私有密钥永远不会让 HSM 处于纯文本状态。

RSA 包装密钥规范

包装公有密钥的密钥规范决定了 RSA 密钥对中密钥的长度,该密钥对在传输到 AWS KMS的过程中可以保护您的密钥材料。一般来说,我们建议使用实用的最长的包装公有密钥。我们提供了几种封装公钥规范,以支持各种 HSMs 密钥管理器。

AWS KMS 支持以下用于导入所有类型密钥材料的 RSA 封装密钥的关键规范,除非另有说明。

  • RSA_4096(推荐)

  • RSA_3072

  • RSA_2048

    注意

    不支持以下组合:ECC_NIST_P521 密钥材料、RSA_2048 公有包装密钥规范和 RSAES_OAEP_SHA_* 包装算法。

    您不能使用 RSA_2048 公有包装密钥直接包装 ECC_NIST_P521 密钥材料。使用更大的包装密钥或 RSA_AES_KEY_WRAP_SHA_* 包装算法。

SM2 包装密钥规范(仅限中国地区)

AWS KMS 支持以下用于导入非对称密钥材料的 SM2 包装密钥的密钥规范。

  • SM2

选择包装算法

要在导入过程中保护您的密钥材料,请使用下载的包装公有密钥和支持的包装算法为其加密。

AWS KMS 支持多种标准 RSA 封装算法和两步混合包装算法。通常,我们建议使用与您导入的密钥材料和包装密钥规范兼容的最安全的包装算法。通常,选择硬件安全模块 (HSM) 支持的算法或用于保护密钥材料的密钥管理系统。

下表显示了每种类型的密钥材料和 KMS 密钥支持的包装算法。算法是以首选项顺序列出的。

密钥材料 支持的包装算法和规范
对称加密密钥

256 位 AES 密钥

128 位 SM4 密钥(仅限中国地区)

包装算法:

RSAES_OAEP_SHA_256

RSAES_OAEP_SHA_1

已淘汰的包装算法:

RSAES_ _V1 PKCS1

注意

截至 2023 年 10 月 10 日, AWS KMS 不支持 RSAES_ PKCS1 _V1_5 包装算法。

包装密钥规范:

RSA_2048

RSA_3072

RSA_4096

非对称 RSA 私有密钥
包装算法:

RSA_AES_KEY_WRAP_SHA_256

RSA_AES_KEY_WRAP_SHA_1

SM2PKE(仅限中国区域)

包装密钥规范:

RSA_2048

RSA_3072

RSA_4096

SM2 (仅限中国地区)

非对称椭圆曲线(ECC)私有密钥

您不能使用 RSAES_OAEP_SHA_* 包装算法和 RSA_2048 包装密钥规范来包装 ECC_NIST_P521 密钥材料。

包装算法:

RSA_AES_KEY_WRAP_SHA_256

RSA_AES_KEY_WRAP_SHA_1

RSAES_OAEP_SHA_256

RSAES_OAEP_SHA_1

SM2PKE(仅限中国区域)

包装密钥规范:

RSA_2048

RSA_3072

RSA_4096

SM2 (仅限中国地区)

非对称 SM2 私钥(仅限中国区域)
包装算法:

RSAES_OAEP_SHA_256

RSAES_OAEP_SHA_1

SM2PKE(仅限中国区域)

包装密钥规范:

RSA_2048

RSA_3072

RSA_4096

SM2 (仅限中国地区)

HMAC 密钥
包装算法:

RSAES_OAEP_SHA_256

RSAES_OAEP_SHA_1

包装密钥规范:

RSA_2048

RSA_3072

RSA_4096

注意

中国区域不支持 RSA_AES_KEY_WRAP_SHA_256RSA_AES_KEY_WRAP_SHA_1 包装算法。

  • RSA_AES_KEY_WRAP_SHA_256 – 一种两步混合包装算法,该算法将加密密钥材料与您生成的 AES 对称密钥相结合,然后使用下载的 RSA 公有包装密钥和 RSAES_OAEP_SHA_256 包装算法对 AES 对称密钥进行加密。

    除中国区域外,包装 RSA 私有密钥材料需要使用 RSA_AES_KEY_WRAP_SHA_* 包装算法。中国区域必须使用 SM2PKE 包装算法。

  • RSA_AES_KEY_WRAP_SHA_1 – 一种两步混合包装算法,该算法将加密密钥材料与您生成的 AES 对称密钥相结合,然后使用下载的 RSA 包装公有密钥和 RSAES_OAEP_SHA_1 包装算法对 AES 对称密钥进行加密。

    除中国区域外,包装 RSA 私有密钥材料需要使用 RSA_AES_KEY_WRAP_SHA_* 包装算法。中国区域必须使用 SM2PKE 包装算法。

  • RSAES_OAEP_SHA_256 – RSA 加密算法,使用最优非对称加密填充 (OAEP) 与 SHA-256 哈希函数。

  • RSAES_OAEP_SHA_1 – RSA 加密算法,使用最优非对称加密填充 (OAEP) 与 SHA-1 哈希函数。

  • RSAES_PKCS1_V1_5(已弃用;自 2023 年 10 月 10 日起, AWS KMS 不支持 RSAES_ PKCS1 _V1_5 包装算法)— 填充格式在 PKCS #1 版本 1.5 中定义的 RSA 加密算法。

  • SM2PKE(仅限中国地区)— OSCCA GM/T 在 0003.4-2012 中定义的基于椭圆曲线的加密算法。

下载包装公有密钥和导入令牌(控制台)

您可以使用 AWS KMS 控制台下载封装公钥和导入令牌。

  1. 如果您刚刚完成创建不带密钥材料的 KMS 密钥的步骤并且您位于 Download wrapping key and import token(下载包装密钥和导入令牌)页面上,请跳至 步骤 10

  2. 登录 AWS 管理控制台 并在 https://console.aws.amazon.com/km s 处打开 AWS Key Management Service (AWS KMS) 控制台。

  3. 要更改 AWS 区域,请使用页面右上角的区域选择器。

  4. 在导航窗格中,选择客户托管密钥

    提示

    您只能将密钥材料导入外部(导入密钥材料)的 KMS 密钥中。这指示已创建不带密钥材料的 KMS 密钥。要向表中添加 Origin (源) 列,请在页面右上角,选择设置图标 ( )。打开 Origin (源),然后选择 Confirm (确认)

  5. 选择待导入的 KMS 密钥的别名或密钥 ID。

  6. 选择 Cryptographic configuration(加密配置)选项卡并查看其值。这些选项卡在 General configuration(常规配置)部分下。

    您只能将密钥材料导入外部(导入密钥材料)的 KMS 密钥。有关创建带已导入密钥材料的 KMS 密钥的信息,请参阅 导入密钥的 AWS KMS 密钥材料

  7. 根据您的密钥类型选择相应的选项卡。

    • 对于非对称密钥和 HMAC 密钥,请选择密钥材料选项卡。

    • 对于对称加密密钥,请选择密钥材料和轮换选项卡。

  8. 选择导入操作。

    • 对于非对称密钥和 HMAC 密钥,请选择导入密钥材料

    • 对于对称加密密钥,请选择以下选项之一:

      • 导入初始密钥材料(如果尚未导入任何密钥材料)

      • 导入新的密钥材料(添加用于轮换的新材料)

      • 重新导入密钥材料(可在密钥材料表的 “操作” 菜单中找到)

    注意

    对于多区域密钥,您必须先将新的密钥材料导入主区域密钥中。然后,将相同的密钥材料导入每个副本区域密钥。

    对于主多区域密钥,密钥材料表包括一个副本导入状态列,该列显示所有副本区域的导入状态(例如,“3 个已导入的 0 个”)。选择副本导入状态值以打开一个显示每个副本区域导入状态的模式。该模态为尚未导入新密钥材料的副本区域提供导入密钥材料链接。

  9. 对于选择包装密钥规范,选择您的 KMS 密钥的配置。创建此密钥后,您无法更改密钥规范。

  10. 对于选择包装算法,请选择您将用于为密钥材料加密的选项。有关这些选项的详细信息,请参阅选择包装算法

  11. 选择下载包装公有密钥和导入令牌,然后保存文件。

    如果有 Next (下一步) 选项,而且要立即继续执行此过程,请选择 Next (下一步)。要稍后再继续,请选择 Cancel (取消)

  12. 解压缩 .zip 文件,即您在上一步 (Import_Parameters_<key_id>_<timestamp>) 中保存的文件。

    此文件夹包含以下文件:

    • 名为 WrappingPublicKey.bin 的文件中的包装公有密钥。

    • 名为 ImportToken.bin 的文件中的导入令牌。

    • 名为 README.txt 的文本文件。此文件包含以下相关信息:包装公有密钥、用于为密钥材料加密的包装算法,以及包装公有密钥和导入令牌的过期日期和时间。

  13. 要继续执行此过程,请参阅为您的密钥材料加密

下载封装公钥和导入令牌 (AWS KMS API)

要下载公钥和导入令牌,请使用 GetParametersForImportAPI。指定将与导入的密钥材料关联的 KMS 密钥。此 KMS 密钥的 Origin 值必须为 EXTERNAL

注意

不能导入 ML-DSA KMS 密钥的密钥材料。

此示例指定了 RSA_AES_KEY_WRAP_SHA_256 包装算法、RSA_3072 包装公有密钥规范和示例密钥 ID。将这些示例值替换为有效的下载值。在此操作中,对于密钥 ID,您可以使用密钥 ID密钥 ARN,但不能使用别名名称别名 ARN

$ aws kms get-parameters-for-import \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --wrapping-algorithm RSA_AES_KEY_WRAP_SHA_256 \ --wrapping-key-spec RSA_3072

该命令成功执行后,您会看到类似以下内容的输出:

{ "ParametersValidTo": 1568290320.0, "PublicKey": "public key (base64 encoded)", "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "ImportToken": "import token (base64 encoded)" }

为了准备下一步的数据,base64 会对公有密钥和导入令牌进行解码,并将解码后的值保存在文件中。

要对公有密钥进行 base64 解码并导入令牌:

  1. 复制 base64 编码的公钥(public key (base64 encoded)在示例输出中用表示),将其粘贴到新文件中,然后保存该文件。向文件提供一个描述性名称,例如 PublicKey.b64

  2. 使用 OpenSSL 对文件的内容进行 base64 解码,然后将解码后的数据保存到一个新文件中。以下示例会对您在上一步骤 (PublicKey.b64) 中保存的文件中的数据进行解码,并将输出保存到一个名为 WrappingPublicKey.bin 的新文件中。

    $ openssl enc -d -base64 -A -in PublicKey.b64 -out WrappingPublicKey.bin
  3. 复制 base64 编码的导入令牌(import token (base64 encoded)在示例输出中用表示),将其粘贴到新文件中,然后保存该文件。为文件指定一个描述性名称,例如 importtoken.b64

  4. 使用 OpenSSL 对文件的内容进行 base64 解码,然后将解码后的数据保存到一个新文件中。以下示例会对您在上一步骤 (ImportToken.b64) 中保存的文件中的数据进行解码,并将输出保存到一个名为 ImportToken.bin 的新文件中。

    $ openssl enc -d -base64 -A -in importtoken.b64 -out ImportToken.bin

继续执行步骤 3:加密密钥材料