加密的歷史可以追溯數千年,隨著電子通訊愈來愈容易被監聽,加密也變得更加重要。現代加密演算法往往仰賴非常複雜的數學模型,但用了複雜演算法不代表就安全。
在協定分析中,我們只需要理解「使用的是哪種演算法」,不必深究這些密碼的建構細節。以下先釐清基本術語:
- 明文(plaintext):原始、未加密的訊息。
- 密文(cipher text):加密演算法的輸出。
- 金鑰(key):多數演算法加解密時所需的祕密值。
- 密碼分析(cryptanalysis):破解或削弱加密演算法的努力。
許多曾被認為安全的演算法後來都暴露出弱點甚至後門。部分原因是自這些演算法問世(有些可追溯到 1970 年代)以來運算效能大幅提升,讓過去只存在於理論的攻擊變得實際可行。
有些演算法只是用來混淆(obfuscate)協定在網路上的結構,例如字串或數字。演算法愈簡單,安全性通常愈低;一旦混淆機制被識破,就無法提供真正的安全。
替換式密碼(Substitution Ciphers)#
替換式密碼是最簡單的加密形式。它依據一張替換表(substitution table),將明文值與密文值做一對一映射來加密;解密時則反向查表還原。例如以某張表加密 HELLO,字母 H 被替換為 X,依此逐字處理。

圖表 7-1:替換式密碼的加密
替換式密碼能抵擋隨意的攻擊,卻無法承受密碼分析。頻率分析(frequency analysis)會比對密文中符號出現的頻率與明文資料集的典型頻率。例如英文裡字母 E 最常見,密文中最頻繁的字元十之八九就代表 E;順此推論即可重建替換表並解出訊息。
XOR 加密(XOR Encryption)#
XOR 加密是非常簡單的加解密技巧:對一個明文位元組與一個金鑰位元組做位元 XOR 運算,得到密文位元組。例如位元組 0x48 與金鑰位元組 0x82 做 XOR 得到 0xCA。由於 XOR 運算是對稱的,對密文套用同一金鑰位元組即可還原明文。
plaintext XOR key = cipher text
0x48 XOR 0x82 = 0xCA
0xCA XOR 0x82 = 0x48 (還原)
圖表 7-2:使用單位元組金鑰的 XOR 加密運算
單位元組金鑰讓演算法極不安全:攻擊者只要試遍 256 種金鑰值即可解密。加大金鑰也沒用——因為 XOR 對稱,只要有足夠的已知明文(known plaintext),把密文與已知明文 XOR 就能還原金鑰,再套用到其餘密文解出整段訊息。
唯一能安全使用 XOR 的方式是讓金鑰與訊息等長、且金鑰值完全隨機,這稱為一次性密碼本(one-time pad)。即使攻擊者知道一小段明文,也無法推得完整金鑰。
一次性密碼本為何難以實用
一次性密碼本在實務上極少使用,因為它有幾個嚴重問題:
- 你要傳送的金鑰材料大小必須與任何訊息一樣大。
- 訊息中的每個位元組都必須以完全隨機的值加密,才能保持安全。
- 金鑰絕不可重複用於不同訊息。一旦攻擊者能解出你的一則訊息,就能還原金鑰,之後所有用同一金鑰加密的訊息都會被攻破。
既然 XOR 加密如此低劣,為何還要介紹它?因為開發者常因貪圖方便而使用它,而且 XOR 也被當作建構更安全演算法的基礎原語(primitive),理解其運作方式很重要。