/ dev/random被认为是真正的随机吗?

ser*_*dev 28 linux random encryption

例如,它可以用于生成一次性密钥键吗?
此外,它的来源是什么,它如何用于生成xy之间的随机数?

Tho*_*nin 26

严格来说,/dev/random并不是真的完全随机.以某种方式假定为不可预测的/dev/random硬件来源; 然后它使用函数(大多数是散列函数)混合这些数据,这些函数也被认为是单向的.因此,"真正的随机性" 因此与混合函数的固有安全性相关,安全性不比任何其他加密基元,特别是隐藏在其中的PRNG更安全./dev/random/dev/urandom

/dev/random和之间的区别在于/dev/urandom前者会尝试维持一个估计(这意味着"疯狂的猜测")它已经收集了多少熵,并且将拒绝输出比这更多的比特.另一方面,它/dev/urandom会愉快地从它拥有的熵产生数兆字节的数据.

两种方法之间的安全性差异是没有意义的,除非您假设"经典"加密算法可以被破坏,并且您使用极少数信息理论算法之一(例如OTPShamir的秘密共享); 并且,即使这样,/dev/random也可以认为比/dev/urandom仅在混合功能仍被认为是单向的情况下更安全,这与可以破坏经典加密算法的想法不兼容.所以,在实践中,甚至在理论上,没有任何区别.您可以使用/dev/urandomOTP 的输出,因为内部的任何结构都不会被破坏/dev/urandom- 获得的流的实际管理将是弱点(尤其是长时间存储).另一方面,/dev/random有非常现实的实际问题,即它可以在不合时宜的时刻阻止.当自动操作系统安装阻塞(数小时!)时真的很烦人,因为SSH服务器密钥生成坚持使用/dev/random并且不必要地停止熵.

有许多应用程序/dev/random作为一种仪式阅读,好像它比" /dev/urandom业力水平"更"好" .这是完全错误的,特别是当alea要与经典的加密算法一起使用时(例如,生成SSH服务器公钥).不要那样做.相反,使用/dev/urandom,你会活得更长,更快乐.即使是一次性垫.

(只是为了保持完整性,有有怪癖/dev/urandom在Linux上实现的:它绝不会阻止,即使它并没有因为先前的引导收集的任何熵在所有发行通过创建一个"随机种子"在安装时避免此问题,./dev/random,并在每次启动时使用该种子初始化所使用的PRNG /dev/urandom;立即重新生成一个新的随机种子,用于下次启动.这确保/dev/urandom始终在足够大的内部种子上工作.FreeBSD实现/dev/urandom将阻塞直到给定的熵阈值达到了,这更安全.)

  • @ thomas-pornin:不对.请查看http://www.slideshare.net/astamos/cloud-computing-security的幻灯片63以获取简短说明.基本上,在VM中,除非采取措施,否则与您克隆的图像相比,熵的可能性不大. (4认同)
  • 要以不同的方式提出相同的问题,假设我有两个使用相同算法的CSPRNG.生成器A用(X,0)播种,其中X是256+比特的熵.生成器B用(X,1)播种,其中X与生成器A完全相同.是否有任何攻击可以让我预测B的输出,给定A的输出? (2认同)

And*_*rey 17

这个宇宙中唯一可以真正考虑的是基于量子效应的东西.常见的例子是放射性衰变.对于某些原子,你可以确定只有半衰期,但你无法确定接下来哪个原子核会破裂.

关于/dev/random- 这取决于实施.在Linux中,它用作熵源:

Linux内核通过键盘计时,鼠标移动和IDE计时生成熵,并通过特殊文件/ dev/random和/ dev/urandom使随机字符数据可用于其他操作系统进程.

维基

这意味着它比算法随机生成器更好,但它也不是完美的.熵可以不是随机分布的并且可以是有偏差的.

这是哲学.实践是Linux /dev/random在绝大多数任务中都是随机的.

有些随机发生器的实现具有更多的熵源,包括音频输入上的噪声,CPU温度传感器等.无论如何它们都不是真的.

有一个有趣的网站,你可以获得由放射性衰变产生的真正随机数.

  • @Pacerier是你用花生酱和果酱随机定义为吐司然后是,它不是真正的随机.通过任何其他有意义的定义. (2认同)