作者寫這本書,是為了寫出他當初開始學密碼學時希望自己手上有的那一本

2005 年,他在巴黎近郊攻讀碩士學位,滿心期待地登記了下學期的密碼學課程。

不幸的是,這門課因為登記人數太少而被取消。「密碼學太難了。」學生們如此主張,於是集體轉去修電腦圖學與資料庫的課。

從那時起,作者聽過「密碼學很難」不下十幾次。但密碼學真的那麼難嗎?

要演奏樂器、精通一門程式語言,或把任何迷人領域的應用付諸實踐,你都得學一些概念與符號,但這不需要一個博士學位。

作者認為成為一名稱職的密碼學家也是如此。他也相信,密碼學之所以被認為很難,是因為密碼學家沒有把它教好。

另一個促使他寫這本書的理由是:密碼學已不再只關乎密碼學,它已擴展成一個跨領域的學科。

要在密碼學中做出任何有用而切題的事,你需要對周邊概念有所理解:網路與電腦如何運作、使用者與系統需要什麼、攻擊者能如何濫用演算法與其實作

換句話說,你需要一條通往現實的連結。

本書的取徑#

這本書最初的書名是《Crypto for Real》,用以強調作者所追求的務實導向、貼近真實世界、不說廢話的取徑。

作者不想藉由把密碼學降智化來讓它變得平易近人,而是把它綁定到真實應用上——因此書中提供原始碼範例,並描述真實的 bug 與恐怖故事。

除了與現實的清晰連結之外,本書的另外兩塊基石是簡潔現代

  • 簡潔:作者聚焦於形式上而非實質上的簡潔。他呈現許多不平凡的概念,但捨棄了枯燥的數學形式主義。他試圖傳達的是對密碼學核心思想的理解——那比記住一堆方程式重要得多
  • 現代:本書涵蓋密碼學的最新發展與應用,例如 TLS 1.3 與後量子密碼學,不討論 DES 或 MD5 這類已淘汰或不安全演算法的細節

一個例外是 RC4——納入它只是為了說明它有多弱,並展示這類串流密碼如何運作。

《Serious Cryptography》不是一本密碼軟體指南,也不是技術規格的彙編——那些東西你上網輕易就能找到。

本書最首要的目標是:讓你對密碼學感到興奮,並在過程中教會你它的基本概念。

這本書寫給誰#

寫作時,作者心中的讀者常是這樣的開發者:接觸過密碼學,但在嘗試閱讀晦澀的教科書與研究論文之後,仍然感到一頭霧水又挫折。

開發者經常需要——也想要——更好地掌握密碼學,以避開不幸的設計選擇。

但如果你不是開發者,別擔心! 本書不要求任何寫程式的技能,任何理解電腦科學基礎與大學程度數學(機率、模算術等概念)的人都能讀。

儘管相對平易近人,這本書仍可能令人生畏,要從中得到最多收穫需要付出一些努力。

作者喜歡用登山來比喻:作者為你鋪路、提供繩索與冰斧來讓你的工作變輕鬆,但攀登得由你自己完成。

學習書中的概念需要努力,但終點會有回報

本書的組織#

本書有十四章,鬆散地分成四個部分。

作者也建議在讀其他任何內容之前,先讀前三章

基礎#

  • 第 1 章:加密——引入安全加密的概念,從薄弱的紙筆密碼一路到強大的隨機化加密。
  • 第 2 章:隨機性——描述偽隨機產生器如何運作、要安全需要具備什麼,以及如何安全地使用它。
  • 第 3 章:密碼學安全性——討論理論與實務上的安全概念,比較可證明安全性與「大概安全」。

對稱密碼學#

  • 第 4 章:區塊密碼——處理逐區塊處理訊息的密碼,聚焦於最著名的 AES。
  • 第 5 章:串流密碼——介紹產生一串看似隨機之位元、再與待加密訊息 XOR 的密碼。
  • 第 6 章:雜湊函式——關於唯一不使用秘密金鑰的演算法,而它們竟是最無所不在的密碼學建構元件。
  • 第 7 章:帶金鑰的雜湊——說明把雜湊函式與秘密金鑰結合會發生什麼,以及這如何用來鑑別訊息。
  • 第 8 章:鑑別式加密——展示某些演算法如何同時加密與鑑別一則訊息,例如標準的 AES-GCM。

非對稱密碼學#

  • 第 9 章:困難問題——用計算複雜度的概念,鋪陳公鑰加密背後的基本概念。
  • 第 10 章:RSA——利用因式分解問題,以簡單的算術運算建構安全的加密與簽章方案。
  • 第 11 章:Diffie–Hellman——把非對稱密碼學延伸到金鑰協商的概念:兩方只用非秘密的值就建立起一個秘密值。
  • 第 12 章:橢圓曲線——溫和地引介橢圓曲線密碼學,那是速度最快的一種非對稱密碼學。

應用#

  • 第 13 章:TLS——聚焦於傳輸層安全,可說是網路安全中最重要的協定。
  • 第 14 章:量子與後量子——以一絲科幻氣息作結,涵蓋量子計算的概念與一種新型態的密碼學。

推薦序摘要#

本書推薦序由約翰霍普金斯大學資訊安全研究所教授 Matthew D. Green 撰寫。

如果你讀過一兩本電腦安全的書,可能遇過一種對密碼學領域的常見觀點:「密碼學是這條鏈中最強的一環。」

這是很高的讚譽,但也帶著幾分輕忽——若密碼學真是你系統中最強的部分,當還有那麼多其他領域更能從你的關注中受益時,何必花時間改進它?

Green 希望讀者從本書帶走的重點是:這種對密碼學的看法是理想化的,它在很大程度上是個迷思。

理論上的密碼學很強,但實務上的密碼學與安全系統的任何其他面向一樣容易失敗。 當密碼學實作是由缺乏足夠謹慎或經驗的非專家開發時尤其如此——而今日部署的許多密碼系統正是如此。

更糟的是:當密碼學實作失敗時,它們往往以獨一無二的壯烈方式失敗。

近二十年前 Green 剛開始從事應用密碼學時,能提供給軟體開發者的資訊往往零碎又過時。

密碼學家開發演算法與協定,密碼工程師實作它們,做出不透明、文件貧乏、主要是設計給其他專家用的密碼學函式庫。

在「懂並理解密碼演算法的人」與「使用它們(或冒著風險忽視它們)的人」之間,一直存在一道巨大的鴻溝。市面上有幾本不錯的教科書,但為實務工作者提供有用工具的更少。

許多問題之所以發生,是因為密碼學既微妙又數學上優雅,而密碼學專家未能把他們的知識分享給真正在寫軟體的工程師

所幸這件事已經開始改變,而這本書正是這個改變的一個徵候

「雖然沒有任何一本書能解決我們所有的問題,但一點點知識可以走很長的路。這本書含有大量的知識——或許足以讓真實部署的密碼學,配得上那麼多人對它的高度期待。