

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

# AWS CloudHSM 用戶端 SDK 3 的 PKCS \$111 程式庫
<a name="pkcs11-v3-library"></a>

PKCS \$111 是對 中的硬體安全模組 (HSM) 執行密碼編譯操作的標準 AWS CloudHSM。

如需關於啟動載入的資訊，請參閱 [連接至叢集](cluster-connect.md)。

**Topics**
+ [安裝 PKCS \$111 程式庫](install-pkcs11-v3.md)
+ [驗證為 PKCS \$111 程式庫](pkcs11-v3-pin.md)
+ [金鑰類型](pkcs11-v3-key-types.md)
+ [機制](pkcs11-v3-mechanisms.md)
+ [API 操作](pkcs11-v3-apis.md)
+ [金錀屬性](pkcs11-v3-attributes.md)
+ [程式碼範例](pkcs11-v3-samples.md)

# 安裝 AWS CloudHSM 用戶端 SDK 3 的 PKCS \$111 程式庫
<a name="install-pkcs11-v3"></a>

本主題提供安裝 AWS CloudHSM 用戶端 SDK 3 版本系列的 PKCS \$111 程式庫的說明。如需關於用戶端 SDK 或 PKCS \$111 程式庫的詳細資訊，請參閱[使用用戶端 SDK](use-hsm.md) 和 [PKCS \$111 程式庫](pkcs11-library.md)。

## 用戶端 SDK 3 的先決條件
<a name="pkcs11-library-prerequisites"></a>

PKCS \$111 程式庫需要 AWS CloudHSM 用戶端。

如果您尚未安裝和設定 AWS CloudHSM 用戶端，請依照 中的步驟立即執行此操作[安裝用戶端 (Linux)](cmu-install-and-configure-client-linux.md)。安裝和設定用戶端之後，請使用以下命令來啟動用戶端。

------
#### [ Amazon Linux ]

```
$ sudo start cloudhsm-client
```

------
#### [ Amazon Linux 2 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ CentOS 7 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ CentOS 8 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ RHEL 7 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ RHEL 8 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ Ubuntu 16.04 LTS ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ Ubuntu 18.04 LTS ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ Ubuntu 20.04 LTS ]

```
$ sudo systemctl start cloudhsm-client
```

------

## 安裝用戶端 SDK 3 的 PKCS \$111 程式庫
<a name="install-pkcs11-library"></a>

下列命令會下載和安裝 PKCS \$111 程式庫。

------
#### [ Amazon Linux ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL6/cloudhsm-client-pkcs11-latest.el6.x86_64.rpm
```

```
$ sudo yum install ./cloudhsm-client-pkcs11-latest.el6.x86_64.rpm
```

------
#### [ Amazon Linux 2 ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-client-pkcs11-latest.el7.x86_64.rpm
```

```
$ sudo yum install ./cloudhsm-client-pkcs11-latest.el7.x86_64.rpm
```

------
#### [ CentOS 7 ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-client-pkcs11-latest.el7.x86_64.rpm
```

```
$ sudo yum install ./cloudhsm-client-pkcs11-latest.el7.x86_64.rpm
```

------
#### [ CentOS 8 ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL8/cloudhsm-client-pkcs11-latest.el8.x86_64.rpm
```

```
$ sudo yum install ./cloudhsm-client-pkcs11-latest.el8.x86_64.rpm
```

------
#### [ RHEL 7 ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-client-pkcs11-latest.el7.x86_64.rpm
```

```
$ sudo yum install ./cloudhsm-client-pkcs11-latest.el7.x86_64.rpm
```

------
#### [ RHEL 8 ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL8/cloudhsm-client-pkcs11-latest.el8.x86_64.rpm
```

```
$ sudo yum install ./cloudhsm-client-pkcs11-latest.el8.x86_64.rpm
```

------
#### [ Ubuntu 16.04 LTS ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Xenial/cloudhsm-client-pkcs11_latest_amd64.deb
```

```
$ sudo apt install ./cloudhsm-client-pkcs11_latest_amd64.deb
```

------
#### [ Ubuntu 18.04 LTS ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Bionic/cloudhsm-client-pkcs11_latest_u18.04_amd64.deb
```

```
$ sudo apt install ./cloudhsm-client-pkcs11_latest_u18.04_amd64.deb
```

