安全擦除目录

时间:2011-05-27 13:51:10

标签: c# security cryptography directory delete-file

我知道如何在C#中擦除文件,包括它的扇区等。

但是如何覆盖目录呢?

示例:@"C:\mydirectory\"必须永远不可恢复(所有文件内部都已擦除),因此无法恢复目录结构或其名称。

-------------------下面的更新(评论格式是如此麻烦,所以我在这里发布)---

对于文件删除,我查找分区的群集和区域大小,并使用5种不同的算法将其覆盖至少40次,其中最后一种算法始终是随机算法。数据实际上每次都写入磁盘(而不仅仅是内存或其他东西)。唯一的风险是,当我擦除某些东西时,理论上可以更改该文件磁盘上的物理地址。我知道的唯一解决方案是在擦除文件后擦除可用磁盘空间,并希望当前没有其他文件部分保留擦除文件的旧物理位置。或者Windows不会做这样的事情吗?

http://www.sans.org/reading_room/whitepapers/incident/secure-file-deletion-fact-fiction_631州:

“重要的是要注意覆盖数据的共识只能减少数据 数据恢复的可能性。数据被覆盖的次数越多,越多 它变得昂贵且耗时,以恢复数据。事实上彼得古特曼 声明“......通过简单的覆盖实际上不可能对存储位置进行消毒 它们,无论有多少次覆盖传递或写入什么数据模式。“3使用磁力显微镜可以恢复覆盖的数据, 处理硬盘盘片上的成像磁化模式。实际上 如何实现这一点的细节超出了本文的范围。“

我个人认为,当我使用不同的(可能是未知的)算法覆盖100次以上的数据时(如果没有像交换文件那样留在其他地方的数据副本),那将需要任何非常昂贵的团队专业人士用了很多年才得到这些数据。如果他们确实在这些年后获得了数据,那么他们应该得到它,我猜......这一定是一个终生的项目。

所以:

  • 擦除未使用的数据:使用密码(http://support.microsoft.com/kb/315672)或用4GB文件填充硬盘或使用橡皮擦命令行可执行文件。
  • 擦除交换文件:?
  • 擦掉坏道:?
  • 擦拭目录:使用橡皮擦(如Teoman Soygul所述)
  • 我们如何确定我们覆盖了实际的实际地址?
  • 擦除最近使用的文件和Windows日志文件当然应该是任何程序员的蛋糕:)
  • 橡皮擦解决了上述大部分问题,但无法擦除页面文件。因此,任何取证仍然会在任何时刻找到这些交换文件中的数据。
  • AFAIK橡皮擦不会擦除文件分配表。但我不确定。

然后结论应该是:(几乎)不可能在C#中安全擦除?

3 个答案:

答案 0 :(得分:1)

如果文件夹中的所有文件/文件夹都已擦除(如您所述),则剩下的就是目录本身。使用隐秘的随机数生成器重命名目录并将其删除。它会像擦拭一样好。

如果这还不够,请抓取Eraser命令行可执行文件的副本并执行命令:

Process.Start("eraserl.exe", @"-folder "C:\MyDirectory\" -subfolders -method DoD_E -silent");

答案 1 :(得分:1)

没有通用的方法......考虑一下SSD:你甚至无法确保你的写操作会写入相同的物理地址,因为磨损均衡方法

答案 2 :(得分:0)

如您所知,安全删除并不简单。所以可能值得考虑另一种策略。

您是否考虑使用TrueCrypt之类的内容来创建加密卷?您可以将文件存储在那里,然后使用标准的删除例程。然后,攻击者需要解密加密卷并恢复已删除的文件。