一旦我完成输入文件,我需要安全地删除它,目前我正在用零覆盖所有的数据,这是混乱的,因为我的临时文件夹变得充满了旧文件,文件的名称也是一个安全问题。
而不是简单地将它们移到回收站,我希望它们跳过它并消失,这与字节擦除相结合,因为数据恢复软件可以从回收站之外恢复项目。由于名称也很重要,因此我需要在删除它们之前对它们进行重命名。
发布于 2009-01-16 18:26:28
这是一个渐进的问题。对于一个应用程序来说“安全”的东西对另一个应用程序来说是不安全的。如果安全性是非常重要的,并且您发现自己在Stack Overflow上问了这些问题,那么很可能需要与外部安全顾问签约。真正重要的例子包括财务信息、医疗记录或任何其他有法律或合同要求保护数据的东西。我这样说并不是刻薄,也不是暗示你没有能力解决问题,而是要指出,这是一个相当复杂和不断发展的问题。
基本上就是完成你想要完成的事情:
确保在文件保存在磁盘上的整个过程中,您始终保持对这些文件的独占句柄,否则,可以在删除文件之前对其进行复制。
正如我所说的,这是一个渐进的问题。这是一个非常基本的解决方案,并且容易受到许多漏洞的影响。因此,根据所需的安全级别,您可能会考虑从不将文件写入磁盘,或者使用多次遍历覆盖。如果安全性真的很重要,那么实际上在高温下烧毁硬盘盘片,然后将其粉碎是唯一确定的方法。
编辑:看起来你删除了你的代码样本。
发布于 2009-01-16 20:42:25
有第三方工具可以通过命令来做这类事情--我发现PGP Command Line有这个功能,如果你到处搜索,你可能会找到一个免费的应用程序,它可以从命令行做这件事。然后,您可以从您的应用程序中调用该命令,以便安全地删除文件。
我想说的是,如果你坚持要写自己的代码来做这件事,那么就不要全用0,而是把随机字节写到磁盘上。不要使用内置的c++随机数函数,使用更安全的随机数生成器。
正如Jim McKeeth所说,如果弄错了会有严重的法律后果,你就不想自己做这件事。
发布于 2009-01-16 21:10:55
Jim已经很好地描述了在代码中解决问题的问题。这个问题确实是渐进式的,您实现的任何解决方案都只会接近完全的安全性,而永远不会实现它。因此,要做的一件事就是准确地决定您需要保护文件免受哪些攻击(窥探家庭成员?同事?商业间谍?极权政府?),然后相应地设计您的解决方案并记录其局限性。
不过,我有一个正交的建议。除了在代码中实现安全擦除之外,您还可以要求用户进行合作。例如,您可以建议(或要求)将输入文件存储在加密卷上。在企业环境中,PGP磁盘可能是首选,因为它是一个可识别的品牌,而家庭用户将很好地使用免费的和经过良好测试的TrueCrupt。这两种产品都支持创建虚拟加密卷以及加密整个分区。这将在很大程度上保证输入文件的名称和内容的安全,甚至在您编写一行代码之前也是如此。
https://stackoverflow.com/questions/451288
复制相似问题