使用 Thales nShield HSM 的 PKCS11interop c# 包装器库导出/导入 RSA 密钥对?



我使用 PKCS11Interop 生成密钥 API 在 HSM 中生成了一个 RSA 公钥-私钥对。 我想导出密钥对。我使用 Findobject API 来获取键,API 会还原一个 ObjectHandle,同时使用 GetAttributeValue API 读取属性,我无法读取键的值。 当我将键的属性设置为 CKA_EXTRACTABLE true 时,我无法完全生成键。

我还需要在 HSM 中导入外部提供的密钥对。

任何帮助都非常感谢。

您正在尝试执行的操作在 HSM 世界中被认为是insecure。它违背了拥有 HSM 的目的。

但是,能做到吗?是的。前提是 HSM 供应商应支持它。

HSM 供应商决定是否可以提取 HSM 上生成的密钥,或者是否可以将任何软件(HSM 外部)生成的任何密钥导入到硬件中。PKCS#11 只是一个与 HSM 交互的接口。如果 HSM 不支持操作,则会引发最终由 PKCS11 API 引发的异常。

这就是提取和导入操作的情况。您尝试在其上执行这些操作的 HSM 可能不支持它。因此,您需要与 HSM 供应商联系,了解如何对其产品执行这些操作。

PS:Thales nShield应该/可能有一个配置文件,您可以通过该文件在不安全模式下运行HSM。

注意:提取在 HSM 上生成的Key/Key Pair(或)导入在 HSM 外部生成的任何密钥/密钥对在现实世界中不被视为不安全的操作。

RSA 私钥可以使用正确的属性设置导出(当然,HSM 供应商提供的非托管 PKCS#11 库必须支持此方案),但您需要读取多个属性(请参阅 PKCS#11 v2.20 规范的第 12.1.3 章)以提取其部分,然后自行创建密钥的 ASN.1 结构。

您需要的特定类型的 ASN.1 结构取决于您使用的密钥类型(在您的情况下是 RSA)以及将使用这些密钥的目标系统的功能,即加密应用程序通常使用与电子邮件代理不同的格式等。我相信您可以从 PKCS#1 中定义的RSAPrivateKey结构开始。

我认为您正在使用Safenet HSM,因为Thales HSM没有GetAttributeValue,ObjectHandle等功能。

CKA_EXTRACTABLE意味着您可以在另一个密钥下提取密钥,这并不意味着您可以读取密钥数据。如果仅使用密钥句柄即可获取密钥数据,则应该是完全不安全的。

使用ObjectHandle读取关键数据即使在功能模块(FM)中也是不可能的。FM是仅在Safenet HSM本身中运行的专有软件,它是运行HSM硬件的嵌入式软件。您可以使用 ObjectHandle 调用特定的 HSM 函数,例如在 FM 中加密、解密。 只能在另一个密钥下提取密钥。

您可以使用安全网 HSM 函数调用导入密钥。

最新更新