------
+ 如果您安裝了 PKCS \$111 程式庫的 EC2 執行個體中沒有安裝用戶端 SDK 3 的其他元件，則您必須啟動用戶端 SDK 3。您只需要在每個執行個體上使用用戶端 SDK 3 的元件執行一次。
+ 您可於下列位置找到 PKCS \$111 程式庫檔案：

  Linux 二進位檔案、組態指令碼、憑證和日誌檔案：

  ```
  /opt/cloudhsm/lib
  ```

# 驗證至 AWS CloudHSM 用戶端 SDK 3 的 PKCS \$111 程式庫
<a name="pkcs11-v3-pin"></a>

當您使用 PKCS \$111 程式庫時，您的應用程式會以 HSMs 中的特定[加密使用者 (CU)](manage-hsm-users.md) 身分執行 AWS CloudHSM。您的應用程式只能檢視和管理 CU 所擁有和共用的金鑰。您可以使用 HSM 中現有的 CU，或建立新的 CU。如需關於管理 CU 的資訊，請參閱[使用 CloudHSM CLI 管理 HSM 使用者](manage-hsm-users-chsm-cli.md)和[使用 CloudHSM 管理公用程式 (CMU) 管理 HSM 使用者](manage-hsm-users-cmu.md)。

若要將 CU 指定給 PKCS \$111 程式庫，請使用 PKCS \$111 [C\$1Login 函數](http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/os/pkcs11-base-v2.40-os.html#_Toc385057915)的 pin 參數。對於 AWS CloudHSM，接腳參數的格式如下：

```
<CU_user_name>:<password>
```

例如，以下命令會將 PKCS \$111 程式庫 pin 設定給使用者名稱為 `CryptoUser` 和密碼為 `CUPassword123!` 的 CU。

```
CryptoUser:CUPassword123!
```

# AWS CloudHSM 用戶端 SDK 3 的 PKCS \$111 程式庫支援的金鑰類型
<a name="pkcs11-v3-key-types"></a>

PKCS \$111 程式庫支援使用 AWS CloudHSM 用戶端 SDK 3 的下列金鑰類型。


****  

| 金鑰類型 | Description | 
| --- | --- | 
| RSA | 產生 2048 位元至 4096 位元的 RSA 金鑰，以 256 位元為單位遞增。 | 
| EC | 使用 secp224r1 (P-224)、secp256r1 (P-256)、secp256k1 (Blockchain)、secp384r1 (P-384) 和 secp521r1 (P-521) 曲線產生金鑰。 | 
| AES | 產生 128 位元、192 位元和 256 位元的 AES 金鑰。 | 
| DES3 (三重 DES) | 產生 192 位元 DES3 金鑰。請參閱下列備註 [1](#pkcs11-v3-key-note) 查看即將進行的變更。 | 
| GENERIC\$1SECRET | 產生 1 到 64 位元組的一般機密。 | 
+ 【1】 根據 NIST 指引，在 2023 年之後，不允許在 FIPS 模式下使用叢集。對於處於非 FIPS 模式的叢集，在 2023 年之後仍然允許。如需詳細資訊，請參閱 [FIPS 140 合規性：2024 機制棄用](compliance-dep-notif.md#compliance-dep-notif-1)。

# AWS CloudHSM 用戶端 SDK 3 支援的機制
<a name="pkcs11-v3-mechanisms"></a>

PKCS \$111 程式庫支援 AWS CloudHSM 用戶端 SDK 3 的下列演算法：
+ **加密和解密**：AES-CBC、AES-CTR、AES-ECB、AES-GCM、DES3-CBC、DES3-ECB、RSA-OAEP 和 RSA-PKCS
+ **簽署和驗證**：RSA、HMAC 和 ECDSA；無論是否使用雜湊皆不影響
+ **雜湊/摘要**：SHA1、SHA224、SHA256、SHA384 和 SHA512
+ **金鑰包裝**：AES 金鑰包裝、[4](#pkcs11-v3-mech4) AES-GCM、RSA-AES 和 RSA-OAEP
+ **金鑰派生**：ECDH、[5](#pkcs11-v3-mech5) SP800-108 CTR KDF

## PKCS \$111 程式庫機制功能表
<a name="pkcs11-v3-mech-function"></a>

PKCS \$111 程式庫與 PKCS \$111 規格的 2.40 版相容。若要使用 PKCS \$111 叫用加密功能，請利用指定機制呼叫函數。下表總結說明 AWS CloudHSM支援的函數和機制組合。

**解譯支援的 PKCS \$111 機制函數表**  
✔ 標記表示 AWS CloudHSM 支援函數的 機制。並不是 PKCS \$111 規格中所列的所有可能函數都受到支援。✖ 標記表示 AWS CloudHSM 尚未支援指定函數的機制，即使 PKCS \$111 標準允許。空白儲存格表示 PKCS \$111 標準不支援指定函數的機制。


**支援的 PKCS \$111 程式庫機制和函數**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/pkcs11-v3-mechanisms.html)

**機制註釋**
+  [1] 僅限單一部分操作。
+  [2] 此機制的功能與 `CKM_RSA_PKCS_KEY_PAIR_GEN` 機制完全相同，但在產生 `p` 和 `q` 時提供更強大的保證。
+ 【3.1】 根據用戶端 SDK AWS CloudHSM 以不同方式處理雜湊。對於用戶端 SDK 3，我們執行雜湊的位置取決於資料大小以及您使用的是單一部分還是多部分操作。

  **用戶端 SDK 3 中的單一部分操作**

  用戶端 SDK 3 各機制的最大資料集大小如表 3.1 所列。整個雜湊會在 HSM 內計算。不支援大於 16KB 的資料。  
**表 3.1，單一部分操作的資料集大小上限**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/pkcs11-v3-mechanisms.html)

  **多部分操作用戶端 SDK 3**

  雖支援大於 16 KB 的資料，但資料大小會決定雜湊的發生位置。小於 16 KB 的資料緩衝區會在 HSM 內進行雜湊處理。16 KB 和系統資料大小上限之間的緩衝區會在軟體本機雜湊處理。*請記住*：雜湊函數不需要加密密碼編譯，因此您可以在 HSM 之外安全地計算。
+ 【3.2】 根據用戶端 SDK AWS CloudHSM 以不同方式處理雜湊。對於用戶端 SDK 3，我們執行雜湊的位置取決於資料大小以及您使用的是單一部分還是多部分操作。

  **單一部分操作用戶端 SDK 3**

  用戶端 SDK 3 各機制的最大資料集大小如表 3.2 所列。不支援大於 16KB 的資料。  
**表 3.2，單一部分操作的資料集大小上限**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/pkcs11-v3-mechanisms.html)

  **多部分操作用戶端 SDK 3**

  雖支援大於 16 KB 的資料，但資料大小會決定雜湊的發生位置。小於 16 KB 的資料緩衝區會在 HSM 內進行雜湊處理。16 KB 和系統資料大小上限之間的緩衝區會在軟體本機雜湊處理。*請記住*：雜湊函數不需要加密密碼編譯，因此您可以在 HSM 之外安全地計算。
+  [3.3] 當使用下列任一機制操作資料時，若資料緩衝區超過資料大小上限，該操作就會導致錯誤。對於這些機制，所有資料處理都必須在 HSM 內進行。下表列出每個機制設定的資料大小上限：  
**表 3.3，最大資料集大小**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/pkcs11-v3-mechanisms.html)
+  [4] 當執行 AES-GCM 加密時，HSM 不會接受來自應用程式的初始化向量 (IV) 資料。請務必使用其產生的 IV。系統會將 HSM 所提供的 12 位元組 IV 寫入記憶體參考，該記憶體參考是由您提供的 `CK_GCM_PARAMS` 參數結構 pIV 元素所指向。為了確保使用者不會混淆，在初始化 AES-GCM 加密時，1.1.1 版和更新版本中的 PKCS \$1 11 開發套件會強制將該 pIV 指向歸零的緩衝區。
+  [5] **僅限於用戶端 SDK 3**。此機制的實作是為了支援 SSL/TLS 卸載案例，且在 HSM 內只會部分執行。使用此機制前，請參閱 [的 PKCS \$111 程式庫已知問題 AWS CloudHSMPKCS \$111 程序庫的已知問題](ki-pkcs11-sdk.md) 中的「問題：在 HSM 中 ECDH 金鑰衍生只會部分執行」。`CKM_ECDH1_DERIVE` 不支援 secp521r1 (P-521) 曲線。
+  [6] 支援下列 `CK_MECHANISM_TYPE` 和 `CK_RSA_PKCS_MGF_TYPE`，作為 `CKM_RSA_PKCS_OAEP` 的 `CK_RSA_PKCS_OAEP_PARAMS`：
  + `CKM_SHA_1` 使用 `CKG_MGF1_SHA1`
  + `CKM_SHA224` 使用 `CKG_MGF1_SHA224`
  + `CKM_SHA256` 使用 `CKG_MGF1_SHA256`
  + `CKM_SHA384` 使用 `CKM_MGF1_SHA384`
  + `CKM_SHA512` 使用 `CKM_MGF1_SHA512`
+ [7.1] 廠商定義的機制。為了能使用 CloudHSM 廠商定義的機制，編譯期間 PKCS \$111 應用程式必須加入 `/opt/cloudhsm/include/pkcs11/cloudhsm_pkcs11_vendor_defs.h`。

  `CKM_CLOUDHSM_AES_GCM`：這個專屬機制是標準 `CKM_AES_GCM` 程式設計更安全的替代方案。這將 HSM 生成的 IV 加入至加密文字的開頭，而不是將它寫回加密初始化期間提供的 `CK_GCM_PARAMS` 結構中。您可以搭配 `C_Encrypt`、`C_WrapKey`、`C_Decrypt` 和 `C_UnwrapKey` 函數搭配使用此機制。使用此機制時，`CK_GCM_PARAMS` 結構中的 pIV 變數必須設定為 `NULL`。與 `C_Decrypt` 和 `C_UnwrapKey` 搭配使用此機制時，IV 應至於取消包裝的加密文字之前。

  `CKM_CLOUDHSM_AES_KEY_WRAP_PKCS5_PAD`：AES 金鑰包裝與 PKCS \$15 填補

  `CKM_CLOUDHSM_AES_KEY_WRAP_ZERO_PAD`：AES 金鑰包裝，零填補

  如需有關 AES 金鑰包裝的其他資訊，請參閱 [AES 金鑰包裝](manage-aes-key-wrapping.md)。
+ 【8】 根據 NIST 指引，在 2023 年之後，不允許在 FIPS 模式下使用叢集。對於處於非 FIPS 模式的叢集，在 2023 年之後仍然允許。如需詳細資訊，請參閱 [FIPS 140 合規性：2024 機制棄用](compliance-dep-notif.md#compliance-dep-notif-1)。

# AWS CloudHSM 用戶端 SDK 3 支援的 API 操作
<a name="pkcs11-v3-apis"></a>

PKCS \$111 程式庫支援用戶端 AWS CloudHSM SDK 3 的下列 PKCS \$111 API 操作。
+ `C_CloseAllSessions`
+ `C_CloseSession`
+ `C_CreateObject`
+ `C_Decrypt`
+ `C_DecryptFinal`
+ `C_DecryptInit`
+ `C_DecryptUpdate`
+ `C_DeriveKey`
+ `C_DestroyObject`
+ `C_Digest`
+ `C_DigestFinal`
+ `C_DigestInit`
+ `C_DigestUpdate`
+ `C_Encrypt`
+ `C_EncryptFinal`
+ `C_EncryptInit`
+ `C_EncryptUpdate`
+ `C_Finalize`
+ `C_FindObjects`
+ `C_FindObjectsFinal`
+ `C_FindObjectsInit`
+ `C_GenerateKey`
+ `C_GenerateKeyPair`
+ `C_GenerateRandom`
+ `C_GetAttributeValue`
+ `C_GetFunctionList`
+ `C_GetInfo`
+ `C_GetMechanismInfo`
+ `C_GetMechanismList`
+ `C_GetSessionInfo`
+ `C_GetSlotInfo`
+ `C_GetSlotList`
+ `C_GetTokenInfo`
+ `C_Initialize`
+ `C_Login`
+ `C_Logout`
+ `C_OpenSession`
+ `C_Sign`
+ `C_SignFinal`
+ `C_SignInit`
+ `C_SignRecover` (僅支援用戶端 SDK 3)
+ `C_SignRecoverInit` (僅支援用戶端 SDK 3)
+ `C_SignUpdate`
+ `C_UnWrapKey`
+ `C_Verify`
+ `C_VerifyFinal`
+ `C_VerifyInit`
+ `C_VerifyRecover` (僅支援用戶端 SDK 3)
+ `C_VerifyRecoverInit` (僅支援用戶端 SDK 3)
+ `C_VerifyUpdate`
+ `C_WrapKey`

# AWS CloudHSM 用戶端 SDK 3 的 PKCS \$111 程式庫中的金鑰屬性
<a name="pkcs11-v3-attributes"></a>

金鑰物件可以是公有金鑰、私有金鑰或私密金鑰。系統會透過屬性來指定金鑰物件上允許的動作。金鑰物件建立時，即會一併建立屬性。當您使用 PKCS \$111 程式庫時 AWS CloudHSM，我們會依 PKCS \$111 標準指定預設值。

AWS CloudHSM 不支援 PKCS \$111 規格中列出的所有屬性。我們會符合所有支援屬性的規格，並在個別表格中列出這些屬性。

用來建立、修改或複製物件的加密函數 (如 `C_CreateObject`、`C_GenerateKey`、`C_GenerateKeyPair`、`C_UnwrapKey` 和 `C_DeriveKey`) 會採用屬性範本做為其中一個參數。如需在建立物件期間傳遞屬性範本的詳細資訊，請參閱[透過 PKCS \$111 程式庫產生金鑰](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/generate)範例。

下列主題提供有關用戶端 SDK 3 AWS CloudHSM 金鑰屬性的詳細資訊。

**Topics**
+ [屬性資料表](pkcs11-v3-attributes-interpreting.md)
+ [修改屬性](pkcs11-v3-modify-attr.md)
+ [解譯 AWS CloudHSM 用戶端 SDK 3 的 PKCS \$111 程式庫錯誤代碼](pkcs11-v3-attr-errors.md)

# AWS CloudHSM 用戶端 SDK 3 的 PKCS \$111 程式庫屬性資料表
<a name="pkcs11-v3-attributes-interpreting"></a>

 AWS CloudHSM 用戶端 SDK 3 的 PKCS \$111 程式庫資料表包含因金鑰類型而異的屬性清單。它指出在使用特定密碼編譯函數時，特定金鑰類型是否支援指定的屬性 AWS CloudHSM。

**圖例：**
+ ✔ 表示 CloudHSM 支援特定金鑰類型的屬性。
+ ✖ 表示 CloudHSM 不支援特定金鑰類型的屬性。
+ R 表示特定金鑰類型的屬性值設定為唯讀模式。
+ S 表示屬性較為敏感，因此無法透過 `GetAttributeValue` 讀取。
+ 預設值欄位中的空白儲存格表示屬性沒有獲派指定預設值。

## GenerateKeyPair
<a name="pkcs11-v3-generatekeypair"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/pkcs11-v3-attributes-interpreting.html)

## GenerateKey
<a name="pkcs11-v3-generatekey"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/pkcs11-v3-attributes-interpreting.html)

