一、什麼是「雜湊」?用一句話講清楚

雜湊(Hash)是把任何大小的資料,透過「單向演算法」壓成一段固定長度的指紋。同一份檔案永遠得到同一個雜湊值;內容就算只改 1 個位元,雜湊值也會「大翻盤」。這個特性讓雜湊成為檔案完整性驗證、版本比對、資料去重與資安檢核的基礎工具。

重點:雜湊只能證明「內容有沒有被改」,不代表「檔案一定安全」。要更安心,還要搭配「程式碼簽章」與多引擎掃描。

二、為什麼要看雜湊?三個最實用的場景

場景 怎麼做 帶來的保障
驗證下載檔沒被掉包 下載後用本機算 SHA-256,對照官方公布的值 內容一致 → 傳輸途中未被更改或置換
快速比對兩個檔案是否相同 分別計算雜湊,比對兩串指紋 秒判斷是否同一版本、是否重複
事件調查與回報 回報檔案的 SHA-256 給廠商或資安團隊 可精準鎖定同一份檔案、建立追蹤紀錄

三、常見雜湊演算法:該選哪一個?

  • MD5:速度快,但已出現碰撞(兩份不同內容得到同一雜湊)。不建議用於安全性驗證
  • SHA-1:安全性亦不足(已有實證碰撞)。不建議
  • SHA-256 / SHA-512(SHA-2 家族):目前最常見、可靠度高,建議首選
  • SHA-3(Keccak):新一代設計,需求或政策要求時可採用。
實務建議:下載驗證請以 SHA-256 為主;若官方同時提供 SHA-512 也可加驗。

四、通用流程:下載檔如何「正確比對」雜湊

  1. 先找官方公布的雜湊值:在官網下載頁或發佈頁,找到該檔案的 SHA-256
  2. 在本機計算雜湊:用系統內建工具(Windows PowerShell、macOS / Linux 終端機)。
  3. 逐字比對:比對長度與每一個十六進位字元(不分大小寫)。
  4. 不一致怎麼辦?:重新下載(換網路/瀏覽器),避免下載器;仍不一致就停止安裝、聯繫廠商。
  5. 更嚴謹:同時檢查「程式碼簽章」與執行離線掃描。

五、Windows 實作(PowerShell):算 SHA-256 與驗證簽章

在檔案所在資料夾按住 Shift+右鍵選「在這裡開啟 PowerShell」,或在「開始」搜尋 PowerShell 進入。

1)計算 SHA-256

Get-FileHash .\安裝檔名稱.exe -Algorithm SHA256

輸出會包含 AlgorithmHashPath。其中 Hash 就是你要比對的 64 位十六進位字串。

2)驗證程式碼簽章(加分但很重要)

Get-AuthenticodeSignature .\安裝檔名稱.exe | Format-List *

重點欄位:

  • Status 應為 Valid
  • SignerCertificate.Subject:發行者名稱(應與官方一致)
  • TimeStamperCertificate:通常會有時間戳服務(代表簽章時間)
提醒:簽章有效 ≠ 一定安全,但「無簽章」或「簽章無效/怪異發行者」就應提高警覺。

3)多檔案批次計算

Get-ChildItem *.exe | Get-FileHash -Algorithm SHA256 |
  Format-Table Path, Hash

六、macOS 實作(終端機):shasum -a 256

開啟「終端機」,切到檔案所在資料夾:

cd ~/Downloads
shasum -a 256 安裝檔名稱.dmg

輸出為:雜湊值 空格 檔名。將雜湊值與官方公布的比對即可。

可選:若偏好 GNU 工具,可用 Homebrew 安裝 coreutils,取得 sha256sum
brew install coreutils
sha256sum 安裝檔名稱.dmg

七、Linux 實作:sha256sum 與批次比對

1)單一檔案

sha256sum install-file.tar.xz

2)批次檔案

sha256sum *.AppImage

3)比對官方提供的 .sha256 清單

許多發行版會提供 檔名.sha256 清單,可直接檢核:

sha256sum -c 檔名.sha256
# OK 代表比對成功;FAILED 代表不一致

八、常見陷阱與除錯:為什麼雜湊對不起來?

  • 比到錯檔:官方雜湊對應的是「完整安裝檔」,你卻拿「下載器(stub)」去比,必然不一致。
  • 大小寫、空白:雜湊值大小寫不影響,但請勿多貼空白或換行;也別漏掉開頭或結尾幾個字元。
  • 重新封裝:Zip 檔解壓後的單一檔案雜湊,當然與整個 Zip 的雜湊不同;要比就比同一個檔。
  • 下載過程被攔截改導:公用 Wi-Fi、瀏覽器外掛、代理可能替你換了鏡像;換條線、換個瀏覽器重下。
  • CDN 版本切換:官方在同一路徑替換了版本,但網頁尚未更新雜湊值。等官網更新或向窗口索取最新雜湊。
  • MD5 / SHA-1 遺留:老頁面只給 MD5/SHA-1,不建議作為安全依據;至少找 SHA-256。
  • 文字檔跨系統換行:TXT 在 Windows(CRLF)與 Unix(LF)換行不同,雜湊自然不同;這是正常現象
