java - 使用轻量级 API 生成 Bouncy CaSTLe RSA key 对

标签 java security encryption rsa bouncycastle

令人惊讶的是,网络上关于使用 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 和幕后发生的数学有基本的了解,所以我了解 publicExponentstrength 是什么。我认为 publicExponent 是指 phi(pq) 的互质数,据我所知,只要使用适当的填充,它可以很小(如 3)。但是,我不知道 certainty 指的是什么(有些地方提到它可能指的是百分比,但我想确定一下)。 SecureRandom 的使用是不言自明的。 documentation of RSAKeyGenerationParameters完全没有值(value)(这并不奇怪)。我唯一的猜测是它与生成的 key 的准确性有关,但我想再次确定。所以我的问题是 certaintypublicExponent 的合适值是多少?

附: 请不要回答“这取决于上下文 - 您希望信息有多安全”。除非另有说明,否则假设最高级别的安全性(即 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/

相关文章:

java - MySQL 字符串未在 Java 中执行

sql - SQL 查询参数化如何工作?

java - 如何在 Java(Android) 中生成与 .Net 中相同的 AES key ?

javascript - 加密的 JavaScript

Java堆内存流程

java - 一页一行 : Boxable

java - 禁用布局内的所有 subview

asp.net - IIS Express - 暂时模拟经过身份验证的用户

security - 没有 JWT secret 的第 3 方 JWT 验证验证

java - JAVA上使用RSA加密解密的问题