M00 · CTF
私鑰簽、公鑰驗:數位簽章方向感
用密碼學玩具產生一對金鑰,對一段 message 以「私鑰」簽出 signature,再以「公鑰」驗證; 接著竄改 message 一個字元重驗,觀察驗證失敗。判斷簽章保證了「完整性」與「來源」哪一項, 為 M03 的 CMS 簽章與「CDHash 一變即簽章失配」鋪路。
SHA-256 雪崩玩具
sha256(A):
sha256(B):
0 / 256 bit 不同(0%)改一個字元 → 約一半 bit 翻轉、毫無「接近」可言(雪崩)。
Web Crypto 真算(crypto.subtle.digest('SHA-256'))。這個「改一點 → 全變」是 macOS 敢用「雜湊一致=沒被動過」的基礎——直接接 M03 的 CDHash 雪崩。
過關目標
- 讓 signature.verifiedBeforeTamper 達到 true
- 讓 signature.verifiedAfterTamper 達到 false
- 用自己的話解釋:用自己的話說明「私鑰簽、公鑰驗」這條方向,以及為什麼數位簽章同時保證了「完整性」與「來源」,而單純雜湊只保證前者。
解答是「操作模擬器到對的狀態 + 能說出原理」,非提交 flag 字串。互動式自動評分為 roadmap 項目;目前以自我檢核完成。
提示
卡住時
方向只有一個——「私鑰簽、公鑰驗」。能產生對得上簽章的只有私鑰持有者;持公鑰者只能驗、造不出新簽章。
走錯方向時
簽的是 message 的「雜湊」,不是整份資料。所以 message 改一個 byte → 雜湊變 → 與簽章內的 digest 對不上 → 驗證失敗(雪崩 + 簽章合在一起)。
想更深入
雜湊只保證「沒被改」;簽章在此之上再保證「是該私鑰持有者背書」。M03 的 CMS 簽就是簽 CDHash——cdhash 一變,簽章立刻失配。
相關指令
opensslshasum