加密算法史

導讀作為一種安全手段,加密算法和我們大多數人的生活發生著緊密聯繫。只要你上網,都會從中受益,因為凡是使用 https 的網站都已經使用了加密協議 TLS/SSL。因此,我們都在被動享受加密算法帶來的隱私保護及通訊安全。此外,從安全技術層面,網絡層到主機文件層,無論哪層加密應用或協議背後都是由各種加密算法所支撐。

本文就嘗試由古及今,對這種與我們網絡生活息息相關的加密算法的發展演變,以及在整個過程中先後出現的集中關鍵加密算法一一論述,帶領大家瞭解背後這種有趣的算法。

加密算法主要作用是把明文變成密文,防止信息洩露。加密後的密文看起來和亂碼很像,但卻不是亂碼。大部分亂碼是由於編碼不一致導致的,編碼不屬於加密算法,只是改變了顯示格式而已。比如,base64 只是一種編碼而已,不能保障明文安全。以後聽到 base64 加密的說法,說明他們不專業。

加密算法需要保證以下三點:

1.機密性:保證數據即使被盜取,小偷也不知道是啥。

2.完整性:保證數據在傳輸過程中即使被劫持修改,接收方能夠發現信息已被截取,而選擇換掉。

3.可用性:保證加密算法的開銷、複雜度都在可用範圍。

滿足上述要求的加密算法經歷了從古典密碼過渡到現代密碼的漫長曆史發展時期。

古代人如何加密?

1、歷史上最早的加密算法

替代法

最早的加密算法主要用於軍事,歷史上最早關於加密算法的記載出自於周朝兵書《六韜.龍韜》中的《陰符》和《陰書》。其中記載:

太公曰:“主與將,有陰符,凡八等。有大勝克敵之符,長一尺。破軍擒將之符,長九寸。降城得邑之符,長八寸。卻敵報遠之符,長七寸。警眾堅守之符,長六寸。請糧益兵之符,長五寸。敗軍亡將之符,長四寸。失利亡士之符,長三寸。諸奉使行符,稽留,若符事聞,洩告者,皆誅之。八符者,主將秘聞,所以陰通言語,不洩中外相知之術。敵雖聖智,莫之能識。”

武王問太公曰:“… 符不能明;相去遼遠,言語不通。為之奈何?” 太公曰:“諸有陰事大慮,當用書,不用符。主以書遺將,將以書問主。書皆一合而再離,三發而一知。再離者,分書為三部。三發而一知者,言三人,人操一分,相參而不相知情也。此謂陰書。敵雖聖智,莫之能識。”

簡單來說,陰符是以八等長度的符來表達不同的消息和指令,屬於密碼學中的替代法,在應用中是把信息轉變成敵人看不懂的符號,這種符號法只能表述最關鍵的八種含義。陰書作為陰符的補充,運用了文字拆分法直接把一份文字拆成三分,由三種渠道發送到目標方手中,敵人只有同時截獲三分內容才可能破解。

移位法

無獨有偶,在遙遠的西方加密算法也大規模使用於戰爭之中。在希羅多德的《歷史》中記載了公元前五世紀,希臘城邦和波斯帝國頻頻交戰,希臘城邦中廣泛使用移位法對戰爭通訊信息進行加密處理,波斯帝國因此難以獲得對方軍事情報,無法提前做軍事部署。希臘城邦用來傳輸軍事信息、命令的每段文字都有固定的字數,接密者手中會有一份文字移位說明。解密者拿到密文後,根據移位說明解密,破解軍事命令或消息。

2、古代密碼演變的凱撒密碼

古典密碼主要採用移動法和替換法。其中,移位法就是讓明文都向固定方向移動特定位數,例如 I love you 右移動 4 位就變成了 M pszi csy。經過逐漸發展和完善,最有名的莫過於凱撒密碼。但英文或拉丁文字母出現的頻率並不一致。以英文字母為例:字母e出現頻率明顯高過其他字母。獲得足夠密文樣本後,通過頻率計算準確找到移位規則,從而破解密文。於是大部分凱撒密碼採用替換法,定義一張明文密文映射表:

