本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
PKCS#11 库的已知问题
主题
- 问题:PKCS #11 库 3.0.0 版中的 AES 密钥包装无法在使用前验证 IV
- 问题:PKCS #11 SDK 2.0.4 以及更早版本始终使用 0xA6A6A6A6A6A6A6A6 的默认 IV 来执行 AES 密钥包装和解包
- 问题:不支持且不处理 CKA_DERIVE 属性
- 问题:不支持且不处理 CKA_SENSITIVE 属性
- 问题:不支持多部分哈希和签名
- 问题:C_GenerateKeyPair 不以符合标准的方式处理私有模板中的 CKA_MODULUS_BITS 或 CKA_PUBLIC_EXPONENT
- 问题:在使用 CKM_AES_GCM 机制时,用于执行 C_Encrypt 和 C_Decrypt API 操作的缓冲区不能超过 16 KB
- 问题:在 HSM 内部分执行椭圆曲线迪菲-赫尔曼 (ECDH, Elliptic-curve Diffie-Hellman) 密钥派生
- 问题:在 Centos6 和 RHEL 6 等 EL6 平台上验证 secp256k1 签名失败
- 问题:错误的函数调用时序会给出未定义的结果而不是导致失败
- 问题:SDK 5 不支持只读会话
- 问题:cryptoki.h 标头文件仅适用于 Windows
问题:PKCS #11 库 3.0.0 版中的 AES 密钥包装无法在使用前验证 IV
如果您指定长度小于 8 字节的 IV,则在使用之前会填充不可预知的字节。
注意
这只会对使用 CKM_AES_KEY_WRAP
的 C_WrapKey
机制产生影响。
影响:如果您在 PKCS #11 库 3.0.0 版本中提供的 IV 小于 8 字节,则可能无法对密钥进行解包。
解决方法:
我们强烈建议您升级到 PKCS #11 库 3.0.1 版或更高版本,以便在 AES 密钥包装期间正确地强制执行 IV 长度。修改包装代码以便传递 NULL IV,或者指定默认 IV
0xA6A6A6A6A6A6A6A6
。有关更多信息,请参阅长度不符合 AES 密钥包装的自定义 IV。如果您使用短于 8 字节的 IV,通过 PKCS #11 库 3.0.0 版来包装任何密钥,请联系我们以获取支持
。
解决状态:此问题已在 PKCS #11 库 3.0.1 版中解决。要使用 AES 密钥包装来包装密钥,请指定 NULL 或长度为 8 字节的 IV。
问题:PKCS #11 SDK 2.0.4 以及更早版本始终使用 0xA6A6A6A6A6A6A6A6
的默认 IV 来执行 AES 密钥包装和解包
用户提供的 IV 被静默地忽略。
注意
这只会对使用 CKM_AES_KEY_WRAP
的 C_WrapKey
机制产生影响。
影响:
如果您使用 PKCS #11 开发工具包 2.0.4 或早期版本以及用户提供的 IV,则您的密钥将使用默认 IV
0xA6A6A6A6A6A6A6A6
进行包装。如果您使用 PKCS #11 开发工具包 3.0.0 或更高版本以及用户提供的 IV,则您的密钥将使用用户提供的 IV 进行包装。
解决方法:
要解包使用 PKCS #11 开发工具包 2.0.4 或更早版本包装的密钥,请使用默认 IV
0xA6A6A6A6A6A6A6A6
。要解包使用 PKCS #11 开发工具包 3.0.0 或更高版本包装的密钥,请使用用户提供的 IV。
解决状态:我们强烈建议您修改包装和解包代码,以便传递 NULL IV,或者指定默认 IV
0xA6A6A6A6A6A6A6A6
。
问题:不支持且不处理 CKA_DERIVE
属性
-
解决状态:我们已经实施修复,以便接受
CKA_DERIVE
(如果它设置为FALSE
)。在我们开始为 AWS CloudHSM增加密钥派生函数支持之前,不支持将CKA_DERIVE
设置为TRUE
您必须将客户端和开发工具包更新至版本 1.1.1 或更高版本,才能从修复获益。
问题:不支持且不处理 CKA_SENSITIVE
属性
-
解决状态:我们已实施修改,以便接受并正确处理
CKA_SENSITIVE
属性。您必须将客户端和开发工具包更新至版本 1.1.1 或更高版本,才能从修复获益。
问题:不支持多部分哈希和签名
-
影响:
C_DigestUpdate
和C_DigestFinal
不会实施。C_SignFinal
也不会实施,并且对于非NULL
缓冲区将会失败并显示CKR_ARGUMENTS_BAD
。 -
解决方法:在应用程序中对数据进行哈希处理, AWS CloudHSM 仅用于对哈希进行签名。
-
解决状态:我们正在修复客户端和开发工具包,以正确实施多部分哈希。将在 AWS CloudHSM 论坛和版本历史记录页面中公布更新。
问题:C_GenerateKeyPair
不以符合标准的方式处理私有模板中的 CKA_MODULUS_BITS
或 CKA_PUBLIC_EXPONENT
-
影响:
C_GenerateKeyPair
应在私有模板包含CKA_MODULUS_BITS
或CKA_PUBLIC_EXPONENT
时返回CKA_TEMPLATE_INCONSISTENT
。相反,它生成了一个所有用法字段都设置为FALSE
的私有密钥。无法使用该密钥。 -
解决方法:建议您的应用程序检查用法字段值以及错误代码。
-
解析状态:我们正在实施修复,以在使用了不正确的私有密钥模板时返回正确的错误消息。将在版本历史记录页面中公布更新后的 PKCS#11 库。
问题:在使用 CKM_AES_GCM
机制时,用于执行 C_Encrypt
和 C_Decrypt
API 操作的缓冲区不能超过 16 KB
AWS CloudHSM 不支持多部分 AES-GCM 加密。
-
影响:您不能使用
CKM_AES_GCM
机制加密大于 16 KB 的数据。 -
变通办法:您可以使用一个替代机制 (如
CKM_AES_CBC
、CKM_AES_CBC_PAD
),也可以将数据拆分为多个部分并用AES_GCM
为各个部分分别加密。如果您正在使用AES_GCM
,则必须管理数据的划分和随后的加密。 AWS CloudHSM 不会为您执行多部分 AES-GCM 加密。请注意,FIPS 要求在 HSM 上生成AES-GCM
的初始化向量 (IV)。因此,您的 AES-GCM 加密数据的每个部分的 IV 将不同。 -
解决状态:我们正在修复开发工具包,以在数据缓冲区过大时显式失败。我们将为
C_EncryptUpdate
和C_DecryptUpdate
API 操作返回CKR_MECHANISM_INVALID
。我们正在评估替代方法来支持较大的缓冲区,而不依靠多部分加密。更新将在 AWS CloudHSM 论坛和版本历史记录页面上公布。
问题:在 HSM 内部分执行椭圆曲线迪菲-赫尔曼 (ECDH, Elliptic-curve Diffie-Hellman) 密钥派生
您的 EC 私有密钥始终保留在 HSM 中,但密钥派生过程分多步执行。因此,客户端上可以提供每个步骤的中间结果。
-
影响:在 Client SDK 3 中,使用该
CKM_ECDH1_DERIVE
机制派生的密钥首先在客户端上可用,然后导入到 HSM 中。密钥句柄随后会返回到您的应用程序。 -
解决办法:如果要在 AWS CloudHSM中实施 SSL/TLS 分载,此限制可能不是问题。如果您的应用程序需要将您的密钥始终保持在 FIPS 边界内,请考虑使用不依赖 ECDH 密钥派生的替代协议。
-
解决状态:我们正在开发完全在 HSM 内部执行 ECDH 密钥派生的选项。更新的实施将在版本历史记录页面中公布。
问题:在 Centos6 和 RHEL 6 等 EL6 平台上验证 secp256k1 签名失败
这是因为 CloudHSM PKCS#11 库通过使用 OpenSSL 来验证 EC 曲线数据,在初始化验证操作的过程中避免网络调用。由于在 EL6 平台上默认的 OpenSSL 包不支持 Secp256k1,因此初始化失败。
-
影响:Secp256k1 签名验证将会在 EL6 平台上失败。验证调用失败,并显示
CKR_HOST_MEMORY
错误。 -
解决方法:如果您的 PKCS#11 应用需要验证 secp256k1 签名,我们建议您使用 Amazon Linux 1 或任何 EL7 平台。或者,升级到支持 secp256k1 曲线的 OpenSSL 软件包版本。
-
解决状态:我们正在实施修复,如果本地曲线验证不可用,则回退到 HSM。将在版本历史记录页面中公布更新后的 PKCS#11 库。
问题:错误的函数调用时序会给出未定义的结果而不是导致失败
-
影响:如果您函数调用的顺序不正确,即使单个函数调用返回成功,最终结果也是不正确的。例如,解密后的数据可能与原始明文不匹配,或者签名可能无法验证。此问题会影响单部件和多部分操作。
不正确的函数顺序示例:
C_EncryptInit
/C_EncryptUpdate
之后是C_Encrypt
C_DecryptInit
/C_DecryptUpdate
之后是C_Decrypt
C_SignInit
/C_SignUpdate
之后是C_Sign
C_VerifyInit
/C_VerifyUpdate
之后是C_Verify
C_FindObjectsInit
之后是C_FindObjectsInit
变通办法:您的应用程序应按照 PKCS #11 规范,对单部分和多部分操作使用正确的函数调用顺序。在这种情况下,您的应用程序不应依赖 CloudHSM PKCS #11 库返回错误。
问题:SDK 5 不支持只读会话
-
问题:SDK 5 不支持使用
C_OpenSession
打开只读会话。 -
影响:如果您在未提供
CKF_RW_SESSION
的情况下尝试调用C_OpenSession
,则调用将失败并显示错误CKR_FUNCTION_FAILED
。 -
解决办法:打开会话时,必须将
CKF_SERIAL_SESSION | CKF_RW_SESSION
标记传递给C_OpenSession
函数调用。
问题:cryptoki.h
标头文件仅适用于 Windows
-
问题:在 Linux 上的 AWS CloudHSM Client SDK 5 版本 5.0.0 到 5.4.0 中,头文件
/opt/cloudhsm/include/pkcs11/cryptoki.h
仅与 Windows 操作系统兼容。 -
影响:当您在基于 Linux 的操作系统的应用程序中尝试包含此标头文件时,您可能会遇到问题。
-
解析状态:升级到 AWS CloudHSM Client SDK 5 版本 5.4.1 或更高版本,其中包括此头文件的 Linux 兼容版本。