SHA-256 有什麼用途?Microsoft、GitHub、比特幣與企業檔案驗證案例

SHA-256 的用途,最常見的是檢查檔案有沒有被更動。Microsoft、GitHub、比特幣與企業文件管理都用得到,但各自的需求並不相同。了解這些需求,才能在利用 AI 設計軟體時,知道什麼時候該把它放進系統。

SHA-256 特色圖:中央 SHA-256 盾牌連向軟體下載、軟體發布、工作量證明與企業檔案驗證四個應用場景,標題為「SHA-256 有什麼用途?」,副標為「同一項技術,四種不同需求」

一、為什麼企業需要 SHA-256?

企業需要 SHA-256,是因為一份檔案從發布、下載、傳輸、保存到日後調閱,每個環節都可能出現與原始版本不一致的情況,而人眼無法從檔名或檔案大小判斷這件事。軟體公司提供安裝檔讓使用者下載,下載過程可能中斷或損壞;財務部門把核准後的報告寄給會計師,檔案經過幾個人的信箱和資料夾之後,沒有人能保證它仍是當初那一份。這些情境有一個共同的需求,就是「檔案完整性」:確認手上這份檔案,與指定的原始版本完全一致。

SHA-256 在這裡扮演的角色很單純。它會讀取整份檔案,計算出一組固定長度的摘要,也就是雜湊值,通常以 64 個十六進位字元表示。只要檔案內容有任何改變,重新計算的結果通常就會截然不同,所以把兩邊的雜湊值放在一起比對,就能判斷檔案是否一致。至於雜湊值為什麼固定是 256 位元、為什麼改一個字元結果就會大幅改變、碰撞又是怎麼回事,贊贊小屋已在〈SHA-256 是什麼〉一文詳細整理,這裡要看的是另一個問題:真實的企業與資訊系統,究竟是為了什麼需求而採用它?

檔案完整性驗證流程卡:指定原始檔案經傳輸與保存、取得檔案後以 SHA-256 核對,結果分為相同(版本一致)與不同(查明差異)

二、Microsoft:Windows 安裝檔為什麼需要 SHA-256?

Microsoft 提供 SHA-256 核對資訊,是為了讓使用者在下載 Windows 安裝檔之後,有辦法確認手上的檔案與官方發布的版本一致。Microsoft 在Windows 11 Enterprise 評估版 ISO 的驗證說明頁面中,直接列出各語言版本映像檔的 SHA256 值,並說明使用者可以在 Windows PowerShell 中用 Get-FileHash 計算下載檔案的雜湊值,與頁面上的數值比對。

下載完成,為什麼還需要驗證?

下載完成只代表使用者取得了一份檔案,並不代表這份檔案與發布者指定的版本一致。Windows 的 ISO 映像檔檔案很大,傳輸過程中只要有一小段資料出錯,安裝時可能到很晚才發現問題;如果檔案在發布者之外的地方被人替換過,使用者更是難以察覺。Microsoft 的驗證說明也是從這個角度切入,指出如果計算結果與官方提供的數值相符,就可以確認檔案沒有損壞、被竄改或更改原始內容。

如何利用 SHA-256 核對官方版本?

核對的做法是把下載的檔案計算出 SHA-256,再與可信的官方來源所提供的基準值逐字比較。依照Microsoft Learn 上的 Get-FileHash 文件,Windows PowerShell 的 Get-FileHash 會計算檔案的雜湊值,不指定演算法時預設就是 SHA256,語法如下(路徑只是示意,請換成實際下載的檔案位置):

```powershell
Get-FileHash "C:\Users\你的帳號\Downloads\下載的檔案.iso" -Algorithm SHA256
```

執行後,PowerShell 會回傳 Algorithm、Hash 與 Path 三個欄位,其中 Hash 就是要拿去和官方頁面比對的那一串字元。兩者完全一致,代表手上這份檔案與官方指定的版本一致;只要有任何一個字元不同,就應該重新下載,而不是繼續使用。

