【问题标题】:Is there a replacement for /dev/random on Android JNI?Android JNI 上有 /dev/random 的替代品吗?
【发布时间】:2012-10-14 20:43:32
【问题描述】:

我编写了一个应用程序,它通过 OpenSSL 1.0.1c 生成 ECDSA 公钥/私钥对。 据我了解,OpenSSL 在 Linux 上使用 /dev/random,但 Android 没有 /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 的替代品吗?

【问题讨论】:

  • 我的 C 标签足够了,因为我使用 C 和 OpenSSL 在本机端生成这些密钥对。我还在问题标题中说明了 JNI。
  • 如果可以使用例如,为什么要恢复到 OpenSSL/JNI充气城堡? ECDSA 密钥对生成应该非常快,并且 SecureRandom 已正确播种(如果您在生成随机数之前未播种)。
  • 我使用 SpongyCastle,我可以告诉你,它很慢。我需要 JNI 来提高速度。

标签: android random cryptography


【解决方案1】:

Android 为原生代码提供/dev/random/dev/urandom。两者都是世界可读的。您应该使用 /dev/urandom,因为 Android 已经确保 PRNG 已播种。

/dev/random/ 相对于/dev/urandom 的唯一优势是/dev/random 是安全的,即使 PRNG 没有播种。但安卓总是播种 PRNG。所以没有优势。而/dev/random 有很大的缺点——它耗尽了系统熵池。

【讨论】:

  • 这个问题的答案security.stackexchange.com/questions/14669/… 指出Android 上没有/dev/random,假设我理解正确。并且 /dev/random 比 /dev/urandom 更受欢迎,因为它在密码学上是合理的。
  • @owlstead:由于该错误,我将其添加到答案中并删除了评论。谢谢。
  • @farmdve /dev/urandom 是安全的,如果它有足够的种子。它的主要问题是一些实现被破坏并且在它被播种之前不会阻塞。但 AFAIK Android 保证其种子充足。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-23
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
  • 2017-03-05
  • 2021-03-05
相关资源
最近更新 更多