当我偶然发现this有趣的花絮时,我正在寻找更快的替代/dev/urandom
:
生成非常好的非随机但几乎随机的比特的一个好方法是使用/ dev / random熵来播种快速对称流密码(我最喜欢的是河豚),并将其输出重定向到应用程序需要它。
这不是一个初学者技术,但很容易设置两个或三个行shell脚本和一些创意管道。
进一步的研究得出了Schneier关于安全的评论:
如果您要“注入熵”,有很多方法可以做到这一点,但更好的方法之一是将其“传播”到高速流密码并将其与非威慑采样系统耦合。 / p>
如果我错了,请纠正我,但在速度和安全性方面,这种生成随机位的方法似乎比/dev/urandom
好。
所以,这是我对实际代码的看法:
time dd if=/dev/zero bs=1M count=400 | openssl bf-ofb -pass pass:`cat /dev/urandom | tr -dc [:graph:] | head -c56` > /dev/null
此速度测试需要400MB的零并使用带有448位密钥的blowfish对其进行加密,该密钥由伪随机可打印字符组成。这是我上网本的输出:
400 + 0记录 400 + 0记录 复制419430400字节(419 MB),14.0068 s,29.9 MB / s
真正的0m14.025s 用户0m12.909s sys 0m2.004s
太棒了!但它有多随机?让我们将结果传递给ent
:
熵=每字节8.000000位。
最佳压缩会减小尺寸 这个419430416字节文件的百分比为0%。
419430416样品的卡方分布为250.92,随机分布 将超过此值50.00%。
数据字节的算术平均值为127.5091(127.5 =随机)。 Pi的蒙特卡罗值为3.141204882(误差0.01%)。 串行相关系数为-0.000005(完全不相关= 0.0)。
看起来不错。但是,我的代码有一些明显的缺陷:
/dev/urandom
作为初始熵源。所以,我想知道我是否走在正确的轨道上。如果有人知道如何解决任何这些缺点,那就太棒了。另外,如果除/dev/urandom
,sfill
,badblocks
或DBAN以外的任何内容,您能否分享用于安全擦除磁盘的内容?
谢谢!
编辑:更新了使用blowfish作为流密码的代码。
答案 0 :(得分:1)
如果您只是想安全地擦除磁盘,那么您真的不必担心您编写的数据的随机性。重要的是写下你可能做的一切 - 也许是几次。除非你的“对手”是一个庞大的政府组织,并且有足够的资源来沉迷于数据恢复,所以除此之外的任何事都是矫枉过正的(即使如此,他们也可以阅读它并不清楚 - 不是这些日子的磁盘密度现在用过)。我使用过GNU'shred'程序 - 但我只是随便关注它。当我这样做时,我将磁盘系统格式化到磁盘驱动器上,然后用一个包含准随机数据的文件填充它,然后将其切碎。我认为这主要是矫枉过正。
也许你应该阅读Schneier的'Cryptography Engineering'书?