Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Thales nShield HSM的PKCS11interop c#包装器库导出/导入RSA密钥对?_C#_Cryptography_Pkcs#11_Hsm_Pkcs11interop - Fatal编程技术网

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

使用Thales nShield HSM的PKCS11interop c#包装器库导出/导入RSA密钥对?,c#,cryptography,pkcs#11,hsm,pkcs11interop,C#,Cryptography,Pkcs#11,Hsm,Pkcs11interop,我已经使用PKCS11Interop生成密钥API在HSM中生成了RSA公钥-私钥对。 我想导出密钥对。我使用Findobject API来获取键,API返回一个ObjectHandle,当使用GetAttributeValue API读取属性时,我无法读取键的值。 当我将密钥的属性设置为CKA_EXTRACTABLE为true时,我无法完全生成密钥 此外,我需要在HSM中导入外部提供的密钥对 非常感谢您提供的任何帮助。在HSM世界中,您试图做的事情被认为是不安全的。它违背了拥有HSM的目的 但

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

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


非常感谢您提供的任何帮助。

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

但是,这能做到吗?对前提是HSM供应商应予以支持

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

在您的案例中,提取和导入操作都会发生这种情况。您尝试在其上执行这些操作的HSM可能不支持它。因此,您需要与HSM供应商核实如何在其产品上执行这些操作

注意:泰雷兹nShield应该/可能有一个配置文件,您可以通过该文件在不安全模式下运行HSM


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

我认为您使用的是Safenet HSM,因为泰雷兹HSM没有GetAttributeValue、ObjectHandle等功能

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

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


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

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


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

创建密钥对时,您是否指定私钥应为“可导出”的?另外,您使用了什么CSP以及它存储在哪里。在某些情况下,您可能无法导出缺少伏都教魔法(如Mimikatz)的钥匙。我们正在尝试导出/导入钥匙,以便在HSM停机时对钥匙进行备份。Thales(KeySafe)提供了一个实用程序,我们可以通过该软件导出/导入密钥,因此有可能这样做。您能建议一种通过pkcs11Interop编程的方法吗?@SGhosh您将实用程序提供的导出和导入密钥视为备份机制,这是错误的。备份机制是一个庞大的概念,它涉及到使用主密钥加密HSM上的数据,然后将主密钥拆分为多个部分。当从备份副本恢复数据时,您将再次需要主密钥。我鼓励您向泰雷兹咨询如何对其特定产品执行备份。他们应该支持它。如果我没记错的话,这是FIPS合规性的标准之一。不要将其拿回到手中并破坏安全性。它是Thales HSM,PKCS11 api提供了GetAttributeValue、ObjectHandle等功能。当你说“提取一个密钥只能在另一个密钥下进行”时,你的意思是包装密钥吗?是的。我强烈建议您使用Thales提供的功能进行RSA操作。RSA密码系统命令:EK、EO、EQ等@AhmetArslan我相信您混淆了泰利斯payShield 9000 HSM和泰利斯nShield HSM。问题是关于nShield的。@AhmetArslan(尽管与问题无关…)请注意,可以使用
CT\u setprivileglevel()
在SafeNet FM内读取键值。。。