## CreateObject
<a name="pkcs11-v3-createobject"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/pkcs11-v3-attributes-interpreting.html)

## UnwrapKey
<a name="pkcs11-v3-unwrapkey"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/pkcs11-v3-attributes-interpreting.html)

## DeriveKey
<a name="pkcs11-v3-derivekey"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/pkcs11-v3-attributes-interpreting.html)

## GetAttributeValue
<a name="pkcs11-v3-getattributevalue"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/pkcs11-v3-attributes-interpreting.html)

**屬性註釋**
+  [1] 此屬性受韌體部分支援，且需明確設定為僅限預設值。
+  [2] 必要屬性。
+  [3] **僅限於用戶端 SDK 3**。`CKA_SIGN_RECOVER` 屬性由 `CKA_SIGN` 屬性衍生而來。若已設定，該屬性就僅能設定為與 `CKA_SIGN` 相同的值。若未設定，則該屬性會衍生 `CKA_SIGN` 的預設值。CloudHSM 只支援以 RSA 為基礎的可復原簽章機制，因此屬性目前僅適用於 RSA 公有金鑰。
+  [4] **僅限於用戶端 SDK 3**。`CKA_VERIFY_RECOVER` 屬性由 `CKA_VERIFY` 屬性衍生而來。若已設定，該屬性就僅能設定為與 `CKA_VERIFY` 相同的值。若未設定，則該屬性會衍生 `CKA_VERIFY` 的預設值。CloudHSM 只支援以 RSA 為基礎的可復原簽章機制，因此此屬性目前僅適用於 RSA 公有金鑰。

