密碼學對安全性的定義,與一般電腦安全所適用的定義並不相同。

軟體安全與密碼學安全最主要的差別是:後者可以被量化。

在軟體世界中,應用程式通常被看成非安全即不安全;但在密碼學世界裡,我們往往能算出破解一個密碼學演算法所需的努力量。

此外,軟體安全著重於防止攻擊者濫用程式的程式碼,而密碼學安全的目標則是讓定義明確的問題變得無法解決

密碼學的問題涉及數學概念,但不是複雜的數學——至少在本書中不是。

本章脈絡#

  1. 定義不可能——資訊安全性 vs. 計算安全性。
  2. 量化安全性——位元安全性 vs. 攻擊的完整成本。
  3. 達成安全性——可證明安全性 vs. 啟發式安全性。
  4. 產生金鑰——對稱 vs. 非對稱金鑰產生,以及金鑰的保護。

常見錯誤#

密碼學安全性可能以許多方式出錯。

最大的風險,是因為安全性證明或經充分研究的協定,而產生虛假的安全感

錯誤的安全性證明#

即使是知名研究者提出的安全性證明也可能是錯的。

最令人震驚的例子之一是 OAEP(Optimal Asymmetric Encryption Padding,最佳非對稱加密填充)——一種使用 RSA 的安全加密方法,被實作在許多應用中。

然而,一個關於 OAEP 對選擇密文攻擊者之安全性的錯誤證明,被當成有效的證明長達七年,直到 2001 年才有研究者發現其中的瑕疵。不只證明是錯的,結論也是錯的:後來一個新的證明顯示,OAEP 對選擇密文攻擊者只是「幾乎安全」。

我們現在只能信任那個新證明,並希望它沒有瑕疵。

詳見 Victor Shoup 於 2001 年的論文〈OAEP Reconsidered〉。

為了相容舊系統而使用短金鑰#

2015 年,研究人員發現某些 HTTPS 網站與 SSH 伺服器支援的公鑰密碼學,其金鑰比預期短得多:只有 512 位元,而非至少 2048 位元。

記住,公鑰方案的安全等級並不等於金鑰長度——以 HTTPS 而言,512 位元的金鑰只提供約 60 位元的安全等級。

這些金鑰用一個 72 顆處理器的叢集,只需約兩週的計算就能破解。

許多網站受到影響,包括 FBI 的網站。儘管軟體最終被修復(感謝 OpenSSL 與其他軟體的修補程式),這個問題仍是相當不愉快的意外。

延伸閱讀#

  • 想深入了解對稱密碼的可證明安全性,可閱讀海綿函式(sponge functions)的文件:http://sponge.noekeon.org/ 。海綿函式在對稱密碼學中引入了「基於置換」的取徑,說明如何只用一個置換就建構出一堆不同的密碼學函式。
  • 關於攻擊實際成本的必讀文獻:Bernstein 於 2005 年的論文〈Understanding Brute Force〉,以及 Wiener 於 2004 年的論文〈The Full Cost of Cryptanalytic Attacks〉,兩者都可免費線上取得。
  • 要判斷某個金鑰長度對應的安全等級,可造訪 http://www.keylength.com/ 。該站也說明了常見密碼工具(SSH、OpenSSL、GnuPG 等)如何保護私鑰。

一個練習:挑一個應用程式(例如某個安全訊息應用),辨識出它的密碼方案、金鑰長度與各自的安全等級。

你常會發現令人意外的不一致——例如第一個方案提供 256 位元安全等級,第二個方案卻只提供 100 位元。整個系統的安全性,往往只等同於其最弱環節的安全性。