淺析三千年的加密算法發(fā)展史
加密算法乍一聽貌似和大部分人的日常生活十分遙遠,但實際卻密切相關。從網絡層到主機文件層,無論那層加密應用或協(xié)議背后都是由各種加密算法所支撐。即便你不用任何加密產品,凡是使用https的網站都已經使用了加密協(xié)議TLS/SSL。你也被動享受了加密算法帶來的隱私保護,及通訊安全。今天我們拋開淺層的應用來扒一扒各種有趣的加密算法。

加密算法的采用需要符合以下三點訴求:
機密性:
保證數據即使被盜取,小偷也不知道是啥;
完整性:
保證數據在傳輸過程中即使被劫持修改,接收方能夠發(fā)現信息已被截取,而選擇換掉;
可用性:
保證加密算法的開銷、復雜度都在可用范圍。
結合上述訴求,加密算法的發(fā)展主要經歷了古典密碼和現代密碼兩個重要時期。
一、古代人民怎么加密?
歷史上最早的加密算法
早期加密算法主要使用在軍事中,歷史上最早關于加密算法的記載出自于周朝兵書《六韜.龍韜》中的《陰符》和《陰書》。其中記載:
太公曰:“主與將,有陰符,凡八等。有大勝克敵之符,長一尺。破軍擒將之符,長九寸。降城得邑之符,長八寸。卻敵報遠之符,長七寸。警眾堅守之符,長六寸。請糧益兵之符,長五寸。敗軍亡將之符,長四寸。失利亡士之符,長三寸。諸奉使行符,稽留,若符事聞,泄告者,皆誅之。八符者,主將秘聞,所以陰通言語,不泄中外相知之術。敵雖圣智,莫之能識?!?/p>
武王問太公曰:“… 符不能明;相去遼遠,言語不通。為之奈何?” 太公曰:“諸有陰事大慮,當用書,不用符。主以書遺將,將以書問主。書皆一合而再離,三發(fā)而一知。再離者,分書為三部。三發(fā)而一知者,言三人,人操一分,相參而不相知情也。此謂陰書。敵雖圣智,莫之能識?!?/p>
簡單來說,陰符是以八等長度的符來表達不同的消息和指令,屬于密碼學中的替代法,在應用中是把信息轉變成敵人看不懂的符號,但知情者知道這些符號代表的含義。這種符號法無法表達豐富的含義,只能表述最關鍵的八種含義。陰書作為陰符的補充,運用了文字拆分法直接把一份文字拆成三分,由三種渠道發(fā)送到目標方手中。敵人只有同時截獲三分內容才可能破解陰書上寫的內容。
上述樸素的加密算法思想主要使用了替換法。無獨有偶,在遙遠的西方加密算法也大規(guī)模使用于戰(zhàn)爭之中。在希羅多德(Herodotus)的《歷史》中記載了公元前五世紀,希臘城邦和波斯帝國發(fā)生多次沖突和戰(zhàn)爭。這些戰(zhàn)爭中希臘城邦中廣泛使用了移位法進行加密處理戰(zhàn)爭通訊信息,使波斯帝國難以獲得希臘城邦的軍事情報,也就無法提前做軍事部署。
希臘城邦用來傳輸軍事信息、命令的每段文字都有固定的字數,接密者手中會有一份文字移位說明。解密者拿到密文后,根據文字移位說明進行解密,從而破解其中的軍事命令或消息。
古典密碼主要采用的就是移動法和替換法。經過逐漸發(fā)展和完善,最有名的莫過于凱撒密碼。凱撒密碼有兩種模式——移位法和替換法。其中,移位法就是讓明文都向固定方向移動特定位數,例如I love you右移動4位就變成了M pszi csy。但英文或拉丁文,字母出現的頻率并不一致。以英文字母為例:字母e出現頻率明顯高過其他字母。在獲得足夠多的密文樣本后,可以通過頻率計算準確找到移位規(guī)則,從而破解密文。同時由于需要可逆操作,所以實際上密鑰的數量是有限的,只有25種可能。因此,完全可以通過暴力破解來對密文進行解密。
于是大部分凱撒密碼在實際應用中都采用了第二種模式——替換法。定義一張明文密文映射表:
這種方式可以在一定程度上解決密鑰可窮舉的問題,但仍對大數據量的頻率攻擊束手無策。
后來,這種模式發(fā)展為,靠引入一些特定參數來擾亂頻率,這在一定程度上提高了解密的難度,但仍屬于替換法和移位法的范疇。
古典密碼后期發(fā)展出維吉尼亞密碼、ROT5/13/18/47、摩爾斯密碼等一系列密碼種類。但都是以替換法和移位法為核心基礎,安全性也主要是靠算法不公開來保證。所使用的加密算法只能算是現在加密算法的雛形,或者僅作為可以借鑒的最初加密思路。
現代人更科學的加密算法
古典加密算法本質上主要考慮的是語言學上模式的改變。直到20世紀中葉,香農發(fā)表了《秘密體制的通信理論》一文,標志著加密算法的重心轉移往應用數學上的轉移。于是,逐漸衍生出了當今重要的三類加密算法:非對稱加密、對稱加密以及哈希算法。這三類算法在現實場景中也往往組合起來使用,以發(fā)揮最佳效果。
對稱加密算法
對稱加密算法是使用最廣泛的加密算法之一。常用的對稱性加密算法有DES算法、AES算法、3DES算法、TDEA算法、Blowfish算法、RC5算法、IDEA算法等。對稱加密的特點是,加密和解密兩方使用同一密鑰進行加、解密。加密算法本身泄露不會對安全性造成影響,密鑰才是安全性的關鍵。按照原理不同,對稱加密可以大體分成流加密和分組加密兩種類型。
非對稱加密算法
非對稱加密算法和對稱加密算法的最大區(qū)別在于,加密的密鑰和解密的密鑰不再是一個。這就像兩個人互對暗號一樣。這種加密方式主要為了應對“多個加密者,一個解密者”的模式,對稱密鑰只能解決解密用戶為一對一的關系。