# 修改 AWS CloudHSM 用戶端 SDK 3 的 PKCS \$111 程式庫屬性
<a name="pkcs11-v3-modify-attr"></a>

有些物件屬性可在物件建立後進行修改，但有些不行。若要修改屬性，請使用來自 cloudhsm\$1mgmt\$1util 的 [setAttribute](cloudhsm_mgmt_util-setAttribute.md) 命令。您也可以使用來自 cloudhsm\$1mgmt\$1util 的 [listAttribute](cloudhsm_mgmt_util-listAttributes.md) 命令，來衍生屬性和代表這些屬性的常數清單。

下列清單會顯示物件建立後可修改的屬性：
+ `CKA_LABEL`
+ `CKA_TOKEN`
**注意**  
只有在將工作階段金鑰變更為符記金鑰時，才允許進行修改。使用 key\$1mgmt\$1util 中的 [setAttribute](key_mgmt_util-setAttribute.md) 命令來變更屬性值。
+ `CKA_ENCRYPT`
+ `CKA_DECRYPT`
+ `CKA_SIGN`
+ `CKA_VERIFY`
+ `CKA_WRAP`
+ `CKA_UNWRAP`
+ `CKA_LABEL`
+ `CKA_SENSITIVE`
+ `CKA_DERIVE`
**注意**  
這個屬性支援金鑰衍生。所有公有金鑰的屬性須為 `False`，不能設定為 `True`。如果是私密金鑰和 EC 私有金鑰，則該屬性可設定為 `True` 或 `False`。
+ `CKA_TRUSTED`
**注意**  
唯有加密管理員 (CO) 可將這個屬性設定成 `True` 或 `False`。
+ `CKA_WRAP_WITH_TRUSTED`
**注意**  
將此屬性套用於可匯出的資料金鑰，以表明只能使用標記為 `CKA_TRUSTED` 的金鑰包裝此金鑰。一旦設定 `CKA_WRAP_WITH_TRUSTED` 為 true，屬性就會變成唯讀，而且您無法變更或移除屬性。

