我想開發一個應用程序,可以打開文件並替換物理位置中的所有字節,以便使恢復變得困難(某種數據刮水器)。 所以我怎麼能確定,如果我打開一個文件QFile
這是NMB,並寫入nMB的虛擬數據,這些數據將被覆蓋在相同的物理位置(在Windows和Linux)?如何確保QFile在相同的物理地址上寫入?
回答
對於「通常」文件系統,在HDD驅動器上,它應該足以只是尋求文件的開頭並寫入適當的字節數。他們將被放置在相同的位置。
然而,這是非常難以做到,這個方式SSD,因爲你需要處理write aplification,當數據沒有實際寫入到同一位置,即使操作系統認爲它是。相反,對於SSD,應使用TRIM命令,該命令可將塊標記爲空閒狀態,並且SSD控制器將用零重寫它們以便稍後重新使用它們。在現代文件系統中,例如ext4
或ntfs
它已經爲刪除的文件完成。
恢復,在HDD上你的方法是好的和適用的。對於SSD,它只會製作數據的一些副本,所以我最好避免這種情況,只是刪除文件,希望FS驅動程序會爲我發送TRIM到SSD控制器。
這種XY問題的氣味:你真正想要的是使數據無法訪問。覆蓋文件本身的數據只是其中一種可能的方法。
另一種方法是使問題更小:不要僅僅覆蓋文件,也不要將它作爲明文存儲,而是加密使用AES。只要您的密鑰不可訪問,數據就無法訪問。密鑰很小 - 大小爲16到32字節。
失去這樣一個小關鍵要容易得多。
我發現的一種方法很好,就是將密鑰的字節分佈在足夠長的文件系統的幾個密鑰文件中,以便使用專用塊。 128kb似乎足夠了。即使用16個密鑰文件,每個128kb,存儲16個字節長的密鑰。內存映射關鍵文件,以便文件系統可能爲它們分配專用塊,而不是與其他數據合併。首次使用時,用隨機數據填充密鑰文件。
對於您存儲的每個密鑰,將其分佈在密鑰文件中,將每個文件中的密鑰的一個字節放在相同的偏移量處。即key[key_no][key_offset] <-> key_file[key_offset][key_no]
。要丟失受保護的文件,請用隨機數據覆蓋其密鑰。每個受保護的文件都有一個密鑰 - 不共享密鑰。
攻擊者需要在同一時間點恢復多個密鑰文件的先前內容。即使他們能夠成功恢復幾個密鑰文件,每個恢復的密鑰文件也只能提供密鑰的1/16,並使暴力成本減少256倍。
- 1. 寫入物理內存地址
- 2. 如何確保UNIX套接字連接到相同的地址
- 3. 測試對象相等,即相同的物理地址?
- 4. 爲什麼在運行中物理地址是相同的?
- 5. 在c程序中打印相同的物理地址
- 6. Qt,QFile在特定行上寫入
- 7. 兩個進程中兩個相同的虛擬地址如何映射到不同的物理地址?
- 8. Block在Windows上訪問物理地址
- 9. kmalloc如何返回大於物理地址大小的物理地址?
- 10. 保護模式和物理地址
- 11. 虛擬和物理地址空間是相同的
- 12. 如何在C/C++中訪問VXworks上的物理地址?
- 13. 如何在C中的Linux上訪問物理地址?
- 14. 物理地址上的ioremap失敗
- 15. 如何將物理地址映射到不同大小的虛擬地址?
- 16. 是不是07C0:0000,x86機器上的物理地址與0000:7C00相同?
- 17. 如何將elf中的地址轉換爲物理地址
- 18. 如何使用C#獲取IP地址的物理(MAC)地址?
- 19. 我們可以寫入物理地址linux
- 20. 如何使用物理地址
- 21. JAVA中的物理地址
- 22. 物理地址與虛擬地址
- 23. 線性地址和物理地址
- 24. 物理地址到IP地址
- 25. 如何使用O_DIRECT將內核空間內存(物理地址)寫入文件?
- 26. 如何在每個頁面的地址欄中保留相同的網址?
- 27. 如何確保兩個地址的最低有效位4位相同?
- 28. 如何設置相對地址在JAVA中寫入文件?
- 29. 如何將這些邏輯地址轉換爲物理地址?
- 30. 如何將此邏輯地址轉換爲物理地址?