

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

# AWS CloudHSM 客户端 SDK 3 支持的机制
<a name="pkcs11-v3-mechanisms"></a>

PKCS \$111 库支持 AWS CloudHSM 客户端 SDK 3 的以下算法：
+ **加密和解密** — 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 密钥包装、[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 库符合 2.40 版 PKCS \$111 规格。要使用 PKCS＃11 调用加密功能，请使用给定机制调用函数。下表汇总了 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_cn/cloudhsm/latest/userguide/pkcs11-v3-mechanisms.html)

**机制注释**
+ [1] 仅限单部分操作。
+ [2] 机制的功能与 `p` 机制相同，但为生成 `CKM_RSA_PKCS_KEY_PAIR_GEN` 和 `q` 提供了更强有力的保证。
+ [3.1] 根据客户端 SDK，哈希 AWS CloudHSM 处理方法有所不同。对于客户端软件开发工具包 3，我们的哈希处理时机取决于数据大小以及您所用的是单个还是多个操作。

  **客户端软件开发工具包 3 中的单部分操作**

  表 3.1 列出了客户端软件开发工具包 3 的每种机制的最大数据集大小。整个哈希值均在 HSM 内部计算。不支持 16KB 以上的数据。  
**表 3.1：单部分操作的最大数据集大小**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/pkcs11-v3-mechanisms.html)

  **多部分操作客户端软件开发工具包 3**

  支持 16KB 以上的数据，但是数据大小决定了哈希发生的位置。小于 16KB 的数据缓冲区在 HSM 内部进行哈希处理。对于系统中的 16KB 和最大数据大小之间的缓冲区，在软件中进行本地哈希处理。*请切记*：哈希函数不需要加密，因此您可以在 HSM 之外安全计算。
+ [3.2] 基于客户端 SDK 的哈希 AWS CloudHSM 方法有所不同。对于客户端软件开发工具包 3，我们的哈希处理时机取决于数据大小以及您所用的是单个还是多个操作。

  **单部分操作客户端软件开发工具包 3**

  表 3.2 列出了客户端软件开发工具包 3 的每种机制的最大数据集大小。不支持 16KB 以上的数据。  
**表 3.2：单部分操作的最大数据集大小**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/pkcs11-v3-mechanisms.html)

  **多部分操作客户端软件开发工具包 3**

  支持 16KB 以上的数据，但是数据大小决定了哈希发生的位置。小于 16KB 的数据缓冲区在 HSM 内部进行哈希处理。对于系统中的 16KB 和最大数据大小之间的缓冲区，在软件中进行本地哈希处理。*请切记*：哈希函数不需要加密，因此您可以在 HSM 之外安全计算。
+ [3.3] 使用以下任何机制对数据进行操作时，如果数据缓冲区超出最大数据大小，则操作会导致错误。对此机制，所有数据处理均应在 HSM 内发生。下表列出了为每个机制设置的最大数据大小：  
**表 3.3：最大数据集大小**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/pkcs11-v3-mechanisms.html)
+ [4] 在执行 AES-GCM 加密时，HSM 不会接受应用程序中的初始化向量 (IV) 数据。您必须使用其生成的 IV。HSM 提供的 12 字节 IV 将写入您提供的 `CK_GCM_PARAMS` 参数结构的 pIV 元素所指向的内存参考。为了防止用户混淆，版本 1.1.1 及更高版本中的 PKCS \$111 开发工具包将在初始化 AES-GCM 加密时确保该 pIV 指向已清零的缓冲区。
+ [5] **仅客户端软件开发工具包 3**。机制的实施旨在支持 SSL/TLS 卸载案例，只能在 HSM 内部分执行。使用此机制之前，请参阅 [PKCS \$111 库的已知问题 AWS CloudHSMPKCS\$111 库的已知问题](ki-pkcs11-sdk.md) 中的“问题：ECDH 密钥派生只能在 HSM 内部分执行”。`CKM_ECDH1_DERIVE` 不支持 secp521r1 (P-521) 曲线。
+ [6] 以下 `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`
+ [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`：带 PKCS \$15 填充的 AES 密钥包装

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