2017-04-14 32 views
1

我想開發一個應用程序,可以打開文件並替換物理位置中的所有字節,以便使恢復變得困難(某種數據刮水器)。 所以我怎麼能確定,如果我打開一個文件QFile這是NMB,並寫入nMB的虛擬數據,這些數據將被覆蓋在相同的物理位置(在Windows和Linux)?如何確保QFile在相同的物理地址上寫入?

回答

1

對於「通常」文件系統,在HDD驅動器上,它應該足以只是尋求文件的開頭並寫入適當的字節數。他們將被放置在相同的位置。

然而,這是非常難以做到,這個方式SSD,因爲你需要處理write aplification,當數據沒有實際寫入到同一位置,即使操作系統認爲它是。相反,對於SSD,應使用TRIM命令,該命令可將塊標記爲空閒狀態,並且SSD控制器將用零重寫它們以便稍後重新使用它們。在現代文件系統中,例如ext4ntfs它已經爲刪除的文件完成。

恢復,在HDD上你的方法是好的和適用的。對於SSD,它只會製作數據的一些副本,所以我最好避免這種情況,只是刪除文件,希望FS驅動程序會爲我發送TRIM到SSD控制器。

1

這種XY問題的氣味:你真正想要的是使數據無法訪問。覆蓋文件本身的數據只是其中一種可能的方法。

另一種方法是使問題更小:不要僅僅覆蓋文件,也不要將它作爲明文存儲,而是加密使用AES。只要您的密鑰不可訪問,數據就無法訪問。密鑰很小 - 大小爲16到32字節。

失去這樣一個小關鍵要容易得多。

我發現的一種方法很好,就是將密鑰的字節分佈在足夠長的文件系統的幾個密鑰文件中,以便使用專用塊。 128kb似乎足夠了。即使用16個密鑰文件,每個128kb,存儲16個字節長的密鑰。內存映射關鍵文件,以便文件系統可能爲它們分配專用塊,而不是與其他數據合併。首次使用時,用隨機數據填充密鑰文件。

對於您存儲的每個密鑰,將其分佈在密鑰文件中,將每個文件中的密鑰的一個字節放在相同的偏移量處。即key[key_no][key_offset] <-> key_file[key_offset][key_no]。要丟失受保護的文件,請用隨機數據覆蓋其密鑰。每個受保護的文件都有一個密鑰 - 不共享密鑰。

攻擊者需要在同一時間點恢復多個密鑰文件的先前內容。即使他們能夠成功恢復幾個密鑰文件,每個恢復的密鑰文件也只能提供密鑰的1/16,並使暴力成本減少256倍。

相關問題