古典密碼(classical ciphers)是早於電腦出現的密碼,因此它們操作的對象是字母而不是位元。它們比 DES 這類現代密碼簡單得多——在古羅馬或第一次世界大戰時期,你沒有電腦晶片的算力可以打亂訊息,一切只能靠紙筆完成。
古典密碼有很多種,但最有名的是凱撒密碼與維吉尼亞密碼。
凱撒密碼#
凱撒密碼(Caesar cipher)之所以得名,是因為羅馬歷史學家蘇埃托尼烏斯(Suetonius)記載尤利烏斯·凱撒(Julius Caesar)使用過它。
它的加密方式是把每個字母在字母表中往後移三個位置,遇到 Z 就繞回 A:
C A E S A R
↓+3 ↓+3 ↓+3 ↓+3 ↓+3 ↓+3
F D H V D U
圖 1-2:凱撒密碼
所以 ZOO 加密成 CRR,FDHVDU 解密成 CAESAR。位移量 3 沒有任何特殊之處,只是心算起來比 11 或 23 容易。
為什麼它不安全#
凱撒密碼極容易破解:把字母往回移三位就還原了。由於沒有秘密金鑰參與(位移量永遠是 3),使用者只能假設攻擊者不識字或沒受過教育——這個假設在今天顯然不切實際。
就算改成使用秘密的位移值也幫助不大:攻擊者只要把 25 種可能的位移值全部試一遍,直到解出來的訊息讀得通為止。
這種密碼在當年或許堪用,而且它並未完全絕跡:2006 年義大利警方逮捕一名黑手黨頭目,正是因為破解了寫在小紙條上、以凱撒密碼變體加密的訊息(例如把 ABC 加密成 456 而非 DEF)。
維吉尼亞密碼#
凱撒密碼問世後,過了大約 1500 年才出現有意義的改良:維吉尼亞密碼(Vigenère cipher),由 16 世紀的義大利人貝拉索(Giovan Battista Bellaso)所創。
「維吉尼亞」這個名字來自法國人布萊斯·德·維吉尼亞(Blaise de Vigenère)——他在 16 世紀發明的其實是另一種密碼,但由於歷史上的誤植,這個名字就沿用下來了。
儘管如此,維吉尼亞密碼確實流行過:美國南北戰爭期間邦聯軍隊使用過它,一戰期間瑞士軍隊也用過。
運作方式#
維吉尼亞密碼與凱撒密碼相似,差別在於字母不是固定位移三格,而是依金鑰所定義的值位移。金鑰是一串字母,每個字母依其在字母表中的位置代表一個數字。
例如金鑰是 DUH,則位移值為 3、20、7(D 在 A 之後三個字母,U 在 A 之後 20 個,H 在 A 之後 7 個)。這個 3, 20, 7 的樣式不斷重複,直到整段明文都加密完畢:
明文 T H E Y D R I N K T H E T E A
金鑰 D U H D U H D U H D U H D U H
位移 +3 +20 +7 +3 +20 +7 +3 +20 +7 +3 +20 +7 +3 +20 +7
密文 W B L B X Y L H R W B L W Y H
圖 1-3:維吉尼亞密碼
同理,CRYPTO 用金鑰 DUH 會加密成 FLFSNV。
如何破解#
維吉尼亞密碼明顯比凱撒密碼安全,但仍然相當容易破解。過程分兩步:
找出金鑰長度。 觀察上例的密文
WBLBXYLHRWBLWYH(實務上會拿掉空白以隱藏詞界),三字母組WBL出現了兩次,間隔九個字母。這暗示同一個三字母單字用了相同的位移值加密。密碼分析者由此推斷金鑰長度是 9,或是 9 的因數(也就是 3)。他們甚至可以猜測這個重複的三字母單字是THE,進而推得金鑰可能是DUH。用頻率分析定出實際金鑰。 頻率分析(frequency analysis)利用語言中字母分布不均的特性。例如英文裡 E 最常出現,所以若你發現密文中 X 最常出現,那麼該位置最可能的明文值就是 E。
儘管相對脆弱,維吉尼亞密碼在它被使用的年代或許已經夠用:
- 上述攻擊需要至少幾句話長度的訊息,若只用來加密短訊息就無效。
- 多數訊息只需保密很短的時間,密文最終被敵方解開也無所謂。19 世紀密碼學家柯克霍夫(Auguste Kerckhoffs)估計,多數戰時加密訊息只需要維持三到四小時的機密性。