Java DSA实现

时间:2017-01-14 14:00:00

标签: java implementation dsa

这是来自NIST.FIPS.186-4和NIST.FIPS.186-3的DSA参数长度:

L = 1024, N = 160
L = 2048, N = 224
L = 2048, N = 256
L = 3072, N = 256

对于OpenJDK

的参数初始化,这是code
protected void engineInit(int strength, SecureRandom random) {
    if ((strength >= 512) && (strength <= 1024) && (strength % 64 == 0)) {
        this.valueN = 160;
    } else if (strength == 2048) {
        this.valueN = 224;
//  } else if (strength == 3072) {
//      this.valueN = 256;
    } else {
        throw new InvalidParameterException
            ("Prime size should be 512 - 1024, or 2048");
    }
    this.valueL = strength;
    this.seedLen = valueN;
    this.random = random;
}

我的问题:

  1. DSA的AFAIK强度等于使用的散列函数的长度,散列函数长度为N.也许这个初始化函数应该采用强度参数,如160,225和256,而不是512-1024,2048?

  2. 我是否正确地说,在DSA的实施中,L = 2048, N = 256的情况完全被忽略了?

  3. 修改

    好吧,看起来OpenJDK的代码使用旧DSA标准FIPS.186-2的参数。但DSA.java的javadoc明确表示此实现使用FIPS.186-3作为标准源。是否有可能开发人员忘记在升级java DSA实现时更新这部分代码或类似的东西?这可能是一个安全漏洞吗?

0 个答案:

没有答案