我正在尝试使用MappedByteBuffer在Java中安全地删除文件 到目前为止,它正常工作,文件无法通过FileScavenger等软件恢复。
目前我使用3次传递来覆盖文件。然而,我遇到了一种叫做Gutmann方法的东西,它使用了35次传球。在这种情况下,有些人认为3次通过就足够了。
我真的需要35次传球还是3传球就足够了?
答案 0 :(得分:2)
自引入日志和写时复制文件系统以来,安全地删除单个文件而不需要fs驱动程序的特殊支持。日志会在将块写入fs之前保留块的副本,以确保在崩溃和写入时复制fs创建新数据集并将内部指针从旧数据更改为新数据时保持一致性,而不会触及旧数据。 / p>
例如,请参阅此discussion about the implementation of secure deletion on ext4和此question on how to securely delete files on btrfs。
更糟糕的是,您的硬盘驱动器可能会独立保留“已删除”块的副本,而不会给操作系统提供任何提示。固态硬盘在这方面尤其糟糕,但硬盘驱动器也有一个较小的备份区域,它们可以用来(虚拟地)在发生故障时换掉坏块。
不幸的是,删除也没有很好的替代方案。您可以加密文件,但是您必须将密钥存储在可擦除的地方,这也是同样的问题。 LUKS(一种完整的光盘加密软件)使用所谓的反取证条带来扩展长数据集上的密钥信息,希望至少有一个块无法从已交换或尚未删除的块中恢复。但是,在文件系统上模拟这一行为也不是一个好主意。
答案 1 :(得分:1)
安全删除很棘手。
如果您在硬盘驱动器上正确覆盖数据,那么根据NIST覆盖它就足够了。 (http://csrc.nist.gov/publications/nistpubs/800-88/NISTSP800-88_with-errata.pdf)
但是如果您有固态硬盘(SSD),那么目前无法在写入后安全删除数据。这里的问题是它的内部架构。由于闪存转换层负责将数据写入和分发到闪存单元,因此您无法找到数据写入的位置。所以没有办法删除它(覆盖相应的单元格)。此外,根据SSD的不同,预留的容量可高达20%,您根本无法访问,但有些数据可能存在。因此无法删除单个文件。对于删除所有文件,开发人员都有内置机制(安全擦除)。
所以回答你的问题......如果你正在使用硬盘并正确删除,那么是的! 3次绰绰有余。如果你有SSD,那是不可能的!
现在以及将来可能通过加密进行安全删除的最佳方式。在将文件写入存储之前,您需要对其进行加密,并且只能使用密钥对其进行解密。如果你现在想要安全地删除文件,你只需要丢失密钥,这样就没有人可以再次解密它。 (当然,这也不是微不足道的......)