花卷
方表探秘
既然特里特米烏斯的方表這么厲害,你一定特別想看看它到底長啥樣(如果你還記得的話,就知道上期你已經見過了)——不過我估計你一看就暈了:這什么鬼?呃,這張表乍一看確實挺暈的,不過仔細一看其實并不難,我們這就來捋一捋。
首先,方表方表,顧名思義,它是一張正方形的表(廢話),橫排是26個字母,豎排也是26個字母。接下來我們一行一行地看,先看第1行吧。第1行的內容是ABCDE……XYZ,哦,這不就是26個英文字母嗎?再看第2行,是BCDEF……YZA,還是26個英文字母,只不過整個字母表往左挪了一個位置。再看第3行、第4行……剩下的你就明白了吧,每一行都把整個字母表往左挪一個位置,其實沒什么難的對吧?
不知道大家還記不記得,我們在瑪麗女王的故事里曾經梳理過一遍單表密碼的發展史,其中提過一種應該是最古老的單表密碼——愷撒密碼。啥?不記得了?好吧,我們簡單回憶一下啦。愷撒密碼特別簡單,它實際上就是把字母表整個挪若干個位置,假設我們挪3個位置,那么A加密之后就變成了D,R就變成了U,Z就變成了C。我們當時也說過,愷撒密碼特別脆弱,根本用不著頻率分析那種高大上的技術,因為這種密碼一共只有26種可能性,一個一個試過來也不費事兒啊。
等等,我們不是在講特里特米烏斯的方表嗎,為啥又要提愷撒密碼這種老古董呢?聰明的你肯定看出來了,特里特米烏斯的方表不就是把愷撒密碼的全部26種可能性給展開成了一張二維的表嗎?比如,我們上面說的那個挪3個位置的例子,其實就相當于方表的D行(第4行),我們先在最頂上的表頭中找到A,然后在D行中找到對應的字母,你看是不是D?再找找R和Z的對應字母,看看是不是U和C?
說了這么多,原來特里特米烏斯的方表就是愷撒密碼的展開,可是愷撒密碼只是“戰五渣”啊,展開之后難道就能變成超級賽亞人嗎?好吧,也許確實變不成超級賽亞人,不過肯定比原來的“戰五渣”要厲害多了。特里特米烏斯的方表到底怎么用呢?實際上,它的用法跟愷撒密碼真的差不多,在剛才的例子中我們已經操練過了,先在表頭中找到原文的字母,然后從表中找到同一列中對應的密文字母就可以了。那么問題來了,這張表一共有26行,我到底應該看哪一行呢?特里特米烏斯的設計是這樣的,每一個字母都要換一行,比如原文中的第1個字母看A行,第2個字母就看B行,第3個字母就看C行,以此類推。拿我們講阿爾伯蒂密碼盤的時候用的那句話來模擬一下的話,就是這個樣子:
看起來怎么樣?回想一下我們曾經提到過的多表密碼的一個重要特點,沒錯,就是通過“多對多”的關系來消除頻率分布的特征,讓頻率分析這個當時最厲害的大殺器失靈。那么,特里特米烏斯的方表有沒有做到這一點呢?我們看上面的例子,原文里出現了3次M,到了密文里分別變成了P、T、W;而密文里出現了3次T,但分別對應不同的原文字母T、M、I。你看,一個原文字母可以對應多個密文字母,一個密文字母也可以對應多個原文字母,這不正是“多對多”的關系么?面對這樣的密文,頻率分析怕是又要抓瞎了。
嘩,這個方表好神奇吶,把古老的弱雞愷撒密碼這么一展開,居然就能達到如此境界。不過先別高興得太早,還記得我們前面說的阿爾伯蒂密碼盤存在的兩個弱點不?簡單回憶一下吧:第一個弱點是密鑰輪換的頻率太低,第二個弱點是對方知道了密碼盤的結構和用法就基本等于破解了密碼。現在問題又來了,特里特米烏斯方表到底有沒有解決這兩個問題呢?我們還是一個一個看。
首先,特里特米烏斯方表解決了密鑰輪換頻率太低的問題。阿爾伯蒂密碼盤由于密鑰輪換比較繁瑣,因此一般是逐句輪換密鑰,但特里特米烏斯方表則做到了逐字母輪換密鑰,因為每加密一個字母就要在方表里換一行嘛,這個“換一行”的動作,其實就是換了一張置換表。因此,要說特里特米烏斯方表相比密碼盤最大的改進是啥,那就非這個逐字母輪換密鑰的機制莫屬了。這個機制是一個偉大的進步,趕緊畫重點吧!
然而,對于第二個弱點,也就是“隱匿式安全”的問題,特里特米烏斯方表并沒有解決,或者說,在這個問題上居然一丁點改進都沒有。為什么這么說呢?因為特里特米烏斯方表的密鑰輪換方法是固定的,而且是有規律的,這個規律就寫在表上,只要破譯者知道一段信息是用這種方表加密的,就可以秒破這種密碼。換句話說,方表的秘密就是它自己,這和密碼盤是一樣的,而如果不把“密碼系統”(System)和“密鑰”(Key)拆分成兩個部件,那么這個問題就沒辦法解決,這可怎么辦呢?
貝拉索的口令
特里特米烏斯方表只解決了阿爾伯蒂密碼盤的其中一個弱點,不過這也算是一個很大的進步啦,怎么能把好事兒都給一個人做完了呢?于是后來有人發現,特里特米烏斯提出的這個方表,其實還有不小的潛力可以挖,只不過特里特米烏斯本人沒把它發揮到極致而已。只要在用法上稍加改進,阿爾伯蒂密碼盤的第二個弱點還是有希望搞定的。
當時,各種單表密碼依然是絕對的主流,至于多表密碼,大概只有那些最頂尖的密碼學家才聽說過。盡管如此,還是有很多人琢磨著怎么把多表密碼弄得更厲害一點,吉奧萬·巴蒂斯塔·貝拉索(Giovan Battista Bellaso)就是其中之一。貝拉索是意大利的一位密碼學家,一輩子都在研究各種密碼,特別是那些最尖端的、最詭異的密碼,全都是他的菜。1553年,貝拉索出了一本書,名字就叫《吉奧萬·巴蒂斯塔·貝拉索先生的密碼》,這名字起得真臭屁,居然拿自己的名字當書名,牛頓、愛因斯坦這些大牛可都沒這么干過吶。
那么這位貝拉索先生到底在書里寫了點啥呢?他在書里描述了一種新的多表密碼,這種密碼跟特里特米烏斯方表長得不太一樣,不過本質上大同小異。廢話少說,我們來看圖吧(勞駕您眼睛往下一頁瞅),這張圖應該就是那本標題很臭屁的書上的原圖,這張表從上到下分為11個組,每組的左邊有兩個大寫字母,我們管它叫索引(Index),右邊有兩行小寫字母,每行11個字母。說到這里你大概隱隱約約有點感覺了吧,其實這每一組都是一個單表,11個單表組成了這個多表密碼,至于每個單表里面是怎么置換的,其實也很簡單:如果原文字母在上面一行,那么就替換成下面一行的對應字母;反過來,如果原文字母在下面一行,那么就替換成上面一行的對應字母。

