03 / 指南
用校驗碼驗證下載與檔案完整性
加密雜湊究竟證明什麼、為什麼 MD5 和 SHA-1 如今只能用於完整性、一步步核驗安裝包,以及如何在本機計算敏感文字的雜湊而不上傳。
完整性,而非來源真實性
加密雜湊把任意輸入變成定長指紋。在一個 1 GB 檔案的任意位置翻轉一個位元,摘要就會完全改變,因此比對摘要能精確檢驗兩份檔案副本是否逐位元組一致。
- 完整性得證完整性得證:如果你的摘要與發佈的一致,你的副本就是發佈者雜湊的那個檔案,傳輸與寫入過程中沒有任何損壞。
- 真實性另算真實性不在其列:印在下載旁邊的校驗碼說明不了檔案是誰寫的——能替換下載的攻擊者也能替換印出來的校驗碼。
- 簽章是另一種工具真實性需要另一套機制:用你已信任的金鑰驗證簽章,或者經由比下載本身更可信的管道遞送校驗碼。
MD5 與 SHA-1 如今只用於完整性
MD5 產出 128 位元摘要,寫作 32 個十六進位字元;SHA-1 產出 160 位元,40 個字元。兩者都很快,用來發現意外損壞都沒問題——但兩者都已有公開演示的碰撞,因此都無法抵抗刻意構造同摘要惡意檔案的攻擊者。
實用規則:MD5 或 SHA-1 相符仍然能抓住截斷的下載或出故障的磁碟,因為意外不會去計算碰撞。這些演算法再也做不到的,是為你有理由懷疑的檔案背書——這個判斷如今屬於 SHA-256 或更強的演算法。
- MD5 已破MD5 碰撞多年來都已切實可行:可以故意構造出 MD5 摘要相同的兩個不同檔案,MD5 已無法區分意外與攻擊。
- SHA-1 已破SHA-1 走了同一條路:一次公開演示的碰撞終結了它作為安全基元的壽命,瀏覽器、憑證機構與程式碼託管平台都已離開它。
- SHA-2 是基線SHA-2 家族是現行基線:SHA-256(64 個十六進位字元)是發佈下載校驗碼的預設選擇,SHA-224、SHA-384 與 SHA-512(56、96、128 個字元)是適應不同限制的兄弟。
一步步核驗安裝包
整個檢查不到一分鐘,用的都是機器上已有的工具。順序很重要:從發佈者的官方頁面取得期望摘要,雜湊本機副本,逐字元比對。
不符並不總是惡意——截斷的下載與快取代理經常損壞檔案——但反應是一樣的:檔案未通過核驗,唯一正確的下一步是從來源取得新副本。
- 取得期望值在廠商官方下載或發佈頁面找到公佈的校驗碼——最好是 HTTPS 上你親自導覽到的網域,而不是鏡像站或搜尋結果摘要。
- 本機雜湊本機雜湊下載的檔案:macOS 或 Linux 上用 shasum -a 256,Windows 上用 PowerShell 的 Get-FileHash。兩者都在你的磁碟上執行,沒有任何上傳。
- 精確比對不區分大小寫地逐字元比對完整摘要。只要有一個字元不同,就丟棄檔案並從來源重新取得——不要裝上它然後祈禱。
不上傳,也能雜湊敏感文字
很多真實的檢查對象是文字而不是檔案:一段設定片段、一枚授權金鑰、一段權杖碎片、同事在電話裡念出的一個值。把它們貼進隨便一個網站,就是交給了別人的日誌,所以雜湊必須在本機發生。
SHA-256 雜湊產生與驗證涵蓋當前 64 字元的發佈校驗碼標準。這裡的驗證是比對而非解密:對你的文字做雜湊,然後在瀏覽器內比較兩個值。
- 本機設計輸入留在裝置上:工作區在分頁裡用 WebAssembly 引擎雜湊最多 1,048,576 位元組的 UTF-8 文字,事後不保留任何內容。
- 顯式比對驗證模式是顯式比對:貼上期望摘要,工作區報告相符或不符,並預先拒絕格式錯誤的值——MD5 必須恰好 32 個十六進位字元,SHA-256 恰好 64 個。
- 單向構造摘要是單向的:這些工具只建立與比對指紋,不會嘗試逆推,因為任何正經工具都做不到。
把比對變成例程的一部分
校驗碼只有在比對成為習慣而非事後補救時才有效。幾條小紀律能讓每次檢查都可靠。
對完整檔案來說,作業系統內建的指令就是合適的工具,和瀏覽器一樣本機。瀏覽器工作區的強項是文字酬載與快速摘要檢查——MD5 雜湊產生與驗證對應舊下載頁仍在發佈的 32 字元遺留參考值。
- 完整比對比對完整摘要,而不是開頭結尾幾個字元;只看部分正是精心構造的碰撞所利用的捷徑。
- 註明演算法讓演算法名跟著摘要走:64 個十六進位字元可能來自好幾種演算法,沒有標註的校驗碼只會引人瞎猜。
- 每跳重算檔案每經過一次 USB 隨身碟、同步用戶端或郵件搬運就重新雜湊;每一跳都是新的損壞機會,而摘要隨行的成本為零。
為你自己的檔案發佈校驗碼
如果你在散佈檔案——發佈二進位檔、資料集、內部工具——請隨檔案發佈校驗碼。每個產物只需一條指令,就能讓每位接收者不必聯絡你也能驗證完整性。
需要更長形式時,SHA-512 雜湊產生與驗證在本機產出 128 字元摘要,SHA-224 與 SHA-384 兩個兄弟涵蓋 SHA-2 家族其餘成員——同一個引擎,同一個分頁,同一條邊界。
- SHA-256 起步至少發佈 SHA-256;當你的受眾在 SHA-512 更快的平台上驗證時,並排加上它,並給每個摘要標註演算法。
- 同一信任層級校驗碼要與下載本身處在同一信任層級,最好放在使用者已經認可的頁面或儲存庫裡。
- MD5 僅作遺留標註MD5 只保留為遺留相容標註,明確標記為針對意外損壞的完整性檢查——絕不當安全驗證用。
核驗只是信任工具的一環。
學會在把檔案交給任何線上工具之前檢查它的資料路徑——這正是校驗碼所獎勵的那份懷疑精神。