

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

# 步骤 2：下载包装公有密钥和导入令牌
<a name="importing-keys-get-public-key-and-token"></a>

[创建不 AWS KMS key 带密钥材料](importing-keys-create-cmk.md)的后，使用 AWS KMS 控制台或 [GetParametersForImport](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html)API 下载包装公钥和该 KMS 密钥的导入令牌。包装公有密钥和导入令牌是一个不可分割的集合，必须一起使用。

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

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

您也可以下载包装公有密钥和导入令牌，以将[相同的密钥材料重新导入](importing-keys-import-key-material.md#reimport-key-material) KMS 密钥中。您可以执行此操作来设置或更改密钥材料的过期时间，或者恢复过期或删除的密钥材料。每次将密钥材料导入时，都必须下载并重新加密密钥材料。 AWS KMS

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

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

## 选择包装公有密钥规范
<a name="select-wrapping-key-spec"></a>

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

**RSA 包装密钥规范**  
包装公有密钥的密钥规范**决定了 RSA 密钥对中密钥的长度，该密钥对在传输到 AWS KMS的过程中可以保护您的密钥材料。一般来说，我们建议使用实用的最长的包装公有密钥。我们提供了几种封装公钥规范，以支持各种 HSMs 密钥管理器。  
AWS KMS 支持以下用于导入所有类型密钥材料的 RSA 封装密钥的关键规范，除非另有说明。  
+ RSA\$14096（推荐）
+ RSA\$13072
+ RSA\$12048
**注意**  
不支持以下组合：ECC\$1NIST\$1P521 密钥材料、RSA\$12048 公有包装密钥规范和 RSAES\$1OAEP\$1SHA\$1\$1 包装算法。  
您不能使用 RSA\$12048 公有包装密钥直接包装 ECC\$1NIST\$1P521 密钥材料。使用更大的包装密钥或 RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1\$1 包装算法。

**SM2 包装密钥规范（仅限中国地区）**  
AWS KMS 支持以下用于导入非对称密钥材料的 SM2 包装密钥的密钥规范。  
+ SM2

## 选择包装算法
<a name="select-wrapping-algorithm"></a>

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

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

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


| 密钥材料 | 支持的包装算法和规范 | 
| --- | --- | 
| 对称加密密钥 256 位 AES 密钥   128 位 SM4 密钥（仅限中国地区） |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/importing-keys-get-public-key-and-token.html)  | 
| 非对称 RSA 私有密钥  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/importing-keys-get-public-key-and-token.html)  | 
| 非对称椭圆曲线（ECC）私有密钥   您不能使用 RSAES\$1OAEP\$1SHA\$1\$1 包装算法和 RSA\$12048 包装密钥规范来包装 ECC\$1NIST\$1P521 密钥材料。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/importing-keys-get-public-key-and-token.html)  | 
| 非对称 SM2 私钥（仅限中国区域） |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/importing-keys-get-public-key-and-token.html)  | 
| HMAC 密钥 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/importing-keys-get-public-key-and-token.html)  | 

**注意**  
中国区域不支持 `RSA_AES_KEY_WRAP_SHA_256` 和 `RSA_AES_KEY_WRAP_SHA_1` 包装算法。
+ `RSA_AES_KEY_WRAP_SHA_256` – 一种两步混合包装算法，该算法将加密密钥材料与您生成的 AES 对称密钥相结合，然后使用下载的 RSA 公有包装密钥和 RSAES\$1OAEP\$1SHA\$1256 包装算法对 AES 对称密钥进行加密。

  除中国区域外，包装 RSA 私有密钥材料需要使用 `RSA_AES_KEY_WRAP_SHA_*` 包装算法。中国区域必须使用 `SM2PKE` 包装算法。
+ `RSA_AES_KEY_WRAP_SHA_1` – 一种两步混合包装算法，该算法将加密密钥材料与您生成的 AES 对称密钥相结合，然后使用下载的 RSA 包装公有密钥和 RSAES\$1OAEP\$1SHA\$11 包装算法对 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\$1 PKCS1 \$1V1\$15 包装算法）— 填充格式在 PKCS \$11 版本 1.5 中定义的 RSA 加密算法。
+ `SM2PKE`（仅限中国地区）— OSCCA GM/T 在 0003.4-2012 中定义的基于椭圆曲线的加密算法。

