我在 Java 中实现了自己的 AES 密码版本,以便拥有一个独立于平台的加密应用程序,该应用程序不依赖于正在使用的 JVM 中可用的密码。
该应用程序应使用此密码来加密文件并将其存储在硬盘上。
。
问题:删除的文件无法恢复
用户现在必须能够安全地删除原始文件,这样在不知道加密密钥的情况下就无法恢复。为了做到这一点,应用程序必须用随机数据多次覆盖文件,最后将其从系统中删除。
但是,例如,Windows 为我设置了另一个安全加密数据的陷阱。从 Windows Server 2003 开始,影子复制技术开始使用。因此,已删除文件的旧版本仍可能被 Windows 隐藏起来。
我现在的问题是:
- Mac 或 Linux Mint/Ubuntu 是否使用类似的技术?
- 是否存在某种(独立于平台的)方法可以删除文件并且无法恢复它们?
答案1
在没有扇区级磁盘访问权限和文件系统知识的情况下,唯一可以验证地防止文件被删除的方法是打开一个文件,向其中写入随机数据,直到磁盘已满,然后删除该文件。如果文件被隐藏,这可能没有帮助。
如果用户无法获取密钥,那么文件中的数据就毫无用处,您最好不要担心删除它。如果文件的长度可能会泄露信息,请在写入之前填充数据。
如果您只希望使用单个密钥来加密/解密该文件,那么您需要从上游主密钥中派生出唯一的会话密钥。
请注意,如果您将密钥或用于派生密钥的东西存储在与密文相同的位置,那么您正在实施一个从根本上损坏的系统,该系统最终总会被破解。
答案2
不幸的是,没有办法解决这个问题。各种内置操作系统软件或第三方工具的设计都是为了保留数据,以便能恢复。您无法在应用程序中执行任何操作来覆盖此操作。文件版本控制、影子副本、备份等将复制您的文件。
您唯一能做的就是将文件存储在没有“备份”的设备或卷上。