BouncyCastle有SecureRandom服务吗?

Rub*_*max 5 java android bouncycastle

我正在尝试使用Java生成加密安全随机数,并使用以下代码部分创建SecureRandom对象以查看其提供者和算法:

Provider prov=new org.spongycastle.jce.provider.BouncyCastleProvider();
Security.insertProviderAt(prov, 1);

SecureRandom sr=new SecureRandom();
srProvider=sr.getProvider().toString();
srAlgorithm=sr.getAlgorithm();
Run Code Online (Sandbox Code Playgroud)

(海绵城堡是由罗伯托·泰莱制作的机器人的弹性城堡 - https://github.com/rtyley)

当我显示提供程序和算法时,它显示:加密版本1.0 SHA1PRNG

令我惊讶的是,即使将提供程序安装为代码中的第一个提供程序,提供程序也不是Spongycastle.我想问你a)在Spongy Castle(或Bouncy Castle)中没有实施SecureRandom.b)究竟什么是"加密版本1.0"(我的意思是它是Sun JCE提供商还是什么?)

谢谢...

鲁维

Maa*_*wes 8

Bouncy Castle确实提供了一组随机数生成器 (PRNG)。PRNG 有很多名称;NIST 将它们称为确定性随机位生成器 (DRBG)。然而,它们仅在 Bouncy Castle 的“轻量级”API 包中可用org.bouncycastle.crypto.prng

然而,Bouncy Castle 是加密算法的纯软件实现。这意味着它不包含的来源。熵不能仅由软件生成,因为软件算法本身是确定性的。因此,即使 Bouncy Castle 提供程序在其"BC"提供程序(或 Android 的 Spongy 提供程序)中注册一些生成器,它仍然必须依赖与平台SecureRandom实现相同的熵源。

由于熵源可能是大多数性能问题的罪魁祸首,因此您不应期望 Bouncy Castle 在随机数生成效率方面有奇迹。

目前(v1.54)Bouncy Castle 提供商SecureRandom根本没有注册任何实现,所以就是这样。

  • 看起来 Bouncy Castle 1.57 正在注册一个“SecureRandom”实现。 (2认同)

Nik*_*kov 6

假设您在 Android 上运行(您没有明确说明这一点)。Bouncy Castle 不提供SecureRandom实现。“Crypto”是 Apache Harmony(大多数 Android 核心 Java 代码都基于此)JCE 提供程序。Android 中没有 Sun JCE 代码。顺便说一句,“加密”提供商仅提供 SHA1PRNG (RNG)、SHA-1(哈希)和 SHA1withDSA(签名)实现。其他一切均由 Bouncy Castle 或基于 OpenSSL 的提供商提供。

问题:为什么您认为需要SecureRandomBouncy/Spongy Castle 的实现?