2012-10-24 49 views
2

我有一個書面的應用程序,通過OpenSSL 1.0.1c生成ECDSA公鑰/私鑰對。 據我所知,OpenSSL在Linux上使用/ dev/random,但Android沒有/ dev/random,這意味着我可能會使用加密弱密鑰對。Android JNI上有/ dev/random替代嗎?

我看了兩本

https://security.stackexchange.com/questions/2152/do-mobile-oss-provide-crypto-quality-randomness

這個問題

https://security.stackexchange.com/questions/14669/how-to-select-dev-random-or-dev-urandom-in-the-code-in-android

和倆都給予適當的建議使用java.security.SecureRandom,但是我產生對本機端這些密鑰對,所以歡迎來自本地的東西。我可以將Java的參數傳遞給我的本地代碼,所以傳遞隨機字節很容易,但是如果完全在本機端完成,我會選擇這種方式。

那麼,Android上的/ dev/random有替代嗎?

+0

我的C標記是足夠的,因爲我使用C和OpenSSL在本地生成了這些關鍵字對。我也在問題標題中陳述了JNI。 – farmdve

+0

爲什麼要恢復到OpenSSL/JNI,如果你可以使用例如充氣城堡? ECDSA密鑰對的生成應該足夠快,並且'SecureRandom'已經正確接種(如果您在生成隨機之前沒有對其進行種子處理)。 –

+0

我使用SpongyCastle,我可以告訴你,速度很慢。我需要JNI來提高速度。 – farmdve

回答

3

Android向本機代碼提供/dev/random/dev/urandom。兩者都是世界可讀的。您應該使用/dev/urandom,因爲Android已確保PRNG已播種。

/dev/random//dev/urandom的唯一優點是/dev/random即使PRNG未接種也是安全的。但Android總是種下PRNG。所以沒有優勢。 /dev/random有很大的缺點 - 它耗盡了系統熵池。

+0

這個問題的答案http://security.stackexchange.com/questions/14669/how-to-select-dev-random-or-dev-urandom-in-the-code-in-android表示沒有假設我理解正確,那麼在Android上使用/ dev/random。而/ dev/random比/ dev/urandom更受歡迎,因爲它的密碼合理。 – farmdve

+0

@owlstead:我將它添加到答案中,並刪除了該評論,因爲該錯誤。謝謝。 –

+1

@farmdve'/ dev/urandom'是安全的,如果它充分播種。它的主要問題是有些實現被破壞,並且在被播種之前不會阻塞。但AFAIK Android保證它種子充足。 – CodesInChaos