2016-12-14 27 views
0

我正在看一些代碼(安全)擦除硬盤。我注意到在查看不同的方法時(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

不管使用哪個水平,驗證是需要確保 表示覆蓋成功。

我的問題是,它是什麼技術暗示?

  1. 如果寫入的字節與塊的大小相等(似乎很快),那麼您是否只是檢查一下您寫入數據塊的時間?

  2. 如果讀取的數據塊與寫入的數據塊完全相同,是否讀回您寫入的塊並比較(memcmp?)?

  3. 我忽略了其他解決方案嗎?

這裏有點樣品代碼來說明我的問題。哪種解決方案會顯示「在寫入時驗證」?如果你只檢查返回值(從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 ? 
} 

回答

0

什麼意思「驗證寫入」?

Here

write(...)功能嘗試寫入從緩衝器爲nbytes與手柄相關聯的 文件。在文本文件上,它將每個LF擴展爲一個 CR/LF。

該函數返回寫入文件的字節數。返回 值-1表示錯誤,並適當地設置了errno。

在你的榜樣

所以,int bytes_written = write(fd, &block, block_size); 價值爲bytes_written,如果等於塊大小,驗證塊的所有存儲器位置已經被寫入

而且在回答你的其他問題:

  • (1)經常檢查非空函數的返回值,無論如何,並沒有顯著的效率和速度的損失通過簡單地進行比較兩個int值。你甚至可以一步完成,但我不確定這是否會提高效率(查看程序集以確定)。因此,而不是:

    // verify option: A
    if (bytes_written == block_size) { // all good }

    //你可以在同一行的比較:

    if(write(fd, &block, block_size) == block_size) { // all good }

  • (2)可選。它提供了一個額外的驗證選擇存儲塊包含新內容。

你可以找到的write()的this Linux man page更詳細的說明。

+0

謝謝,我的觀點是更多的是,返回值(如果block_size == write(...))在擦除規範中是否符合驗證條件。 – Roger

+0

@Rogier - 是,無論哪種方法,if(block_size == write(...))或if(bytes_written == block_size)都是一個明確的指示(_validation_)_change_已被創建。其他步驟,例如'memcmp(...)'只會提供額外的驗證,並且完全可以選擇用於您的目的,IMO。爲了使這些想法更清楚,我修改了我的答案。 – ryyker

+0

@Rogier - 我很好奇你的頭像圖片是_ [Thunder Mustang](http://www.thundermustang.com/)_還是全尺寸的二戰飛機? – ryyker