使用BigInteger.isProbablePrime()生成加密安全素数

Puz*_*141 1 java primes cryptography biginteger public-key-encryption

您可以使用BigInteger.isProbablePrime()生成加密安全素数吗?他们"安全"需要什么确定性?

ζ--*_*ζ-- 5

我没有加密学位,所以拿一粒盐.

您有两个主要关注领域:

  1. 你的素数需要无法预测随机.这意味着您需要使用诸如SecureRandom生成素数之类的源.无论您的素数多么确定,如果它们是可预测的,整个密码系统都无法实现其目标.如果您正在使用BigInteger(int bitLength, int certainty, Random rnd)构造函数,则可以传入您的SecureRandom子类Random.

  2. 你的潜在素数需要合理地确定为素数(我假设你使用的算法依赖于因子分解的硬度).如果你得到一个可能的素数,但是攻击者可以很好地在5分钟内将因子考虑在内,因为它有一个从未被你运行的素数测试注意到的因素,你对算法有点不合时宜.通常使用Rabin-Miller,这个答案表明15的确定性足以支持32位整数.建议值高达40 ,除此之外的任何事情都是毫无意义的.