生成的DH键太大了

时间:2017-07-25 21:33:56

标签: android bouncycastle dhcp

我试图生成DH密钥对,其中公钥长度为2048位,但每次都更大

我的代码是

private static BigInteger g = new BigInteger("1234567890");
private static BigInteger p = new BigInteger("2");
private int l = 2048

    Security.addProvider(new BouncyCastleProvider());

    DHParameterSpec dhParams = new DHParameterSpec(p, g, l);
    KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH", "BC");

    keyGen.initialize(dhParams);

似乎l param工作错误或我误解了它并且不知道如何解决它。 感谢您的建议

2 个答案:

答案 0 :(得分:1)

我认为你误解了'l'参数(也是'p'和'g')。首先,它是可选的,所以你可以使用新的DHParameterSpec(p,g)。其次,当使用它时,它通常比'p'的比特长度短得多(它应该是素数模数,而不是“2”),例如,在RFC 7919,附录A.1。指定2048位模数'p'和发生器'g'=“2”,建议的最小'l'值为225.这意味着仅选择秘密指数(私钥)被认为是安全的225位长,可显着加快密钥生成和DH操作。

我可能会建议您只使用RFC 7919中的参数集。

答案 1 :(得分:0)

你想要的是KeyPairGenerator :: initialize(int),其中int是要生成的键的大小。

https://docs.oracle.com/javase/7/docs/api/java/security/KeyPairGenerator.html#initialize(int)