控制SecureRandom API的配置文件位于$JAVA_HOME/jre/lib/security/java.security。比如我們可以配置該文件里的securerandom.source屬性來指定SecureRandom中使用的seed的來源。比如使用設(shè)備相關(guān)的源,可以這樣設(shè)置:
securerandom.source=file:/dev/urandom securerandom.source=file:/dev/random
關(guān)于SecureRandom具體技術(shù)細(xì)節(jié),可參看文后參考鏈接2。
現(xiàn)在重點(diǎn)看下SecureRandomSpi抽象類,文件見鏈接3。該抽象類為SecureRandom類定義了功能接口,里面有三個抽象方法engineSetSeed,engineGenerateSeed,and engineNextBytes。如果Service Provider希望實(shí)現(xiàn)加密強(qiáng)度較高的偽隨機(jī)數(shù)生成器,就必須實(shí)現(xiàn)這三個方法。
然而Apache Harmony 6.0M3及其之前版本的SecureRandom實(shí)現(xiàn)中engineNextBytes函數(shù)存在安全漏洞。
Apache Harmony 是2005年以Apache License發(fā)布的一個開源的java核心庫。雖然2011年以后已宣布停產(chǎn),但是這個項(xiàng)目作為Google Android platform的一部分繼續(xù)被開發(fā)維護(hù)。
Apache Harmony's SecureRandom實(shí)現(xiàn)算法如下:
Android里的PRNG使用SHA-1哈希算法、由操作系統(tǒng)提供的設(shè)備相關(guān)的種子來產(chǎn)生偽隨機(jī)序列。隨機(jī)數(shù)是通過三部分(即seed+counter+ padding)反復(fù)哈希求和計(jì)算產(chǎn)生的。算法如下圖
其中計(jì)數(shù)器counter從0開始,算法每運(yùn)行一次自增一。counter和padding部分都可以稱為buffer。Padding遵守SHA-1的填充格式:最后的8 byte存放要hash的值的長度len,剩下的部分由一個1,后面跟0的格式進(jìn)行填充。最后返回Hash后的結(jié)果,也就是生成的偽隨機(jī)序列。
當(dāng)使用無參構(gòu)造函數(shù)創(chuàng)建一個SecureRandom實(shí)例,并且在隨后也不使用setSeed()進(jìn)行初始化時,插入一個起始值后,代碼不能正確的調(diào)整偏移量(byte offset,這個offset是指向state buffer的指針)。這導(dǎo)致本該附加在種子后面的計(jì)數(shù)器(8 byte)和padding(起始4 byte)覆蓋了種子的起始12 byte。熵的剩下8 byte(20 byte的種子中未被覆蓋部分),使得PRNG加密應(yīng)用無效。
小編推薦閱讀國產(chǎn)工具PKAV HTTP Fuzzer滲透測試助手最新發(fā)布
閱讀惠普漏洞:惠普ArcSight企業(yè)安全系列產(chǎn)品曝高危安全漏洞
閱讀騰訊、360各顯神通,分別秒殺IE、Flash、PDF項(xiàng)目
閱讀蘋果Mac OS X系統(tǒng)被發(fā)現(xiàn)存在DLL劫持漏洞
閱讀D-Link(友訊)路由器曝遠(yuǎn)程文件上傳及命令注入漏洞(已發(fā)布安全更新)
閱讀Win10將使用P2P進(jìn)行系統(tǒng)更新,引發(fā)安全擔(dān)憂
閱讀美國最大的無卡ATM網(wǎng)絡(luò)即將推出,從此告別刷卡!
閱讀谷歌應(yīng)用漏洞泄漏超過28萬條私人WHOIS數(shù)據(jù)
閱讀使命召喚、魔獸世界、英雄聯(lián)盟……專攻游戲的勒索軟件TeslaCrypt
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請發(fā)郵件[email protected]
湘ICP備2022002427號-10 湘公網(wǎng)安備:43070202000427號© 2013~2025 haote.com 好特網(wǎng)