提问者:小点点

导出/导入RSA密钥对使用PKCS11interop c#包装库从泰雷兹nShieldHSM?


我在HSM使用PKCS11Interop生成密钥API生成了一个RSA的公私密钥对。我想导出密钥对。我使用FindobjectAPI获取密钥,API返回一个ObjectHandle,当使用GetAtbanteValueAPI读取属性时,我无法读取密钥的值。当我将密钥的属性设置为CKA_EXTRACTABLE为true时,我无法完全生成密钥。

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

任何帮助都非常感谢。


共3个答案

匿名用户

你试图做的事情在HSM世界中被认为是不安全的。它违背了HSM的目的。

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

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

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

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

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

匿名用户

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

您需要的特定类型的ASN.1结构取决于您使用的密钥类型(在您的情况下是RSA)以及使用密钥的目标系统的功能,即加密应用程序通常使用不同于电子邮件代理等的格式。

匿名用户

我认为你正在使用SafenetHSM因为泰雷兹HSM没有像GetAt和ObjectHandle等功能。

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

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

您可以使用SafenetHSM函数调用导入密钥。