故障排除順序:重新下載 → 換瀏覽器/網路 → 比對正確檔案 → 檢查是否下載器 → 聯絡官方索取最新 SHA-256 與簽章資訊。

九、進階:.sha256 清單、批次驗證與自動化

1)自行產生 .sha256 清單(Linux / macOS)

sha256sum *.zip > myfiles.sha256
# 之後可用
sha256sum -c myfiles.sha256

2)Windows 批次比對:用 PowerShell 產出與驗證

產出清單:

Get-ChildItem *.msi | ForEach-Object {
  $h = Get-FileHash $_.FullName -Algorithm SHA256
  "$($h.Hash) *$($_.Name)"
} | Set-Content myfiles.sha256

驗證(簡易比對):

# 讀清單逐一比對目前資料夾檔案
Get-Content .\myfiles.sha256 | ForEach-Object {
  $parts = $_ -split '\s+\*'
  $hashExpect = $parts[0]
  $name = $parts[1]
  if(Test-Path $name){
    $hashActual = (Get-FileHash $name -Algorithm SHA256).Hash
    if($hashActual -ieq $hashExpect){ "{0}  OK" -f $name } else { "{0}  FAILED" -f $name }
  } else {
    "{0}  MISSING" -f $name
  }
}

3)搭配簽章檢查(Windows)

Get-ChildItem *.exe | ForEach-Object {
  $sig = Get-AuthenticodeSignature $_.FullName
  "{0}`t{1}" -f $_.Name, $sig.Status
}

十、FAQ:雜湊 vs. 加密、MD5 還能用嗎、只下載未執行會中毒?

Q:雜湊跟「加密」一樣嗎?
A:不一樣。雜湊是單向的「指紋」,無法反推原文;加密是可逆的,重點是保密與授權解密。

Q:只提供 MD5 可以嗎?
A:不建議作為安全依據。MD5 與 SHA-1 都曾被攻破(可產生碰撞)。若只有 MD5,至少再找 SHA-256;找不到就不要把「一致」當成安全保證。

Q:SHA-256 會不會也有碰撞?
A:理論上可能,但以目前計算能力與研究進展,實務上仍被視為可靠。對一般下載驗證來說,足夠。

Q:有人能「改過檔案,卻讓 SHA-256 還是一樣」嗎?
A:對攻擊者而言是極難的(稱作「第二原像攻擊」)。所以我們才選擇 SHA-256 這類抗碰撞設計的演算法。

Q:只下載、未執行 EXE,會中毒嗎?
A:通常不會。雜湊不會讓檔案自動執行;但若掃描報告顯示惡意特徵,依內部流程仍要先隔離、驗證,再決定是否刪除或提交樣本。

Q:官方頁面顯示的 SHA-256 跟我算出來不同,但重新下載後就一樣了,這正常嗎?
A:可能是下載過程中斷或 CDN 節點尚未同步。確定一致後再進行安裝即可;若屢次不一致,要聯繫官方。

Q:要把雜湊值公開到網路上嗎?
A:若是開源或公開發佈,通常會;企業內部檔案則視保密等級。重點是:雜湊值本身不含機密內容。

十一、下載前後安全檢查清單(快速版)

  • 僅從官方頁面下載,避免第三方轉載或不明「加速器」。
  • 先找到官方公布的 SHA-256
  • 下載後,用系統工具本機計算雜湊
  • 比對完全一致,且(若有)程式碼簽章為 Valid、發行者正確。
  • 若你的資安工具仍警示:先隔離、留存雜湊與檔案、做離線掃描、再與廠商確認是否誤報。

十二、結語與延伸閱讀

雜湊不是高深理論,它是在下載、部署、事件通報中每天都會用到的「檔案指紋」。把「先找官方 SHA-256 → 本機計算 → 嚴格比對 →(選配)看簽章」變成習慣,就能大幅降低被掉包與供應鏈攻擊的風險,也能在發生疑慮時迅速與對方對齊證據、釐清狀況。

小提醒:雜湊值一致,只代表「內容一致」;要判斷「是不是好東西」,仍要看簽章、來源、與後續行為(如離線掃描與沙箱觀察)。

延伸閱讀(外部連結)

文章標籤
全站熱搜
創作者介紹
創作者 小黃老師 的頭像
小黃老師

小黃老師嘿技術

小黃老師 發表在 痞客邦 留言(0) 人氣(344)