有没有比/ dev / [u] random更快的方法?有时候,我需要做类似的事情
猫/ dev / urandom> / dev / sdb
随机设备是“太”安全的,不幸的是太慢了。我知道有一些wipe
用于安全删除的工具,但我想Linux中也有一些工具。
有没有比/ dev / [u] random更快的方法?有时候,我需要做类似的事情
猫/ dev / urandom> / dev / sdb
随机设备是“太”安全的,不幸的是太慢了。我知道有一些wipe
用于安全删除的工具,但我想Linux中也有一些工具。
Answers:
如果要对硬盘(或文件)进行“安全”擦除,则应查看shred实用程序。
如前所述,/ dev / * random设备旨在用作少量随机数据的来源。
不幸的是,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
这只小狗在我的机器上的速度为1.0 GB / s(相比之下,/ dev / urandom的速度为14 MB / s)。它仅使用urandom来创建随机密码,然后使用该密钥对/ dev / zero进行非常快速的加密。这应该是加密安全的PRNG,但我不做保证。
pv
一个不错的进度指示器。openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero | pv -pterb > /dev/sdb
。
pv
建议,你可以管pv -pterb -s $(blockdev --getsize64 /dev/sdb) >/sdb
有pv
显示你对完成写入进度。
我看到很多答案说使用随机数据并不重要。如果您要做的只是擦除驱动器,那几乎是正确的,但是如果您准备擦拭磁盘以准备磁盘加密,那么就不那么了。
如果用非随机数据填充设备,然后在其上放置加密分区,则可能会遇到问题。该驱动器中存储加密数据的部分将与其他驱动器区分开,因为加密数据看起来将是随机的,其余部分则不会。这可用于确定有关可用于破解它的加密磁盘的信息。下面的链接解释了一些较常见的攻击如何起作用以及如何防御(无论如何在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
/dev/sdb
如果AES中没有严重的漏洞,则保证加密的数据与随机数据是无法区分的。使用的密钥是从中获取的/dev/random
(不用担心-它仅使用32个字节)。
您的工具越快,结果的安全性就越差。产生良好的随机性需要时间。
无论如何,您可以使用类似dd if = / dev / zero of = / dev / sdb之类的东西,但是显然这不会是随机的,它只会擦除得更快。
另一个选择是使用此方法/ sbin / badblocks -c 10240 -s -w -t random -v / dev / sdb,它比urandom更快,但是badblocks PRNG的随机性较低。
/dev/random
使用大量的系统熵,因此仅产生缓慢的数据流。
/dev/urandom
安全性和安全性较低,但速度更快,但仍适用于较小的数据块-并不意味着提供连续的高速随机数流。
您应该制作自己设计的PRNG,并使用/dev/random
或播种/dev/urandom
。如果需要更多随机性,请定期播种-每隔几MB(或prng的长度如何)。从urandom或random中获取4个字节(32位值)足够快,您可以每1k数据执行此操作(每1k重新设置prng),并获得非常随机的结果,同时运行非常非常快。
-亚当
如果要快速擦除硬盘驱动器,请向其中写入非随机数据。这与使用随机数据一样安全。无论哪种方式,当连接到计算机时,原始数据都无法读取。覆盖硬盘数据:巨大的争议表明,原始数据也无法使用显微镜读取。
用LUKS格式化,并在加密卷上dd。然后使用/ dev / urandom擦除LUKS标头。
如果您具有硬件AES支持,那么这是一个非常快速的解决方案。
简要地:
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不会删除重新分配的扇区的内容,如果硬盘驱动器快要死了,它将非常慢。相反,您可以使用驱动器内置的擦除功能,该功能已经标准化很长时间了。
在此示例中,我仅需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,这对于删除前面提到的重新分配的扇区是必需的。
如果您要做的只是覆盖磁盘,那么使用什么都没关系,因为任何事情都会胜过法医实验室的工作,而且我不信任任何将驱动器停下来停止该级别资源的工作。
只需使用非随机来源(如全零或全零)或重复模式(如(我认为这会起作用))
(head -c 4096 /dev/urandom; cat /dev/sdb/) > /dev/sdb