這裡有一個容易被忽略的前提:基準值必須來自可信的管道。Microsoft 的說明頁面本身是在官方網站上,使用者是向官方取得數值,才有比對的意義。SHA-256 只能證明「這份檔案和那串數值對得上」,不能證明下載來源一定安全;如果檔案和雜湊值是從同一個不可信的網站拿到的,兩者可能被一起換掉,比對結果再漂亮也沒有保障。換句話說,相同的雜湊值解決的是完整性問題,來源是否可信,仍然要靠官方網站這樣的信任基礎來回答。

Windows ISO 驗證流程卡:官方驗證資訊提供 SHA-256 基準值,下載的 ISO 檔案以 Get-FileHash 計算本機結果,兩者比對後相同即符合指定版本,不同則停止使用並查明原因

三、GitHub:軟體發布為什麼需要自動產生 SHA-256?

GitHub 在 2025 年 6 月宣布,Releases 會為所有上傳的發布資產自動產生 SHA-256 摘要,並顯示在網頁介面與 API 中。這個設計回應的是軟體發布平台的實際需求:開發者把安裝檔、壓縮檔上傳到 Release 頁面,許多使用者與自動化工具會下載這些檔案,平台如果能在上傳時就替每個檔案算好摘要,下載的人就有一個由平台提供、可以直接查詢的基準,不一定要依賴發布者另外貼出的雜湊值。

Release 資產為什麼需要 Digest?

Release 資產需要 Digest,是因為下載者和自動化工具需要一個固定、可查詢的基準,用來核對取得的檔案。依照 GitHub 的公告,摘要是在檔案上傳時計算,除了網頁上每個資產旁邊會顯示之外,也可以透過 REST API、GraphQL API 以及 gh 命令列工具取得。這對 AI 程式設計特別有意義:許多軟體部署流程是由程式自動下載檔案,程式沒有人眼可以判斷檔案對不對,只能依靠摘要比對來決定要不要繼續執行。

雜湊值、不可變更發布與簽署證明有什麼不同?

雜湊值、不可變更發布與簽署證明是三種不同的機制,各自處理不同層面的問題。2025 年 10 月,GitHub 另外宣布Immutable Releases 正式推出。儲存庫或組織需要先在設定中啟用這項功能,之後新發布的 release 才會成為不可變更的版本,既有的 release 並不會自動改變。一個 release 以不可變更的方式發布之後,附加的資產不能再被修改或刪除,使用的 tag 也會鎖定在特定的 commit,不能被移動或刪除。GitHub 還會為這類 release 自動產生可驗證的簽署證明,記錄 release 的 tag、commit 以及資產,讓使用者能核對手上取得的內容,是否與 GitHub 上發布的 release 相符。

三者的分工可以這樣理解。SHA-256 摘要處理的是內容比對:檔案算出來的結果,和當初記錄的結果是否一致。不可變更發布處理的是修改權限:啟用並以這種方式發布之後,連發布者自己都不能替換資產。簽署證明則是提供額外的驗證依據,讓使用者能確認取得的 release 內容與 GitHub 上發布的紀錄相符。

這裡要特別留意兩件事。第一,SHA-256 本身並不會阻止任何人修改檔案,它只是讓「被修改過」這件事有機會被發現;真正限制修改的,是不可變更發布這類權限機制。第二,GitHub 的軟體供應鏈保護是多種機制的組合,不能把所有功勞都歸給 SHA-256。這個區分,正是軟體設計需要的思考方式:完整性、來源可信度與修改權限是三個不同的需求,需要不同的機制來回答。

GitHub 軟體發布保護比較卡:SHA-256 Digest 核對檔案內容是否一致,Immutable Releases 限制已發布資產遭到替換且需先啟用,簽署證明核對發布內容與發布紀錄

四、比特幣:為什麼使用 SHA-256 進行工作量證明?

比特幣使用 SHA-256,是把它當作工作量證明機制的運算元件,而不是用來驗證檔案有沒有被下載完整。這和前面兩個案例是完全不同的需求,也讓讀者看到 SHA-256 不只能拿來核對檔案,還可以成為其他系統設計的一部分。

