The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何利用 md5sum 稽核重要檔案與驗證檔案完整性

要確認檔案是否被修改 (竄改) 並不是檢查檔案修改時間也不是檢查檔案大小,比較有效的方式是檢查檔案內容,但一一比對檔案內容成本過高,所以一般來說都會用 MD5 演算法將檔案內容計算出一個雜湊值(Hash),在 Linux 下最常見的工具就是 md5sum 工具,今天我就講幾個在 Windows 下的相關工具。

MD5summer - Windows MD5 Sum generator

這是 Windows 下的 GUI 工具,可以建立檔案雜湊(Create sums)以及驗證檔案雜湊(Verify sums)。

檔案雜湊(Create sums)的步驟如下:

1. 先選取目錄,並點選 Create sums

 MD5summer - Windows MD5 Sum generator

2. 選取要建立 md5sum 雜湊的檔案

Create list of files to sum

3. 將雜湊清單存檔,通常副檔名為 md5

將雜湊清單存檔,通常副檔名為 md5

驗證檔案雜湊(Verify sums)的步驟如下:

1. 先選取目錄,並點選 Verify sums

2. 接著直接選取之前產生的 md5sum 清單檔

選取之前產生的 md5sum 清單檔

3. 接著就會進行所有檔案驗證,不同的燈號代表不同的驗證狀態

image

若要對檔案驗證進行自動化,就必須搭配指令列(Command Line)工具,一般來說我們還是會用標準的 Windows 版 md5sum 工具來建立或驗證雜湊,只是 Windows 版的 md5sum 工具無法建立包含所有子目錄下的所有檔案,這時就要透過 md5deep 協助建立雜湊清單檔案。

我個人習慣用 md5deep 建立雜湊檔,用 md5sum 驗證雜湊與檔案,以下是一些常用的指令:

1. 利用 md5sum 驗證雜湊與檔案,執行過程如下範例:

G:\md5deep-3.4>md5sum -c md5deep-3.4.md5
CHANGES.TXT: OK
COPYING.TXT: OK
FILEFORMAT.TXT: OK
hashdeep.exe: OK
HASHDEEP.TXT: OK
md5deep.exe: OK
MD5DEEP.TXT: FAILED
sha1deep.exe: OK
sha256deep.exe: OK
tigerdeep.exe: OK
whirlpooldeep.exe: OK
md5sum: WARNING: 1 of 11 computed checksums did NOT match

G:\md5deep-3.4>echo %ERRORLEVEL%
1

在驗證完後可判斷 %ERRORLEVEL% 是否為 0 用以確認檔案驗證是否成功,一個簡單的批次檔範例:

@echo off
md5sum -c md5deep-3.4.md5 > nul
IF %ERRORLEVEL% NEQ 0 GOTO Error

echo 檔案驗證成功
GOTO End

:Error
echo 檔案驗證失敗

:End

2. 利用 md5deep 建立雜湊檔

建立相對路徑的 md5 清單

G:\>md5deep -r -l -k md5deep-3.4
93f97d08506ad4c0d2aa71a014b47192 *md5deep-3.4\CHANGES.TXT
c2c307215407ef12c442168c9fe8ab5c *md5deep-3.4\COPYING.TXT
28dbd4e02914185bec18195a0917460c *md5deep-3.4\FILEFORMAT.TXT
384814ae2fa5b6e5f5f7e546db0a94fc *md5deep-3.4\hashdeep.exe
c1a8ecc804c2305ce32f92ef744b42e6 *md5deep-3.4\HASHDEEP.TXT
434037609272560d708c4b0b339e19d5 *md5deep-3.4\md5deep.exe
e22fba1df1f02a9491ce09e419d91922 *md5deep-3.4\MD5DEEP.TXT
5dda92fb6df49c2c5d347476a2199e9d *md5deep-3.4\sha1deep.exe
9fcb347e5d7ff15ae4e6aff59282699d *md5deep-3.4\sha256deep.exe
63d218b204a03f9fe1b352ffd9b8616e *md5deep-3.4\tigerdeep.exe
ca1f58f199eb7ac933aa83f4408afcab *md5deep-3.4\whirlpooldeep.exe
4d51d0ac57a9b70118b5a91a3014a60c *md5deep-3.4\md5deep-3.4.md5
61858fa4654e224668ac14edec406209 *md5deep-3.4\verify.bat

建立完整路徑的 md5 清單

G:\>md5deep -r -k md5deep-3.4
93f97d08506ad4c0d2aa71a014b47192 *G:\md5deep-3.4\CHANGES.TXT
c2c307215407ef12c442168c9fe8ab5c *G:\md5deep-3.4\COPYING.TXT
28dbd4e02914185bec18195a0917460c *G:\md5deep-3.4\FILEFORMAT.TXT
384814ae2fa5b6e5f5f7e546db0a94fc *G:\md5deep-3.4\hashdeep.exe
c1a8ecc804c2305ce32f92ef744b42e6 *G:\md5deep-3.4\HASHDEEP.TXT
434037609272560d708c4b0b339e19d5 *G:\md5deep-3.4\md5deep.exe
e22fba1df1f02a9491ce09e419d91922 *G:\md5deep-3.4\MD5DEEP.TXT
5dda92fb6df49c2c5d347476a2199e9d *G:\md5deep-3.4\sha1deep.exe
9fcb347e5d7ff15ae4e6aff59282699d *G:\md5deep-3.4\sha256deep.exe
63d218b204a03f9fe1b352ffd9b8616e *G:\md5deep-3.4\tigerdeep.exe
ca1f58f199eb7ac933aa83f4408afcab *G:\md5deep-3.4\whirlpooldeep.exe
4d51d0ac57a9b70118b5a91a3014a60c *G:\md5deep-3.4\md5deep-3.4.md5
61858fa4654e224668ac14edec406209 *G:\md5deep-3.4\verify.bat

更完整的使用方式與範例可參考 Getting Started with md5deep 說明。

我目前運用 md5sum 在檔案備份與還原的領域以及驗證重要檔案是否被竄改,成效相當不錯,建議各位可以作為每日重要檔案稽核的標準作業流程(SOP)。

補充說明

由於 MD5 演算法在幾年前被一個中國大陸的數學家給破解(MD5 Collision),因此並非絕對安全,若不放心的人建議可使用 md5deep 套件內附的 sha256deep.exe 工具進行雜湊運算。

若要驗證使用 sha256deep.exe 工具所運算出來的雜湊值,可以利用 sha256sum.exe 工具進行驗證,用法跟 md5sum 一模一樣。sha256sum.exe 可以到 Win32 native md5sum, sha1sum, sha256sum etc. 下載。

相關連結