密碼學基礎課

現代密碼學的基石——雜湊函數的「雪崩效應」

雜湊函數(hash function,中國大陸常譯作「哈希」,也稱散列函數)就像一台「資料絞肉機」:不管丟進去什麼——一個字、一部小說、一整顆硬碟——出來的都是固定長度的一串「指紋」。SHA-256 的輸出永遠是 256 位元,也就是 64 個十六進位字元。它有兩個讓密碼學家離不開的性格。

性格一:單向——絞成肉餡,變不回豬

從輸入算雜湊值,一眨眼;從雜湊值倒推輸入,沒有捷徑,只能一個一個猜。這就是單向性(抗原像)。同時,要找到兩個不同輸入卻算出同一個雜湊值,也幾乎不可能(抗碰撞)。

性格二:雪崩——改一個字母,面目全非

好的雜湊函數,輸入只要動一個位元,輸出就會有大約一半的位元跟著翻轉,看起來像換了一個毫不相干的亂數。這叫雪崩效應:山頂滾下一顆小石子,山腳下是整片雪崩。

來看真實數據(已用 sha256sum 核對):

password123 →

ef92b778bafe771e89245b89ecbc08a44a4e166c06659911881f383d4473e94f

Password123 →

008c70392e3abfbd0fa47bbc2ed96aa99bd49e159727fcba0f2e6abeb3a9d601

兩個輸入只差一個字母的大小寫——在 ASCII 裡,p(0x70)和 P(0x50)只差1 個位元。但兩個雜湊值的 256 位元中有 117 位元不同(約 45.7%),64 個字元中有 61 個對不上。雜湊值「長得像不像」,完全不會透露輸入像不像。

這跟你的密碼有什麼關係?

可靠的網站不會儲存你的密碼原文,只存它的雜湊值。你登入時,系統把你輸入的密碼再算一次雜湊,跟資料庫裡的比對:一樣就放行。就算資料庫被偷,駭客拿到的也只是一堆「指紋」,沒辦法直接倒推出密碼。

不過光用 SHA-256 還不夠:

但再好的雜湊也救不了白密碼:password123 在外洩字典裡排得很前面,攻擊者第一批就會試它。所以,請用灰密碼。

動手試試:親眼看雪崩

提示:試著只改一個字母、加一個空格,看看有多少位元翻轉。計算全部在你的瀏覽器裡以 Web Crypto 完成,不會上傳。

課堂小結:雜湊是單向的資料指紋;輸入改一點,輸出變一半(雪崩效應)。網站只存加鹽的慢雜湊,不存明文密碼。
思考題:如果雜湊沒有雪崩效應,改一個字母只變一兩個字元,攻擊者能利用這點做什麼?