依照 Bitcoin Developer Reference 的說明,每個區塊都有一個 80 位元組的區塊標頭,包含版本、前一個區塊標頭的雜湊、由區塊內所有交易算出來的 Merkle Root、時間、代表目標門檻的 nBits,以及一個稱為 nonce 的數值。區塊標頭會經過兩次 SHA-256 運算,也就是 SHA256(SHA256())。比特幣的規則要求這個雜湊結果必須小於或等於由 nBits 換算出的目標值,區塊才算有效。礦工要做的,就是不斷調整 nonce(必要時也會變動其他欄位),重複計算標頭的雜湊,直到找到符合條件的結果為止。這種必須耗費運算才能找到答案、其他人卻能很快驗證答案的設計,就是工作量證明。

要分清楚幾個容易混在一起的概念。區塊標頭的雜湊,是工作量證明直接檢查的對象。Merkle Root 則是把區塊內所有交易逐層兩兩合併雜湊之後得到的一個值,作用是讓區塊標頭能夠代表整批交易。前一個區塊標頭的雜湊被放進新區塊的標頭,使區塊之間環環相扣,前面的區塊只要被改動,後面的雜湊就會全部對不上。至於整個比特幣網路的安全,則是工作量證明、區塊的串接與網路共識規則共同運作的結果,不能說 SHA-256 單獨確保了整條區塊鏈的安全。

這個案例對讀者的意義,是理解需求如何決定技術的用法。檔案驗證需要的是「比對摘要是否一致」,比特幣需要的卻是「必須付出運算才能產生符合條件的雜湊」,同一個演算法,被放進了完全不同的位置。

比特幣雙重 SHA-256 流程卡:80 位元組區塊標頭經兩次 SHA-256 得到雜湊結果,判斷是否小於或等於目標值,不符合時調整 nonce 後重試

五、企業正式文件如何使用 SHA-256 驗證?

Microsoft 與 GitHub 是軟體發布的案例,但同樣的完整性需求,也存在於一般企業的日常文件管理。財務報告、正式合約、核准公告這類文件,一旦經過核准並歸檔,日後被調閱、寄給外部單位或作為依據時,使用者最關心的是:現在拿到的這份,是不是當初核准的那一份?SHA-256 可以在這個環節派上用場。

臺積電每年都會對外公布財務報告,讀者很容易取得,這類公開財報正好可以當作「正式文件」的代表。這裡並不是在說明臺積電內部如何管理或保存這些文件,也不假設它採用了什麼機制,要看的是一般公司在管理上都會遇到的需求:不只上市櫃公司要對外公布財務資訊,即使是小公司辦理稅務申報,也要能確認當初申報時使用的是哪一個版本,日後被查詢或需要引用時,才拿得出同一份檔案。歸檔與確認版本,是各種規模的公司都會有的管理需求,也是 SHA-256 可以派上用場的地方。

正式公告或核准文件,如何確認原始版本?

正式文件經過核准之後,企業可以同時保存原始檔案,以及該檔案在歸檔當下計算出來的 SHA-256 基準值,並把基準值記錄在一個可信、不容易被隨意更動的地方。日後有人需要引用這份文件時,無論是內部同仁調閱、傳給會計師,還是對外交付,接收的一方都可以重新計算手上檔案的雜湊值,與基準值比對。相同,代表這份檔案與歸檔時一致;不同,就表示檔案和原始版本有差異,必須先釐清再使用。

這和 Microsoft 的做法在邏輯上是一樣的:發布者提供基準值,使用者自己計算並比對。差別在於,企業內部的基準值要放在哪裡、由誰負責維護,需要自行設計。

使用時還有兩個現實細節需要注意。第一,正式核准的文件如果依合法程序更正,企業應保留舊版本,並為更正後的新版本建立新的紀錄,而不是把舊版本與舊基準值抹除;因此不能把這個機制理解成「文件永遠不能更正」。第二,SHA-256 比對的是檔案的位元組,而不是畫面上的內容。同一份財務報告如果經由不同的系統重新輸出成 PDF,即使每一個數字都相同,檔案位元組也可能不同,雜湊值自然不一樣,所以不能把不同的雜湊值直接解讀成財務數字不同。

SHA-256 能防止檔案被修改嗎?能取代文件權限管理嗎?

SHA-256 無法防止檔案被修改,也不能取代文件權限管理。它能協助發現檔案與基準值之間的差異,卻無法阻止任何人修改檔案,更不能取代存取權限、備份、核准紀錄與版本管理。

舉例來說,如果一個人有權限把歸檔的檔案換成另一份,他同樣可能順手把記錄的基準值也一起改掉,這時比對還是會通過。要避免這種情況,需要的是權限控管,以及讓基準值難以被單獨竄改的保存方式。反過來說,即使有完整的權限管理,仍然可能因為檔案損壞、誤存或版本搞混而拿到錯的檔案,這時比對基準值才能提供一道額外的檢查。兩種機制處理的是不同的風險,應該互相搭配,而不是互相取代。

正式文件歸檔流程卡:核准文件、歸檔並建立基準值、日後調閱、重新計算 SHA-256、與基準值核對,並區分完整性驗證(發現差異)與權限管理(限制修改)

六、利用 AI 設計檔案驗證工具,需要考慮什麼?

利用 AI 設計軟體時,最先該問的不是 AI 能寫出什麼程式碼,而是企業到底要解決什麼問題。前面四個案例有一個共同點:沒有任何一個是因為「SHA-256 很厲害」才被採用,而是先有下載的檔案可能不一致、發布的資產需要核對、區塊需要有成本的運算、正式文件需要確認版本這些需求,才選擇了適合的技術。AI 降低的是寫程式的門檻,但軟體開發本來就是先確認問題與需求,這部分的判斷仍然要由人來承擔。

從業務問題轉成軟體需求

假設一家企業想請 AI 協助設計一套檔案歸檔與驗證工具,光是「把檔案存起來」並不足以說明需求。開發者至少要先想清楚幾件事:哪些檔案需要納入管理,是所有文件還是只有經過核准的正式版本;基準值要在什麼時間點建立,是檔案核准的當下,還是上傳歸檔的時候;核准過的版本要如何保存,修正後的新版本又要怎麼與舊版本區分;日後要在什麼時候重新驗證,是每次調閱前,還是定期檢查。

這些問題都來自業務本身,而不是來自程式語言。把它們想清楚,才能把需求具體地交給 AI,得到真正符合使用情境的軟體。

SHA-256 是系統元件,不是完整解決方案

SHA-256 在這樣的系統裡只負責一件事:計算檔案的摘要。除此之外,軟體還需要其他機制來處理誰可以上傳或調閱檔案的身分與權限、記錄基準值的資料庫或清單、比對不一致時的異常提示、檔案與基準值的備份,以及文件依程序更正時的處理流程。如果只有計算雜湊值的功能,卻沒有這些配套,它只是一個小工具,稱不上一套檔案管理系統。

把 SHA-256 當成零件,而不是整個解決方案,也能讓人更清楚地向 AI 提出要求,例如請它在歸檔時記錄基準值、在調閱時自動比對,並在結果不一致時提示使用者而不是直接放行。這種要求之所以能被明確表達,前提就是開發者理解 SHA-256 能做什麼、不能做什麼。

AI 軟體需求判斷卡:先判斷是否需要驗證檔案完整性,SHA-256 負責計算與核對摘要,權限管理、版本管理與異常提示則由其他系統功能處理

理解需求,才能知道什麼時候需要 SHA-256

回頭看 Microsoft、GitHub、比特幣與企業文件管理,四種系統都用到了 SHA-256,但它被採用的原因並不相同:Microsoft 要讓使用者確認下載的檔案與官方版本一致,GitHub 要讓發布的資產有可以查詢和核對的摘要,比特幣要讓區塊的產生必須付出可驗證的運算,企業則是希望日後調閱文件時,能確認它就是當初核准的版本。同一項技術放進不同的系統,扮演的角色也就跟著不同。

這也是贊贊小屋在學習 AI 程式設計時的基本想法:軟體不是因為某個演算法很厲害才值得開發,而是因為有需求要解決。AI 可以幫忙撰寫程式碼,但開發者仍然需要理解企業的需求、技術的能力,以及它的安全邊界,才有辦法判斷什麼時候適合用 SHA-256,什麼時候還需要搭配別的機制。懂得這些,在請 AI 設計下一個工具的時候,才知道該問什麼問題。

自然收尾總結卡:Microsoft、GitHub、比特幣與企業歸檔四個案例的原始需求與 SHA-256 的角色對照,並導向理解需求、選擇技術、設計軟體
發布日期:
分類:AI 程式設計、AI工具