令人惊讶的是,网络上关于使用 Bouncy CaSTLe 的轻量级 API 的信息非常少。环顾了一会后,我能够整理出一个基本示例:
RSAKeyPairGenerator generator = new RSAKeyPairGenerator();
generator.init(new RSAKeyGenerationParameters
(
new BigInteger("10001", 16),//publicExponent
SecureRandom.getInstance("SHA1PRNG"),//prng
1024,//strength
80//certainty
));
AsymmetricCipherKeyPair keyPair = generator.generateKeyPair();
我对 RSA 和幕后发生的数学有基本的了解,所以我了解 publicExponent
和 strength
是什么。我认为 publicExponent
是指 phi(pq)
的互质数,据我所知,只要使用适当的填充,它可以很小(如 3)。但是,我不知道 certainty
指的是什么(有些地方提到它可能指的是百分比,但我想确定一下)。 SecureRandom
的使用是不言自明的。 documentation of RSAKeyGenerationParameters完全没有值(value)(这并不奇怪)。我唯一的猜测是它与生成的 key 的准确性有关,但我想再次确定。所以我的问题是 certainty
和 publicExponent
的合适值是多少?
附: 请不要回答“这取决于上下文 - 您希望信息有多安全”。除非另有说明,否则假设最高级别的安全性(即 4096 位 RSA key 或更高)是非常安全的......我也很感谢提供使用 Bouncy CaSTLe 轻量级 API 的良好示例的资源链接(我不在所有人都对 JCA 实现或与之相关的任何示例感兴趣)。
最佳答案
您对两者都使用了正确的值。
publicExponent 应该是 Fermat Number . 0x10001 (F4) 是当前推荐值。 3 (F1) 也被认为是安全的。
RSA key 生成需要素数。但是,不可能生成绝对质数。像任何其他加密库一样,BC 使用可能的素数。确定性表明您希望该数字为质数的确定程度。任何高于 80 的值都会大大减慢 key 生成速度。
请注意,在素数不是真正素数的不太可能的情况下,RSA 算法仍然有效,因为 BC 会检查相对素数。
关于java - 使用轻量级 API 生成 Bouncy CaSTLe RSA key 对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3087049/