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