我已经使用PKCS11Interop generate key API在HSM中生成了一个RSA公私密钥对。我想导出密钥对。我使用Findobject API来获取密钥,GetAttributeValue接口返回一个ObjectHandle,当我使用Findobject API读取属性时,我无法读取密钥的值。当我将密钥的属性CKA_EXTRACTABLE设置为true时,我不能完全生成密钥。
另外,我需要在HSM中导入外部提供的密钥对。
任何帮助都是非常感谢的。
发布于 2017-02-28 03:58:32
您尝试做的事情在HSM世界中被认为是insecure。它违背了拥有HSM的目的。
但是,这是可以做到的吗?是。前提是HSM供应商应支持它。
HSM供应商决定是否可以提取在HSM上生成的密钥,或者是否可以将由任何软件(在HSM之外)生成的任何密钥导入到硬件中。PKCS#11只是一个接口,您可以通过它与HSM交互。如果HSM不支持某个操作,它会抛出一个异常,该异常最终会由PKCS11应用程序接口抛出。
这就是提取和导入操作在您的情况下发生的情况。您尝试在其上执行这些操作的HSM可能不支持它。因此,您需要与HSM供应商确认如何在其产品上执行这些操作。
附注:泰利斯nShield应该/可能有一个配置文件,您可以通过该文件在不安全模式下运行HSM。
注意:提取在HSM上生成的Key/Key Pair (或)导入在HSM之外生成的任何密钥/密钥对在现实世界中不被视为不安全的操作。
发布于 2017-02-28 07:08:52
我认为您正在使用Safenet HSM,因为Thales HSM没有像GetAttributeValue、ObjectHandle等这样的功能。
CKA_EXTRACTABLE意味着您可以在另一个密钥下提取您的密钥,这并不意味着您可以读取密钥数据。如果仅使用密钥句柄就可以获取密钥数据,这应该是完全不安全的。
即使在功能模块(FM)中,也无法使用ObjectHandle读取关键数据。FM是仅在Safenet HSM本身中运行的专有软件,它是运行HSM硬件的嵌入式软件。您可以使用ObjectHandle来调用特定的HSM函数,如在FM中加密、解密。只有在另一个密钥下才能提取密钥。
您可以使用Safenet HSM函数调用导入密钥。
发布于 2017-02-28 20:27:40
RSA私钥可以使用正确的属性设置导出(当然,这种情况必须得到HSM供应商提供的非托管PKCS#11库的支持),但是您需要读取多个属性(参见PKCS#11 v2.20 specification的第12.1.3章)来提取其部分,然后自己创建密钥的ASN.1结构。
你需要的特定类型的RSAPrivateKey结构取决于你正在使用的密钥类型(在你的例子中是RSA)和使用密钥的目标系统的能力,例如,加密应用程序通常使用不同于电子邮件代理等的格式。
https://stackoverflow.com/questions/42483447
复制相似问题