【问题标题】:Seeding SecureRandom from user touch events in Android从 Android 中的用户触摸事件中播种 SecureRandom
【发布时间】:2016-12-19 12:34:45
【问题描述】:

我正在创建将生成安全随机 256 位密钥的 Android 应用。我还希望用户可以选择通过在屏幕上点击/拖动来生成随机字节,这将为随机数生成器提供种子(有点像 TrueCrypt 生成其密钥的方式)。看起来SecureRandom 是我最好的选择,但我无法理解setSeed(byte[]) 方法。

这是文档:

重新植入这个随机对象。给定的种子是对现有种子的补充,而不是替代。因此,保证重复调用永远不会减少随机性。

我计划获取用户触摸事件的 X 和 Y 坐标并对它们进行哈希处理,然后将哈希中的字节重复输入setSeed

我的问题是,后续调用setSeed 会加强现有的“随机性”还是或多或少没用?还是有更好的方法来实现我完全想念的?

【问题讨论】:

    标签: java android random


    【解决方案1】:

    是的,“或多或少没用”。

    来自docs

    “传递给 SecureRandom 对象的任何种子材料都必须是不可预测的”,鼠标移动可能不符合该标准。

    通常 CPRNG 会不断从设备上的事件中添加种子,您不会做得更好。

    同样来自docs

    void setSeed (long seed)
    使用给定长种子中包含的八个字节重新设置此随机对象的种子。给定的种子是对现有种子的补充,而不是替代。因此,保证重复调用永远不会减少随机性。

    所以继续吧,你不会造成任何伤害,但你是否会改进什么是值得怀疑的。

    【讨论】:

    • 存在一个关于 SecureRandom(4.2 之前)的 Android 漏洞。在此类设备上添加额外的种子可能会有所帮助,但通常使用 PRNGFixes 就足够了。
    • @Robert 请提供漏洞信息的链接。
    • @Robert Nice 但没有提供有关漏洞、严重程度、在什么条件下以及如何实现漏洞的信息。请提供漏洞信息的链接?顺便说一句,您知道运行 4.2 之前的 Android 设备的百分比吗?
    • @zaph:这个漏洞似乎没有 CVE 条目。根据 Google 目前大约 9% 的 Android 版本低于 4.2:developer.android.com/about/dashboards
    猜你喜欢
    • 2012-10-12
    • 2011-08-26
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多