📘 深度概覽
作者背景#
奧馬松(Jean-Philippe Aumasson)於瑞士洛桑聯邦理工學院(EPFL)取得密碼學博士學位,長期同時處在學術設計與產業落地兩端。
他是多個被廣泛部署之演算法的共同設計者:雜湊函式 BLAKE2 與 BLAKE3、短輸入專用的 SipHash(已成為多種程式語言雜湊表的預設防碰撞函式),以及鑑別式密碼 NORX。他也發起了 Password Hashing Competition(最終選出 Argon2)與 Crypto Coding Standard 專案,前者直接改變了業界儲存密碼的方式。產業方面,他曾任 Kudelski Security 的首席密碼學家,後於瑞士數位資產機構 Taurus 擔任技術與資安主管,並長期在 Black Hat、DEF CON 等場合面向工程師(而非密碼學家)演講。
這段經歷解釋了本書的寫法。他在前言中提到自己 2005 年在巴黎近郊念碩士時,選修的密碼學課因為「太難」報名人數不足而被取消——他的判斷是:密碼學之所以被認為很難,是因為密碼學家沒有把它教好。 本書就是他當年希望手上有的那一本。
完整摘要#
本書要解決的是密碼學教材的兩極化困境:一端是充滿定理與歸約證明的學術教科書,工程師讀不下去;另一端是「呼叫這個函式庫」的操作指南,讀者學不到判斷力。作者選擇的路線是形式上的簡潔而非實質上的簡化——保留不平凡的概念,捨棄枯燥的數學形式主義,因為「傳達對核心思想的理解,比記住一堆方程式重要得多」。原本的書名《Crypto for Real》更能說明這個取徑:務實、貼近真實世界、不說廢話。
本書的結構性創新在於每一章的**「常見錯誤」(How Things Can Go Wrong)** 段落。作者不把攻擊當作附錄,而是讓每個概念都與一個真實的失敗案例配對,讀者因此學到的不只是演算法怎麼運作,而是它在哪裡會裂開。這些案例構成全書最有記憶點的部分:1996 年 Netscape 的 SSL 種子只有約 47 位元真實熵(PID 與微秒都可猜測);2012 年網際網路掃描發現大量系統因開機時熵不足而共用相同 TLS/SSH 金鑰;OAEP 的一個錯誤安全性證明被當成有效證明長達七年;3DES 因中間相遇攻擊只有 112 位元而非 168 位元的安全等級;舊版 Word 與 Excel 在文件修改後未更換 nonce,使舊版明文足以解密新版密文;MAC 驗證的逐位元組比較造成時序旁道;AES-GCM 的 GHASH 存在弱雜湊金鑰。
內容依四段推進,各章大致獨立(唯一例外是第 9 章為後三章鋪路),但作者要求先讀完前三章。基礎(1–3 章)建立最重要的心智轉換:軟體安全通常是「安全或不安全」的二分,而密碼學安全可以被量化——我們往往能算出破解一個演算法所需的努力量;因此必須先分清攻擊模型與安全目標,才談得上「安全」是什麼意思。作者在此點名工程界最普遍的病灶:許多人根本沒想過安全需求,只是想要「安全」。對稱密碼學(4–8 章)涵蓋區塊密碼與 AES 的內部結構、串流密碼從已破解的 A5/1 與 RC4 到現代的 Salsa20、雜湊函式的建構方式(Merkle–Damgård 與海綿函式)與 SHA 家族演進、帶金鑰雜湊(MAC 與 PRF、HMAC、Poly1305、SipHash),最後在鑑別式加密收攏成 AEAD——「單一演算法同時提供密碼與 MAC 的功能」。非對稱密碼學(9–12 章)先用一整章鋪陳計算複雜度與困難問題(因式分解與離散對數),再依序處理 RSA(陷門置換、教科書 RSA 的可鍛造性、Bellcore 故障注入攻擊)、Diffie–Hellman(金鑰協商與前向保密),以及橢圓曲線——256 位元 ECC 強於 4096 位元 RSA,但參數更多、攻擊面更大。應用(13–14 章)落在 TLS 與量子。TLS 一章講述它如何因複雜與臃腫而滋生 Heartbleed、BEAST、CRIME、POODLE,以及 TLS 1.3 如何靠「捨棄不必要與不安全的功能」重生;最後一章則檢視量子電腦對所有已部署公鑰密碼學的威脅,以及後量子演算法的四大路線與它們目前尚不成熟的安全性理解。
本書的貢獻與定位#
本書填補的是「Schneier 的《Applied Cryptography》已過時、Katz–Lindell 的《Introduction to Modern Cryptography》太學術」之間的空缺。它的獨特切入角度是現代性上的取捨:作者刻意不講 DES 與 MD5 的細節(唯一例外是 RC4,納入只為示範它有多弱),把省下的篇幅給 TLS 1.3、BLAKE2 與後量子密碼學——這使它成為 2017 年前後少數能讓讀者接觸到當代狀態的通論。
它挑戰的觀點有二:一是「密碼學太難,工程師學不會」;二是「用了經過驗證的演算法就安全了」——全書的「常見錯誤」段落系統性地示範,失效幾乎總是發生在演算法之外:熵源、nonce 管理、實作的時序特性、對攻擊模型的錯誤假設。主要受眾是需要在產品中正確使用密碼學的軟體工程師與安全從業者。它明確不是密碼軟體使用指南,也不是技術規格彙編;讀者若要的是「該呼叫哪個 API」,本書不會直接給答案,但會讓他有能力判斷答案是否合理。書中有數學,但不需要博士學位。
