CBH*_*ing 6 linux random-number-generator
有时我想要很多高度随机的数据,例如覆盖一个文件甚至整个硬盘。我应该使用/dev/random还是/dev/urandom?各自的优点或缺点是什么?有更好的选择吗?
CBH*_*ing 11
对于大量数据,您需要使用/dev/urandom. 该u是“无限的”,这意味着将永远是可用的数据。如果您尝试从 中读取大量数据/dev/random,它将阻塞,从而阻止您的程序继续运行一段时间。
二者/dev/random并/dev/urandom提供不可预知的(随机的)的数据。来自的数据/dev/random旨在完全不可预测(或真正随机),使其适用于诸如长期加密密钥之类的事情(未来的攻击者可能具有广泛研究和更快的计算机来尝试破解算法的优势)用于生成数据)。来自的数据/dev/urandom基于真正的随机数据,但可能会通过高质量的伪随机函数运行以产生额外的数据。它仍然适用于加密密钥之类的东西,只要您不需要确保它们在几十年内不会被破坏,但也可以用于批量数据。
Linux 内核维护着一个不可预测数据的“熵池”,其中每个位都有相等的机会为真或为假(一或零)。内核根据各种输入构建这个熵池,例如硬件源、驱动程序、用户操作以及任何其他无法可靠预测的内容。但是,这些来源需要时间来积累熵,因此如果消耗得太快,熵池可能会耗尽。
/dev/random直接从熵池中提取。当池耗尽时,读取/dev/random不会返回任何更多数据,直到池重新填充足够,这可能需要相当长的时间。/dev/urandom使用从熵池中播种的加密安全伪随机数生成器(CSPRNG)。它可以产生无限量的输出,但是如果不知道 CSPRNG 的内部状态,就无法预测输出。因为内部状态最初是基于真正随机的数据,并且所使用的 CSPRNG 算法设计为不会通过其输出泄漏其内部状态,/dev/urandom所以仍然是高度随机数据的良好来源。
回顾一下,当您需要最大程度的随机数据时,请使用/dev/random. 但是,如果您需要大量数据,则需要使用/dev/urandom. 一般来说,/dev/urandom除非您需要数据与未来几十年的真正随机噪声无法区分,否则请使用。
| 归档时间: |
|
| 查看次数: |
1257 次 |
| 最近记录: |