

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

# 使用 KMU 生成 AWS CloudHSM DSA 密钥对
<a name="key_mgmt_util-genDSAKeyPair"></a>

使用 AWS CloudHSM key\$1mgmt\$1util 工具中的**genDSAKeyPair**命令在硬件安全模块 (HSM) 中生成[数字签名算法 (DSA](https://en.wikipedia.org/wiki/Digital_Signature_Algorithm)) 密钥对。您必须指定模数长度；该命令将生成模数值。您也可以分配一个 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="genDSAKeyPair-syntax"></a>

```
genDSAKeyPair -h

genDSAKeyPair -m <modulus length> 
              -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="genDSAKeyPair-examples"></a>

这些示例演示如何使用 **genDSAKeyPair** 创建 DSA 密钥对。

**Example ：创建 DSA 密钥对**  
此命令会创建一个具有 `DSA` 标签的 DSA 密钥对。输出显示公有密钥的密钥句柄为 `19` 且私有密钥的句柄为 `21`。  

```
Command: genDSAKeyPair -m 2048 -l DSA

        Cfm3GenerateKeyPair: returned: 0x00 : HSM Return: SUCCESS

        Cfm3GenerateKeyPair:    public key handle: 19    private key handle: 21

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

**Example ：创建仅会话型 DSA 密钥对**  
此命令会创建仅在当前会话中有效的 DSA 密钥对。该命令除了必需的 (不唯一) 标签外还将分配 `DSA_temp_pair` 的唯一 ID。您可能希望创建诸如此类的密钥对并且验证仅会话型令牌。输出显示公有密钥的密钥句柄为 `12` 且私有密钥的句柄为 `14`。  

```
Command: genDSAKeyPair -m 2048 -l DSA-temp -id DSA_temp_pair -sess

        Cfm3GenerateKeyPair: returned: 0x00 : HSM Return: SUCCESS

        Cfm3GenerateKeyPair:    public key handle: 12    private key handle: 14

        Cluster Error Status
        Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
```
要确认密钥对仅在会话中存在，请使用具有值为 `1` (true) 的 [findKey](key_mgmt_util-findKey.md) 的 `-sess` 参数。  

```
  Command: findKey -sess 1

  Total number of keys present 2

 number of keys matched from start index 0::1
12, 14

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

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

**Example ：创建共享、不可提取的 DSA 密钥对**  
此命令会创建一个 DSA 密钥对。私有密钥与三个其他用户共享，而且它无法从 HSM 中导出。公有密钥可由任何用户使用且可始终被提取。  

```
        Command:  genDSAKeyPair -m 2048 -l DSA -id DSA_shared_pair -nex -u 3,5,6

        Cfm3GenerateKeyPair: returned: 0x00 : HSM Return: SUCCESS

        Cfm3GenerateKeyPair:    public key handle: 11    private key handle: 19

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

**Example ：创建仲裁控制型密钥对**  
此命令会创建一个具有 `DSA-mV2` 标签的 DSA 密钥对。该命令使用 `-u` 参数与用户 4 和 6 共享私有密钥。它使用 `-m_value` 参数来要求使用私有密钥的任何加密操作需要至少两个批准的仲裁。此命令还使用 `-attest` 参数来验证生成密钥对的固件的完整性。  
输出显示该命令生成一个具有密钥句柄 `12` 的公有密钥和一个具有密钥句柄 `17` 的私有密钥，并且显示通过了对于集群固件的鉴证检查。  

```
        Command:  genDSAKeyPair -m 2048 -l DSA-mV2 -m_value 2 -u 4,6 -attest

        Cfm3GenerateKeyPair: returned: 0x00 : HSM Return: SUCCESS

        Cfm3GenerateKeyPair:    public key handle: 12    private key handle: 17

        Attestation Check : [PASS]

        Cluster Error Status
        Node id 1 and err state 0x00000000 : HSM Return: SUCCESS
        Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
```
此命令[getKeyInfo](key_mgmt_util-getKeyInfo.md)在私钥（密钥句柄`17`）上使用。输出确认密钥由当前用户 (用户 3) 所有且与用户 4 和 6 (无其他用户) 共享。输出还显示已启用仲裁身份验证且仲裁大小为 2。  

```
        Command:  getKeyInfo -k 17

        Cfm3GetKey returned: 0x00 : HSM Return: SUCCESS

        Owned by user 3

        also, shared to following 2 user(s):

                 4
                 6
         2 Users need to approve to use/manage this key
```

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

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

**-m**  
指定模数的长度 (以位为单位)。唯一有效值为 `2048`。  
是否必需：是

**-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="genDSAKeyPair-seealso"></a>
+ [RSAKey一代对](key_mgmt_util-genRSAKeyPair.md)
+ [genSymKey](key_mgmt_util-genSymKey.md)
+ [ECCKey一代对](key_mgmt_util-genECCKeyPair.md)