因此,该shred
实用程序据称允许人们通过用随机数据反复覆盖文件来“安全地”删除文件。
显然,在写时复制文件系统上,几乎不可能完全删除曾经写入的数据。
但是,我读到过像 EXT3/4 和 XFS 这样的日志文件系统也变得shred
无效。
假设我想要一个文件系统,其主要优先级是能够尽可能安全地删除文件。哪种文件系统最适合此目的?
我知道驱动器加密,但当你解密驱动器时,我的理解是你可以在驱动器上进行文件恢复,就像它未加密一样。我希望能够保护敏感的已删除文件,即使攻击者设法绕过驱动器加密。
shred
不适用于现代 HDD 或 SSD。它的设计基于很久以前的一篇论文,当时硬盘驱动器没有自己的控制器。shred
其背后的设计理念是否仍然适用于现代硬盘驱动器仍有待商榷。我会说“就我个人而言,我不这么认为”。无论如何,最好的选择是在 SSD 上进行加密,并结合使用文件系统的丢弃功能和定期重新加密。
乍一看,使用 SSD 似乎有悖常理:SSD 本质上是“写时复制”的:呈现给您的内存块被映射到物理闪存上任意排序的块。当您想要修改块上的字节时,您需要擦除整个块(即,将其完全设置为 0),然后只翻转正确的位。这种擦除过程会磨损闪存单元,因此您无需反复擦除相同的物理块,每次修改块时,其修改的内容都会写入不同的、已擦除的块,并且旧块将排队等待擦除。SSD 在内部完成所有这些操作,主机对此一无所知。
现在,有一种方法可以与之交互:您可以 TRIM/丢弃一个逻辑块,这将简单地将底层物理块标记为未使用并将其排入队列以进行擦除;逻辑块被标记为由“nulls”支持,并且只有在写入后才会分配给已擦除的块(通常)。
现在,Linux 上的 LUKS / dm-crypt 很聪明。当加密卷上的文件系统知道某个逻辑块“不再被文件使用”时,它会将“丢弃此块”的信息传递给块设备 - 然后加密设备本身可以将此信息进一步传递给 SSD。
因此,您有一个机制,使加密层可以轻松地快速重新加密块设备的使用部分(而不是包括属于已删除文件块的数据的整个磁盘)。
太棒了。因此,您删除文件,丢弃这些文件使用的块,然后任何人都无法读取其密文,但为了使事情更加安全,您随后告诉 luks 重新加密整个磁盘,这会为您提供一个新密钥,使用该密钥,“技术上仍然可能位于 SSD 内部的某个地方,但无法从计算机访问”中的旧数据无法解密,因为密钥不再存在,并且在没有密钥的情况下,正确加密的数据与所有可能的未加密数据的可能性相同。因此,即使您的 luks 加密密码在某个时候被破解并且当时的(非常长的)主加密密钥被恢复,这也无助于攻击者恢复该数据。