我知道与
dd if=/dev/urandom of=/dev/sdX bs=1M count=hdd_size_in_MB
您可以用随机数据擦除整个磁盘。但 urandom 非常慢。所以我想知道是否可以只创建 100MB-1000MB 的随机数据,将其存储在 RAM 中,然后在整个磁盘上多次写入,而不是创建占用 CPU 资源的 TB 随机数据?
我该怎么做呢?
答案1
有几件事:
- 长期以来,人们一直争论用随机数据进行多次覆盖是否有助于使数据不可恢复——推荐这样做的论文在技术上已经过时了。要进行更深入的讨论,您需要阅读https://security.stackexchange.com/questions/10464/why-is-writing-zeros-or-random-data-over-a-hard-drive-multiple-times-better-th/10474#10474(我还在这里某处写了一篇更长的咆哮。要点是:任何现代录音技术都会争夺无论如何,无论您是用白色数据覆盖还是从磁性角度来看用恒定数据覆盖,这都完全无关紧要。如果您的威胁模型是某人用几个月的时间和电子显微镜以及专家实验室读取您的 0 覆盖硬盘,请不要扔掉它、转售或重复使用它,而是物理上销毁它。整个威胁模型是疯狂的。)
- 如果您想要不可恢复性,并且如果随机覆盖确实有帮助采用较短的序列并重复它会让你受到统计攻击,使你的方法变得荒谬
- 不需要
dd
;一个简单的方法cat < /dev/urandom > /dev/sdX
是让内核自行决定合理的读/写大小。我的意思是,这些写入由存储层缓冲和无论如何,硬盘驱动器。 - 您可以要求 openssl 或类似工具来加密静态种子并将其写入磁盘,而不是
chacha20
在内核中单线程执行并每隔几 kB 进行一次上下文切换。chacha20
(或者你可以编写自己的随机数生成器并对其进行播种——同样,随机覆盖的整个想法是没有意义的,但是重建任何足够大的状态 PRNG 的种子应该是合理的不可能的,即使它不是加密安全的)
答案2
coreutils 中有一个shred
命令可以随机重写文件或设备。默认情况下,它适用于整个文件设备(例如分区),但--size
/-s
可以为其指定大小。
这是相当有效的。