/dev/random 中的可用熵如何计算(或估计)?

信息安全 随机的 Unix
2021-08-21 18:12:19

它似乎(对于非专家)/dev/random被认为可用作纯随机数据的来源。但是,我对文件的分析感到好奇/dev/random

/dev/random是来自硬件的噪声数据的收集点。随着从硬件中收集到更多的噪音,文件会被扩展;随着新噪声的添加,旧数据会四处移动,因此整个文件代表一种熵源。

我将假设它/dev/random只会使用一次,以避免重复使用一次性垫所引起的问题。然后有一件事困扰着我——熵是如何估计的。我对以下问题本身的答案不太感兴趣,而对过去的研究是否考虑了这些问题并提供了任何相关信息更感兴趣。

文件中熵的位数是如何计算的?我怀疑它不是文件的大小,因为statls -sreturn 0,但熵的位数在/proc/sys/kernel/random/entropy_avail. 它是否类似于除了位本身之外无需学习任何东西即可获得的位数?

我并不真正理解源代码或 Gutterman 等人的解释。我怀疑人们无法准确地计算出这个值。entropy_avail但是,可以保证如果我从 中读取的位数少于/dev/random,那么该字符串中的熵大约是字符串的长度吗?换句话说,是entropy_avail可以从读取中获得的随机位数的保守下限的值/dev/random吗?

我很想参考最后一个!

2个回答

有一篇关于 ePrint 密码学档案的简短论文可以回答您的问题。基本上,作者将熵估计器的代码解释为 Kolmogorov 类型的熵估计,如果一个事件与前一个事件发生的距离不太近,如果两个连续事件之间的时间不太可预测等等,则该事件是“随机的”这是比我更好地回答问题的链接 http://eprint.iacr.org/2012/487.pdf

/proc/sys/kernel/random/entropy_avail只是为您提供当前可以从中读取的位数/dev/random尝试读取更多内容将阻塞,直到有更多熵可用。您可以像对待来自加密随机源的任何其他位一样对待这些位。

/dev/random无法重新读取来自的位。