AES 密钥包装长度不合规的自定义 IV - AWS CloudHSM

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

AES 密钥包装长度不合规的自定义 IV

本故障排除主题可帮助您确定应用程序是否会生成无法恢复的包装好的密钥。如果您受到此问题的影响,请使用此主题来解决该问题。

确定您的代码是否生成无法恢复的包装好的密钥

仅当您满足以下所有条件时,您才会受到影响:

状况 我怎样才能知道?

您的应用程序使用 PKCS #11 库

PKCS #11 库作为 libpkcs11.so 文件安装在您的 /opt/cloudhsm/lib 文件夹中。用 C 语言编写的应用程序通常直接使用 PKCS #11 库,而用 Java 编写的应用程序可能通过 Java 抽象层间接使用该库。如果您使用的是 Windows,则不会受到影响,因为 PKCS #11 库目前不适用于 Windows。

您的应用程序专门使用 PKCS #11 库的 3.0.0 版

如果你收到了 AWS CloudHSM 团队的电子邮件,那么你可能使用的是 PKCS #11 库的 3.0.0 版。

要检查应用程序实例上的软件版本,请使用以下命令:

rpm -qa | grep ^cloudhsm

您可以使用 AES 密钥包装来包装密钥

AES 密钥包装是指使用 AES 密钥包装其他密钥。相应的机制名称是 CKM_AES_KEY_WRAP。它与函数 C_WrapKey 一起使用。其他使用初始化向量 (IV, initialization vector) 的基于 AES 的包装机制,例如 CKM_AES_GCM CKM_CLOUDHSM_AES_GCM,不受此问题的影响。了解有关函数和机制的更多信息

您在调用 AES 密钥包装时指定自定义 IV,并且此 IV 的长度小于 8

AES 密钥包装通常使用如下 CK_MECHANISM 结构进行初始化:

CK_MECHANISM mech = {CKM_AES_KEY_WRAP, IV_POINTER, IV_LENGTH};

只有在下列情况下,本问题才适用于您:

  • IV_POINTER 不为 NULL

  • IV_LENGTH 小于 8 字节

如果您不符合上述所有条件,则可立即停止阅读。您可以正确解开包装好的密钥,此问题不会影响您。否则,请参阅当您的代码生成了不可恢复的包装好的密钥时必须采取的操作

当您的代码生成了不可恢复的包装好的密钥时必须采取的操作

您应该采取以下三个步骤:

  1. 立即将您的 PKCS #11 库升级到更新的版本

  2. 更新您的软件以使用符合标准的 IV

    我们强烈建议您遵循我们的代码示例,只需指定 NULL IV 即可,这能使 HSM 使用符合标准的默认 IV。或者,您可以明确指定 IV 为 0xA6A6A6A6A6A6A6A6,相应的 IV 长度为 8。我们不建议使用任何其他 IV 进行 AES 密钥包装,并且将在未来版本的 PKCS #11 库中明确禁用 AES 密钥包装的自定义 IV。

    正确指定 IV 的示例代码显示在 aes_wrapp ing.c 中。 GitHub

  3. 标识并恢复现有的包装好的密钥

    您应标识出使用 PKCS #11 库的 3.0.0 版包装的所有密钥,然后联系客户服务寻求帮助 (https://aws.amazon.com/support),以恢复这些密钥。

重要

此问题仅影响使用 PKCS #11 库 3.0.0 版包装的密钥。您可以使用 PKCS #11 库的早期版本(2.0.4 及更低版本的软件包)或后续版本(3.0.1 及更高版本的软件包)来包装密钥。