iT邦幫忙

2026 iThome 鐵人賽

DAY 25
0
Security

那些留在電腦裡的證據:從零開始認識數位鑑識系列 第 25 篇

[DAY 25] 檔案有沒有被動過?Hash 怎麼幫我們驗證數位證據

  • 分享至 

  • xImage
  •  

前面在製作 Forensic Image 時,其實已經碰過很多次 Hash。

當時我們知道,製作完映像檔後通常還會進行 Verification,確認取得的資料沒有在複製過程中發生改變。

今天就把 Hash 單獨拉出來看。

Hash 是什麼?

Hash 可以把一份資料經過特定的 Hash Algorithm 計算後,產生一串固定長度的值,這串結果就是 Hash Value(雜湊值)。

不管原本是一個幾 KB 的文字檔,還是一個幾 GB 的檔案,只要使用相同的 Hash Algorithm,最後產生的 Hash 長度都會固定。

常見的 Hash Algorithm 有 MD5、SHA-1 和 SHA-256。

Algorithm Hash 長度
MD5 128 bit
SHA-1 160 bit
SHA-256 256 bit

例如一個檔案經過 SHA-256 計算後,可能得到:

7F83B1657FF1FC53B92DC18148A1D65DFC2D4B1FA3D677284ADDD200126D9069

SHA-256 的結果是 256 bit,因此我們平常看到的會是一串 64 個十六進位字元。

如果同一份資料沒有被修改,再使用相同演算法計算一次,得到的結果也會相同。

所以 Hash 有時候會被形容成資料的數位指紋。

檔案只改一點點,Hash 也會跟著變

Hash 很適合拿來做完整性驗證,其中一個原因就是資料只要發生變化,重新計算後通常就會得到完全不同的結果。

假設原本的文字內容是:

Digital Forensics

現在只是把最後一個字母改成大寫:

Digital ForensicS

肉眼看起來只差了一個字元,但兩份資料重新計算 SHA-256 後,得到的 Hash 會完全不同。

甚至從更底層來看,只要資料有一個 bit 被改變,都會影響最後的 Hash 結果。

這也是 Hash 在數位鑑識裡很重要的原因。

鑑識人員不需要自己一個 Byte、一個 Byte 去比較兩份檔案,只要分別計算 Hash,就可以快速確認兩份資料內容是否一致。

用 Windows 自己試一次

其實不用另外安裝大型鑑識工具,Windows PowerShell 就可以直接計算檔案的 Hash。

假設目前有一個 evidence.txt,檔案內容為 Digital Forensics 。

可以執行:

Get-FileHash .\evidence.txt -Algorithm SHA256

https://ithelp.ithome.com.tw/upload/images/20261010/20146591PSPOXpYWaJ.png

得到 Hash 值:

C6D9C5E82883FF2716F1295235F334F96DE7A1EE4647600FA031C10F6A84F381

接著打開 evidence.txt,把檔案內容改成 Digital ForensicS,再執行一次相同指令。

https://ithelp.ithome.com.tw/upload/images/20261010/20146591ufhzZPsWFi.png

這時候就會發現,重新計算出來的 Hash 變成:

1B14E5EA1D1B4C4796637512B7B5C0E9012380E46A08AA2DFE16A57338E56E9F

如果一開始記錄的 SHA-256 跟重新計算的不一致,就代表這份資料和原本計算 Hash 時的內容已經不一樣。

Hash 在數位鑑識裡怎麼用?

前面製作 Forensic Image 時,其實就是一個很典型的例子。

我們取得數位證據時,不只是把資料複製出來而已,還必須確認擷取出來的內容沒有因為 Acquisition 過程而發生非預期的變化。

概念上可以理解成:

Original Evidence
      ↓
Acquisition
      ↓
Forensic Image
      ↓
Verification

Hash 可以用來協助確認取得的資料是否與當初讀取到的內容一致。

而且這件事情並不是只有製作 Image 的當下才重要。

假設一份 Evidence Image 取得之後,被複製到另一顆硬碟、移到分析工作站,甚至隔了一段時間之後才開始進行鑑識,都可以再次進行完整性驗證。

如果驗證結果仍然一致,就代表目前準備分析的資料,和原本保存下來的內容一致。

E01 的 Hash 不要和一般檔案 Hash 搞混

前面使用 FTK Imager 時,我們曾經接觸過 E01。

這裡有一個地方很容易混淆。

E01 本身是一種 Evidence File Format,除了擷取到的資料之外,裡面還會包含其他鑑識相關資訊,並具有自己的完整性驗證機制。

因此不能單純理解成原始硬碟的 Hash 一定等於 Evidence.E01 這個檔案本身的 Hash。

如果直接對 Evidence.E01 這個檔案使用 Get-FileHash,算出來的是這個 E01 檔案本身的 Hash。

但鑑識工具在 Acquisition 和 Verification 階段所驗證的,是被擷取資料的完整性。

這兩個概念不完全一樣。

所以在做鑑識時,除了看到一串 Hash 之外,也要先確認這個 Hash 到底是在驗證什麼資料。

Hash 一樣,可以證明什麼?

假設今天取得一份檔案後,先記錄它的 SHA-256。

過了一個月之後,再對同一份檔案計算一次,結果是相同的。

這時我們可以說,這份資料和當初計算 Hash 時的內容一致。

但Hash 驗證的是資料的完整性,不是直接證明這份資料的真實性。

例如有人交給你一個 secret.docx,你第一次拿到時就計算 SHA-256,之後再算一次仍然得到相同結果。

這只能告訴你,兩次計算之間檔案內容沒有改變。

但光靠這串 Hash,還是無法得知這個檔案原本來自哪一台電腦、是誰建立的、取得之前有沒有被修改過,也不知道它和正在調查的事件到底有沒有關係。

所以 Hash 很重要,但它只能回答這份資料和我先前記錄的那份資料,內容是不是一致的,至於這份資料從哪裡來、和誰有關、能不能證明某件事情,還需要搭配其他數位證據一起判斷。

改檔名,Hash 會變嗎?

假設原本有一個 secret.txt,現在把它重新命名成 homework.txt 但檔案內容完全沒有改變。

使用 Get-FileHash 計算出來的 Hash 通常也不會改變。

因為這類工具計算的是檔案內容本身,只是改變檔名、移動檔案位置,或讓 NTFS 的部分 Metadata 發生變化,並不代表檔案裡面的內容會跟著改變。

反過來說,就算檔名完全一樣,只要檔案內容被修改,重新計算的 Hash 就可能完全不同。


上一篇
[DAY 24] 當證據開始「說謊」:認識 Anti-Forensics
下一篇
[DAY 26] 不用大型工具也能查?用 Windows 指令做 Live Triage
系列文
那些留在電腦裡的證據:從零開始認識數位鑑識 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言