ECDsaCng密钥生成的时间比预期的长32个字节

时间:2019-09-08 10:46:03

标签: c# ecdsa

我正在玩ECDsaCng,但我意识到密钥大小似乎不正确。例如,在下面的代码中,privateKey变量是一个104个长字节的数组,而我没想到它会大于32。

我在做什么错了?

        ECDsaCng dsa = new ECDsaCng(256);
        dsa.HashAlgorithm = CngAlgorithm.Sha256;
        dsa.GenerateKey(ECCurve.NamedCurves.nistP256);
        var privateKey = dsa.Key.Export(CngKeyBlobFormat.EccPrivateBlob);
        var publicKey = dsa.Key.Export(CngKeyBlobFormat.EccPublicBlob);

谢谢。

1 个答案:

答案 0 :(得分:2)

私钥d[1, n - 1]中的随机整数,其中n是基点G的顺序。公钥是曲线点(x, y) = d * Ghere。对于NIST P-256secp256r1dxy被编码为32个字节(值不能更大)。

MS以here描述的特定格式存储两个密钥。公钥的格式具有8个字节的标头,后跟32个字节的x值和32个字节的y值,因此总长度为72个字节。私钥的格式具有(不同的)8字节报头,后跟32字节x值,32字节y值和32字节d-值,以使总长度为104字节(根据找到的值)。标题的详细说明可以在here中找到。

相关问题