

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 KMU 產生 AWS CloudHSM RSA 金鑰對
<a name="key_mgmt_util-genRSAKeyPair"></a>

使用 AWS CloudHSM key\_mgmt\_util 工具中的 **genRSAKeyPair**命令來產生 [RSA](https://en.wikipedia.org/wiki/RSA_(cryptosystem)) 非對稱金鑰對。您需要指定金鑰類型、模數長度及公有指數。此命令產生指定長度的模數並建立金鑰對。您可以指派 ID、將金鑰與其他 HSM 使用者共用、建立不可擷取的金鑰及工作階段結束時就過期的金鑰。命令成功時會傳回 HSM 指派給金鑰的金鑰控制代碼。您可以使用金鑰控制代碼來向其他命令識別金鑰。

執行任何 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="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** 在 HSM 中建立非對稱金鑰對。

**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` 的值個數 \+ 擁有者)。  

```
 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
```

## Parameters
<a name="genRSAKeyPair-params"></a>

**-h**  
顯示命令的說明。  
必要：是

**-m**  
指模數的長度 (以位元為單位)。最小值為 2048。  
必要：是

**-e**  
指公有指數。值必須為大於或等於 65537 的奇數。  
必要：是

**-l**  
指使用者定義的金錀對標籤。輸入一個字串。相同標籤套用至金錀對中的兩個金鑰。`label` 的大小上限為 127 個字元。  
您可以使用任何可以幫助您識別金錀的片語。標籤不具唯一性，因此您可使用標籤將金錀進行分組和分類。  
必要：是

**-id**  
指使用者定義的金錀對識別符。輸入叢集中唯一的字串。預設為空字串。您指定的 ID 會套用至金錀對中的兩個金鑰。  
預設：無 ID 值。  
必要：否

**-min\_srv**  
指在 `-timeout` 參數值過期之前同步金鑰所需的 HSM 數量下限。如果未在規定時間內同步至指定數量的伺服器，金鑰就不會建立。  
AWS CloudHSM 會自動將每個金鑰同步到叢集中的每個 HSM。要加速流程，請將 `min_srv` 值設定為少於叢集中之 HSM 的數量，並設定低逾時值。然而，請注意有些請求可能不會產生金鑰。  
預設：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` 參數指定數目的 HSM 的時長 (以秒為單位)。  
此參數只有在命令中同時使用 `min_srv` 參數時才有效。  
預設：無逾時。該命令會無限期等待，並且僅在將金錀同步到最小數目的伺服器時才返回。  
必要：否

**-u**  
與指定使用者共用金錀對中的私有金鑰。此參數允許其他 HSM 加密使用者 (CU) 在密碼編譯操作中使用此金鑰。任何使用者均可在無需共用的情況下使用公有金錀。  
輸入以逗號分隔的 HSM 使用者 ID 清單，例如 -`u 5,6`。請勿包含現行使用者的 HSM 使用者 ID。若要尋找 HSM 上 CU 的 HSM 使用者 ID，請使用 [listUsers](key_mgmt_util-listUsers.md)。之後，如要共用或取消共用現有金鑰，請使用 cloudhsm\_mgmt\_util 中的 [shareKey](cloudhsm_mgmt_util-shareKey.md)。  
預設：只有目前使用者能使用匯入的私有金鑰。  
必要：否

**-attest**  
執行完整性檢查，以驗證執行叢集的韌體未被篡改。  
預設：無認證檢查。  
必要：否

## 相關主題
<a name="genRSAKeyPair-seealso"></a>
+ [genSymKey](key_mgmt_util-genSymKey.md)
+ [genDSAKeyPair](key_mgmt_util-genDSAKeyPair.md)
+ [genECCKeyPair](key_mgmt_util-genECCKeyPair.md)