令人惊讶的是,网络上关于使用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是不言自明的。RSAKeyGenerationParameters的文档完全毫无价值(毫无疑问)。我唯一的猜测是,它与生成的键的准确性有关,但是我还是想确定一下。所以我的问题是certainty和的适当值是publicExponent多少?
publicExponent
strength
phi(pq)
certainty
SecureRandom
PS:请不要回答“这取决于上下文- 您希望信息的安全性”。除非另有说明,否则假定最高的安全级别(即4096位RSA密钥或更高)是非常安全的…我也希望获得链接的链接,这些链接提供了使用Bouncy Castle的轻量级API的很好的示例(我不喜欢所有对JCA实施或与此有关的示例感兴趣的人。
您正在为两个使用正确的值。
publicExponent应该是Fermat编号。0x10001(F4)是当前推荐值。3(F1)也被认为是安全的。
RSA密钥生成需要素数。但是,不可能生成绝对质数。像任何其他加密库一样,BC使用可能的质数。确定性表示您希望数字是质数的确定性。任何高于80的值都会大大减慢密钥生成的速度。
请注意,在素数不是真素数的情况下,由于BC检查相对素数,因此RSA算法仍然可以使用。