被征服的謎——ENIGMA的故事(篇外之二):密碼的ABC
前些天連篇累牘地介紹了ENIGMA和初步破譯ENIGMA的故事,寫(xiě)的繁雜不說(shuō),還弄得我腦子里整天就是E、N、I、G、M、A六個(gè)字母來(lái)回轉,感覺(jué)頗是E-Ni-G-Ma……后來(lái)發(fā)現,寫(xiě)篇外隨筆,才真正達到了快樂(lè )寫(xiě)作的境界……這樣,在具體寫(xiě)英國人的舉動(dòng)以前,我就花插著(zhù)再來(lái)稍微介紹一下密碼學(xué)最簡(jiǎn)單的知識。
再次強調,我們這個(gè)系列里所說(shuō)的密碼,都是非常老土的古典密碼。在今天,不說(shuō)軍事和外交,即便如商業(yè)上使用的加密手段,都已經(jīng)達到了密碼界前輩所無(wú)法想像的高度。比起現在稀松平常的DES、RSA等等加密手段,當年最牛最紅的種種加密措施簡(jiǎn)直就是一些小花招,實(shí)在沒(méi)有太多的技術(shù)含量。
既然這樣,為什么還要介紹它們呢?我個(gè)人想法是:
第一,密碼學(xué)的發(fā)展,本身就確實(shí)是個(gè)有意思的話(huà)題。
第二,研究密碼,學(xué)習密碼,實(shí)際上也是個(gè)思維鍛煉。
第三,密碼的成敗攸關(guān)大事,而男人不是最關(guān)心大事么?
最后,密碼學(xué)和密碼的故事里,先天具備很多我這樣的人喜歡的特征:軍事,陰謀,歷史,科學(xué),名人,邏輯……呵呵,等等吧。
閑話(huà)不再多扯,現在我們就來(lái)看看密碼的一些基礎知識。
------------------------------------------------------------
首先,不管是什么密碼,必然符合以下五個(gè)特征,也就是嚴格意義上的所謂“密碼五要素”:
明文集合μ;
密文集合π;
密鑰集合K,其中任一具體密鑰記為k;
加密變換集合E,加密算法e;
解密變換集合D,解密算法d。
以上的μ、π、K/k、E/e、D/d,就是密碼五要素。不難看出,如果以ENIGMA為例,那么
μ就是要發(fā)走的文本,比如命令、匯報、指示等等;
π就是加密后發(fā)出的密電;
K就是密碼本上所有的密鑰集合;k就是具體某封電文的密鑰;
E就是ENIGMA的機制,比如,三個(gè)轉輪啊,一個(gè)反射板啊,一個(gè)連接板啊,等等;e則是ENIGMA具體的加密方法,比如,加密一個(gè)字母后轉輪向某方向旋轉一格,再加密一次則第二個(gè)轉輪跟著(zhù)旋轉一格,等等;
在ENIGMA的機制中,D和E類(lèi)似,d跟e類(lèi)似。
回想一下前文中對ENIGMA構造的介紹,我們可以看出,由于反射板的存在,加密和解密,也就是E和D以及e和d,都正好一樣。而大多數加密機制中的E和D,e和d都是不一樣的。也正因為這樣,ENIGMA的確是個(gè)異數,另類(lèi)得要命……
關(guān)于這五個(gè)要素之間的關(guān)系,羅嗦一大堆文字也許還不如照抄一兩個(gè)公式。好在要素不多,公式也不長(cháng),稍微思索一下也是可以明白的[注:圓括號里內容為下標字母,我是用純文本寫(xiě)的,無(wú)法顯示,就用圓括號括起來(lái)]:
e(k):μ→π
d(k):π→μ
又因為e(k)與d(k)互為逆變換,設明文中某句為M,則恒有:d(k){e(k)[M]}=M
其實(shí)這上面這個(gè)表達式說(shuō)的無(wú)非就是,用密鑰加密明文后,用同樣的密鑰和相應的解密方法,肯定可以解出原文——就是這么回事。
如果用ENIGMA來(lái)做個(gè)說(shuō)明,也可以幫助理解:
解密(當天密鑰+臨時(shí)密鑰){加密(當天密鑰+臨時(shí)密鑰)[統帥部命令]}=統帥部命令
千變萬(wàn)化的密碼,其實(shí)機制就是這么簡(jiǎn)單。所以,一個(gè)密碼系統是否強大,是否安全,的確要取決于設計者的智慧。具體來(lái)說(shuō),就是他如何設計加密機制和手段,也就是E和e。至于K和k,屬于當然要保密的范疇,但是比較起來(lái),遠不如E和e來(lái)的重要。
一個(gè)很生動(dòng)的證明就是,在沒(méi)有徹底解破ENIGMA的E和e以前,波蘭人即便有了今天的密鑰和某份確定的當前密鑰,也就是有了k,仍然無(wú)法解破今后的密文。這其中的關(guān)鍵,就是E和e的設計決定了k只針對當前密文有效,從而大大增強了保密性。
設計E和e,在密碼學(xué)上叫做編碼。相應地,這門(mén)學(xué)問(wèn)也就叫做密碼編碼學(xué)。按照有矛必有盾的邏輯,設計D和d,也就是密碼分析學(xué)的內容了。
對于設計E和e的人來(lái)說(shuō),他要做的就是挖空心思把E和e設計的盡量復雜,使經(jīng)過(guò)K和k加密之后形成的密文集合π盡可能地不顯現出某種規律性,以防止破解。
順便說(shuō)一句,發(fā)展到今天,E和e已經(jīng)基本定型,甚至可以公開(kāi)E和e,反正你也算不出來(lái)——比如說(shuō),你要能把一個(gè)上百萬(wàn)位的自然數拆成兩個(gè)質(zhì)數的乘積,算你厲害,我這密碼你就破掉了——只不過(guò),我知道你算不出來(lái),因為你的計算機再牛,算起這個(gè)也太慢了;等你算出來(lái)了,你想知道的內容早不是秘密了……
對于這種公開(kāi)和所有人叫板的加密方式,我個(gè)人興趣反而不大了。光比計算機能力,比金錢(qián)投入,程序編好以后,哪怕是個(gè)傻瓜,動(dòng)動(dòng)鍵盤(pán)鼠標就能等到破解的結果,有什么意思?回想波蘭人破解ENIGMA的過(guò)程,里面夾帶了多少風(fēng)格鮮明的“人”的思維方式啊……也正是這樣,那些剛剛可以被人類(lèi)智力破解,但本身又的確讓人茫然的密碼體系,才是我最感興趣的部分。不是么?人和人斗智才最有意思,至于計算機和計算機斗智嘛,不提了不提了……
而對于千方百計試圖破解E和e,進(jìn)而得到k(試圖得到全部密鑰集合K恐怕工作量是太大了,并且很可能其實(shí)沒(méi)這個(gè)必要)的人來(lái)說(shuō),他的方法一般來(lái)講只有三類(lèi):
密文攻擊;
已知明文攻擊;
選擇性明文攻擊。
密文攻擊是指手里只有密文,其它一概沒(méi)有的情況下,破譯者試圖僅僅通過(guò)密文來(lái)推斷出密鑰,進(jìn)而破譯密文的方法。這是難度最大的,類(lèi)似于盲人騎瞎馬的處境。ENIGMA剛開(kāi)始采用的時(shí)候,各國面對德國密文感到莫名其妙無(wú)可奈何的原因,就是他們唯一的辦法只能是密文攻擊。而對于一個(gè)稍微像樣一點(diǎn)的密碼體系,密文攻擊注定是所耗巨大收獲甚微的。
已知明文攻擊是指破譯者手里同時(shí)擁有某份明文和它被加密后的密文后,進(jìn)行的對照性反向推導的方法。說(shuō)起來(lái),這個(gè)辦法比密文攻擊要強的多,但是也有局限性,比如說(shuō),你從哪兒去找明文呢?就因為這個(gè)“找”字,不知道產(chǎn)生了多少情報史上的驚險故事——偷(去使館;建立監聽(tīng)線(xiàn)路……);偷不著(zhù)就搶?zhuān)òl(fā)動(dòng)專(zhuān)門(mén)的戰斗……);搶不著(zhù)就撿(搜索飛機艦船車(chē)輛的殘骸和尸體……);撿都撿不著(zhù)就只好買(mǎi)(還記得那個(gè)德奸么?呵呵)了。無(wú)論是偷、搶、撿、買(mǎi),反正一句話(huà),你要是要不到的,誰(shuí)也不會(huì )白白給你。順便說(shuō)一句,后文將要提到的英國破譯ENIGMA的方法,很大程度上就是已知明文攻擊。具體方法么,賣(mài)個(gè)關(guān)子,以后再提……
選擇性明文攻擊是指破譯者選擇好明文以后,又進(jìn)一步獲得這明文的密文。跟已知明文攻擊那種“打哪兒指哪兒”最大的區別是,選擇性明文攻擊是“指哪兒打哪兒”。具體來(lái)說(shuō)就是,自己發(fā)個(gè)電文,讓對方發(fā)現,并在對方交流時(shí)截獲密文,與自己發(fā)的明文相對照。前文提過(guò)的,美軍在不能確定日軍即將攻擊的AF是指哪里,估計可能是中途島的時(shí)候,就使用了選擇性明文攻擊的方法:先發(fā)個(gè)電報,說(shuō)中途島淡水管路故障,之后豎起耳朵,等日本人對自己的猜測打個(gè)分――隨后截獲的日軍電報給出了滿(mǎn)分:AF缺乏淡水。于是,傾巢而出打算再次來(lái)個(gè)突襲的日軍,面對的卻是嚴陣以待的美軍。從發(fā)明文字以來(lái),AF兩個(gè)字母大概還從來(lái)沒(méi)有這么昂貴過(guò):日軍被擊沉4艘航空母艦、1艘重型巡洋艦,被擊落322架飛機,還搭上了3507條人命……日軍從此在太平洋上一蹶不振,從前咄咄逼人的全面攻勢變成了抱殘守缺的全面防御――中途島海戰也從此名垂史冊,成為第二次世界大戰太平洋戰場(chǎng)上重要的轉折點(diǎn)……
從以上敘述不難看出,其實(shí)檢驗密碼設計最好的標準就是抗破解的程度。以上三種破解方式中,如果連第一種密文攻擊都應付不了,這樣的密碼肯定要被淘汰,實(shí)話(huà)說(shuō),算不算嚴格意義上的密碼都很可置疑。如果能經(jīng)受的住第二種已知明文攻擊,那么這個(gè)密碼的設計應該算是不錯了。如果進(jìn)一步還能抵御第三種選擇性明文攻擊,這個(gè)密碼設計的就真有點(diǎn)兒牛X了。
反過(guò)來(lái)講,對于一個(gè)破譯者來(lái)說(shuō),密文攻擊是最費力的辦法;已知明文攻擊就簡(jiǎn)單了很多;選擇性明文攻擊則是三種辦法中效率最高的,也是破譯者夢(mèng)寐以求的。
但是密碼不是游戲,那是攸關(guān)國家存亡的大事,事情哪有理論上想的那么美妙。
在實(shí)際應用中,破譯者常常只能擁有密文,畢竟這個(gè)一般接收起來(lái)不難(凡事都有例外,隨著(zhù)定向微波通信技術(shù)、光纖通信等等技術(shù)的發(fā)展,截獲電文本身就充滿(mǎn)了難度,我軍大面積更換光纖通信網(wǎng)也是出于這個(gè)原因),他們所能選擇的只有第一種辦法,也就是密文攻擊。雖然最笨也最可能沒(méi)效果,但是畢竟還是在進(jìn)行工作,老板沒(méi)理由不發(fā)薪水給我,何況萬(wàn)一要是破掉了呢;
使用第二種方法,也就是已知明文攻擊,除非你非常非??隙芪闹械哪扯巫帜缚隙ň褪侵改承┮馑?,否則結果依然是驢和馬接不上吻;
使用第三種方法,也就是選擇性明文攻擊,它的要求就更加苛刻:
你不僅要確保對手能收到你的誘餌電文,還得確保對方能看懂;
不僅確保對方能看懂,還不能讓對方因為這么幾下就看懂了而對誘餌電文內容真實(shí)性產(chǎn)生懷疑;
不僅要對方不產(chǎn)生懷疑,還得確定對方一定會(huì )利用你傳達給他的信息互相交流;
不僅要確定對方一定會(huì )利用你的信息進(jìn)行交流,還得確保能截獲他們之間的交流信息;
不僅要確保能截獲對方的交流信息,還得知道對方成千上萬(wàn)的通信交流中,哪一條才是提到你的誘餌電文的;
不僅要知道哪一條提到了誘餌電文,還得知道這條電文中,他們采用了還是引用了你的內容,也就是說(shuō),你的原話(huà)有沒(méi)有被對方歪曲;
這還沒(méi)完,你還必須知道這些信息出現在他們電文中的什么位置,是從第37個(gè)字開(kāi)始啊,還是從第852個(gè)字開(kāi)始……
就象《手機》里費墨費老先生那句的確經(jīng)典的四川話(huà)說(shuō)的:麻~~煩……
以上就是密碼學(xué)的一些泛泛而論的ABC。所謂萬(wàn)變不離其宗,從古到今,這個(gè)ABC始終提綱擷領(lǐng)地指引著(zhù)密碼編碼和密碼分析的方向。如果大家有興趣的話(huà),稍后我將再略為詳細地回顧一下密碼的前生,也就是密碼歷史上比較有意思的一些故事,和具有代表性的幾種密碼的介紹。至于ENIGMA,會(huì )寫(xiě)的,咱現在就是暫時(shí)換換腦子,也請大家放心,呵呵。
聯(lián)系客服