

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

# 使用 KMU 导出 AWS CloudHSM 密钥
<a name="key_mgmt_util-wrapKey"></a>

使用 AWS CloudHSM key\$1mgmt\$1util 中的**wrapKey**命令将对称密钥或私钥的加密副本从硬件安全模块 (HSM) 导出到文件中。当您运行 **wrapKey** 时，指定要导出的密钥、HSM 上用于加密（包装）要导出的密钥的密钥和输出文件。

`wrapKey` 命令将已加密密钥写入您指定的文件，但它不会从 HSM 中删除此密钥，也不会阻止您将它用于加密操作。您可以多次导出相同的密钥。

只有密钥的拥有者（即创建该密钥的 CU 用户）才能导出它。共享密钥的用户可以在加密操作中使用密钥，但无法导出它。

要将加密的密钥导入 HSM 中，请使用 [unWrapKey](key_mgmt_util-unwrapKey.md)。要从 HSM 导出纯文本密钥，请根据需要使用[exSymKey](key_mgmt_util-exSymKey.md)或[exportPrivateKey](key_mgmt_util-exportPrivateKey.md)。该[aesWrapUnwrap](key_mgmt_util-aesWrapUnwrap.md)命令无法解密（解包）加密的密钥。**wrapKey**

在运行任何 key\$1mgmt\$1util 命令之前，您必须[启动 key\$1mgmt\$1util](key_mgmt_util-setup.md#key_mgmt_util-start) 并以加密用户（CU）身份[登录](key_mgmt_util-log-in.md)到 HSM。

## 语法
<a name="wrapKey-syntax"></a>

```
wrapKey -h

wrapKey -k <exported-key-handle>
        -w <wrapping-key-handle>
        -out <output-file>
        [-m <wrapping-mechanism>]
        [-aad <additional authenticated data filename>]
        [-t <hash-type>]
        [-noheader]
        [-i <wrapping IV>]  
        [-iv_file <IV file>]
        [-tag_size <num_tag_bytes>>]
```

## 示例
<a name="wrapKey-examples"></a>

**Example**  
此命令将导出 192 位三重 DES (3DES) 对称密钥 (密钥句柄 `7`)。它使用 HSM 中的 256 位 AES 密钥 (密钥句柄 `14`) 包装密钥 `7`。然后，它将加密的 3DES 密钥写入 `3DES-encrypted.key` 文件。  
输出表明，密钥 `7` (3DES 密钥) 已成功包装并写入指定文件。加密密钥的长度为 307 个字节。  

```
        Command:  wrapKey -k 7 -w 14 -out 3DES-encrypted.key -m 4

        Key Wrapped.

        Wrapped Key written to file "3DES-encrypted.key length 307

        Cfm2WrapKey returned: 0x00 : HSM Return: SUCCESS
```

## 参数
<a name="wrapKey-params"></a>

**-h**  
显示该命令的帮助信息。  
是否必需：是

**-k**  
要导出的密钥的密钥句柄。输入您拥有的对称密钥或私有密钥的密钥句柄。要查找密钥句柄，请使用 [findKey](key_mgmt_util-findKey.md) 命令。  
要验证是否能导出密钥，请使用 [getAttribute](key_mgmt_util-getAttribute.md) 命令获取由常量 `354` 表示的 `OBJ_ATTR_EXTRACTABLE` 属性的值。有关解释密钥属性的帮助，请参阅 [AWS CloudHSM KMU 的关键属性参考](key-attribute-table.md)。  
您只能导出您拥有的那些密钥。要查找密钥的所有者，请使用[getKeyInfo](key_mgmt_util-getKeyInfo.md)命令。  
是否必需：是

**-w**  
指定包装密钥。在 HSM 上输入 AES 密钥或 RSA 密钥的密钥句柄。此参数为必需参数。要查找密钥句柄，请使用 [findKey](key_mgmt_util-findKey.md) 命令。  
要创建封装密钥，请使用[genSymKey](key_mgmt_util-genSymKey.md)生成 AES 密钥（类型 31），或者使用生成[RSAKey一代 Pair](key_mgmt_util-genRSAKeyPair.md) 来生成 RSA 密钥对（类型 0）。如果您使用的是 RSA 密钥对，请确保用其中的一个密钥包装密钥，然后用另一个密钥解包。要验证某个密钥是否可以用作包装密钥，请使用 [getAttribute](key_mgmt_util-getAttribute.md) 获取 `OBJ_ATTR_WRAP` 属性的值，该值由常量 `262` 表示。  
是否必需：是

**-out**  
输出文件的路径和名称。当此命令成功时，此文件将包含已导出密钥的加密副本。如果该文件已存在，则命令将覆盖该文件而不发出警告。  
是否必需：是

**-m**  
表示包装机制的值。CloudHSM 支持以下机制：      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/key_mgmt_util-wrapKey.html)
是否必需：是  
使用`RSA_OAEP`包装机制时，可以封装的最大密钥大小由 RSA 密钥的模数和指定哈希的长度决定，如下所示：最大密钥大小 = (modulusLengthInBytes-2\$1 Bytes hashLengthIn -2)。  
使用 RSA\$1PKCS 封装机制时，可以封装的最大密钥大小由 RSA 密钥的模数决定，如下所示：最大密钥大小 =（字节 -11）。modulusLengthIn

**-t**  
表示哈希算法的值。CloudHSM 支持以下算法：      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/key_mgmt_util-wrapKey.html)
必需：否

**-aad**  
包含 `AAD` 的文件名。  
仅对 `AES_GCM` 和 `CLOUDHSM_AES_GCM` 机制有效。
必需：否

**-noheader**  
忽略指定 CloudHSM 特定的[密钥属性](key_mgmt_util-reference.md)的标头。*仅*在您希望使用 key\$1mgmt\$1util 外的工具解开包装密钥时使用此参数。  
必需：否

**-i**  
初始化向量 (IV)（十六进制值）。  
仅当通过 `CLOUDHSM_AES_KEY_WRAP` 和 `NIST_AES_WRAP` 机制的 `-noheader` 参数传递时有效。
必需：否

**-iv\$1file**  
要写入在响应中获得的 IV 值的文件。  
仅当通过 `AES_GCM` 机制的 `-noheader` 参数传递时有效。
必需：否

**-tag\$1size**  
要与包装的 Blob 一起保存的标签的大小。  
仅当通过 `AES_GCM` 和 `CLOUDHSM_AES_GCM` 机制的 `-noheader` 参数传递时有效。最小标签大小为 8。
必需：否

[1] 根据 NIST 指导，2023 年以后处于 FIPS 模式的集群不允许这样做。对于处于非 FIPS 模式的集群，2023 年之后仍然允许。有关详细信息，请参阅 [FIPS 140 合规：2024 年机制弃用](compliance-dep-notif.md#compliance-dep-notif-1)。

## 相关主题
<a name="wrapKey-seealso"></a>
+ [exSymKey](key_mgmt_util-exSymKey.md)
+ [imSymKey](key_mgmt_util-imSymKey.md)
+ [unWrapKey](key_mgmt_util-unwrapKey.md)