2011-10-13 43 views
5

安全文件刪除用C安全文件刪除用C

我需要安全地刪除在C文件,這裏是我做的:

  1. 使用fopen獲取文件的句柄
  2. 計算使用尺寸lseek/ftell
  3. 得到根據隨機種子上當前時間/或文件大小
  4. 寫(尺寸)從一個循環機智字節到該文件^ h 256個字節寫入每個迭代
  5. fflush/fclose文件句柄
  6. 重新打開該文件,然後重新執行步驟3-6爲10〜15倍
  7. 重命名文件然後將其刪除

是這是如何完成的?因爲我在橡皮擦中讀到了「Gutmann 25 passes」的名字,所以我猜25是文件被覆蓋的次數,'Gutmann'是隨機化算法?

+0

請注意,至少,您必須打開文件進行更新。但即使如此,您也無法保證更新的扇區會被寫回相同的位置。 (事實上​​,幾乎肯定不會像SSD一樣)。 –

回答

8

如果沒有操作系統的配合,你就無法安全地做到這一點 - 而且即使不是那樣。

當你打開一個文件並寫入文件時,不能保證操作系統將把新文件放在與舊文件相同的旋轉鏽位上。即使這樣做,您也不知道新寫入是否會使用與之前相同的羣集鏈。

即使那時你也不確定驅動器是否因爲某些故障而沒有映射出磁盤塊 - 將你的計劃留在被標記爲壞但仍然可讀的塊上。

ps - 25x覆蓋不再是必需的,它在舊的低密度MFM驅動器上需要較差的磁頭跟蹤。在現代GMR驅動器上重寫一次就足夠了。

+0

那個讓我對硬盤的工作方式產生了想象:S,完全!所以,如果有什麼解決方案,你認爲解決方案是什麼? – killercode

+0

@killercode適用於某個文件使用磁盤塊的操作系統相關部分 - 然後您可以使用操作系統功能執行此操作,該功能會告訴您使用哪些磁盤塊並可以覆蓋它們。對於磁盤上的壞塊映射,尤其是在損耗均衡的SSD上,那麼唯一的安全刪除是一個非常大的錘子! –

+0

讓我對硬盤的工作原理有所瞭解 - 簡單來說這是正確的,但是文件系統和磁盤可以在幕後做很多優化。 –

1

是的,事實上,它覆蓋上的文件

它是通過在 區中寫入了一系列的35種模式被擦除ň不同的模式。

的模式選擇假定用戶不知道通過該驅動器中使用的 編碼機制,所以包括專門爲三種不同類型的驅動器的設計圖案 。知道驅動器使用哪種類型的編碼的用戶可以僅選擇那些用於其驅動器的模式 。具有不同編碼 機制的驅動器將需要不同的模式。

更多信息here

1

@馬丁貝克特是正確的;除非您知道硬件在硬盤上的所有操作,否則就有「安全刪除」的情況。 (即便如此,我也不會對賭注充足的攻擊者在獲得物理媒體時能夠恢復的情況下下賭注。)

但是,假設操作系統和磁盤將重新使用相同的塊,則您的方案不能用於更基本的原因:fflush通常不會向磁盤寫入任何內容。在大多數多任務操作系統(包括Windows,Linux和OS X)上,fflush只是強制數據從用戶空間緩衝區進入內核。內核然後會自己做緩衝,只有在感覺到時才寫入磁盤。

例如,在Linux上,您需要撥打fsync(fileno(handle))。 (或者首先使用文件描述符。)OS X是類似的。 Windows有FlushFileBuffers。底線:你描述的循環很可能僅僅是覆蓋內核緩衝區10-15次而不是磁盤上的文件。在C或C++中沒有可移植的方式來強制數據到磁盤。爲此,您需要使用平臺相關的界面。

0

Gutmann方法適用於較舊的磁盤技術編碼方案,並且Gutmann方法的35遍擦拭方案不再需要,甚至Gutmann也承認。請參閱:Gutmann方法:批評部分中的https://en.wikipedia.org/wiki/Gutmann_method,其中Gutmann討論其差異。

通常只需進行幾次隨機傳遞即可安全刪除文件(可能還有一個額外的調零通道)。

來自thc.org的secure-delete軟件包包含sfill命令,用於安全擦除硬盤驅動器上的磁盤和inode空間。

+0

「目前沒有私人數據恢復公司聲稱它可以重建完全覆蓋的數據。」 - 我曾在一家數據恢復公司工作,雖然我們永遠不會說我們可以恢復文件,直到恢復文件,但有時我們能夠恢復部分文件,偶爾還能恢復整個文件。這個過程非常耗時,但是我們有一些程序可以幫助對文件進行一些高概率的排列。我承認,如果它被覆蓋或當頭部崩潰時出現腐敗,我們無法在90%的時間內恢復任何使用。 – Chad

0

MFT(主文件表)FAT(文件分配表), MFT保持記錄類似:磁盤上的文件偏移量,文件名,日期/時間,ID,文件大小,甚至文件的數據,如果文件數據適合512字節左右的記錄空間,1記錄大小爲1KB。

注:新的硬盤數據設置爲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.