你能解释一下random.c中使用的熵估计吗


12

/dev/random使用内核中断的时间添加到熵池中。在名为的变量中跟踪池中的熵量entropy_count

这是的相关代码段random.c。它表示变量的最后两次间断delta与delta的差异之间的时间(以我为准)delta2

delta = time - state->last_time;
state->last_time = time;

delta2 = delta - state->last_delta;
state->last_delta = delta;

if (delta < 0) delta = -delta;
if (delta2 < 0) delta2 = -delta2;
delta = MIN(delta, delta2) >> 1;
for (nbits = 0; delta; nbits++)
  delta >>= 1;

r->entropy_count += nbits;

/* Prevent overflow */
if (r->entropy_count > POOLBITS)
  r->entropy_count = POOLBITS;

看起来,添加的熵的估算值本质上是delta的以2为底的对数的下限(不是ceil,因为循环前的初始位偏移)。尽管我不确定需要什么假设才能使此形式正确,但这在某种程度上具有直觉意义。

因此,我的第一个问题是“此估算背后的原因什么?”

我的第二个问题是关于delta = MIN(delta, delta2) ...。这是做什么的?为什么要选择这个增量和最后一个的最小值?我不知道这应该达到什么目的-也许可以使估计更好,或者更保守。

编辑:我发现了一篇指定估算值论文,但实际上并没有给出合理的论据(尽管它确实概述了估算者应满足的一些非正式条件)。

评论中列出了其他资源:


1
请注意,Linux中的熵估计值/dev/random是不稳定的基础-请参见/ dev / random熵池?。我对托马斯进行了询问,希望他能回答您的问题。
吉尔斯(Gilles)'所以

如果有人对此主题感兴趣,那么在Wikipedia中对其进行处理是一个很好的起点:en.wikipedia.org/wiki//dev/random
slm

1
@Lucas-也看一下本文:[Linux熵估计器的解释](eprint.iacr.org/2012/487.pdf
slm

@slm有趣的是,尽管我不确定它是否正确-使用Kolmogorov复杂度证明最小函数的步骤是推理的一大飞跃,但我不清楚这在概念上是否合理。
卢卡斯

@Lucas-以为我会接受,我已经退出我的联赛了,这个Q 8
slm

Answers:


5

delta2不是前一个delta,而是两个连续值之间的delta。它是一种导数:如果delta测量速度,delta2则是加速度。

该估计值背后的直观想法是,中断以或多或少的随机间隔发生,这是由物理世界中不可预测的事件(例如按键或网络数据包的到达)决定的。延迟时间越长,涉及的事件就越不可预测。但是,有些物理系统会以固定的速率触发中断。该delta2措施是一种检测这种情况的保护机制(如果中断以固定的间隔发生,因此可以确定地预测,则所有delta值将具有相同的值,因此delta2将为零)。

我说的是“直观”,没有更多要说的了。实际上,在“随机物理事件”模型中,计数位数是错误的;如果每个时间单位发生硬件事件的概率为p,并且您获得的延迟以n位表示,则熵贡献应计为n / 2位,而不是n位。但是我们知道,实际上,物理事件并不是在完全随机的时刻发生的。该delta2机制也承认。

因此在实践中,“熵估计”就是这样:一个估计。它的安全性不是基于合理的数学依据,而是来自通常的安全性来源:似乎还没有人找到滥用它的方法。


该页面是由一个厌倦了有关/dev/random其神话和其熵估计的人所写的,我认为它很好地解释了事情,并提供了足够的细节。处理RNG时,正确掌握一些基本思想很重要。


糟糕,我误会了,我应该说三角洲的变化。我不得不说,大多数估计确实具有“合理的,数学上精确的理由”,这就是将它们与猜测区分开的地方,并且如果它确实起作用则应该具有某种形式上的理由。完全不关心这些事情而只关心实用性是完全可以的,但这并不是每个人都如此。不对有趣的事情达成共识,不是正确的“基本思想”的问题。
卢卡斯

我并不是说您的错是出于设计目的的实际估算。
卢卡斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.