M00 · CTF
SHA-256 雪崩:改一個 bit,輸出全變
在密碼學玩具裡輸入一段字串,觀察 SHA-256(32-byte 輸出);接著只改動 1 個字元, 比對前後兩個雜湊。確認「兩者沒有任何接近、約一半 bit 翻轉」,建立 M03 CDHash 雪崩的前置直覺。
SHA-256 雪崩玩具
sha256(A):
sha256(B):
0 / 256 bit 不同(0%)改一個字元 → 約一半 bit 翻轉、毫無「接近」可言(雪崩)。
Web Crypto 真算(crypto.subtle.digest('SHA-256'))。這個「改一點 → 全變」是 macOS 敢用「雜湊一致=沒被動過」的基礎——直接接 M03 的 CDHash 雪崩。
過關目標
- 讓 hash.outputBytes 達到 32
- 讓 hash.avalancheObserved 達到 true
- 用自己的話解釋:用自己的話說明:為什麼「只改輸入一個 byte,SHA-256 幾乎全變」這件事,讓系統可以用「雜湊一致」來證明「一個 byte 都沒被動過」?
解答是「操作模擬器到對的狀態 + 能說出原理」,非提交 flag 字串。互動式自動評分為 roadmap 項目;目前以自我檢核完成。
提示
卡住時
SHA-256 輸出固定 32 bytes(64 hex)。把「改前」與「改後」兩串並排逐字元比,不要找相似——應該完全沒有規律。
走錯方向時
雪崩不是「改一點、雜湊變一點」。輸入差 1 bit,輸出約一半 bit 翻轉,這正是 macOS 能用「雜湊一致」當「未被竄改」證明的原因。
想更深入
雜湊保證「完整性(沒被改)」,但不保證「來源(誰做的)」——來源要靠數位簽章。下一關談這個。
相關指令
shasumopenssl