加密算法史

作為一種安全手段,加密算法和我們大多數(shù)人的生活發(fā)生著緊密聯(lián)系。只要你上網(wǎng),都會從中受益,因為凡是使用 https 的網(wǎng)站都已經(jīng)使用了加密協(xié)議 TLS/SSL。因此,我們都在被動享受加密算法帶來的隱私保護及通訊安全。此外,從安全技術(shù)層面,網(wǎng)絡(luò)層到主機文件層,無論哪層加密應(yīng)用或協(xié)議背后都是由各種加密算法所支撐。

本文就嘗試由古及今,對這種與我們網(wǎng)絡(luò)生活息息相關(guān)的加密算法的發(fā)展演變,以及在整個過程中先后出現(xiàn)的集中關(guān)鍵加密算法一一論述,帶領(lǐng)大家了解背后這種有趣的算法。

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

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

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

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

3.可用性:保證加密算法的開銷、復(fù)雜度都在可用范圍。

滿足上述要求的加密算法經(jīng)歷了從古典密碼過渡到現(xiàn)代密碼的漫長歷史發(fā)展時期。

古代人如何加密?

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

替代法

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

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

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

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

移位法

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

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

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


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

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

現(xiàn)代人更科學(xué)的加密算法

古典加密算法本質(zhì)上是語言學(xué)上模式的改變。直到20世紀(jì)中葉,香農(nóng)發(fā)表了《秘密體制的通信理論》一文,標(biāo)志著加密算法的重心轉(zhuǎn)移往應(yīng)用數(shù)學(xué)上的轉(zhuǎn)移。于是,逐漸衍生出了當(dāng)今重要的三類加密算法:非對稱加密、對稱加密以及哈希算法。這三類算法往往組合使用,以發(fā)揮最佳效果。

1、對稱加密算法

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

流加密

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


流加密原理簡單,其算法結(jié)構(gòu)存在弱點,只要泄露局部明文,攻擊者很容易算出密鑰。另外,由于是按位進行加密,攻擊者即使對數(shù)據(jù)進行篡改,也不會破壞原有數(shù)據(jù)結(jié)構(gòu),接收者很難發(fā)現(xiàn)其中變化。流加密雖然快捷高效,但其安全性較低,加密關(guān)鍵信息不建議采用此方式。

分組加密

分組加密內(nèi)部實現(xiàn)則復(fù)雜的多,每一個加密塊都會經(jīng)歷至少 16 輪運算,其代表算法有 DES 和 AES。目前推薦使用 AES,DES已經(jīng)不再安全。

DES

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

AES

AES 已經(jīng)被多方分析論證,在全世界范圍廣泛使用,是目前最為安全的對稱加密算法之一。近十年,AES 已然成為對稱密鑰加密中最流行的算法之一。不同于 DES,AES 使用的是代換-置換網(wǎng)絡(luò),而非 Feistel 架構(gòu)。

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

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

SubBytes——通過一個非線性替換函數(shù),用查找表方式把每個字節(jié)替換成對應(yīng)字節(jié)。

ShiftRows——將矩陣每個橫列進行循環(huán)式移位。

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

加密模式

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


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


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

2、非對稱加密算法

非對稱加密算法和對稱加密算法的最大區(qū)別在于,加密密鑰和解密密鑰不再是一個。這種方式主要為了應(yīng)對“多個加密者,一個解密者”的模式。于是在這種多對一的關(guān)系中就出現(xiàn)了一個公鑰體系。一個公鑰對應(yīng)一個私鑰。公鑰公開,任何數(shù)據(jù)發(fā)送者都用公鑰對數(shù)據(jù)進行加密,但公鑰加密的內(nèi)容只有私鑰才能解開。背后的數(shù)學(xué)原理從大數(shù)分解到復(fù)雜的橢圓曲線上的離散對數(shù)問題,非常復(fù)雜。常見非對稱加密算法包括 DSA 算法、RSA 算法、Elgamal 算法、背包算法、Rabin 算法、D-H 算法、ECC 算法等。非對稱加密算法的執(zhí)行效率制約著該算法的實際應(yīng)用,因此大部分應(yīng)用在身份驗證中,并不會在通訊中使用。

3、哈希算法

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

上述加密算法已經(jīng)廣泛應(yīng)用在各個領(lǐng)域。

數(shù)據(jù)庫加密算法

隨著云和大數(shù)據(jù)的高速發(fā)展,數(shù)據(jù)庫也逐漸從安全的局域網(wǎng)環(huán)境,向私有云甚至公有云遷移。數(shù)據(jù)庫遷移到云上,面臨更加嚴(yán)峻的安全挑戰(zhàn)。數(shù)據(jù)庫中保存著關(guān)鍵數(shù)據(jù),云上主機存在眾多不安全隱患,所以云上數(shù)據(jù)庫加密成為解決安全隱患的一劑良藥。

對稱加密算法

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

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

國產(chǎn)密碼算法

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

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

文章來源:https://www.linuxprobe.com/encryption-algorithm.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容