加密算法史

這種方式可在一定程度上解決密鑰可窮舉的問題,但仍對大數據量的頻率攻擊束手無策。後來該模式發展為靠引入一些特定參數來擾亂頻率,提高解密難度。

古典密碼後期發展出維吉尼亞密碼、ROT5/13/18/47、摩爾斯密碼等一系列密碼種類。但都是以替換法和移位法為核心基礎,安全性也主要是靠算法不公開來保證。

現代人更科學的加密算法

古典加密算法本質上是語言學上模式的改變。直到20世紀中葉,香農發表了《秘密體制的通信理論》一文,標誌著加密算法的重心轉移往應用數學上的轉移。於是,逐漸衍生出了當今重要的三類加密算法:非對稱加密、對稱加密以及哈希算法。這三類算法往往組合使用,以發揮最佳效果。

1、對稱加密算法

對稱加密算法是使用最廣泛的加密算法之一。常用的有 DES 算法、AES 算法、3DES 算法、TDEA 算法、Blowfish 算法、RC5 算法、IDEA 算法等。其特點是,加密和解密兩方使用同一密鑰進行加、解密。按照原理不同,對稱加密可以大體分成流加密和分組加密兩種類型。

流加密

流加密是將明文按字符逐位地,對應地進行加密的一類對稱密碼算法。明文和密鑰按位對其做約定的運算,即可獲得密文。流加密中以 RC4 和 GSM 兩種算法最有名,最簡單的模型是異或流加密例,如:

加密算法史

流加密原理簡單,其算法結構存在弱點,只要洩露局部明文,攻擊者很容易算出密鑰。另外,由於是按位進行加密,攻擊者即使對數據進行篡改,也不會破壞原有數據結構,接收者很難發現其中變化。流加密雖然快捷高效,但其安全性較低,加密關鍵信息不建議採用此方式。

分組加密

分組加密內部實現則複雜的多,每一個加密塊都會經歷至少 16 輪運算,其代表算法有 DES 和 AES。目前推薦使用 AES,DES已經不再安全。

DES

DES 是較早時期的對稱加密標準,核心主要分成初始置換、輪函數、逆置換三步,在當時得到了廣泛的應用。隨著計算機性能地不斷提高,暴力破解DES變得越來越容易。所以 DES 已經不再安全,近十幾年逐漸地被 3DES 和 AES 代替。

AES

AES 已經被多方分析論證,在全世界範圍廣泛使用,是目前最為安全的對稱加密算法之一。近十年,AES 已然成為對稱密鑰加密中最流行的算法之一。不同於 DES,AES 使用的是代換-置換網絡,而非 Feistel 架構。

大多數 AES 計算是在一個特別的有限域內完成的,加密過程是在一個 4×4 的字節矩陣上運作,這個矩陣又稱為“狀態state”,其初值就是一個明文區塊。加密時,各輪 AES 加密循環(除最後一輪外)均包含 4 個步驟:

AddRoundKey——矩陣中的每一個字節都與該次輪密鑰round key做 XOR 運算;每個子密鑰由密鑰生成方案產生。

SubBytes——通過一個非線性替換函數,用查找表方式把每個字節替換成對應字節。

ShiftRows——將矩陣每個橫列進行循環式移位。

MixColumns——充分混合矩陣中各個直行的操作,使用線性轉換來混合每列的四個字節。最後一個加密循環中省略 MixColumns 步驟,以另一個 ddRoundKey 取代。

加密模式

AES、DES 內部都支持不同加密模式,每種模式的安全性和效率大不相同。兩種最常見模式 ECB 和 CBC 中,ECB 模式加密效率高,但安全性低,模式如下圖:

加密算法史

每次都是 Key 對單獨塊進行加密,容易被對方破解。但由於每個模塊之間毫無關聯,可以併發運算,極大提高加密效率。通常,ECB 的加密效率比 CBC 高 5-6 倍。但 CBC 較之 ECB 高,安全性則高得多。模式如下圖:

加密算法史

