簡體   English   中英

BouncyCastle是否有SecureRandom服務?

[英]Does BouncyCastle have a SecureRandom service?

我正在嘗試使用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();

(海綿城堡相當於羅伯托·泰利(Roberto Tyley)制造的Android的充氣城堡-https: //github.com/rtyley

當我顯示提供程序和算法時,它顯示:加密版本1.0 SHA1PRNG

令我感到驚訝的是,即使將提供程序安裝為代碼中的第一個提供程序,該提供程序也不是Spongycastle。 我想問你:a)Spongy Castle(或Bouncy Castle)中沒有實施SecureRandom嗎? b)確切地說,什么是“ Crypto版本1.0”(我是說它是Sun JCE提供者還是什么?)

謝謝...

魯比

假設您正在Android上運行(未明確說明)。 有彈性的城堡不提供SecureRandom實現。 “加密”是Apache Harmony(大多數Android核心Java代碼均基於此)JCE提供程序。 Android中沒有Sun JCE代碼。 順便說一句,“加密”提供程序僅提供SHA1PRNG(RNG),SHA-1(哈希)和SHA1withDSA(簽名)實現。 其他所有內容均由Bouncy Castle或基於OpenSSL的提供程序提供。

問題:為什么您認為需要Bouncy / Spongy Castle提供的SecureRandom實現?

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實現,因此就可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM