有没有替代/ dev / urandom?

有没有比/ dev / [u]随机更快的方法? 有时候,我需要做类似的事情

cat / dev / urandom> / dev / sdb

随机设备太“安全”,不幸的是太慢了。 我知道有wipe和类似的工具来安全删除,但我想也有一些在Linux上的方式。

如果你正在寻找一个“安全的”擦除硬盘(或文件),你应该看看碎纸工具。

正如之前的海报所指出的那样,/ dev / *随机设备是用来作为小块随机数据的来源。

不幸的是,Linux糟糕的实现。 如果你的CPU支持AES-NI(硬件加速),你可以用随机密钥使用aes256-ctr,每秒获得几百兆的伪随机性。 我期待着随意切换到现代化的方法。

 openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > randomfile.bin 

这只小狗在我的盒子上的速度是1.0 GB / s(而/ dev / urandom是14 MB / s)。 它只使用随机密码创build一个随机密码,然后使用该密钥对/ dev / zero进行非常快速的encryption。 这应该是一个密码安全的PRNG,但我不会作出保证。

在使用T2500 CPU的Thinkpad T60p上,Ubuntu 8.04下的快速testing显示,来自openssl rand 1GB随机数据比/dev/urandom快3-4倍。 那是,

 time cat /dev/urandom | head -c 1000000000 > /dev/null 

大概4分钟左右

 time openssl rand 1000000000 | head -c 1000000000 > /dev/null 

刚过1分钟

不确定随机质量是否有差异,但是对于高清擦拭可能是好的。

我看到很多答案,说使用随机数据并不重要。 如果你所要做的只是擦除驱动器,那么这是非常正确的,但是如果你在准备磁盘encryption的时候擦除它,那就不是那么重要了。

如果您使用非随机数据填充设备,请在其上放置encryption分区,否则可能会遇到问题。 存储encryption数据的驱动器部分将从驱动器的其余部分脱颖而出,因为encryption的数据看起来是随机的,其余部分不会。 这可以用来确定有关encryption磁盘的信息,可以用来解密它。 下面的链接解释了一些更常见的攻击如何工作以及如何防御(在Linux上)。

Linux硬盘encryption设置

如果您需要安全地擦除HD,则有一个非常强大的工具: DBAN

如果你想擦除一个巨大的块设备,那么我发现它使用dd和设备映射器而不是随机数据的输出redirect更健壮。 以下将把/dev/sdb /dev/mapper/deviceToBeErased/dev/mapper/deviceToBeErased en-并在其间透明地解密。 要在encryption的末尾填满设备,将零复制到映射器的纯文本一侧( /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 

如果在AES中没有严重的弱点,那么/dev/sdb上的encryption数据保证与随机数据不可区分。 使用的密钥是从/dev/random抓取(不要担心 – 它只使用32个字节)。

检查frandom

http://billauer.co.il/frandom.html

根据我的testing,这是最快的

你的工具越快,结果就越不安全。 产生好的随机性需要时间。

无论如何,你可以使用像dd = / dev / sdb这样的dd ,但显然这不会是随机的,它只会更快地擦除。

另一个select可能是使用这种方法/ sbin / badblocks -c 10240 -s -w -t随机-v / dev / sdb它比urandom更快,但是坏块PRNG不那么随意。

/dev/random使用了很多系统熵,所以只产生一个慢的数据stream。

/dev/urandom不太安全,而且速度更快,但它仍然适用于更小的数据块 – 这并不意味着提供连续的高速随机数据stream。

你应该自己devise一个PRNG,并用/dev/random/dev/urandom东西进行种子处理。 如果你需要更多的随机数,可以定期播种 – 每隔几MB(或者任何你的prng的长度)。 从随机或随机获得4个字节(32位值)是足够快,你可以做到这一点每1K的数据(每1K你的prng重新),得到非常随机的结果,而非常,非常快。

-亚当

如果要快速擦除硬盘驱动器,请向其写入非随机数据。 这比使用随机数据安全。 无论哪种方式,当连接到计算机时,原始数据不能被读取。 覆盖硬盘数据:大擦拭争议显示原始数据也不能用显微镜读取。

格式与LUKS和ddencryption的卷。 然后使用/ dev / urandom擦除LUKS标头。

如果你有硬件AES支持,这是一个非常快速的解决scheme。

简述:

 cryptsetup luksFormat /dev/sdX cryptsetup luksOpen /dev/sdX cryptodev dd if=/dev/zero bs=1M of=/dev/mapper/cryptodev cryptsetup luksClose cryptodev # wipe the luks header. Yes, it uses /dev/urandom but only for 2MB of data: dd if=/dev/urandom bs=1M count=2 of=/dev/sdX 

完成了!

看我的博客: 用随机位快速填充磁盘(不含/ dev / urandom)

如果你想擦除硬盘,dd不会删除重新分配扇区的内容,而且如果硬盘死机,速度会非常慢。 相反,您可以使用已经标准化了很久的擦除function的驱动器。

在这个例子中,我只用了102分钟就清除了500GB的机械硬盘。 即使当它充满重新分配的部门:

 root@ubuntu:~# hdparm --security-set-pass Eins /dev/sdaj security_password="Eins" /dev/sdaj: Issuing SECURITY_SET_PASS command, password="Eins", user=user, mode=high root@ubuntu:~# time hdparm --security-erase-enhanced Eins /dev/sdaj security_password="Eins" /dev/sdaj: Issuing SECURITY_ERASE command, password="Eins", user=user real 102m22.395s user 0m0.001s sys 0m0.010s root@ubuntu:~# smartctl --all /dev/sdaj | grep Reallocated 5 Reallocated_Sector_Ct 0x0033 036 036 036 Pre-fail Always FAILING_NOW 1327 

你可以在ata.wiki.kernel.org上看到更多的细节,但是他们的例子并没有使用–security-erase-enhanced,这是删除之前提到的重新分配的扇区所必需的。

在实践中,可能不需要从一个连续的随机stream中播种整个盘。

您可以创build一个适度大小的随机数据块,然后在磁盘上反复重复。

只要确保该数据块不是磁盘正常块大小的倍数,以确保最终不会用相同的随机数据位覆盖相关的数据块。 大小在1MB范围内的素数应该很好。

为了获得额外的安全性,只需要多做几次,每次使用不同的块大小。

“碎化”实用程序简单快捷。 如果驱动器的SMART属性指示零重新分配的扇区,则“碎片”可能足够安全。

但是,如果驱动器重新分配了扇区, 损坏扇区上数据不会被覆盖。 如果受损地点在重新分配之前包含敏感数据,“碎化”可能不够好。 可以通过重置驱动器的分配图并(重复)读取它们来读取“坏”扇区。

重新设置坏扇区分配映射的能力因制造商和驱动器型号而异。

如果你想要做的只是覆盖磁盘,那么你用什么都没有关系,因为任何东西都可以胜过取证实验室,而且我也不会相信任何事情都不会造成驱动器的停止, 。

只是使用一个非随机的来源,如全零或重复模式,(我认为这将起作用)

 (head -c 4096 /dev/urandom; cat /dev/sdb/) > /dev/sdb