每塊加密引入一個不同的 IV,需要上一塊進行迭代,最終完成整個加密過程。由於每塊的 IV 和密文塊有關,所以無法採用併發模式,必須串行整個過程。若不是出於極高的性能要求,建議採用更安全、可靠的 CBC 模式。

2、非對稱加密算法

非對稱加密算法和對稱加密算法的最大區別在於,加密密鑰和解密密鑰不再是一個。這種方式主要為了應對“多個加密者,一個解密者”的模式。於是在這種多對一的關係中就出現了一個公鑰體系。一個公鑰對應一個私鑰。公鑰公開,任何數據發送者都用公鑰對數據進行加密,但公鑰加密的內容只有私鑰才能解開。背後的數學原理從大數分解到複雜的橢圓曲線上的離散對數問題,非常複雜。常見非對稱加密算法包括 DSA 算法、RSA 算法、Elgamal 算法、揹包算法、Rabin 算法、D-H 算法、ECC 算法等。非對稱加密算法的執行效率制約著該算法的實際應用,因此大部分應用在身份驗證中,並不會在通訊中使用。

3、哈希算法

哈希算法也是非常常見的加密算法之一。它不是用來做數據傳輸,而是對數據是否被篡改加以驗證,防止不法分子篡改數據。特點是無論原文多長都會變成固定長度的字符串,只能加密不能解密(只能單向運算)。常見哈希算法包含 MD5、SHA-1 和 SHA 224/256/512 等。前兩者已被證明不再安全,建議使用 SHA 256/512 等安全性高的算法。

上述加密算法已經廣泛應用在各個領域。

數據庫加密算法

隨著雲和大數據的高速發展,數據庫也逐漸從安全的局域網環境,向私有云甚至公有云遷移。數據庫遷移到雲上,面臨更加嚴峻的安全挑戰。數據庫中保存著關鍵數據,雲上主機存在眾多不安全隱患,所以雲上數據庫加密成為解決安全隱患的一劑良藥。

對稱加密算法

不同於文件加密和通訊加密,數據庫加密需要特別關注加密算法是否存在膨脹性,並對加密算法的性能有苛刻的要求。2009 年,安華金和在進行數據庫加密產品研發時,首先排除對稱算法中的流加密算法,原因是這種算法雖然在運行效率和解決數據膨脹上有天然優勢,但在一定情況下存在不安全性。

為了追求加密效率,目前國內依然有部分安全廠商採用這種方式,最基本的安全性要求卻被忽略。更穩妥的做法是採用對稱加密中的分組加密(AES)進行相關加密處理。分組加密安全性高,在安全方面比較有保障,但需要解決由於數據塊大小限制帶來的膨脹問題。這需要根據具體情況或字段設計足夠精妙的使用方案,來針對不同字段或類型解決膨脹問題,最終形成完美的數據庫加密方案。

國產密碼算法

密碼算法是保障信息安全的核心技術,對於國家機密及各行業核心數據的保護起到至關重要的作用,使用 3DES、SHA-1、RSA 等國際通用的密碼算法體系及相關標準,存在較大安全隱患。因此,國家有關機關和監管機構站在國家安全和長遠戰略的高度提出了推動國密算法應用實施、加強行業安全可控的要求。目前國內的數據庫加密產品在面對用戶的選型評估時,相當一部分是以支持國密算法為首要條件,這對於政府、軍工、保密等相關行業用戶來說非常重要,國家信息安全的保障必須擺脫對國外技術和產品的過度依賴,加密算法作為關鍵安全技術更應國產化。

具體而言,國產密碼算法指國家密碼局認定的國產商用密碼算法,比如,在金融領域目前主要使用公開的 SM2、SM3、SM4 三類算法。以 SM4 算法為例:SM4 分組密碼算法是我國自主設計的分組對稱密碼算法,用於實現數據的加密/解密運算,以保證數據和信息的機密性。要保證一個對稱密碼算法的安全性的基本條件是其具備足夠的密鑰長度,SM4 算法與 AES 算法具有相同的密鑰長度分組長度 128 比特,因此在安全性上高於 3DES 算法。


分享到:


相關文章: