【问题标题】:ECDsaCng key generated longer than expected 32-bytes生成的 ECDsaCng 密钥长于预期的 32 字节
【发布时间】:2019-09-08 10:46:03
【问题描述】:

我在玩 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);

提前谢谢你。

【问题讨论】:

    标签: c# ecdsa


    【解决方案1】:

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

    MS 以here 描述的特定格式存储这两个密钥。公钥的格式有一个 8 字节的头部,后跟 32 字节的x-value 和 32 字节的y-value,因此总长度为 72 字节。私钥的格式有一个(不同的)8 字节头,后跟 32 字节 x-value、32 字节 y-value 和 32 字节 d-value,这样总长度为 104 字节,根据您找到的值。标题的详细描述可以找到here

    【讨论】:

      猜你喜欢
      • 2016-04-23
      • 2015-11-02
      • 2016-01-25
      • 1970-01-01
      • 2019-01-13
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      • 2021-01-27
      相关资源
      最近更新 更多