0

/dev/urandom当我偶然发现这个有趣的花絮时,我正在寻找一种更快的替代方法:

生成非常好的非随机但几乎随机位的一个好技巧是使用 /dev/random 的熵来播种快速对称流密码(我最喜欢的是河豚),并将其输出重定向到需要它的应用程序。

这不是一种初学者技术,但使用两行或三行 shell 脚本和一些创意管道很容易设置。

Schneier 对安全性的进一步研究得出了这样的评论:

如果您要“注入熵”,有很多方法可以做到这一点,但更好的方法之一是将其“传播”到高速流密码中,并将其与非确定性采样系统相结合。

如果我错了,请纠正我,但这种生成随机位的方法似乎比/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 位密钥的河豚对其进行加密。这是我上网本的输出:

400+0 条记录 400+0 条记录 419430400 字节 (419 MB) 复制,14.0068 秒,29.9 MB/秒

真实 0m14.025s 用户 0m12.909s 系统 0m2.004s

那太棒了!但它有多随机?让我们通过管道将结果发送到ent

熵 = 每字节 8.000000 位。

最佳压缩会将此 419430416 字节文件的大小减少 0%。

419430416 个样本的卡方分布为 250.92,随机超过该值的概率为 50.00%。

数据字节的算术平均值为 127.5091(127.5 = 随机)。Pi 的 Monte Carlo 值为 3.141204882(误差 0.01%)。序列相关系数为 -0.000005(完全不相关 = 0.0)。

这看起来不错的样子。但是,我的代码有一些明显的缺陷:

  1. /dev/urandom用于初始熵源。
  2. 密钥强度不等于 448 位,因为只使用可打印字符。
  3. 密码应定期重新播种以“散布”熵。

所以,我想知道我是否走在正确的轨道上。如果有人知道如何修复这些缺陷中的任何一个,那就太好了。另外,如果不是/dev/urandomsfillbadblocks或 DBAN,您能否分享您用来安全擦除磁盘的内容?

谢谢!

编辑:更新代码以使用河豚作为流密码。

4

1 回答 1

1

如果您只是想安全地擦除磁盘,您真的不必太担心您写入的数据的随机性。重要的是写你可能写的所有东西——也许写几次。除非您的“对手”是一个大型政府组织,有足够的资源可以沉迷于数据恢复,否则除此之外的任何事情都是过大的(而且即使如此,他们也不能清楚地阅读它 - 现在不是磁盘密度现在使用)。我用过 GNU 'shred' 程序——但我只是随意地关心它。当我这样做时,我将磁盘系统格式化到磁盘驱动器上,然后用包含准随机数据的单个文件填充它,然后将其切碎。我认为这主要是矫枉过正。

也许您应该阅读 Schneier 的《密码学工程》一书?

于 2010-09-01T07:49:22.517 回答