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