0

我正在寻找一种在智能手机上生成真正随机位/数字的方法。
创建自定义 TRNG 似乎很棘手,很多人建议信任已经存在的、经过广泛测试和批准的 TRNG。
但我找到了Jericho Comms,它使用图片中的自定义 TRNG 作为输入。
这有多安全、强大和可靠?这可能是生成真正随机数/位的有效方法吗?
我知道智能手机相机不适合这个目的,因为 JPEG 压缩和低质量......但忽略这一点,所提出的算法有多正确?

我粘贴文档:

这个过程描述了完整的算法:

  • 将用户的照片加载到内存中,并将其存储在 RGB 值的顺序数组中。
  • 获取每个像素的红色、绿色和蓝色 (RGB) 整数值。这将为每种颜色返回一个介于 0 和 255 之间的数字。
  • 移除顺序重复的黑色 (0, 0, 0) 像素、白色 (255, 255, 255) 像素和完全相同的像素颜色。这会删除照片中曝光不足、曝光过度和熵很小的部分。通常,除非出现硬件故障,或者照片的部分曝光不足/过度曝光,否则相邻像素的颜色完全相同是非常罕见的。通常在一张高质量的照片中,相邻像素中至少会有非常轻微的颜色变化。这一步去除了这些低熵区域。
  • 估计每组 RGB 值 1 位输入熵(每 24 位像素 1 位)。这是一个非常保守的估计。用户可以在 TRNG 设置中将其增加到每像素 3 位,这将解释每种颜色的最低有效位的熵。
  • 收集 512 个 RGB 值以获得 512 位的估计熵输入。
  • 将 512 RGB 值转换为其十六进制表示,并将它们输入到具有 512 位输出的加密哈希中。用户可以选择使用哪个哈希,程序允许使用 Skein 或 Keccak [c=2d]。两者都是 NIST 哈希函数竞赛中非常强大的决赛算法。将此 512 位的哈希输出作为临时种子存储到下一个哈希中。
  • 开始一个循环:
    - 检查新散列是否有足够的新输入熵,或者跳出循环。
    - 获取之前的临时种子。
    - 获取一组新的 512 个 RGB 值(512 位)作为新的输入熵。
    - 将种子和输入熵连接在一起,并使用哈希(种子 || 输入熵)对它们进行散列。
    - 将哈希输出的前 256 位附加到输出随机数据中。
    - 将临时种子更新为哈希输出的最后 256 位。
    - 返回到循环的开始。


    需要注意的是,该程序不会使用收集到的熵来播种伪随机数生成器以提供无限量的随机数据。该程序旨在成为一个真正的随机数生成器,因此只需要质量随机性,并且每个均匀随机位必须仅用于加密明文的一位。假设大多数伪随机数生成器甚至扩展熵的 CSPRNG 都可能在输出中产生微妙的偏差,并允许 NSA 或其他政府解密部分或全部消息。使用此程序的目的是避免将可用熵扩展到更多位。

  • 4

    0 回答 0