2009-01-16 80 views
2

我需要安全地刪除我的輸入文件,一旦我完成它,此刻我用零覆蓋所有的數據,這是混亂的,因爲我的臨時文件夾變得充滿舊文件也文件的名稱是一個安全問題。在delphi7中安全地刪除文件

我不希望將它們移動到回收站,我希望它們跳過它並且消失,這與數據恢復軟件可以從回收站之外恢復項目一起擦除字節明智。由於名字也很重要,我需要在刪除它們之前重命名它們。

回答

9

這是一個漸進性問題。一個應用程序的「安全」對另一個應用程序來說是不安全的。如果安全性是真的很重要並且您發現自己在Stack Overflow上提出這些問題,那麼很可能需要與外部安全顧問簽約。真正重要的例子包括財務信息,醫療記錄或任何有法律或合同要求保護數據的地方。我並不是說這是卑鄙的,也不是說你沒有能力解決問題,而是指出這是一個相當複雜和不斷演變的問題。

基本上完成你想要完成的任務:

  1. 一旦你的代碼寫的結束,然後改變文件大小爲空 - 這使復甦更加困難,因爲原始文件的大小都將丟失。
  2. 然後將文件(RenameFile)重命名爲不同的名稱。
  3. 最後使用刪除文件DeleteFile,它不會將文件移動到回收站。

請確保您在磁盤上的文件整個時間都保持獨佔句柄,或者它們可以在被刪除之前被複制。

正如我所說,這是一個漸進性問題。這是一個非常基本的解決方案,並且存在一些漏洞。因此,根據所需的安全級別,您可能會考慮不讓文件寫入磁盤或使用多次傳遞覆蓋。如果安全性非常重要,那麼實際上在高溫下刻錄硬盤驅動器,然後粉碎它是唯一確定的方法。

編輯:看來你刪除了你的代碼示例。

+0

只是一個說明:有一項科學研究表明,多遍重寫只是浪費時間。一次覆蓋具有相同的結果和有效性。 http://www.springerlink.com/content/408263ql11460147/ – liggett78 2009-01-16 21:24:52

0

刪除文件可以是敏感話題......

根據我想指向Data remanence現象,需要你的客戶。這是簡單覆蓋後剩下的殘留數據。 Data erasure是一種銷燬殘留數據的方法。

關於如何清除殘留數據有幾個標準,DoD 5220.22-M大多數是由「安全文件刪除」應用程序引用的,但顯然是the rules have changed

由於DSS Ç& SM的2007年6月版的,重寫不再 可接受 磁介質進行消毒;只有消磁或者物理破壞是可以接受的。

所以我說的是,嘗試獲得客戶必須遵守的規則。

1

有些第三方實用程序可以通過命令執行此類操作 - 我發現PGP Command Line具有此功能,如果您在附近搜索,則可能會找到一個免費的應用程序,它將從命令行執行此操作。然後您可以從您的應用程序調用該命令以安全地刪除該文件。

我會說,如果你堅持寫自己的代碼來做到這一點,那麼,而不是使用全0,隨機字節寫入磁盤。不要使用內置的C++ rand函數,使用更安全的隨機數生成器。

正如吉姆麥凱思所說,如果出現嚴重的法律後果使其錯誤,這不是你想要做的事情。

1

Jim已經很好地描述了在代碼中解決問題的問題。問題確實是漸進式的,任何你實現的解決方案都只能達到完全的安全性,而不能達到目標。因此,有一件事要做的就是準確地確定你需要什麼來保護文件(窺探家庭成員?同事?企業間諜活動?極權政府?),然後相應地設計你的解決方案並記錄它的侷限性。

雖然我有一種正交的建議。除了在代碼中實施安全擦除或者除此之外,您還可以要求用戶進行合作。例如,您可以建議(或要求)將輸入文件存儲在加密捲上。在企業環境中,PGP Disk可能是首選,因爲它是一個可識別的品牌,而家庭用戶則可以很好地使用免費且經過充分測試的TrueCrupt。這兩款產品都支持創建虛擬加密卷以及加密整個分區。即使在您編寫單行代碼之前,這也會很長時間保持輸入文件的名稱和內容的安全。

+1

**警告:[TrueCrypt現已棄用](http://truecrypt.sourceforge.net/)**。 – Sam 2014-08-10 10:05:53

0

請注意閃存中使用的「損耗均衡」算法。爲了促進均勻磨損,文件會在驅動器中移動,並且它對應用程序甚至操作系統都是不可見的。因此,您可以「安全刪除」文件,而只會影響文件的最新副本。但以前的副本可通過恢復軟件恢復/發現。所以解決這個問題的唯一方法就是加密文件內容。

相關問題