什么研究表明用户的鼠标移动对于密钥生成来说(不是)足够不可预测的?

信息安全 随机的 密钥生成
2021-08-24 06:04:21

我还没有找到任何可靠的来源试图证明或反驳鼠标移动的随机性。

值得一提的是,快速查看 Puttygen 源代码表明它似乎根据鼠标移动生成私钥。它用偶数单元格中的鼠标移动事件时间和奇数单元格中的鼠标位置填充数组,在其上撒上一些魔法洗牌(洗牌内存,异或场),并调用一些 RSA/DSA/EC* 密钥生成器数组作为参数。对于此类用例,是否有确凿的证据表明鼠标移动是一个好的熵源非常重要。请注意,这与将其用作附加源不同,例如在 Linux 内核中,即使它是一个平庸的源,也只会提高质量。

我很难相信没有人调查过这个。我错过了什么?

2个回答

我不相信有任何研究论文描述了在计算机安全背景下和相关采样率下神经肌肉系统的不可预测性,因此我无法链接您想要的研究论文。但是,我至少可以解释为什么人类运动如此随机和不可预测的一些原因。这一切都归结为一个简单的事实:活组织是一种非常非常草率的信息传输媒介。这已经为人所知很长时间了,并且一直是计算神经科学家和任何试图建立神经元组数学模型的人的眼中钉。生物神经网络是可怕的计算机。

神经元的传输速度变化很大,有时变化很大。即使在单个神经元内,速度也是可变的。此外,连续发送的动作电位(沿轴突传播的电信号)的数量取决于微观离子通道在任何给定时间打开的概率。此外,肌肉有大量的抖动。肌肉的力量不是来自活动的标量增加,而是来自被激活的离散的肌肉细胞束,称为运动单位。即使我们尽可能用力弯曲,我们也永远不会激活 100% 的肌肉运动单位(如果这样做,可能会对肌腱造成物理损伤)。这种随机的运动单位招募导致随意骨骼肌典型的抽搐振动。

的组合非常神经元的随机行为和肌肉细胞的概率激活导致时间上的微小可变延迟。虽然这些延迟对于人类来说是难以察觉的,但一台以每秒数十亿次滴答作响的计算机(是的,我知道 APIC 的滴答速度较慢)很快就会注意到这一点。由于神经传输固有的随机延迟,可以通过数百万个周期,这些随机延迟可以被测量并用作熵的来源。虽然我们没有任何研究表明每个动作电位会产生多少熵,但我们可以做出一个非常保守的猜测,并说从大脑到肌肉再到击键的整个过程给我们留下了大约一点熵. 只需敲击数百次按键即可获得密码学上显着的熵。

人脑的随机行为在这里得到了很好的描述(见第 3 节和第 4 节)。


因此,来自击键或鼠标移动的熵来自两个来源:

  1. 由于独特数量的神经元和独特的神经回路,人们的个体差异。

  2. 动作电位传输速度、运动单位募集等的时间依赖性变化。

所有这些都会导致随机延迟,虽然与日常任务无关,但对于有时甚至是亚纳秒时间分辨率的计算机来说是非常明显的。如果我们对事件的时间进行采样(不仅仅是鼠标指针位置或按键等数据),我们可以肯定地说它至少包含名义上的熵。毕竟,考虑到所有这些随机性,显然不可能在纳秒内猜出源自我们大脑的信号需要多长时间才能触发肌肉收缩以按下键。

但是,重要的是要知道熵收集很容易出错。您不能只采样鼠标移动并将系统时间用作时钟。您需要在事件发生时立即触发采样。这意味着收集必须发生在内核中,通常发生在中断发生时立即执行的中断处理程序中。否则,可预测的调度延迟很可能会污染收集到的熵。毕竟,如果随机按键事件一发生就被缓冲并且仅在可预测的时间间隔内释放到用户空间,那么它有什么好处呢?您应该始终将熵收集留给操作系统本身。

恕我直言,这个概念是从鼠标移动用户指纹中借用的,其中,在申请密钥生成时,复杂度是完全不同的。

如果您开始比较两者,您会注意到,使用鼠标移动指纹识别的用户识别需要较少的熵来改进识别,高误报是可以接受的。因此,他们的鼠标移动指纹识别将产生高精度。

另一方面,鼠标移动键生成器根据人的情绪和环境使用高熵,我怀疑任何人都可以在任何控制环境中重现。例如,与饱腹相比,空腹的人会以不同的方式移动鼠标。