使用智能手机摄像头生成随机数是个好主意吗?

信息安全 随机的
2021-08-08 18:44:58

原谅我对这个主题的无知,但我想知道更多,问(愚蠢的)问题是一种方式。我正在阅读http://www.random.org/randomness/这个想法突然出现在我的脑海中(在关于熔岩灯的一点之前)

考虑到以下几点:

  • 一般来说,大气特性和“真实”生活之类的东西在最真实的意义上被认为是随机的,它们算作 TRNG。
  • 计算机的伪随机数生成器不是随机的(因此是伪的),并且根据最近所有 NSA/GHCQ 的爆料来看,不值得信任。
  • 智能手机的摄像头越来越灵敏。
  • 智能手机照片通常是手工拍摄的。

使用智能手机拍照并使用 RAW 文件的字节数算作快速获取大随机数的好方法吗?敏感度和自然不同的位置甚至会使同一事物的几张照片完全不同,而照片是真实世界的,使它们与它们所指向的事物一样随机(在相机引入损失之前)。

如果这是获得大随机数的好方法,我可以看到对于普通乔来说,这将是一种可访问、简单的方法来生成密钥。另一个好处是它可以用作钥匙或钥匙的随机数,持有者可以通过视觉识别,但也可以否认是钥匙,因为它只是一张照片。

最后,由于市场力量和不断增长的技术意味着更敏感的相机将变得更加普遍,这是否是防止故意引入缺陷的一种方法?我想糟糕的相机质量很快就会被注意到并且可以很容易地进行测试(链接的文章给出了一个人类如何擅长视觉测试的例子)——这将是一个会损害模型吸收的新闻(发生在苹果至少一次,但不确定它是否会让人们失望)。因此,市场力量可以对抗引入缺陷。

如果这是愚蠢的,请说出原因并指出我的资源以进一步了解我的知识。如果不是,我将编写一个应用程序来执行此操作。

4个回答

使用相机作为随机源是一个好主意(不是新的,但仍然是一个好主意)。但是,您应该正确地进行操作:拍摄照片,然后使用加密散列函数(例如 SHA-256)对其进行散列。然后将输出用作加密安全 PRNG的种子,以根据需要生成任意数量的随机字节。

使用文件大小只会从你的图片中产生很少的熵:如果一张典型的图片压缩到大约 2 MB 左右的大小,平均正负 128 kB,那么你最多会得到 18 位的熵规模。使用散列函数,您可以收集照片本身的所有熵,直至散列函数的内部限制(对于 256 位输出而言大约为 255 位),这远远超出了所有现实所必需的目的。

一张照片应该包含很多熵,除非相机输出以某种方式被覆盖并且图片是均匀的黑色。不过要提醒一句:如果照片的散列被用作秘密(如果您想将其用作 PRNG 生成密钥的种子,就是这种情况),那么该照片必须保持机密:散列它,但是永远不要让它作为文件写入手机的闪存中。照片应仅在 RAM 中获取,经过哈希处理,然后丢弃。我不知道典型手机中有哪些用于照片捕捉应用程序的 API;您似乎可以在不以任何方式点击 Flash 的情况下获得照片,但我邀请您检查一下。

使用智能手机拍照并使用 RAW 文件的字节数算作快速获取大随机数的好方法吗?

就其本身而言,没有。数码相机旨在捕获信号而不是噪声,因此动态范围和调色板压缩都旨在适应最佳人类视觉;噪声分布不均匀。虽然 RAW 文件图像是一个好主意,但它需要绕过相机的固件,因为固件通过在芯片上进行大量图像优化来“帮助” - 输入操作系统的数据可能已经被优化和清理根据各种标准。

但是,如果您可以直接使用CCD 传感器并在无光容器内将其调整为最大噪声(和最小信号) - 可以创建一个不错的噪声源。

持有人可以一眼认出,但也可以否认是一把钥匙?

遗憾的是,没有,除非关键不是整个图像,而是嵌入图像中的隐写数据流——因为随机图像看起来很随机。这本身就会对可疑的攻击者提出问题。

更敏感的相机......这是防止引入故意缺陷的一种方法吗?

对于“更敏感”的相机和市场力量,需要考虑三个不同的因素:

  1. 对于客户来说,这意味着更多的百万像素;这是传感器带宽的改进,但没有说明其固有的熵(或信噪比)。
  2. 对于客户而言,“更敏感”可能意味着对变化的光照条件更敏感。这意味着更多的图像处理旨在减少传感器噪声和伪影。
  3. 人们以及市场力量往往不知道人类在匹配模式方面有多好,以及人类在检测随机噪声方面 有多差。
    • 我可以以一种几乎完全颠覆它们作为加密随机数源的用途的方式操纵像素整数的值,而用户的眼睛并不明显。例如,考虑一个 10x10 像素的灰度图像,范围为 256 个值。通过简单地将每个像素值四舍五入到最接近的偶数值,我可以将熵的水平减半或更差(我不记得确切的数学)。人眼无法检测到如此细微的差异。

进一步的想法

公众当然可以从手机的 TRNG 应用程序中受益。手机有多种有用的外设来收集噪音。限制是这些资源是否可以在低抽象级别访问。

证明模拟源是随机的相当困难由固有数字机制处理的模拟源更是如此。每个摄像头芯片可能略有不同(即使在 iPhone 单一文化中),因此 TRNG 应用程序必须内置这些复杂的统计指标,以便它可以“调整”每部手机。

“滚动你自己的加密货币”和创建 RNG 是类似的,这是可以理解的对抗。但是,如果没有针对特定问题领域发布的经过严格审查的解决方案,那么在启动同行评审过程中,一个开源应用程序与另一个应用程序一样好。

这是真正的随机,但显然有点矫枉过正。由于启动相机和拍照的操作有点慢,如果用户发现相机不断地打开和关闭,用户会感到惊讶。

智能手机还有很多其他的传感器可以使用,比如加速度计、环境光传感器,我相信这些会更高效,并且有望更节能。我想我在某处读过 CPU 使用它的热敏电阻来获取真正的随机数据,这是一个好主意。

除了摄像头和麦克风,我们还有一个熵源:用户,或者更具体地说,用户行为的时间戳。

所以我建议将图像本身、拍摄日期和系统启动后的时间(大多数系统都可用)结合起来。