深入淺出加密術

自從有了戰爭就有了加密術,加密術越來越複雜,解密術也越來越先進,加密術與解密術魔高一尺道高一丈,此消彼長各領風騷。


1、古典加密術

凱撒密碼就是一款典型的古典加密術,其加密規則非常簡單,把字母表整體移位,形成明密文的對應表,接收者按提前規定好的位數反向移位就解密了。

深入淺出加密術

這種加密術很簡陋,明密文的對應關係也就25種,即使不知道移了幾位,只要移位不超過25次,就能把有意義的原文找出來。

這確實不夠安全,那該如何改進呢?您一定想到了亂序的法子,字母表不整體移位,而是亂序對應,這樣明密文的對應關係就遠遠超過25種。

深入淺出加密術

亂序的思路很好,但也不夠安全,因為它抗不住概率分析。我們都知道英文中26個字母出現的頻次是不一樣的,E出現的最多,如果一份密文中N的個數最多,我就有理由相信其對應的明文就是E。

深入淺出加密術

再比如,如果一份密文中某個字母出現的概率約為10%,我就會更傾向於認為它是T而不是Q,因為T的概率約為9%,而Q的概率則低得多啊。這種猜測未必十分準確,但卻在很大程度上接近了真相,可以有效地減少了解密嘗試的次數。

好了,現在輪到加密方想招了,既然解密方靠的是自然語言的非均勻性,那我就儘量把密文搞均勻了。於是加密方設置了3套密文表,明文中的147位使用密文1,258位使用密文2,369位使用密文3。例如明文中的E,會有B、K、H三種密文來表達,其概率就會被攤平了。

深入淺出加密術

現在又輪到解密方想招了,既然你把單個字母的概率規律給隱藏了,那隻能從字母組合去下手了。大家都知道某些字母組合出現的頻次是很多的,例如THE和ING,那在密文中遇到固定的三字母組合時,就要首先懷疑是不是它們。

深入淺出加密術

再次輪到加密方想招了,歸根結底,解密方利用的就是自然語言的非均勻性在密文中的映射,如果想辦法把密文中的規律性完全去掉,那解密方豈不是就沒招了?

這個思路是對的,但把明密文之間的映射規律完全去除,需要很複雜的置亂算法,於是複雜機械和電動機械就走上了加密術的舞臺,並在此基礎上形成了近代加密術。

2、近代加密術

美軍的滾筒機就是個典型的複雜機械加密設備,25個鋁盤外沿分別按不同次序刻著26個英文字母,然後套在一根軸上,每個鋁盤都可以獨立地轉動。加密時逐個轉動滾輪,使情報內容出現在一行,然後把往下數第5行的字母抄下來作為密文。接收方收到密文後,逐個轉動滾輪,使密文出現在一行,然後往上數第5行的字母就是明文。

深入淺出加密術

第5行只是舉例,可以是任意行,這要靠雙方提前約定。而且,每次作戰前都會把25個鋁盤拆下來,按照新的次序進行安裝,即使上次作戰時被敵人捕獲了一部滾筒機,因為鋁盤的次序變了,敵人還是解不了密。

比滾筒機更復雜的是齒輪機,它可以把密文中字母規律徹底搞亂,使得解密工作變得更加困難。

深入淺出加密術
深入淺出加密術


深入淺出加密術

德國的ENIGMA齒輪機最典型,當年盟軍曾調動了一幫頂級數學家去破密,研究了很長時間還是毫無頭緒。盟軍只好從別外下手,他們瞄準了一位倉庫保管員,這位保管員是個沒有信仰好逸惡勞的人,他的哥哥是個納粹高官,他哥哥也知道這個弟弟沒啥出息不堪大用,就給他找了個倉庫保管員的閒差,而這個倉庫裡就有ENIGMA齒輪機。

這位保管員羨慕上流社會生活,可錢總是不夠花,被盟軍情報員一忽悠就動心了,他把ENIGMA齒輪機的一部分資料偷拿出來賣了。盟軍發現資料是真的後欣喜若狂,盯著他不放,要求他接著偷。

這個保管員一共賣了30多次,後來他害怕不敢賣了,跟他接頭的盟軍情報員威脅他“你出賣情報的證據都在我們手上,你繼續賣就可以活,還接著有錢拿,你不賣就是個死,你哥也得受牽連”。這個故事告訴我們一個道理“當內奸賣情報是條不歸路,如何開始你能做主,但如何結束你就說了不算了。”

3、公鑰密碼術

有點跑題了,言歸正轉。加密術與解密術的鬥爭此消彼長,ENIGMA齒輪機代表了複雜機械加密的最高階段,很長時間內解密非常困難,加密術勝出。但出現計算機後,局面就發生了變化,在計算機強大的解算能力面前,齒輪機簡直不堪一擊,破解它就是分分鐘的事,解密術勝出。

現在又輪到加密方想招了,以往加密術的安全性依賴的是加密算法的複雜性,齒輪機算法比凱撒密碼算法複雜,所以就更安全,但現在再複雜的算法都抗不住計算機了,所以安全性不能再依賴算法了。

那該依賴什麼呢?現在改成了依賴密鑰,因為密鑰可以有幾乎無窮多個,而你不知道哪個才是對的,現代加密體制的安全性就依賴於此。

在以往的加密術中,你只要知道是如何加密的,就會知道如何解密,因為解密就是加密的逆過程嘛。現在加密算法抗不住計算機了,那索性就公開好了,那現在的問題就變為了:加密算法分開後,咋還能不讓外人從中倒推出解密算法?

很明顯,加密算法應該是沒有反函數的單向函數。例如“取餘算法”,7和11兩個明文,除以3後的餘數分別為1和2,這種算法就沒有反函數,因為除以3餘數為1和2的數值有無窮多個,並不能定位到7和11。

那具體是如何實現的呢?例如我想傳送【1 1 0 1】這組明文序列,設置了一個加密用的序列【3 6 9 17】作為基底,兩個序列逐位相乘再相加,即1*3+1*6+0*9+1*17=26,於是就把26作為了密文。

您一定覺得有問題,因為接收者根據這個基底在分解26時,不止有【1 1 0 1】這一個解,【0 0 1 1】也是一個解,有兩組明文可以加密成一個密文,在解密時就會造成混淆,這當然是不可以的。

那該怎麼辦呢?當~當~當~,現在隆重推出超遞增序列。例如【1 3 5 11 21 44】就是一組超遞增序列,您能看出它有什麼特點嗎?

這組序列中的任何一個數值,都比它前面的所有數值之和還要大,例如11大於1+3+5的和。這有什麼用呢?這可以保證解密的唯一性。例如明文是【1 0 0 1 0 1】,與超遞增序列逐位相乘累加的結果是56,接收者按超遞增序列從後至前的次序進行比較,因為56比44大,所以對應位肯定是1而不是0,這又是為什麼呢?

假如44這位對應的是0,那前面所有位即使都是1,其總和也會小於44,這是超遞增序列的性質嘛,然後比44更大的56就不可能被正確分解。

44這一位對應的是1,此位確定後繼續向前推進,因為56-44=12,用12繼續向前比較。因為12比21小,因此倒數第二位的值就應該是0而不是1,如果是1的話就爆了嘛。接著再向前比較,12比11大,所以倒數第三位的值就是1。就是這樣從後向前觀察比較,只用一遍就可以把唯一的明文分析出來。

如果把這個A序列【1 3 5 11 21 44】公開行不行?當然是不行的,因為壞人知道了這個序列就能輕鬆的解密。A序列只能讓合法的接收者知道,不能讓其它人知道。但是這個序列必須要公開啊,說好的加密算法公開,若不公開豈不是又落回了老套?

那該怎麼辦呢?當~當~當~,現在推出第二個關竅,那就是對超遞增序列進行變形。還以A序列為例,將序列中的每個數值等乘以43,乘積超過1590時,就取小於1590的餘數,並形成新的B序列。請注意,我利用的是43*37=1590+1這個關係式,43這個數字是我隨意找的素數,正是它的隨意性,形成了公鑰加密的保密性,因為你不知道會是哪個數啊。

