ser*_*dev 28 linux random encryption
例如,它可以用于生成一次性密钥键吗?
此外,它的来源是什么,它如何用于生成x和y之间的随机数?
Tho*_*nin 26
严格来说,/dev/random
并不是真的完全随机.以某种方式假定为不可预测的/dev/random
硬件来源; 然后它使用函数(大多数是散列函数)混合这些数据,这些函数也被认为是单向的.因此,"真正的随机性" 因此与混合函数的固有安全性相关,安全性不比任何其他加密基元,特别是隐藏在其中的PRNG更安全./dev/random
/dev/urandom
/dev/random
和之间的区别在于/dev/urandom
前者会尝试维持一个估计(这意味着"疯狂的猜测")它已经收集了多少熵,并且将拒绝输出比这更多的比特.另一方面,它/dev/urandom
会愉快地从它拥有的熵产生数兆字节的数据.
两种方法之间的安全性差异是没有意义的,除非您假设"经典"加密算法可以被破坏,并且您使用极少数信息理论算法之一(例如OTP或Shamir的秘密共享); 并且,即使这样,/dev/random
也可以认为比/dev/urandom
仅在混合功能仍被认为是单向的情况下更安全,这与可以破坏经典加密算法的想法不兼容.所以,在实践中,甚至在理论上,没有任何区别.您可以使用/dev/urandom
OTP 的输出,因为内部的任何结构都不会被破坏/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
将阻塞直到给定的熵阈值达到了,这更安全.)
And*_*rey 17
这个宇宙中唯一可以真正考虑的是基于量子效应的东西.常见的例子是放射性衰变.对于某些原子,你可以确定只有半衰期,但你无法确定接下来哪个原子核会破裂.
关于/dev/random
- 这取决于实施.在Linux中,它用作熵源:
Linux内核通过键盘计时,鼠标移动和IDE计时生成熵,并通过特殊文件/ dev/random和/ dev/urandom使随机字符数据可用于其他操作系统进程.
这意味着它比算法随机生成器更好,但它也不是完美的.熵可以不是随机分布的并且可以是有偏差的.
这是哲学.实践是Linux /dev/random
在绝大多数任务中都是随机的.
有些随机发生器的实现具有更多的熵源,包括音频输入上的噪声,CPU温度传感器等.无论如何它们都不是真的.
有一个有趣的网站,你可以获得由放射性衰变产生的真正随机数.