Symmetric Cryptography 中文應該翻譯作 “對稱性密碼", 又叫做 “secret key cryptography" (秘鑰密碼). 顧名思義, 這個加密方法需要一把秘鑰,只有傳遞/接收訊息的人知道這個秘鑰是甚麼? 另外, 既然是對稱, 就表示加密或解密的人都是使用同一把鑰匙.
通訊的方法大致如下:
先定義一把秘鑰叫做 Keyab, 這是 A 和 B 所分享的秘密 (shared secrete).
A 先連絡上了 B.
但 B 要知道這個人是不是 A?
所以送出測試訊息 (challenge) Tb 給 A, 意思是, 你用 Keyab 來加密看看?
於是 A 就把 Tb 加密成 E(Tb) 送給 B.
B 把 E(Tb) 解開, 發現果然和他送出去的 Tb 一樣, 那麼 B 就可以相信 A 了.
不過 A 可以相信 B 嗎? 萬一 B 是個假的, 收到甚麼都說好呢? 所以還要讓 A 送出 challenge Ta, 考驗 B 的加密能力.
B 把 Ta加密成 E(Ta) 送還給 A 驗證, 那麼 A 就可以知道 B 至少是擁有同一隻 keyab 的通訊對象了.
這個系列的加密方法有 DES 和 IDES 等幾種.
DES 全名是 Data Encryption Standard, DES 的 key 有 56 bits, 可以讓 64 bits 的 data 加密為 64 bits 的密碼. 因為 64 bits 的密碼不算長, 所以美國的數位電視廣播的 CA (conditional access, 有條件接收), 就會用到 3 次的 DES 來加密 (triple DES).
有趣的是, tripe DES 並不慣用連續加密 3 次, 而是用 E-D-E 的組合, 加密 – 解密 – 加密. 這樣一來, 雖然是 3 次的作業, 卻只需要 2 把鑰匙, 一把專門加密, 一把專門解密.
至於 IDES 全名是 International Data Encryption Algorithm,它的最大賣點就是 key 的長度升級到了 128 bits, 即使同樣是把 64 bits 編成 64 bits. Key 變長了, 想要用暴力法破解密碼的難度也就大大地增加了.
最後, 有人可能會覺得奇怪, 一定要加密 64 bits 嗎? 不是的, 方法有好幾種. 最笨的一種就是把 data 切成每 64 bits 一塊, 每一塊個別用 DES 之類的方法去加密. 這個方法叫做 ECB (Electronic Code Bok).
比較保險的做法是增加每 64 bits 之間的關聯性, 杜絕每一個 64 bits block 可以被單獨破解的可能. 首先我們可以隨意取一個 64 bits 當作 initial 值 (叫做 IV = initialization vector), 來和 64 bits 的明文做 XOR (exclusive OR), 然後才用 DES 加密. 第二個 block 開始, 大家都和前一次 XOR 出來的中間結果再 XOR 一次, 然後才用 DES 加密.
這樣一來, 剛開始的 64 bits 解不了, 後來就很難矇出來了. 這個方法叫做 CBC (Cipher Block Chaining).
當然, 要把每個 block 之間的關係串連起來的話, 並不只這一種做法. 我們可以用 output feedback 或是 cipher feedback. 有了回授關係, 同樣可以達到一擊不中, 後面更頭痛的效果. 這些方法就稱之為 OFB 或 CFB.