

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

# 使用 K AWS CloudHSM MU 生成 RSA 密钥对
<a name="key_mgmt_util-genRSAKeyPair"></a>

[使用 AWS CloudHSM key\$1mgmt\$1util 工具中的**genRSAKeyPair**命令生成 RSA 非对称密钥对。](https://en.wikipedia.org/wiki/RSA_(cryptosystem))您指定密钥类型、模数长度和公有指数。该命令会生成一个指定长度的模数并创建密钥对。您可以分配一个 ID，与其他 HSM 用户共享密钥，创建不可提取的密钥和会话结束时过期的密钥。如果命令成功，则返回 HSM 分配给密钥的密钥句柄。您可以使用该密钥句柄来为其他命令标识密钥。

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

**提示**  
要查找您所创建密钥的属性（例如类型、长度、标签和 ID），请使用 [getAttribute](key_mgmt_util-getAttribute.md)。要查找特定用户的密钥，请使用[getKeyInfo](key_mgmt_util-getKeyInfo.md)。要根据属性值查找密钥，请使用 [findKey](key_mgmt_util-findKey.md)。

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

```
genRSAKeyPair -h

genRSAKeyPair -m <modulus length>
              -e <public exponent> 
              -l <label> 
              [-id <key ID>] 
              [-min_srv <minimum number of servers>] 
              [-m_value <0..8>]
              [-nex] 
              [-sess] 
              [-timeout <number of seconds> ]
              [-u <user-ids>] 
              [-attest]
```

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

这些示例说明了**genRSAKeyPair**如何使用在中创建非对称密钥对。 HSMs

**Example ：创建并检查 RSA 密钥对**  
此命令将创建一个带 2048 位模数和指数 65537 的 RSA 密钥对。输出表明，公有密钥句柄为 `2100177`，私有密钥句柄为 `2100426`。  

```
Command: genRSAKeyPair -m 2048 -e 65537 -l rsa_test 

Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS

        Cfm3GenerateKeyPair:    public key handle: 2100177    private key handle: 2100426

        Cluster Status:
        Node id 0 status: 0x00000000 : HSM Return: SUCCESS
        Node id 1 status: 0x00000000 : HSM Return: SUCCESS
```
下一条命令使用 [getAttribute](key_mgmt_util-getAttribute.md) 获取我们刚刚创建的公有密钥的属性。它将输出写入 `attr_2100177` 文件。后跟 **cat** 命令，该命令将获取属性文件的内容。有关解释密钥属性的帮助，请参阅 [AWS CloudHSM KMU 的关键属性参考](key-attribute-table.md)。  
生成的十六进制值确认它是一个类型为 RSA (`OBJ_ATTR_CLASS 0x02`) 的公有密钥 (`OBJ_ATTR_KEY_TYPE 0x00`)。您可以使用此公有密钥进行加密 (`OBJ_ATTR_ENCRYPT 0x01`)，但不能进行解密 (`OBJ_ATTR_DECRYPT 0x00`)。该结果还包含密钥长度 (512，`0x200`)、模数、模数长度 (2048，`0x800`) 和公有指数 (65537，`0x10001`)。  

```
Command:  getAttribute -o 2100177 -a 512 -out attr_2100177

Attribute size: 801, count: 26
Written to: attr_2100177 file

        Cfm3GetAttribute returned: 0x00 : HSM Return: SUCCESS

$  cat attr_2100177
OBJ_ATTR_CLASS
0x02
OBJ_ATTR_KEY_TYPE
0x00
OBJ_ATTR_TOKEN
0x01
OBJ_ATTR_PRIVATE
0x01
OBJ_ATTR_ENCRYPT
0x01
OBJ_ATTR_DECRYPT
0x00
OBJ_ATTR_WRAP
0x01
OBJ_ATTR_UNWRAP
0x00
OBJ_ATTR_SIGN
0x00
OBJ_ATTR_VERIFY
0x01
OBJ_ATTR_LOCAL
0x01
OBJ_ATTR_SENSITIVE
0x00
OBJ_ATTR_EXTRACTABLE
0x01
OBJ_ATTR_LABEL
rsa_test
OBJ_ATTR_ID

OBJ_ATTR_VALUE_LEN
0x00000200
OBJ_ATTR_KCV
0xc51c18
OBJ_ATTR_MODULUS
0xbb9301cc362c1d9724eb93da8adab0364296bde7124a241087d9436b9be57e4f7780040df03c2c
1c0fe6e3b61aa83c205280119452868f66541bbbffacbbe787b8284fc81deaeef2b8ec0ba25a077d
6983c77a1de7b17cbe8e15b203868704c6452c2810344a7f2736012424cf0703cf15a37183a1d2d0
97240829f8f90b063dd3a41171402b162578d581980976653935431da0c1260bfe756d85dca63857
d9f27a541676cb9c7def0ef6a2a89c9b9304bcac16fdf8183c0a555421f9ad5dfeb534cf26b65873
970cdf1a07484f1c128b53e10209cc6f7ac308669112968c81a5de408e7f644fe58b1a9ae1286fec
b3e4203294a96fae06f8f0db7982cb5d7f
OBJ_ATTR_MODULUS_BITS
0x00000800
OBJ_ATTR_PUBLIC_EXPONENT
0x010001
OBJ_ATTR_TRUSTED
0x00
OBJ_ATTR_WRAP_WITH_TRUSTED
0x00
OBJ_ATTR_DESTROYABLE
0x01
OBJ_ATTR_DERIVE
0x00
OBJ_ATTR_ALWAYS_SENSITIVE
0x00
OBJ_ATTR_NEVER_EXTRACTABLE
0x00
```

**Example ：生成共享 RSA 密钥对**  
此命令将生成一个 RSA 密钥对并与用户 4 (HSM 上的另一个 CU) 共享私有密钥。该命令使用 `m_value` 参数以要求至少两次批准，之后密钥对中的私有密钥才能用于加密操作。在使用 `m_value` 参数时，还必须在命令中使用 `-u`，并且 `m_value` 不能超过用户总数 (`-u` 中的值数 \$1 所有者)。  

```
 Command:  genRSAKeyPair -m 2048 -e 65537 -l rsa_mofn -id rsa_mv2 -u 4 -m_value 2

        Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS

        Cfm3GenerateKeyPair:    public key handle: 27    private key handle: 28

        Cluster Error Status
        Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
        Node id 1 and err state 0x00000000 : HSM Return: SUCCESS
```

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

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

**-m**  
指定模数的长度 (以位为单位)。最小值为 2048。  
是否必需：是

**-环**  
指定公有指数。此值必须为大于或等于 65537 的奇数。  
是否必需：是

**-l**  
指定用户定义的密钥对标签。键入字符串。同样的标签适用于配对中的两个密钥。`label` 的最大大小为 127 个字符。  
您可使用任何短语，以帮助您识别密钥。由于标签并非唯一，因此您可将其用于分组和分类密钥。  
是否必需：是

**-id**  
为密钥对指定用户定义标识符。在集群中键入唯一字符串。默认值是空字符串。您指定的 ID 适用于密钥对中的两个密钥。  
默认值：无 ID 值。  
必需：否

**-min\$1srv**  
指定 HSMs 在`-timeout`参数值到期之前同步密钥的最小数量。如果密钥在分配的时间内未同步到指定数量的服务器，则不会创建它。  
AWS CloudHSM 自动将每个密钥同步到集群中的每个 HSM。要加快处理速度，请将的值设置`min_srv`为小于群集 HSMs 中的数量，并设置一个较低的超时值。但请注意，一些请求可能无法生成密钥。  
默认：1  
必需：否

**-m\$1value**  
指定必须批准使用密钥对中的私有密钥进行任何加密操作的用户数量。键入 `0` 至 `8` 范围的值。  
此参数规定了私有密钥的仲裁身份验证要求。默认值 `0` 表明禁用密钥的仲裁身份验验证功能。启用仲裁身份验证后，指定数量的用户必须签署令牌才能批准私有密钥加密操作以及共享或取消共享私有密钥操作。  
要查找密钥`m_value`的，请使用[getKeyInfo](key_mgmt_util-getKeyInfo.md)。  
只有当命令中的 `-u` 参数与足够多的用户共享密钥对以满足 `m_value` 要求时，此参数才有效。  
默认：0  
必需：否

**-nex**  
使私钥无法提取。生成的私钥无法[从 HSM 中导出](export-keys.md)。公有密钥始终可提取。  
默认：密钥对中的公有密钥和私有密钥均可提取。  
必需：否

**-sess**  
创建仅在当前会话中存在的密钥。会话结束后，密钥无法恢复。  
如果您只需要一个短暂的密钥，例如用于加密然后快速解密另一个密钥的包装密钥，请使用此参数。对于会话结束后可能需要解密的加密数据，切勿使用会话密钥。  
若要将会话密钥更改为永久（令牌）密钥，请使用 [setAttribute](key_mgmt_util-setAttribute.md)。  
默认：密钥永久有效。  
必需：否

**-timeout**  
指定命令等待密钥同步到`min_srv`参数 HSMs 指定的数量的时间（以秒为单位）。  
仅当 `min_srv` 参数也用于此命令时，该参数才有效。  
默认：没有超时 该命令无限期等待，仅当密钥同步至最少数量的服务器时才返回。  
必需：否

**-u**  
与指定用户共享密钥对中的私钥。此参数授予其他 HSM 加密用户 (CUs) 在加密操作中使用私钥的权限。任何用户都可以在不共享的情况下使用公有密钥。  
键入以逗号分隔的 HSM 用户列表 IDs，例如-。`u 5,6`请勿包括当前用户的 HSM 用户 ID。[要在 HSM CUs 上查找 HSM 用户 IDs ，请使用 ListUsers。](key_mgmt_util-listUsers.md)要共享或取消共享现有密钥，请在 cloudhsm\$1mgmt\$1util 中使用 [shareKey](cloudhsm_mgmt_util-shareKey.md)。  
默认：只有当前用户可使用私有密钥。  
必需：否

**-attest**  
运行完整性检查，以验证运行集群的固件是否被篡改。  
默认：不执行认证检查。  
必需：否

## 相关主题
<a name="genRSAKeyPair-seealso"></a>
+ [genSymKey](key_mgmt_util-genSymKey.md)
+ [DSAKey一代对](key_mgmt_util-genDSAKeyPair.md)
+ [ECCKey一代对](key_mgmt_util-genECCKeyPair.md)