# 解譯 AWS CloudHSM 用戶端 SDK 3 的 PKCS \$111 程式庫錯誤代碼
<a name="pkcs11-v3-attr-errors"></a>

在範本中指定特定金鑰不支援的 PKCS \$111 程式庫屬性會導致錯誤。下表包含違反規格時所產生的錯誤代碼：

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/pkcs11-v3-attr-errors.html)

# AWS CloudHSM 用戶端 SDK 3 的 PKCS \$111 程式庫程式碼範例
<a name="pkcs11-v3-samples"></a>

GitHub 上的程式碼範例示範如何使用適用於 的 PKCS \$111 程式庫來完成基本任務 AWS CloudHSM。

## 範本程式碼先決條件
<a name="pkcs11-v3-samples-prereqs"></a>

執行範例之前，請執行以下步驟來設定您的環境：
+ 安裝並設定適用於用戶端 SDK 3 的 [PKCS \$111 程式庫](install-pkcs11-v3.md)。
+ 設定[密碼編譯使用者 (CU)](manage-hsm-users.md)。您的應用程式會使用此 HSM 帳戶在 HSM 上執行程式碼範例。

## 程式碼範例
<a name="pkcs11-v3-samples-code"></a>

適用於 PKCS\$111 AWS CloudHSM 的軟體程式庫程式碼範例可在 [GitHub](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples) 上取得。此儲存庫包括如何使用 PKCS \$111 執行一般作業的範例，包括加密、解密、簽署和驗證。
+ [產生金鑰 (AES、RSA、EC)](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/generate)
+ [列出金鑰屬性](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/attributes/)
+ [使用 AES GCM 加密和解密資料](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/encrypt/aes_gcm.c)
+ [使用 AES\$1CTR 加密和解密資料](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/encrypt/aes_ctr.c) 
+ [使用 3DES 加密和解密資料](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/encrypt/des_ecb.c) 
+ [使用 RSA 簽署和驗證資料](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/sign/rsa_sign.c)
+ [使用 HMAC KDF 衍生金鑰](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/derivation/hmac_kdf.c)
+ [使用以 PKCS \$15 填補的 AES 包裝和取消包裝金鑰](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/aes_wrapping.c)
+ [使用不填補的 AES 包裝和取消包裝金鑰](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/aes_no_padding_wrapping.c)
+ [使用零填補的 AES 包裝和取消包裝金鑰](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/aes_zero_padding_wrapping.c)
+ [使用 AES-GCM 包裝和取消包裝金鑰](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/wrapping/aes_gcm_wrapping.c)
+ [使用 RSA 包裝和取消包裝金鑰](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/rsa_wrapping.c)