16 encryption dd random
我已经阅读了有关如何使硬盘驱动器安全加密的信息,其中一个步骤是将随机位写入驱动器,以使加密数据与硬盘驱动器上的其余数据无法区分。
但是,当我dd if=/dev/urandom of=/dev/sda
过去尝试使用时,预计 ETA 会在几天之内。我看到了一些关于使用badblocks
代替 urandom 的内容,但这似乎并没有多大帮助。我只想知道是否有任何方法可以帮助我加快速度,例如dd
我可能缺少的选项或其他内容,或者速度是否只是 HD 的限制。
Gil*_*il' 14
dd if=/dev/urandom of=/dev/sda
,或者简单地说 cat /dev/urandom >/dev/sda
,不是用随机数据填充磁盘的最快方法。Linux/dev/urandom
并不是最快的加密 RNG。有没有 /dev/urandom 的替代方案?有一些建议。特别是,OpenSSL 包含一个更快的加密 PRNG:
openssl rand $(</proc/partitions awk '$4=="sda" {print $3*1024}') >/dev/sda
Run Code Online (Sandbox Code Playgroud)
请注意,最终是否有改进取决于哪个部分是瓶颈:CPU或磁盘。
好消息是,用随机数据填充磁盘几乎没有用。首先,消除一个常见的神话,在今天的硬件上用零擦除同样好。使用 1980 年代的硬盘技术,用零覆盖硬盘会留下少量的残余电荷,可以用一些昂贵的硬件来恢复;需要使用随机数据进行多次覆盖(“Gutmann 擦除”)。今天,即使是用零进行一次覆盖,也会留下即使在实验室条件下也无法实际恢复的数据。
加密分区时,为了加密数据的机密性,不需要用随机数据填充磁盘。只有当您需要使加密数据使用的空间与未使用的空间无法区分时,它才有用。在非随机容器之上构建加密卷会显示加密卷曾经使用过哪些磁盘块。这对文件系统的最大大小给出了一个很好的提示(尽管随着时间的推移它会变得越来越糟糕),仅此而已。
您可以让 OpenSSL/dev/zero
使用随机密码进行加密,从而非常快地提供不错的伪随机数据(如果您的 CPU 支持加速)。
openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero | dd of=/dev/sda
Run Code Online (Sandbox Code Playgroud)
您可以通过管道pv
获取进度/预计到达时间。我现在正在运行的命令(在 root shell 中)是:
DISK="sda"
DISKSIZE=$(</proc/partitions awk '$4=="'"$DISK"'" {print sprintf("%.0f",$3*1024)}')
apt-get install pv
openssl enc -aes-256-ctr -nosalt \
-pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" \
< /dev/zero |
pv --progress --eta --rate --bytes --size "$DISKSIZE" |
dd of=/dev/"$DISK" bs=2M
Run Code Online (Sandbox Code Playgroud)
在遇到与非理性约翰相同的问题之后,我从这个答案中得到了这个想法,他在上面评论了吉尔斯的答案。这将我对新 RAID 阵列的擦除速度从 11?MB/s 提高到大约 300?MB/s,将需要一周的时间缩短到 10 小时。
我要补充一点,你应该能够使用
而不是上面更复杂的语句,但是有一个错误,它只允许产生 16?MB 的输出。(此错误已于 2016 年 1 月提交。)openssl rand #of_bytes
openssl enc ...
ssl
而且,根据对这个问题的回答,并继续假设 CPU 是瓶颈,通过openssl
在单独的内核上运行多个并行进程,使用 FIFO 将它们组合起来,可以进一步提高速度。
小智 5
openssl 似乎对我不起作用。我在提供的解决方案中遇到了“未知选项”和其他问题。所以我最终选择了程序 fio。
fio -name="fill" -ioengine=libaio -direct=1 -bs=512m -rw=write -iodepth=4 -size=100% -filename=/dev/md0
Run Code Online (Sandbox Code Playgroud)
这似乎需要 3 个小时才能在 24 个 HDD 上实现 19TB。所以大约 1,800 MB/s
smp-016:~ # fdisk -l /dev/md0
Disk /dev/md0: 18890.1 GB, 18890060464128 bytes
smp-016:~ # fio -name="fill" -ioengine=libaio -direct=1 -bs=512m -rw=write -iodepth=4 -size=100% -filename=/dev/md0
fill: (g=0): rw=write, bs=512M-512M/512M-512M/512M-512M, ioengine=libaio, iodepth=4
fio-2.2.10
Starting 1 process
Jobs: 1 (f=1): [W(1)] [2.7% done] [0KB/1536MB/0KB /s] [0/3/0 iops] [eta 03h:01m:11s]
Run Code Online (Sandbox Code Playgroud)
我希望这实际上是随机数据。手册页说 fio“默认:用随机数据填充缓冲区。” http://linux.die.net/man/1/fio
我这样做不是为了安全/加密目的,只是想确保我以后的读取测试是实际数据,而不仅仅是 0。同样的 fio 命令可用于 SSD/NVMe 预处理。因为仅使用 /dev/zero 会导致磁盘级压缩“欺骗”实际写入的数量。虽然我会-loops=2
为它添加一个标志,但如果它是用于基准测试的新 SSD。
如果您确实希望它是安全的,您可以使用该-randrepeat=bool
选项,因为这将切换“以可预测的方式为随机数生成器播种,以便结果在运行中可重复。默认值:true。”,但我仍然没有确定这将是多么安全。
此外,一些企业级 HDD 有 SED(自加密驱动器),允许您旋转加密密钥以立即安全地擦除所有写入的数据。
最后,我过去曾使用 DBAN(又名 Darik 的 Boot 和 Nuke),它具有 CD 和 USB 可启动选项,并且“是托管在 SourceForge 上的开源项目。该程序旨在安全地擦除硬盘,直到其数据被永久删除已删除且不再可恢复”
归档时间: |
|
查看次数: |
17697 次 |
最近记录: |