有没有比 /dev/[u]random 更快的方法?有时,我需要做这样的事情
猫 /dev/urandom > /dev/sdb
随机设备“太”安全,不幸的是太慢了。我知道有wipe
类似的安全删除工具,但我想在 Linux 中也有一些内置的方法。
Tro*_*nic 24
不幸的是,Linux 对 urandom 的实现很糟糕。如果您的 CPU 支持 AES-NI(硬件加速),您可以使用带有随机密钥的 aes256-ctr 并每秒获得数百兆字节的伪随机性。我也期待 urandom 切换到现代方法。
openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > randomfile.bin
Run Code Online (Sandbox Code Playgroud)
这只小狗在我的盒子上运行 1.0 GB/s(与 /dev/urandom 的 14 MB/s 相比)。它仅使用 urandom 来创建随机密码,然后使用该密钥对 /dev/zero 进行非常快速的加密。这应该是一个加密安全的 PRNG,但我不会做出保证。
Mik*_*eyB 12
如果您想对硬盘驱动器(或文件)进行“安全”擦除,则应该查看 shred 实用程序。
正如之前的海报所指出的,/dev/*random 设备旨在用作小块随机数据的来源。
小智 7
在配备 T2500 CPU 的 Thinkpad T60p 上在 Ubuntu 8.04 下进行的快速测试中,来自 1GB 的随机数据openssl rand
比/dev/urandom
. 那是,
time cat /dev/urandom | head -c 1000000000 > /dev/null
Run Code Online (Sandbox Code Playgroud)
...大约 4 分钟,而...
time openssl rand 1000000000 | head -c 1000000000 > /dev/null
Run Code Online (Sandbox Code Playgroud)
……才1分钟多一点。
不确定随机质量是否存在差异,但对于 HD 擦除来说,两者都可能没问题。
小智 5
我看到很多答案说使用随机数据并不重要。如果您尝试做的只是擦除驱动器,那么这几乎是正确的,但如果您正在擦除它以准备磁盘加密,则情况并非如此。
如果您用非随机数据填充设备,然后在其上放置一个加密分区,您可能会遇到问题。驱动器中存储加密数据的部分将从驱动器的其余部分中脱颖而出,因为加密数据看起来是随机的,而其余部分则不会。这可用于确定有关可用于破解它的加密磁盘的信息。下面的链接解释了一些更常见的攻击如何工作以及如何防御它们(无论如何在 Linux 上)背后的理论。
如果你想擦除一个巨大的块设备,那么我发现它更健壮,使用dd
设备映射器而不是随机数据的输出重定向。下面将映射/dev/sdb
到/dev/mapper/deviceToBeErased
加密和解密之间的透明。为了在加密端填充设备,将零复制到映射器 ( /dev/mapper/deviceToBeErased
)的纯文本端。
cryptsetup --cipher aes-xts-plain64 --key-file /dev/random --keyfile-size 32 create deviceToBeErased /dev/sdb
dd if=/dev/zero of=/dev/mapper/deviceToBeErased bs=1M
Run Code Online (Sandbox Code Playgroud)
/dev/sdb
如果AES没有严重的弱点,则保证加密数据与随机数据无法区分。使用的密钥是从/dev/random
(别担心 - 它只使用 32 个字节)中获取的。