Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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
C# GetECDsaPrivateKey是否在TPM中将句柄返回到私钥?_C#_Security_Cryptography_Ecdsa - Fatal编程技术网

C# GetECDsaPrivateKey是否在TPM中将句柄返回到私钥?

C# GetECDsaPrivateKey是否在TPM中将句柄返回到私钥?,c#,security,cryptography,ecdsa,C#,Security,Cryptography,Ecdsa,我们正在生成应该在TPM上存储ECDSA密钥的证书。我的理解是GetECDsaPrivateKey扩展方法将为TPM中的私钥加载算法句柄。这是真的吗?我们正在测试的证书一直返回null,我需要知道它们是否只是创建错误,或者测试代码是否错误。在这种情况下,MSDN方法描述没有多大帮助。GetECDsaPrivateKey仅在密钥是证书的一部分时才获取密钥。要使用TPM中的密钥,您需要使用带有密钥名称和存储提供程序的CngKey.Open()方法。是,如果它被告知要查看 在Windows上,.NET

我们正在生成应该在TPM上存储ECDSA密钥的证书。我的理解是GetECDsaPrivateKey扩展方法将为TPM中的私钥加载算法句柄。这是真的吗?我们正在测试的证书一直返回null,我需要知道它们是否只是创建错误,或者测试代码是否错误。在这种情况下,MSDN方法描述没有多大帮助。

GetECDsaPrivateKey仅在密钥是证书的一部分时才获取密钥。要使用TPM中的密钥,您需要使用带有密钥名称和存储提供程序的CngKey.Open()方法。

是,如果它被告知要查看

在Windows上,.NET的X509Certificate2由Windows证书API支持。Windows证书具有属性(除了它们的in-certificate属性之外),其中一个属性标识私钥所在的位置(实际上是
CngKey.Open
的参数)——如果缺少属性(并且“我已经打开私钥[此处]”属性也缺少),则证书“没有私钥”(cert.HasPrivateKey==false)

如果您的证书是Windows证书存储的一部分,并且通过MMC查看该存储时会显示私钥图标,则
GetECDsaPrivateKey()
可以打开它(假设该密钥在事件发生后未被删除,并且是支持ECDsa的密钥)


如果您从
.cer
文件或其他方式加载证书,则证书不知道有可用的私钥,并且它从不搜索私钥。如果您知道如何查找私钥并将其打开到ECDsa对象(例如ECDsaCng),则可以(在内存中)通过
X509Certificate2 certWithKey=cert.CopyWithPrivateKey(key);
将它们关联起来。此时,在被告知私钥所在的位置后,新对象的
GetECDsaPrivateKey()
工作正常。

Ahhh…谢谢。我必须尝试一下。我很懒,只是将证书从crt文件加载到X509Certificate2对象中。我将从证书存储中打开它,看看该方法是否适合我。