我正在看一些代碼(安全)擦除硬盤。我注意到在查看不同的方法時(Infosec 5,DoD 5220.22-M等)我讀了「驗證寫入」。擦除硬盤時是什麼意思「驗證寫入」?
例子:
https://www.lifewire.com/dod-5220-22-m-2625856
通過3:寫一個隨機字符,並驗證寫入
https://en.wikipedia.org/wiki/Infosec_Standard_5#cite_note-5
不管使用哪個水平,驗證是需要確保 表示覆蓋成功。
我的問題是,它是什麼技術暗示?
如果寫入的字節與塊的大小相等(似乎很快),那麼您是否只是檢查一下您寫入數據塊的時間?
如果讀取的數據塊與寫入的數據塊完全相同,是否讀回您寫入的塊並比較(memcmp?)?
我忽略了其他解決方案嗎?
這裏有點樣品代碼來說明我的問題。哪種解決方案會顯示「在寫入時驗證」?如果你只檢查返回值(從write
)可以你可以肯定,只要匹配塊的長度即全部字節確實寫入?擦除硬盤的時候
// erasure example
// erasure single block, start from 0
// block size
unsigned long block_size = 512;
// data-block we will write
char block[block_size];
// zero the block
bzero(&block, block_size);
// open device
int fd = open('/dev/sdb', O_RDWR);
// write 1st block
int bytes_written = write(fd, &block, block_size);
// verify option: A
if (bytes_written == block_size) {
// all good
}
// verify option B
// go back the number of bytes-wtitten from the current pos.
lseek(fd, -1 * bytes_written);
// read the same number of bytes
int bytes_read = read(fd, &block, bytes_written);
// should be same
if (bytes_read == bytes_written) {
// here code to check i block indeed contains zero's
// use memcmp ?
}
謝謝,我的觀點是更多的是,返回值(如果block_size == write(...))在擦除規範中是否符合驗證條件。 – Roger
@Rogier - 是,無論哪種方法,if(block_size == write(...))或if(bytes_written == block_size)都是一個明確的指示(_validation_)_change_已被創建。其他步驟,例如'memcmp(...)'只會提供額外的驗證,並且完全可以選擇用於您的目的,IMO。爲了使這些想法更清楚,我修改了我的答案。 – ryyker
@Rogier - 我很好奇你的頭像圖片是_ [Thunder Mustang](http://www.thundermustang.com/)_還是全尺寸的二戰飛機? – ryyker