**Topics**
+ [选择包装公有密钥规范](#select-wrapping-key-spec)
+ [选择包装算法](#select-wrapping-algorithm)
+ [下载包装公有密钥和导入令牌（控制台）](#importing-keys-get-public-key-and-token-console)
+ [下载封装公钥和导入令牌 (AWS KMS API)](#importing-keys-get-public-key-and-token-api)

## 下载包装公有密钥和导入令牌（控制台）
<a name="importing-keys-get-public-key-and-token-console"></a>

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

1. 如果您刚刚完成[创建不带密钥材料的 KMS 密钥](importing-keys-create-cmk.md#importing-keys-create-cmk-console)的步骤并且您位于 **Download wrapping key and import token**（下载包装密钥和导入令牌）页面上，请跳至 [Step 10](#id-wrap-step)。

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

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

1. 在导航窗格中，选择**客户托管密钥**。
**提示**  
您只能将密钥材料导入**源**为**外部（导入密钥材料）**的 KMS 密钥中。这指示已创建不带密钥材料的 KMS 密钥。要向表中添加 **Origin (源)** 列，请在页面右上角，选择设置图标 (![\[Gear or cog icon representing settings or configuration options.\]](http://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/images/console-icon-settings-new.png))。打开 **Origin (源)**，然后选择 **Confirm (确认)**。

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

1. 选择 **Cryptographic configuration**（加密配置）选项卡并查看其值。这些选项卡在 **General configuration**（常规配置）部分下。

   您只能将密钥材料导入**源**为**外部（导入密钥材料）**的 KMS 密钥。有关创建带已导入密钥材料的 KMS 密钥的信息，请参阅 [导入密钥的 AWS KMS 密钥材料](importing-keys.md)。

1. 根据您的密钥类型选择相应的选项卡。
   + 对于非对称密钥和 HMAC 密钥，请选择密**钥材料**选项卡。
   + 对于对称加密密钥，请选择密**钥材料和轮换**选项卡。

1. 选择导入操作。
   + 对于非对称密钥和 HMAC 密钥，请选择**导入密钥材料**。
   + 对于对称加密密钥，请选择以下选项之一：
     + **导入初始密钥材料**（如果尚未导入任何密钥材料）
     + **导入新的密钥材料**（添加用于轮换的新材料）
     + **重新导入密钥材料**（可在密钥材料表的 “**操作**” 菜单中找到）
**注意**  
对于多区域密钥，您必须先将新的密钥材料导入主区域密钥中。然后，将相同的密钥材料导入每个副本区域密钥。  
对于主多区域密钥，密**钥材料**表包括一个**副本导入状态**列，该列显示所有副本区域的导入状态（例如，“3 个已导入的 0 个”）。选择副本导入状态值以打开一个显示每个副本区域导入状态的模式。该模态为尚未**导入新密钥材料**的副本区域提供导入密钥材料链接。

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

1. <a name="id-wrap-step"></a>对于**选择包装算法**，请选择您将用于为密钥材料加密的选项。有关这些选项的详细信息，请参阅[选择包装算法](#select-wrapping-algorithm)。

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

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

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

   此文件夹包含以下文件：
   + 名为 `WrappingPublicKey.bin` 的文件中的包装公有密钥。
   + 名为 `ImportToken.bin` 的文件中的导入令牌。
   + 名为 README.txt 的文本文件。此文件包含以下相关信息：包装公有密钥、用于为密钥材料加密的包装算法，以及包装公有密钥和导入令牌的过期日期和时间。

1. 要继续执行此过程，请参阅[为您的密钥材料加密](importing-keys-encrypt-key-material.md)。

## 下载封装公钥和导入令牌 (AWS KMS API)
<a name="importing-keys-get-public-key-and-token-api"></a>

要下载公钥和导入令牌，请使用 [GetParametersForImport](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html)API。指定将与导入的密钥材料关联的 KMS 密钥。此 KMS 密钥的 [Origin](create-keys.md#key-origin) 值必须为 `EXTERNAL`。

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

此示例指定了 `RSA_AES_KEY_WRAP_SHA_256` 包装算法、RSA\$13072 包装公有密钥规范和示例密钥 ID。将这些示例值替换为有效的下载值。在此操作中，对于密钥 ID，您可以使用[密钥 ID](concepts.md#key-id-key-id) 或[密钥 ARN](concepts.md#key-id-key-ARN)，但不能使用[别名名称](concepts.md#key-id-alias-name)或[别名 ARN](concepts.md#key-id-alias-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`。

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

   ```
   $ openssl enc -d -base64 -A -in PublicKey.b64 -out WrappingPublicKey.bin
   ```

1. 复制 base64 编码的导入令牌（*import token (base64 encoded)*在示例输出中用表示），将其粘贴到新文件中，然后保存该文件。为文件指定一个描述性名称，例如 `importtoken.b64`。

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

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

继续执行[步骤 3：加密密钥材料](importing-keys-encrypt-key-material.md)。