對稱式密碼(symmetric cipher) 使用同一把金鑰加密與解密訊息。加解密過程一般比非對稱式快,但金鑰分發可能困難。

區塊密碼 vs. 串流密碼#

類型運作方式例子
區塊密碼(block cipher)對固定大小(通常 64 或 128 位元)的區塊運作;同一明文區塊配同一金鑰永遠加密成同一密文區塊DES、Blowfish、AES(Rijndael)
串流密碼(stream cipher)生成偽亂位元流(keystream),通常一次一位元或一位元組,與明文 XOR;適合連續資料流RC4、LSFR

混淆與擴散#

建構區塊密碼時反覆使用兩個概念:

  • 混淆(confusion):隱藏明文、密文、金鑰之間的關係——輸出位元必須涉及金鑰與明文的複雜轉換。
  • 擴散(diffusion):把明文位元與金鑰位元的影響盡可能散布到整段密文。

乘積密碼(product cipher) 反覆使用各種簡單運算來結合這兩個概念,DES 與 AES 都是乘積密碼。

DES 與 Feistel 網路#

DES 使用 Feistel 網路確保演算法可逆。每個區塊分成左(L)、右(R)兩半,一輪運算中:

Lᵢ = Rᵢ₋₁
Rᵢ = Lᵢ₋₁ ⊕ f(Rᵢ₋₁, Kᵢ)

新左半等於舊右半,新右半是舊左半 XOR「用舊右半與該輪子金鑰的函式輸出」。

DES 使用 16 輪運算(特意選來抵禦差分密碼分析)。它唯一的真正弱點是金鑰大小:金鑰只有 56 位元,用專用硬體幾週內就能窮舉整個金鑰空間。

Triple-DES 用兩把 DES 金鑰串接(共 112 位元)修正此問題:以第一把加密、第二把解密、再以第一把加密。增加的金鑰大小讓暴力破解呈指數級困難。

量子計算的威脅(常被過度渲染)#

Grover 量子搜尋演算法:只把金鑰大小減半

量子計算承諾大規模平行:量子電腦能在疊加態(superposition) 中儲存許多狀態、同時對全部運算——理想用於暴力破解。疊加態可載入每個可能金鑰,同時對全部金鑰執行加密。

棘手處在於取出正確值:一觀察疊加態,整體就坍縮(decohere) 成單一狀態,而初始坍縮是隨機的、坍縮成各狀態的機率相等——這樣就和瞎猜金鑰沒兩樣。

Lov Grover 的演算法能操縱疊加態的機率,讓某個目標狀態的機率上升、其他下降,重複數次直到幾乎保證坍縮成目標狀態。

用基本指數數學可看出,這只是有效把金鑰大小減半。所以對極度偏執者而言,把區塊密碼的金鑰大小加倍就能抵禦量子電腦窮舉暴力破解的理論可能性。

大多數業界標準區塊密碼對所有已知密碼分析都有抵抗力,金鑰大小通常也大到無法窮舉暴力破解。