

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

# AWS CloudHSM 客户端 SDK 5 的 PKCS \#11 库支持的机制
<a name="pkcs11-mechanisms"></a>

PKCS \#11 库符合 2.40 版 PKCS \#11 规格。要使用 PKCS＃11 调用加密功能，请使用给定机制调用函数。以下各节总结了 C AWS CloudHSM lient SDK 5 支持的功能和机制的组合。

PKCS \#11 库支持以下算法：
+ **加密和解密** — AES-CBC、AES-CTR、AES-ECB、AES-GCM、-CBC、-ECB、RSA-OAEP 和 RSA-PKCS DES3 DES3
+ **签名和验证** - RSA、HMAC 和 ECDSA；带和不带哈希
+ **哈希/摘要** — SHA1、 SHA224、 SHA256、和 SHA384 SHA512
+ **密钥包装** - AES 密钥包装、[1](#mech1)AES-GCM、RSA-AES 和 RSA-OAEP
+ **密钥推导** — SP800 -108 使用 KDF 的 Counter KDF 和 ECDH（支持的 KDF 算法是 X9.63，带有、、、、、） SHA1 SHA224 SHA256 SHA384 SHA512

**Topics**
+ [生成密钥与密钥对功能](#pkcs11-mech-function-genkey)
+ [签署并验证功能](#pkcs11-mech-function-signverify)
+ [签名、恢复和验证恢复功能](#pkcs11-mech-function-sr-vr)
+ [摘要功能](#pkcs11-mech-function-digest)
+ [加密和解密功能](#pkcs11-mech-function-enc-dec)
+ [派生密钥功能](#pkcs11-mech-function-derive-key)
+ [包装和解包功能](#pkcs11-mech-function-wrap-unwrap)
+ [每种机制的最大数据大小](#pkcs11-mech-max)
+ [机制注释](#pkcs11-mech-annotations)

## 生成密钥与密钥对功能
<a name="pkcs11-mech-function-genkey"></a>

PKCS \#11 库的 AWS CloudHSM 软件库允许您使用以下机制生成密钥和密钥对功能。
+ `CKM_RSA_PKCS_KEY_PAIR_GEN`
+ `CKM_RSA_X9_31_KEY_PAIR_GEN` – 此机制的功能与 `CKM_RSA_PKCS_KEY_PAIR_GEN` 机制相同，但为生成 `p` 和 `q` 提供了更强有力的保证。
+ `CKM_EC_KEY_PAIR_GEN`
+ `CKM_GENERIC_SECRET_KEY_GEN`
+ `CKM_AES_KEY_GEN`
+ `CKM_DES3_KEY_GEN` – 即将在 [5](#mech5) 脚注中列出的更改。

## 签署并验证功能
<a name="pkcs11-mech-function-signverify"></a>

PKCS \#11 库的 AWS CloudHSM 软件库允许您将以下机制用于签名和验证功能。通过客户端软件开发工具包 5，数据将在软件中进行本地哈希处理。这意味着可由 SDK 执行哈希处理的数据大小没有限制。

通过客户端软件开发工具包 5 RSA 和 ECDSA，哈希处理在本地执行，无数据限制。使用 HMAC 时会有数据限制。有关更多信息，请参阅脚注 [2](#mech2)。

**RSA**
+ `CKM_RSA_X_509`
+ `CKM_RSA_PKCS` – 仅限单部分操作。
+ `CKM_RSA_PKCS_PSS` – 仅限单部分操作。
+ `CKM_SHA1_RSA_PKCS`
+ `CKM_SHA224_RSA_PKCS`
+ `CKM_SHA256_RSA_PKCS`
+ `CKM_SHA384_RSA_PKCS`
+ `CKM_SHA512_RSA_PKCS`
+ `CKM_SHA512_RSA_PKCS`
+ `CKM_SHA1_RSA_PKCS_PSS`
+ `CKM_SHA224_RSA_PKCS_PSS`
+ `CKM_SHA256_RSA_PKCS_PSS`
+ `CKM_SHA384_RSA_PKCS_PSS`
+ `CKM_SHA512_RSA_PKCS_PSS`

**ECDSA**
+ `CKM_ECDSA` – 仅限单部分操作。
+ `CKM_ECDSA_SHA1`
+ `CKM_ECDSA_SHA224`
+ `CKM_ECDSA_SHA256`
+ `CKM_ECDSA_SHA384`
+ `CKM_ECDSA_SHA512`

**HMAC**
+ `CKM_SHA_1_HMAC`[2](#mech2)
+ `CKM_SHA224_HMAC`[2](#mech2)
+ `CKM_SHA256_HMAC`[2](#mech2)
+ `CKM_SHA384_HMAC`[2](#mech2)
+ `CKM_SHA512_HMAC`[2](#mech2)

**CMAC**
+ `CKM_AES_CMAC`

## 签名、恢复和验证恢复功能
<a name="pkcs11-mech-function-sr-vr"></a>

客户端软件开发工具包 5 不支持 “签名恢复” 和 “验证恢复” 功能。

## 摘要功能
<a name="pkcs11-mech-function-digest"></a>

PKCS \#11 库的 AWS CloudHSM 软件库允许您将以下机制用于摘要函数。通过客户端软件开发工具包 5，数据将在软件中进行本地哈希处理。这意味着可由 SDK 执行哈希处理的数据大小没有限制。
+ `CKM_SHA_1`
+ `CKM_SHA224`
+ `CKM_SHA256`
+ `CKM_SHA384`
+ `CKM_SHA512`

## 加密和解密功能
<a name="pkcs11-mech-function-enc-dec"></a>

PKCS \#11 库的 AWS CloudHSM 软件库允许您将以下机制用于加密和解密功能。
+ `CKM_RSA_X_509`
+ `CKM_RSA_PKCS` – 仅限单部分操作。脚注 [5](#mech5) 中列出了即将进行的更改。
+ `CKM_RSA_PKCS_OAEP` – 仅限单部分操作。
+ `CKM_AES_ECB`
+ `CKM_AES_CTR`
+ `CKM_AES_CBC`
+ `CKM_AES_CBC_PAD`
+ `CKM_DES3_CBC` – 即将在 [5](#mech5) 脚注中列出的更改。
+ `CKM_DES3_ECB` – 即将在 [5](#mech5) 脚注中列出的更改。
+ `CKM_DES3_CBC_PAD` – 即将在 [5](#mech5) 脚注中列出的更改。
+  `CKM_AES_GCM` [1](#mech1), [2](#mech2)
+ `CKM_CLOUDHSM_AES_GCM`[3](#mech3)

## 派生密钥功能
<a name="pkcs11-mech-function-derive-key"></a>

PKCS \#11 库的 AWS CloudHSM 软件库支持以下密钥派生机制：
+ `CKM_SP800_108_COUNTER_KDF`
+ `CKM_ECDH1_DERIVE` – 支持使用以下供应商定义的 KDF 类型派生 ECDH 密钥[6](#kdf6)：
  + `CKD_CLOUDHSM_X963_SHA1_KDF`-带有 X9.63 KDF SHA1 [7](#kdf7)
  + `CKD_CLOUDHSM_X963_SHA224_KDF`-带有 X9.63 KDF SHA224 [7](#kdf7)
  + `CKD_CLOUDHSM_X963_SHA256_KDF`-带有 X9.63 KDF SHA256 [7](#kdf7)
  + `CKD_CLOUDHSM_X963_SHA384_KDF`-带有 X9.63 KDF SHA384 [7](#kdf7)
  + `CKD_CLOUDHSM_X963_SHA512_KDF`-带有 X9.63 KDF SHA512 [7](#kdf7)

## 包装和解包功能
<a name="pkcs11-mech-function-wrap-unwrap"></a>

PKCS \#11 库的 AWS CloudHSM 软件库允许您使用以下机制来实现 Wrap 和 Unwrap 函数。

有关其他 AES 密钥包装的其他信息，请参阅[ AES 密钥包装](manage-aes-key-wrapping.md)。
+ `CKM_RSA_PKCS` – 仅限单部分操作。脚注 [5](#mech5) 中列出了即将进行的更改。
+ `CKM_RSA_PKCS_OAEP`[4](#mech4)
+ `CKM_AES_GCM`[1](#mech1), [3](#mech3)
+ `CKM_CLOUDHSM_AES_GCM`[3](#mech3)
+ `CKM_RSA_AES_KEY_WRAP`
+ `CKM_CLOUDHSM_AES_KEY_WRAP_NO_PAD`[3](#mech3)
+ `CKM_CLOUDHSM_AES_KEY_WRAP_PKCS5_PAD`[3](#mech3)
+ `CKM_CLOUDHSM_AES_KEY_WRAP_ZERO_PAD`[3](#mech3)

## 每种机制的最大数据大小
<a name="pkcs11-mech-max"></a>

下表列出了每个机制的最大数据大小设置：


**最大数据集大小**  
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/pkcs11-mechanisms.html)

## 机制注释
<a name="pkcs11-mech-annotations"></a>
+ [1] 在执行 AES-GCM 加密时，HSM 不会接受应用程序中的初始化向量 (IV) 数据。您必须使用其生成的 IV。HSM 提供的 12 字节 IV 将写入您提供的 `CK_GCM_PARAMS` 参数结构的 pIV 元素所指向的内存参考。为了防止用户混淆，版本 1.1.1 及更高版本中的 PKCS \#11 开发工具包将在初始化 AES-GCM 加密时确保该 pIV 指向已清零的缓冲区。
+ [2] 使用以下任何机制对数据进行操作时，如果数据缓冲区超出最大数据大小，则操作会导致错误。对此机制，所有数据处理均应在 HSM 内发生。有关每种机制的最大数据大小集的信息，请参阅 [每种机制的最大数据大小](#pkcs11-mech-max)。
+ [3] 供应商定义的机制。为了使用 CloudHSM 供应商定义的机制，PKCS \#11 应用程序必须在编译过程中包含 `/opt/cloudhsm/include/pkcs11/pkcs11t.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`：带 PKCS \#5 填充的 AES 密钥包装。

  `CKM_CLOUDHSM_AES_KEY_WRAP_ZERO_PAD`：零填充的 AES 密钥包装。
+ [4] 以下 `CK_MECHANISM_TYPE` 和 `CK_RSA_PKCS_MGF_TYPE` 出于 `CKM_RSA_PKCS_OAEP` 作为 `CK_RSA_PKCS_OAEP_PARAMS` 受到支持：
  + 使用 `CKG_MGF1_SHA1` 的 `CKM_SHA_1`
  + 使用 `CKG_MGF1_SHA224` 的 `CKM_SHA224`
  + 使用 `CKG_MGF1_SHA256` 的 `CKM_SHA256`
  + 使用 `CKM_MGF1_SHA384` 的 `CKM_SHA384`
  + 使用 `CKM_MGF1_SHA512` 的 `CKM_SHA512`
+ [5] 根据 NIST 指导，2023 年以后处于 FIPS 模式的集群不允许这样做。对于处于非 FIPS 模式的集群，2023 年之后仍然允许。有关详细信息，请参阅 [FIPS 140 合规：2024 年机制弃用](compliance-dep-notif.md#compliance-dep-notif-1)。
+ [6] 供应商定义的类型。为了使用 CloudHSM 供应商定义的类型，PKCS \#11 应用程序必须在编译过程中包含 `cloudhsm_pkcs11_vendor_defs.h`。对于基于 Linux 的平台，可以在 `/opt/cloudhsm/include/pkcs11/cloudhsm_pkcs11_vendor_defs.h` 中找到，对于基于 Windows 的平台，可以在 `C:\Program Files\Amazon\CloudHSM\include\pkcs11\cloudhsm_pkcs11_vendor_defs.h` 中找到
+ [7] [NIST 特别出版物 800-56A 修订版 3 中规定了密钥派](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf)生函数 (KDFs)。