C# 完全删除文件,使其无法检索
本文关键字:检索 删除 文件 | 更新日期: 2023-09-27 18:36:50
我们有一些软件可以从客户端检索文件,取消加密,处理它,加密结果,然后将其发送回去。
我们使用PGP密钥(我们的私钥解密,他们的公共加密)。
但是,我突然想到,尽管我们在处理文件后将其删除,但理论上可以使用取消删除工具从硬盘中获取它。
目前我们使用 gpg2.exe 程序作为 gpg4win 的一部分到 pgp 解密,所以我不确定我们是否可以将其直接解密到内存中,因此它永远不会接触硬盘。
有没有一种简单的方法可以确保它在删除它时完全消失?
你可以检查 gpg 程序是否允许从 stdout 获取输出而不是将其写入文件,这样它就不会写入磁盘。可能还有一个 C# 或 C++ 库可以做同样的事情。
如果您必须使用中间文件,您可以通过在删除之前用随机数据覆盖内容几次,或使用专门的碎纸机工具来删除它,从而使它变得更加困难。
顺便说一句:请注意,如果您足够偏执,担心有人使用特殊软件来恢复已删除的数据,您可能还需要担心RAM中残留的数据片段。
您可以使用擦除实用程序 (http://wipe.sourceforge.net/) 来擦除未加密的数据。
是的,取消删除文件并在写入时即时捕获文件是微不足道的。因此,更安全的方法是使用 OpenPGP 库在内存中执行所有操作(除非您有不适合内存的大文件)。
您需要记住,内存也会交换到磁盘,因此如果您有绝密数据,您的任务会变得更加复杂 - 您需要创建未交换的内存块,并以某种方式从 .NET 使用它们。
还有一个复杂问题 - 如果您的应用程序解密数据,那么它附近有一个私钥。攻击者很有可能窃取加密密钥,然后窃取加密文件并解密它们。
所以你的主要问题在磁盘之外 - 它是确保整个计算机系统的安全。