【发布时间】:2017-11-18 06:42:09
【问题描述】:
假设 ECDiffieHellman 实例也可用于签名。
如果我有有效的 ECDiffieHellman (ECDH) 实例,如何在 .net 框架中使用 ECDH 实例使用 ECDSA 创建签名?
我想我可以通过以下方式验证签名:
ECDiffieHellman ecdh; //Already have this instance
var verifyKey = CngKey.Import(ecdh.PublicKey.ToByteArray(), CngKeyBlobFormat.EccPublicBlob);
var ecDsa = new ECDsaCng(verifyKey);
var dataBytes = ASCIIEncoding.ASCII.GetBytes("Hello!");
var verifyResult = ecDsa.VerifyData(dataBytes, signatureBytesToCheck, HashAlgorithmName.SHA256);
我尝试为私钥(用于签名)遵循 CngKey 的类似模型。我无法使用私钥字节创建 CngKey。
ECDiffieHellman ecdh; //Already have this instance
var ecdhParams = ecdhCasd.ExportParameters(true);
var ecdhPrivateKeyBytes = ecdhParams.D;
var signingKey = CngKey.Import(ecdhPrivateKeyBytes, CngKeyBlobFormat.EccPrivateBlob);
我尝试使用 GenericPrivateBlob、EccFullPrivateBlob 作为格式。仍然没有任何效果。
我在正确的道路上吗?如果是这样,我做错了什么?
【问题讨论】:
-
查看tools.ietf.org/html/rfc5915后,我也尝试了以下操作:a) [私钥版本:0x01 0x00 0x00 0x00][私钥:32 字节][曲线名称 P-256:字节为“ 1.2.840.10045.3.1.7"] 然后 b) [私钥版本:0x01 0x00 0x00 0x00][私钥:32 字节][曲线名称 P-256:“1.2.840.10045.3.1.7”的字节][公钥 X 32 字节][公钥 Y 32 字节]。都没有用。
标签: c# .net cryptography signature elliptic-curve