還是舉個例子吧。我們先只看第一組,假設原文字母是A,我們發現A在上面一行,下面一行的對應字母是N,那么A加密之后就變成了N,反過來,N就應該替換成A,換句話說,上下兩行的字母都是一對一對的。那么這11組之間又有什么區別呢?仔細看看就發現了,這11組的上面一行字母都是相同的,下面一行字母的順序也是相同的,只是位置進行了平移而已。實際上,我們可以把貝拉索的這種密碼改寫成一張方表的形式,這也就是為什么我說“本質上大同小異”。至于怎么個改法,我就不在這里灌水啦,要不大家自己試試看?
話說到這里,你肯定要問了,既然貝拉索的密碼實質上就相當于一張方表,那么它跟特里特米烏斯的方表有啥區別啦?其實,貝拉索和特里特米烏斯在表的設計上并沒有什么本質區別,但貝拉索提出了一個新的“用法”,而這個新的用法,正是解決“隱匿式安全”這個老大難遺留問題的關鍵。哇,到底什么樣的新“用法”能這么神奇?這個新的“用法”就是引入了一種叫“口令”(Countersign)的機制。這個口令是什么意思呢?嗯……你可以理解為是登錄淘寶時輸入的那個“密碼”(Password),也就是說,口令是一串保密的字母,只有信息的發送者和接收者才知道這個口令。
口令到底怎么用來加密呢?我們還是拿例子說話吧,趕緊把之前那個用爛的例子再翻出來,假設我們要加密的原文是“TI AMO TU MI AMI”。跟特里特米烏斯方表不同,我們這次還需要想一個口令,嗯,比如說“FANS”吧。接下來,我們把原文和口令排列在一起,口令一般都比原文短,但可以像敲圖章一樣不斷重復,像這樣:
好了,現在我們可以開始查表加密啦。首先看第一個字母T,對應的口令是F,我們先在表上從左側的索引中找到F,也就是寫著EF的第3組。然后,在這一組中找到字母T,找到了,在下面一行,看一看上面一行的對應字母是啥?是H,好了,于是我們的第一個密文字母就是H。再看第二個字母I,對應口令是A,這個口令對應的是表中寫著AB的第1組,從這一組中找到字母I,這個字母在上面一行,它對應的下面一行字母是X,于是我們的第二個密文字母就是X。后面的不用一個一個說了吧,大家自己試試看啦,整條消息加密之后就是這個樣子:
怎么樣,學會了沒?大家可以把上面這段內容和特里特米烏斯方表對比一下,聰明的你一定發現了,其實這個“口令”就是特里特米烏斯方表中的“行號”嘛,它們都是用來切換置換表的,作用其實是一樣一樣的,唯一不一樣的地方是,行號是按ABCDE這樣的固定順序來輪換的,這個方式是有規律的,你知我知,別人也知,而口令則是由加密者自行設定的,只有通信雙方才知道。
(那么,貝拉索的密碼能不能解決“隱匿式安全”的問題呢?后來還有沒有更先進的多表置換密碼呢?這些密碼又該如何破解呢?我們下期繼續講。)