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

问题描述 投票:4回答:3

我使用PKCS11Interop生成密钥API在HSM中生成了RSA公私密钥对。我想导出密钥对。我使用Findobject API获取密钥,API重新启动ObjectHandle,使用GetAttributeValue API读取属性时,我无法读取密钥的值。当我将键的属性设置为CKA_EXTRACTABLE为true时,我无法完全生成密钥。

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

任何帮助都非常感谢。

c# cryptography pkcs#11 hsm pkcs11interop
3个回答
2
投票

你想要做的是在HSM世界中被认为是insecure。它违背了拥有HSM的目的。

但是,它可以做到吗?是。如果HSM供应商应该支持它。

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

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

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

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


0
投票

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

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


0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.