【问题标题】:DSAParameters byte[] J - What is it?DSAParameters byte[] J - 它是什么?
【发布时间】:2020-01-04 10:33:16
【问题描述】:

我正在尝试重新创建 DSA 公钥/私钥以匹配现有密钥集。现有的公钥是用字节数组 P、Q、G、J、Y、Seed、Counter 创建的。 byte[] J 的长度为112。

当使用..创建公钥/私钥对时

var dsa = new DSACryptoServiceProvider();
var privateKey = dsa.ExportParameters(true);
var publicKey = dsa.ExportParameters(false);

.. byte[] J 对于公钥和私钥都是空的。

有谁知道 J 是什么以及如何填充这个数组?我的最终目标是创建一个相同大小的公钥,包括 byte[] J。

谢谢。

【问题讨论】:

    标签: c# .net encryption dsa


    【解决方案1】:

    J 似乎是出于效率原因引入的 可选 参数。可以由PQ确定,根据RFC 3275, section 4.4.2.1指定XML数字签名处理规则和语法定义为J = (P - 1) / Q

    根据定义,P - 1Q (DSA, section Parameter generation) 的倍数。需要商 (P - 1) / Q,例如域参数的确定,尤其是生成器的生成,见FIPS PUB 186-4, section A.2

    我希望您的密钥的 J-参数与根据上述等式从您的密钥的 P- 和 Q-参数计算出的 J-参数相匹配。

    我无法解释为什么 DSACryptoServiceProvider-class 不计算 J-参数。我只能推测,由于可选性,某些实现会计算J-参数,而其他实现不会(或不再),并且无论是否设置了此参数,签名和验证都无关紧要。

    Brian LaMacchia 2001 年的邮件也提供了丰富的信息,当时他是 MS Windows 安全中的密码学架构师,他与 Donald Eastlake,here 讨论了J 参数的用途,here。在后者中附加了一个草案,后来在 RFC 3275 中使用。

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 1970-01-01
      • 2017-07-20
      • 2021-09-20
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多