

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

# 使用 KM AWS CloudHSM U 生成 ECC 密钥对
<a name="key_mgmt_util-genECCKeyPair"></a>

使用 AWS CloudHSM key\_mgmt\_util 工具中的`genECCKeyPair`命令在硬件安全模块 (HSM) 中生成[椭圆曲线加密 (ECC](https://en.wikipedia.org/wiki/Elliptic-curve_cryptography)) 密钥对。运行 `genECCKeyPair` 命令时，您必须为密钥对指定椭圆曲线标识符和标签。您也可以与其他 CU 用户共享私有密钥，创建不可提取的密钥、仲裁控制的密钥和会话结束时过期的密钥。如果命令成功，则它会返回 HSM 分配到公有和私有 ECC 密钥的密钥句柄。您可以使用密钥句柄来区分这些密钥与其他命令。

在运行任何 key\_mgmt\_util 命令之前，您必须[启动 key\_mgmt\_util](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="genECCKeyPair-syntax"></a>

```
genECCKeyPair -h

genECCKeyPair -i <EC curve id> 
              -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="genECCKeyPair-examples"></a>

以下示例说明**genECCKeyPair**如何使用在中创建 ECC 密钥对。 HSMs

**Example ：创建并检查 ECC 密钥对**  
此命令使用 NID\_secp384r1 椭圆曲线和 `ecc14` 标签创建 ECC 密钥对。输出表明，私有密钥的密钥句柄为 `262177`，并且公有密钥的密钥句柄为 `262179`。该标签同时应用于公有密钥和私有密钥。  

```
Command: genECCKeyPair -i 14 -l ecc14

        Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS

        Cfm3GenerateKeyPair:    public key handle: 262179    private key handle: 262177

        Cluster Error Status
        Node id 2 and err state 0x00000000 : HSM Return: SUCCESS
        Node id 1 and err state 0x00000000 : HSM Return: SUCCESS
        Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
```
生成密钥后，您可以检查其属性。使用 [getAttribute](key_mgmt_util-getAttribute.md) 将新 ECC 私有密钥的所有属性（由常量 `512` 表示）写入 `attr_262177` 文件。  

```
Command: getAttribute -o 262177 -a 512 -out attr_262177
got all attributes of size 529 attr cnt 19
Attributes dumped into attr_262177

        Cfm3GetAttribute returned: 0x00 : HSM Return: SUCCESS
```
然后，使用 `cat` 命令查看 `attr_262177` 属性文件的内容。输出表明，该密钥是一个椭圆曲线私有密钥，它可用于签名，但不可用于加密、解密、包装、解开包装或验证。该密钥是持久性的，并且可导出。  

```
$  cat attr_262177

OBJ_ATTR_CLASS
0x03
OBJ_ATTR_KEY_TYPE
0x03
OBJ_ATTR_TOKEN
0x01
OBJ_ATTR_PRIVATE
0x01
OBJ_ATTR_ENCRYPT
0x00
OBJ_ATTR_DECRYPT
0x00
OBJ_ATTR_WRAP
0x00
OBJ_ATTR_UNWRAP
0x00
OBJ_ATTR_SIGN
0x01
OBJ_ATTR_VERIFY
0x00
OBJ_ATTR_LOCAL
0x01
OBJ_ATTR_SENSITIVE
0x01
OBJ_ATTR_EXTRACTABLE
0x01
OBJ_ATTR_LABEL
ecc2
OBJ_ATTR_ID

OBJ_ATTR_VALUE_LEN
0x0000008a
OBJ_ATTR_KCV
0xbbb32a
OBJ_ATTR_MODULUS
044a0f9d01d10f7437d9fa20995f0cc742552e5ba16d3d7e9a65a33e20ad3e569e68eb62477a9960a87911e6121d112b698e469a0329a665eba74ee5ac55eae9f5
OBJ_ATTR_MODULUS_BITS
0x0000019f
```

**Example 使用无效的 EEC 曲线**  
此命令将尝试使用 NID\_X9\_62\_prime192v1 曲线创建 ECC 密钥对。由于此椭圆曲线在 FIPS 模式下无效 HSMs，因此命令失败。该消息报告群集中的服务器不可用，但这通常并不表示群集 HSMs 中的存在问题。  

```
Command:  genECCKeyPair -i 1 -l ecc1

        Cfm3GenerateKeyPair returned: 0xb3 : HSM Error: This operation violates the current configured/FIPS policies

        Cluster Error Status
        Node id 0 and err state 0x30000085 : HSM CLUSTER ERROR: Server in cluster is unavailable
```

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

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

**-i **  
指定椭圆曲线的标识符。输入标识符。  
有效值：  
+ **2**：NID\_X9\_62\_prime256v1
+ **14**：NID\_secp384r1
+ **16**：NID\_secp256k1
是否必需：是

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

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

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

**-m\_value**  
指定必须批准使用密钥对中的私有密钥进行任何加密操作的用户数量。键入 `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\_mgmt\_util 中使用 [shareKey](cloudhsm_mgmt_util-shareKey.md)。  
默认：只有当前用户可使用私有密钥。  
必需：否

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

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