花卷
方表探秘
既然特里特米烏斯的方表這么厲害,你一定特別想看看它到底長(zhǎng)啥樣(如果你還記得的話,就知道上期你已經(jīng)見過(guò)了)——不過(guò)我估計(jì)你一看就暈了:這什么鬼?呃,這張表乍一看確實(shí)挺暈的,不過(guò)仔細(xì)一看其實(shí)并不難,我們這就來(lái)捋一捋。
首先,方表方表,顧名思義,它是一張正方形的表(廢話),橫排是26個(gè)字母,豎排也是26個(gè)字母。接下來(lái)我們一行一行地看,先看第1行吧。第1行的內(nèi)容是ABCDE……XYZ,哦,這不就是26個(gè)英文字母嗎?再看第2行,是BCDEF……YZA,還是26個(gè)英文字母,只不過(guò)整個(gè)字母表往左挪了一個(gè)位置。再看第3行、第4行……剩下的你就明白了吧,每一行都把整個(gè)字母表往左挪一個(gè)位置,其實(shí)沒(méi)什么難的對(duì)吧?
不知道大家還記不記得,我們?cè)诂旣惻醯墓适吕镌?jīng)梳理過(guò)一遍單表密碼的發(fā)展史,其中提過(guò)一種應(yīng)該是最古老的單表密碼——愷撒密碼。啥?不記得了?好吧,我們簡(jiǎn)單回憶一下啦。愷撒密碼特別簡(jiǎn)單,它實(shí)際上就是把字母表整個(gè)挪若干個(gè)位置,假設(shè)我們挪3個(gè)位置,那么A加密之后就變成了D,R就變成了U,Z就變成了C。我們當(dāng)時(shí)也說(shuō)過(guò),愷撒密碼特別脆弱,根本用不著頻率分析那種高大上的技術(shù),因?yàn)檫@種密碼一共只有26種可能性,一個(gè)一個(gè)試過(guò)來(lái)也不費(fèi)事兒啊。
等等,我們不是在講特里特米烏斯的方表嗎,為啥又要提愷撒密碼這種老古董呢?聰明的你肯定看出來(lái)了,特里特米烏斯的方表不就是把愷撒密碼的全部26種可能性給展開成了一張二維的表嗎?比如,我們上面說(shuō)的那個(gè)挪3個(gè)位置的例子,其實(shí)就相當(dāng)于方表的D行(第4行),我們先在最頂上的表頭中找到A,然后在D行中找到對(duì)應(yīng)的字母,你看是不是D?再找找R和Z的對(duì)應(yīng)字母,看看是不是U和C?
說(shuō)了這么多,原來(lái)特里特米烏斯的方表就是愷撒密碼的展開,可是愷撒密碼只是“戰(zhàn)五渣”啊,展開之后難道就能變成超級(jí)賽亞人嗎?好吧,也許確實(shí)變不成超級(jí)賽亞人,不過(guò)肯定比原來(lái)的“戰(zhàn)五渣”要厲害多了。特里特米烏斯的方表到底怎么用呢?實(shí)際上,它的用法跟愷撒密碼真的差不多,在剛才的例子中我們已經(jīng)操練過(guò)了,先在表頭中找到原文的字母,然后從表中找到同一列中對(duì)應(yīng)的密文字母就可以了。那么問(wèn)題來(lái)了,這張表一共有26行,我到底應(yīng)該看哪一行呢?特里特米烏斯的設(shè)計(jì)是這樣的,每一個(gè)字母都要換一行,比如原文中的第1個(gè)字母看A行,第2個(gè)字母就看B行,第3個(gè)字母就看C行,以此類推。拿我們講阿爾伯蒂密碼盤的時(shí)候用的那句話來(lái)模擬一下的話,就是這個(gè)樣子:
看起來(lái)怎么樣?回想一下我們?cè)?jīng)提到過(guò)的多表密碼的一個(gè)重要特點(diǎn),沒(méi)錯(cuò),就是通過(guò)“多對(duì)多”的關(guān)系來(lái)消除頻率分布的特征,讓頻率分析這個(gè)當(dāng)時(shí)最厲害的大殺器失靈。那么,特里特米烏斯的方表有沒(méi)有做到這一點(diǎn)呢?我們看上面的例子,原文里出現(xiàn)了3次M,到了密文里分別變成了P、T、W;而密文里出現(xiàn)了3次T,但分別對(duì)應(yīng)不同的原文字母T、M、I。你看,一個(gè)原文字母可以對(duì)應(yīng)多個(gè)密文字母,一個(gè)密文字母也可以對(duì)應(yīng)多個(gè)原文字母,這不正是“多對(duì)多”的關(guān)系么?面對(duì)這樣的密文,頻率分析怕是又要抓瞎了。
嘩,這個(gè)方表好神奇吶,把古老的弱雞愷撒密碼這么一展開,居然就能達(dá)到如此境界。不過(guò)先別高興得太早,還記得我們前面說(shuō)的阿爾伯蒂密碼盤存在的兩個(gè)弱點(diǎn)不?簡(jiǎn)單回憶一下吧:第一個(gè)弱點(diǎn)是密鑰輪換的頻率太低,第二個(gè)弱點(diǎn)是對(duì)方知道了密碼盤的結(jié)構(gòu)和用法就基本等于破解了密碼。現(xiàn)在問(wèn)題又來(lái)了,特里特米烏斯方表到底有沒(méi)有解決這兩個(gè)問(wèn)題呢?我們還是一個(gè)一個(gè)看。
首先,特里特米烏斯方表解決了密鑰輪換頻率太低的問(wèn)題。阿爾伯蒂密碼盤由于密鑰輪換比較繁瑣,因此一般是逐句輪換密鑰,但特里特米烏斯方表則做到了逐字母輪換密鑰,因?yàn)槊考用芤粋€(gè)字母就要在方表里換一行嘛,這個(gè)“換一行”的動(dòng)作,其實(shí)就是換了一張置換表。因此,要說(shuō)特里特米烏斯方表相比密碼盤最大的改進(jìn)是啥,那就非這個(gè)逐字母輪換密鑰的機(jī)制莫屬了。這個(gè)機(jī)制是一個(gè)偉大的進(jìn)步,趕緊畫重點(diǎn)吧!
然而,對(duì)于第二個(gè)弱點(diǎn),也就是“隱匿式安全”的問(wèn)題,特里特米烏斯方表并沒(méi)有解決,或者說(shuō),在這個(gè)問(wèn)題上居然一丁點(diǎn)改進(jìn)都沒(méi)有。為什么這么說(shuō)呢?因?yàn)樘乩锾孛诪跛狗奖淼拿荑€輪換方法是固定的,而且是有規(guī)律的,這個(gè)規(guī)律就寫在表上,只要破譯者知道一段信息是用這種方表加密的,就可以秒破這種密碼。換句話說(shuō),方表的秘密就是它自己,這和密碼盤是一樣的,而如果不把“密碼系統(tǒng)”(System)和“密鑰”(Key)拆分成兩個(gè)部件,那么這個(gè)問(wèn)題就沒(méi)辦法解決,這可怎么辦呢?
貝拉索的口令
特里特米烏斯方表只解決了阿爾伯蒂密碼盤的其中一個(gè)弱點(diǎn),不過(guò)這也算是一個(gè)很大的進(jìn)步啦,怎么能把好事兒都給一個(gè)人做完了呢?于是后來(lái)有人發(fā)現(xiàn),特里特米烏斯提出的這個(gè)方表,其實(shí)還有不小的潛力可以挖,只不過(guò)特里特米烏斯本人沒(méi)把它發(fā)揮到極致而已。只要在用法上稍加改進(jìn),阿爾伯蒂密碼盤的第二個(gè)弱點(diǎn)還是有希望搞定的。
當(dāng)時(shí),各種單表密碼依然是絕對(duì)的主流,至于多表密碼,大概只有那些最頂尖的密碼學(xué)家才聽說(shuō)過(guò)。盡管如此,還是有很多人琢磨著怎么把多表密碼弄得更厲害一點(diǎn),吉奧萬(wàn)·巴蒂斯塔·貝拉索(Giovan Battista Bellaso)就是其中之一。貝拉索是意大利的一位密碼學(xué)家,一輩子都在研究各種密碼,特別是那些最尖端的、最詭異的密碼,全都是他的菜。1553年,貝拉索出了一本書,名字就叫《吉奧萬(wàn)·巴蒂斯塔·貝拉索先生的密碼》,這名字起得真臭屁,居然拿自己的名字當(dāng)書名,牛頓、愛因斯坦這些大牛可都沒(méi)這么干過(guò)吶。
那么這位貝拉索先生到底在書里寫了點(diǎn)啥呢?他在書里描述了一種新的多表密碼,這種密碼跟特里特米烏斯方表長(zhǎng)得不太一樣,不過(guò)本質(zhì)上大同小異。廢話少說(shuō),我們來(lái)看圖吧(勞駕您眼睛往下一頁(yè)瞅),這張圖應(yīng)該就是那本標(biāo)題很臭屁的書上的原圖,這張表從上到下分為11個(gè)組,每組的左邊有兩個(gè)大寫字母,我們管它叫索引(Index),右邊有兩行小寫字母,每行11個(gè)字母。說(shuō)到這里你大概隱隱約約有點(diǎn)感覺(jué)了吧,其實(shí)這每一組都是一個(gè)單表,11個(gè)單表組成了這個(gè)多表密碼,至于每個(gè)單表里面是怎么置換的,其實(shí)也很簡(jiǎn)單:如果原文字母在上面一行,那么就替換成下面一行的對(duì)應(yīng)字母;反過(guò)來(lái),如果原文字母在下面一行,那么就替換成上面一行的對(duì)應(yīng)字母。
還是舉個(gè)例子吧。我們先只看第一組,假設(shè)原文字母是A,我們發(fā)現(xiàn)A在上面一行,下面一行的對(duì)應(yīng)字母是N,那么A加密之后就變成了N,反過(guò)來(lái),N就應(yīng)該替換成A,換句話說(shuō),上下兩行的字母都是一對(duì)一對(duì)的。那么這11組之間又有什么區(qū)別呢?仔細(xì)看看就發(fā)現(xiàn)了,這11組的上面一行字母都是相同的,下面一行字母的順序也是相同的,只是位置進(jìn)行了平移而已。實(shí)際上,我們可以把貝拉索的這種密碼改寫成一張方表的形式,這也就是為什么我說(shuō)“本質(zhì)上大同小異”。至于怎么個(gè)改法,我就不在這里灌水啦,要不大家自己試試看?
話說(shuō)到這里,你肯定要問(wèn)了,既然貝拉索的密碼實(shí)質(zhì)上就相當(dāng)于一張方表,那么它跟特里特米烏斯的方表有啥區(qū)別啦?其實(shí),貝拉索和特里特米烏斯在表的設(shè)計(jì)上并沒(méi)有什么本質(zhì)區(qū)別,但貝拉索提出了一個(gè)新的“用法”,而這個(gè)新的用法,正是解決“隱匿式安全”這個(gè)老大難遺留問(wèn)題的關(guān)鍵。哇,到底什么樣的新“用法”能這么神奇?這個(gè)新的“用法”就是引入了一種叫“口令”(Countersign)的機(jī)制。這個(gè)口令是什么意思呢?嗯……你可以理解為是登錄淘寶時(shí)輸入的那個(gè)“密碼”(Password),也就是說(shuō),口令是一串保密的字母,只有信息的發(fā)送者和接收者才知道這個(gè)口令。
口令到底怎么用來(lái)加密呢?我們還是拿例子說(shuō)話吧,趕緊把之前那個(gè)用爛的例子再翻出來(lái),假設(shè)我們要加密的原文是“TI AMO TU MI AMI”。跟特里特米烏斯方表不同,我們這次還需要想一個(gè)口令,嗯,比如說(shuō)“FANS”吧。接下來(lái),我們把原文和口令排列在一起,口令一般都比原文短,但可以像敲圖章一樣不斷重復(fù),像這樣:
好了,現(xiàn)在我們可以開始查表加密啦。首先看第一個(gè)字母T,對(duì)應(yīng)的口令是F,我們先在表上從左側(cè)的索引中找到F,也就是寫著EF的第3組。然后,在這一組中找到字母T,找到了,在下面一行,看一看上面一行的對(duì)應(yīng)字母是啥?是H,好了,于是我們的第一個(gè)密文字母就是H。再看第二個(gè)字母I,對(duì)應(yīng)口令是A,這個(gè)口令對(duì)應(yīng)的是表中寫著AB的第1組,從這一組中找到字母I,這個(gè)字母在上面一行,它對(duì)應(yīng)的下面一行字母是X,于是我們的第二個(gè)密文字母就是X。后面的不用一個(gè)一個(gè)說(shuō)了吧,大家自己試試看啦,整條消息加密之后就是這個(gè)樣子:
怎么樣,學(xué)會(huì)了沒(méi)?大家可以把上面這段內(nèi)容和特里特米烏斯方表對(duì)比一下,聰明的你一定發(fā)現(xiàn)了,其實(shí)這個(gè)“口令”就是特里特米烏斯方表中的“行號(hào)”嘛,它們都是用來(lái)切換置換表的,作用其實(shí)是一樣一樣的,唯一不一樣的地方是,行號(hào)是按ABCDE這樣的固定順序來(lái)輪換的,這個(gè)方式是有規(guī)律的,你知我知,別人也知,而口令則是由加密者自行設(shè)定的,只有通信雙方才知道。
(那么,貝拉索的密碼能不能解決“隱匿式安全”的問(wèn)題呢?后來(lái)還有沒(méi)有更先進(jìn)的多表置換密碼呢?這些密碼又該如何破解呢?我們下期繼續(xù)講。)