C中的安全文件删除

C中的安全文件删除

我需要安全删除C中的文件,这是我做的:

  1. 使用fopen来获取文件的句柄
  2. 使用lseek / ftell计算大小
  3. 根据当前时间/或文件大小获取随机种子
  4. 从一个循环中将(size)字节写入文件,每次迭代写入256字节
  5. fflush / fclose文件句柄
  6. 重新打开文件并重新执行步骤3-6 10到15次
  7. 重命名该文件,然后将其删除

这是怎么做的? 因为我在橡皮擦中读到了“Gutmann 25 pass”的名字,所以我猜25是文件被覆盖的次数,’Gutmann’是随机化算法?

没有操作系统的合作,你不能安全地做到这一点 – 而且往往不是这样。

当你打开一个文件并写入它时,无法保证操作系统会将新文件放在与旧文件相同的旋转生锈位上。 即使它确实如此,您也不知道新写入是否会像以前一样使用相同的簇链。

即使这样,你也不确定驱动器是否由于某些故障而没有映射出磁盘块 – 将你的世界统治计划留在标记为坏但仍然可读的块上。

ps – 不再需要25x覆盖,在头部跟踪不良的旧低密度MFM驱动器上需要它。 在现代GMR驱动器上覆盖一次就足够了。

是的,事实上它正在覆盖文件上的不同模式

它通过在要擦除的区域上写入一系列35个图案来实现。

模式的选择假定用户不知道驱动器使用的编码机制,因此包括专门为三种不同类型的驱动器设计的模式。 知道驱动器使用哪种编码类型的用户只能选择那些用于驱动器的模式。 具有不同编码机制的驱动器将需要不同的模式。

更多信息在这里 。

@Martin Beckett是对的; 除非你知道硬件在驱动器上一直在做什么,否则就会出现“安全删除”这样的问题。 (即使在那时,我也不会对资源充足的攻击者在获得物理媒体的情况下可以恢复的事情下注。)

但假设操作系统和磁盘将重复使用相同的块,您的方案不能用于更基本的原因: fflush通常不会向磁盘写入任何内容。

在大多数多任务操作系统(包括Windows,Linux和OS X)上, fflush仅强制将数据从用户空间缓冲区强制进入内核。 然后内核将自己进行缓冲,只有在感觉到它时才写入磁盘。

例如,在Linux上,您需要调用fsync(fileno(handle)) 。 (或者首先使用文件描述符。)OS X类似。 Windows有FlushFileBuffers

结论:您描述的循环很可能只是覆盖内核缓冲区10-15次而不是磁盘上的文件。 在C或C ++中没有可移植的方法来强制数据到磁盘。 为此,您需要使用依赖于平台的界面。

MFT(主文件表)类似于FAT(文件分配表),MFT保存记录:磁盘上的文件偏移,文件名,日期/时间,id,文件大小,甚至文件数据,如果文件数据适合记录的空白区域,即大约512个字节,1个记录大小是1KB。

注意:新HDD数据设置为0x00。(只是让你知道)

假设您要覆盖file1.txt OS MFT在记录中找到此文件偏移量。 你开始用二进制模式下的二进制(00000000)覆盖file1.txt。

您将覆盖磁盘上的文件数据100%这就是MFT在磁盘上有文件偏移的原因。 在您重命名并删除之后。

注意:MFT会将文件标记为已删除,但您仍然可以获得有关此文件的一些数据,即日期/时间:创建,修改,访问。 文件偏移,属性,标志。

 1- create folder in c:\ and move file and in same time rename in to folder( use rename function ) rename file to 0000000000 or any another without extention 2- overwrite file with 0x00 and check if file was overwrited 3- change date/time 4- make without attributes 5- leave file size untouched OS faster reuse empty space. 6- delete file 7- repeat all files (1-6) 8- delete folder or (1, 2, 6, 7, 8) 9- find files in MFT remove records of these files. 

Gutmann方法适用于较旧的磁盘技术编码方案,并且Gutmann方法的35遍擦拭方案不再需要,即使Gutmann承认也是如此。 请参阅:Gutmann方法: https ://en.wikipedia.org/wiki/Gutmann_method in the Criticism section,Gutmann讨论了这些差异。

通常最多可以进行几次随机传递以安全地删除文件(可能有额外的归零传递)。

thc.org中的secure-delete软件包包含用于安全擦除硬盘驱动器上的磁盘和inode空间的sfill命令。