java 实现真正的随机数_关于java:SecureRandom的Android实现是否产生真正的随机数?...
我已經閱讀過,一般來說,SecureRandom的一些實現可能會產生真正的隨機數。
特別是,Android文檔說
instances of this class will generate an initial seed using an internal entropy source, such as /dev/urandom
號
但這是否意味著它將產生真正的隨機數(即,而不是偽隨機數)?
如果我用這種方式在Android中使用SecureRandom…
…當我調用sr.nextBoolean()時,會得到一個真正的隨機輸出嗎?
或者產出可能更多(或更少?)隨機,如果我每次都通過這樣做獲得輸出:江戶十一〔二〕號?
這不一定是真的,因為有些Android設備沒有硬件來生成真正的隨機數。至于具有該硬件的設備是否會使用它,我不這么認為,盡管Linux內核可能會加載一個模塊,從該硬件獲取真正的隨機數。
afaik所有實現都使用不同的形式或算法散列。雖然它們具有良好的數學性質,但并非真正的隨機性。
從Android開發人員的博客中,"我們已經確定,使用Java加密體系結構(JCA)來進行密鑰生成、簽名或隨機數生成的應用程序可能不會因為底層PRNG初始化不當而在Android設備上獲得密碼強大的值……"。之后,我相信AOSP會切換到OpenSSL的生成器。變化發生在果凍豆上。
@我有代碼可以使用JNI讀取Android的傳感器,然后輸入一個隨機數生成器(比如OpenSSL或Crypto++)。您可以使用它來做同樣的事情,或者使用它來生成Java HMAC/SHA-1生成器。"肉和土豆"源文件位于android/crypto++prng的Pastebin上,由傳感器自動播種(由jww提供)。我希望盡快將Eclipse項目上傳到Crypto++wiki(wiki目前因配置更改而出現問題)。
堅持。/dev/urandom僅用于生成初始種子。在那之后,一切都是算法。SecureRandom需要"提供加密強隨機數生成器(RNG)"。
"真"和"偽隨機"隨機數對不同的人來說意味著很多不同的事情。最好避免這些。
/dev/urandom的代表性很差,因為人們不理解它和/dev/random之間的區別(比你想象的要差很多,少得多)。
如果你問/dev/urandom的種子植入是否會損害SecureRandom用于加密目的的適合性,答案是響亮的"不"。
如果你有時間的話,你可能會想讀我關于整個問題的文章。
你好,托馬斯,我想你有一個打字錯誤-一個鈾之國的。(而且,不,這不是為了加密目的。)
根據Android開發者文檔:
(SecureRandom) complies with the statistical random number generator tests specified in FIPS 140-2, Security Requirements for Cryptographic Modules, section 4.9.1
號
然而,同樣的警告也適用于Android,就像Java一樣:
Many SecureRandom implementations are in the form of a pseudo-random number generator (PRNG), which means they use a deterministic algorithm to produce a pseudo-random sequence from a true random seed. Other implementations may produce true random numbers, and yet others may use a combination of both techniques.
號
因此,簡短的回答是:這取決于實現,但是如果您對FIPS 140-2滿意,那么SecureRandom就足以滿足您的目的了。
關鍵的答案是,由Linux內核定義的/dev/urandom保證不會阻塞。重點是在產生足夠的熵的同時不拖延用戶。如果Android文檔說他們正在使用/dev/urandom進行初始化,并且內核中沒有足夠的熵來提供隨機數,那么內核將返回到偽隨機算法。
根據內核文檔,除了"長壽命[加密]密鑰",/dev/urandom幾乎可以用于所有目的。考慮到您的預期用途,我懷疑Android SecureRandom將證明足夠隨機用于您的目的。
Android是一種獨特的野獸。它有/dev/urandom,但我不相信android的SecureRandom和SecureRandomSpi在使用它。相反,種子確實很弱——它本質上是系統屬性(比如序列號、基帶版本)、時間(毫秒和納秒)和字符串"你的隨機性都屬于我們"。查看entropyService.java。
總結
以上是生活随笔為你收集整理的java 实现真正的随机数_关于java:SecureRandom的Android实现是否产生真正的随机数?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 男子抽烟错过高铁 拍门大喊“我还没上车”
- 下一篇: 父亲为女儿囤了一阳台塑料袋 背后原因有被