因為43*44=1892=1590+302,所以B序列就是【43 129 215 473 903 302】,這就是公開的加密算法,重要的事情說三遍:公開的是B序列而不是A序列!公開的是B序列而不是A序列!公開的是B序列而不是A序列!

把明文【1 0 0 1 0 1】用B序列加密,當然還是逐位相乘再累加啦,得出密文818,你根據B序列和818這兩條信息啥也推不出來,因為B序列並不是超遞增序列,你不可能從後至前一遍就找到答案,只能從000000到111111進行64次嘗試。這個例子過於簡單,實際的序列會長得多,嘗試的次數是天文數字,這是一項基本不可完成的任務。

最後再說合法接受者,除了B序列和818,他還知道37和1590,這就是絕對不能讓他人知道的私鑰。他把818乘以37得出30266,而30266=19*1590+56,這就取出了56這個數值,而他根據37和1590,可以從B序列中找到A序列,再通過A序列和56就可以從後至前一遍就解算出明文【1 0 0 1 0 1】。

後面這三段寫得有點粗略,為什麼43、37和1590這三個數會這麼神奇?這其中有數論中的最小正剩餘問題,實在是不能再展開分析了。否則就會越說越多,出現我常常遇到的學生課後反饋“老師您講得真好,前半段我都有點明白了,可後半段又把我講迷糊了,現在我是徹底不明白了”。

您通過閱讀這篇科普文章,獲得哪些知識上的收益呢?我幫您總結一下吧,至少有5個認知:

1、古典和近代加密術的核心方式就是“代換”,即構建越來越複雜的明密文對應代換的關係,靠代換關係的複雜度來保證安全性。

2、自然語言的非均勻性是破譯的抓手和關鍵,當破解的結果是一堆亂碼時,那肯定就是沒搞對,如果是一段意義清晰的信息,那一般就是搞對了。

3、“構建加密函數,通過反函數解密”這種傳統的對稱式加密方式已抗不住計算機的暴力破解。

4、現代加密方式的安全性依賴的是密鑰,而不是加解密的算法。

5、公鑰密碼的關鍵就是“單向函數”,解密不是加密的逆過程,其安全性依賴於幾乎有無窮可能的私鑰。

這5個結論是很重要的信息安全理論知識,我將它們濃縮在了這篇不長的科普文章中。

最後一個感悟:信息安全是個高門檻的理論,相關的專業基礎書籍雖然很多,但打開就是一堆公式,您不會有絲毫興趣去讀。但您為什麼能完全看懂這篇科普文章,甚至學習領悟到5個信息安全重要知識呢?其奧秘在於我總結出來的“兩種邏輯”。

一是理論的內在邏輯。專業書籍中的內容組織,遵循的是理論本身的內在邏輯,並用數學語言進行描述,這隻適合有專業基礎的內行人士學習,外行很難看懂的。

二是聽眾的認知邏輯。講課或寫科普文章,絕不是把自己領悟到的理論內在邏輯講出來,由於基礎的不同,聽眾是很難跟上你的思維的。而應遵循聽眾的認知邏輯,簡單地說,就是把理論的內在邏輯進行改造,形成符合外行聽眾的認知邏輯。否則的話,你講的再對也沒用,因為聽眾聽不懂。

在內容的組織必須換位思考,每一個環節都考慮到聽眾會有什麼疑惑,我該用什麼樣的說法去消除他的疑惑。最關鍵的不是把正確的說法推送給聽眾,而是設計聽眾會自然產生的疑惑,並用通俗的說法解決這些疑惑,這才能幫助他們真正的理解。

您是否發現這篇文章有很多思維上的引導?而且你會想“說的對啊,那該怎麼辦呢?”,然後文章給出了答案。這就由生硬的告訴你知識,變成了你產生了疑問,作者通過解決你的疑問,幫助你掌握了知識。這種思維上的引導,使您不太費力地就領悟到了信息安全理論的5個重要結論。


分享到:


相關文章: