Mik*_*key 35 performance hard-drive secure-erase dd random-number-generator
我正在尝试半安全地擦除一堆硬盘驱动器。以下工作在 20-50Mb/s
dd if=/dev/zero of=/dev/sda
Run Code Online (Sandbox Code Playgroud)
但
dd if=/dev/random of=/dev/sda
Run Code Online (Sandbox Code Playgroud)
似乎不起作用。当我输入时
dd if=/dev/random of=stdout
Run Code Online (Sandbox Code Playgroud)
无论我为 bs= 和 count= 传递什么,它都只给我几个字节
我使用 /dev/random 错了吗?我应该寻找哪些其他信息来推进此故障排除?有没有其他方法可以用脚本或类似的东西来做到这一点
makeMyLifeEasy | dd if=stdin of=/dev/sda
Run Code Online (Sandbox Code Playgroud)
或类似的东西...
Kei*_*son 49
双方/dev/random并/dev/urandom使用“熵池”。当池用完时,/dev/random等待它重新填充,这需要监视系统行为(键盘输入、鼠标移动等),而/dev/urandom将继续为您提供伪随机数据。 /dev/random理论上质量更高,但/dev/urandom几乎可以肯定足以满足您的目的。(但 even/dev/urandom可能比其他一些方法慢。速度更快但质量较低的生成器可能足以擦除硬盘驱动器。目前尚不清楚攻击者是否会从知道将要生成的序列中获得任何优势,或者该随机数是较好用于该目的不是像0的序列,1,2,3,4,....)
引用random(4)手册页:
如果您不确定是否应该使用
/dev/random或/dev/urandom,那么您可能想使用后者。作为一般规则,/dev/urandom应该用于除长期 GPG/SSL/SSH 密钥之外的所有内容。
更新:自我编写以来,`random(4) 手册页已经更新。现在它说:
该
/dev/random接口被认为是传统接口,/dev/urandom在所有用例中都是首选和足够的,但在早期启动时需要随机性的应用程序除外;对于这些应用程序,getrandom(2)必须改用,因为它会阻塞直到熵池初始化。
另请参阅Thomas Hühn 的“关于 /dev/urandom 的神话”。
但是/dev/urandom,即使它不会阻塞,如果您想生成大量数据,也可能会太慢。在尝试之前对您的系统进行一些测量。
编辑:以下是关于“真”随机数与伪随机数的题外话。如果您只对问题的实际答案感兴趣,那么您现在可以停止阅读。
我似乎声称(包括此处的其他答案)/dev/random实现了“真正的”随机数生成器,而不是伪随机数生成器(PRNG)。例如,维基百科文章提出了这样的要求。我不相信这是正确的。有它的一些讨论,在这里是指硬件随机数生成器,但我看不出有什么证据表明,/dev/random通常使用这样的设备,或者是典型的电脑甚至有这样的设备。它们与 Crand()函数等 PRNG 的不同之处在于它们不是确定性的,因为它们从实际上不可预测的来源获取熵。
我会说有三类“随机”数字生成器:
确定性 PRNG,如 C 的rand()函数,它使用算法生成可重复序列,这些序列具有(或多或少)真正随机序列的统计特性。这些对于游戏来说已经足够好了(提供了一种很好的播种方式),并且对于需要可重复性的应用程序来说是必要的,但它们不适合密码学。
发电机像/dev/random和/dev/urandom从一些几乎不可预测的源,其收获熵等I / O活动(这就是为什么在键盘上捣或移动鼠标可以引起/dev/random产生更多的数据)。不清楚(对我来说)这些是否满足 PRNG 的定义(我已经看到定义说 PRNG 是确定性的),但它们也不是真正的随机数生成器。
即使完全了解其初始状态,硬件随机数生成器在物理上也是不可预测的,并且还使用数学技术来确保正确的统计属性。
Ric*_*lka 13
/dev/random是真正的熵源,真正的随机字节。因此,它需要一个随机源。您可以通过读取随机性来“耗尽”随机性。它会给你所有的随机性,然后阻塞直到它变得更多。你可能只是坐在那里等待,机器几乎没有新的随机性,它只是等待。
/dev/random对于真正的随机加密,高质量的随机性。因此,对于磁盘驱动器覆盖来说,这是一种矫枉过正。多写/dev/zero几遍就好了。或者你可以写 from /dev/urandom,当它用完真正的随机性时,它不会阻塞并给出伪随机数。
在 Linux 中 /dev/random 是一个特殊的文件,它提供高质量的伪随机数。 此实现从源自键盘、鼠标、磁盘和系统中断的事件中收集熵。(请参阅本文档)因此,当没有此类事件时,熵池为空,从 /dev/random 读取将阻塞,直到收集到额外的环境噪声。这解释了你的问题。要填充熵池,您可以按键盘上的键。
另一方面,真正的随机数生成器使用硬件随机数生成器,它从物理过程中生成随机数。这些过程包括产生低级、统计随机“噪声”信号的微观现象,例如热噪声或光电效应或其他物理现象。这些过程在理论上是完全不可预测的,而且该理论对不可预测性的断言还需经过实验检验。
硬件随机数生成器通常包括将物理现象的某些方面转换为电信号的转换器、放大器和其他电子电路以将随机波动的幅度增加到宏观水平,以及某种类型的模数转换器将输出转换为数字,通常是简单的二进制数字 0 或 1。通过重复采样随机变化的信号,获得一系列随机数。
硬件随机数生成器将来自设备驱动程序和其他来源的环境噪声收集到一个熵池中。从这个熵池中创建随机数。读取时,/dev/random 设备将仅返回熵池中估计的噪声位数内的随机字节。这解释了你的问题。
/dev/random 的对应物是 /dev/urandom(“解锁”/非阻塞随机源),它重用内部池来产生更多的伪随机位。这意味着调用不会阻塞,但输出可能包含比从 /dev/random 读取的相应信息更少的熵。
因此,如果您的意图不是生成 CSPRNG(密码安全伪随机数生成器),则应使用 /dev/urandom。
| 归档时间: |
|
| 查看次数: |
30874 次 |
| 最近记录: |