網路安全

密碼雜湊(cryptographic hash)

想像一台機器,它讀入任何文件——一個字,或一整座圖書館——然後印出一段固定長度的短指紋,比方說 64 個字元。即使你只在文件裡改動一個逗號,印出的指紋也會完全不同。你無法把指紋反推回文件,也找不到兩份不同的文件剛好產生相同的指紋。密碼雜湊函數正是這台給數位資料用的指紋機器。

精確地說,雜湊函數接收任意大小的輸入,回傳固定大小的輸出(雜湊值或摘要),並具備三項使它「密碼學等級」的性質。它是確定性的:相同的輸入永遠給出相同的摘要。它是單向的(抗原像):給定一個摘要,你無法可行地找出能產生它的輸入。它是抗碰撞的:你無法可行地找出兩個產生相同摘要的不同輸入。輸入裡一個微小的改動會雪崩式地放大成完全不同的輸出。常見的函數有 SHA-256 與 SHA-3;較舊的如 MD5 與 SHA-1 因為已被找到碰撞,現在在安全用途上已被視為破解。

為什麼重要:雜湊是完整性的主力。下載一個檔案後,把它的雜湊值跟公布的那個比對——若相符,檔案在傳輸途中就沒被改動。雜湊是訊息鑑別碼、數位簽章(你簽的是那段小小的雜湊,而非龐大的文件)的核心,也是密碼如何被儲存的方式(系統存的是雜湊,不是密碼)。誠實的提醒:單純的雜湊本身,只能防範意外的改動。能改動資料的攻擊者也能順手重算雜湊——所以要偵測惡意竄改,你必須把雜湊和一個秘密(MAC)或一把私鑰(簽章)結合起來。

文字「hello」的 SHA-256 是一段固定的 64 個十六進位字元字串;「hellp」(改一個字母)的 SHA-256 則是完全不同、毫無相似之處的 64 字元字串。正是這種雪崩效應,讓你在比對摘要時,連最微小的竄改都會一眼跳出來。

任意輸入、一段固定指紋;改一個位元就全變了。

和資料一起送出的裸雜湊能擋意外、擋不了攻擊者——任何編輯資料的人都能重算雜湊。要對抗主動的對手而偵測竄改,需要一把金鑰:這就是雜湊與 MAC 的差別。

又稱
hash functionmessage digestdigest密碼雜湊雜湊函數訊息摘要