加密算法最早誕生在什么時候?計算機出現(xiàn)之后嗎?不,早在公元前7世紀,古希臘人就已經(jīng)在使用加密算法了。他們使用一根叫scytale的棍子來傳遞加密信息,加密時先繞棍子卷一張紙條,把信息沿棒水平方向?qū)懀瑢懸粋€字旋轉(zhuǎn)一下,直到寫完。解下來后,紙條上的文字消息雜亂無章,這就是密文。將它繞在另一個同等尺寸的棒子上后,就能看到原始的消息。如果不知道棍子的粗細,就無法解密里面的內(nèi)容。
加密方式發(fā)展到今天,相比scytale的簡單原理已經(jīng)有了無法想象的巨大發(fā)展,我們現(xiàn)在基于更復雜的數(shù)學過程,即更為復雜的算法來進行加密。許多使用現(xiàn)代手段創(chuàng)建的成熟密碼系統(tǒng)基本被認為是不可破解的。一個不可被破解的加密方式到底有多復雜?下面我們就來領略一下。
什么是加密?
我們通常所說的加密是指使用密鑰將純文本轉(zhuǎn)換為難以理解的序列的方法,通常由兩個基本部分構成:算法和密鑰。
算法是將普通的文本(或者可以理解的信息)與一串數(shù)字(密鑰)的結合,產(chǎn)生不可理解的密文的步驟,密鑰是用來對數(shù)據(jù)進行編碼和解碼的一種算法。加密可以描述為一種方法,通過該方法,明文和密鑰通過密碼算法,產(chǎn)生秘密文本。
在期望的情況下,加密文本的內(nèi)容只有擁有對應密鑰的用戶才能訪問。除了文本消息,現(xiàn)代加密還可以應用于其他電子傳輸信息,例如語音消息、圖像文件或程序代碼等。
加密方式分類
在現(xiàn)代,我們主要用到對稱加密(私人密鑰加密)和非對稱加密(公開密鑰加密)兩種加密方式。
對稱加密方法
對稱加密起源于凱撒密碼等古老的加密方法。其主要原理是文件加密和解密使用相同的密鑰。如果兩個通信方想要交換加密數(shù)據(jù),則發(fā)送方和接收方都需要擁有相同密鑰的副本,同時還需要找到一種秘密傳輸共享密鑰的方法。為了保護加密信息不被第三方訪問,密鑰是保密的,密鑰的長度也決定了該加密算法的安全性。
對稱加密算法使用起來簡單快捷,密鑰較短,且破譯困難。眾所周知的對稱加密方法包括比較典型的數(shù)據(jù)加密標準(DES)及其高級加密標準(AES)。
數(shù)據(jù)加密標準(DES)
DES是一種對稱加密方法,由IBM在1970年代開發(fā),并于1977年由美國國家標準與技術研究院(NIST)標準化。按照當時的標準,DES是一種安全的計算機輔助加密方法,是現(xiàn)代密碼學的基礎。密鑰長64位,但實際上只有56位參與運算(第8、16、24、32、40、48、56、64位是校驗位,使得每個密鑰都有奇數(shù)個1),在如今基本上已經(jīng)過時了。當今的技術,使用蠻力攻擊可以在短短幾個小時內(nèi)破解出DES密鑰。
該算法由排列和替換組成,整個過程需要16輪,其原理結構圖如下:
首先是初始置換,64位的塊被分成32位的塊;創(chuàng)建了左半塊L0和右半塊R0。然后經(jīng)過16輪相同的操作(此處為函數(shù)f)將數(shù)據(jù)與密鑰組合。16輪過后,左右兩塊重新組合,經(jīng)過最后的置換,得到密文。DES加密密文的解密遵循相同的方案,但順序相反。
DES的主要缺點是56位的密鑰長度相對較小,無法承受當今計算能力可用的蠻力攻擊。DES的一種變體是Triple-DES(3DES),其中加密方法在三個連續(xù)輪次中執(zhí)行。但是3DES的有效密鑰長度仍然只有112位,仍低于當今128位的最低標準。因此,DES已在很大程度上被取代。AES(Advanced Encryption Standard)算法接替了DES,它也是一種對稱加密方法。
高級加密標準(AES)
到了90年代,很明顯最常用的加密標準DES已經(jīng)落伍了,需要一個新的加密標準來替代。于是,AES誕生了,由于其具有更高的安全性、靈活性,它也是美國聯(lián)邦政府采用的一種區(qū)塊加密標準。
AES也是將加密后的明文分成塊,所以與DES一樣是基于塊加密的。該標準支持128、192和256位密鑰。但AES使用的不是64位的塊,而是使用大很多的128位塊,這些塊在連續(xù)幾輪中使用代換-置換網(wǎng)絡(Substitution-Permutation Network,SPN)進行加密。加密過程大致分為四個步驟:
1、KeyExpansion密鑰擴展:AES和DES一樣,對每個加密循環(huán)使用一個新的輪密鑰。在這個過程中,輸出密鑰的長度也被擴展,生成映射所需數(shù)量的128位輪密鑰。每個輪密鑰都基于擴展輸出密鑰的一部分。所需的輪密鑰數(shù)等于輪數(shù)(R),包括關鍵輪,加上初始輪的輪密鑰(密鑰數(shù)=R+1)。
2、Initial round初始輪:在初始輪中,將128位的輸入塊轉(zhuǎn)移到二維表(Array)中,并使用按位異或XOR(AddRoundKey)鏈接到第一輪密鑰。該表由四行四列組成。每個單元包含要加密的塊的一個字節(jié)(8位)。
△在AddRoundKey中,將每個狀態(tài)中的字節(jié)與該回合密鑰做異或
3、加密輪數(shù):加密輪數(shù)取決于使用的密鑰長度:AES128為10輪,AES192為12輪,AES256為14輪。每輪加密使用以下操作:
SubBytes(字節(jié)替代):一個非線性替換步驟,其中根據(jù)查找表將每個字節(jié)替換為另一個字節(jié)。
ShiftRows(行移位):一個轉(zhuǎn)置步驟,其中狀態(tài)的最后三行循環(huán)移位一定數(shù)量的步驟。
MixColumns(列混淆):一種線性混合操作,它對狀態(tài)的列進行操作,將每列中的四個字節(jié)組合在一起。
AddRoundKey(輪密鑰加):在每輪加密結束時,發(fā)生另一個AddRoundKey。就像初始輪一樣,基于數(shù)據(jù)塊與當前輪次密鑰的異或鏈接。
4.密鑰輪:密鑰輪是最后的加密輪。與前幾輪不同的是,它不包括MixColumns轉(zhuǎn)換,因此只包括SubBytes、ShiftRows和AddRoundKey操作。最后一輪的結果得到密文。
由于其本身的算法,AES已通過了高水平的安全性認證。對于至少128位的密鑰長度,蠻力攻擊是很低效的。除此之外,AES還用作WPA2、SSH和IPSec的加密標準。該算法還用于加密壓縮文件存檔,例如7-Zip或RAR。
以上兩種對稱加密方法都是依托于對稱加密的算法,而對稱加密算法則分以下兩大類:
流密碼:也叫序列密碼,每次加密都通過密鑰生成一個密鑰流,解密也是使用同一個密鑰流,明文與同樣長度的密鑰流進行異或運算得到密文,密文與同樣的密鑰流進行異或運算得到明文。
塊密碼:也叫分組密碼,它把加密和解密序列分成了一個個分組,最后把每一塊序列合并到一起,形成明文或者密文。
非對稱加密方法
相對于對稱加密加密通信的雙方需使用相同的密鑰來說,非對稱加密的通信雙方會為每個頁面都生成一個密鑰對。通信中的每個參與者都有兩把鑰匙可供使用:一把公鑰和一把私匙。為了能夠加密信息,每一方都必須事先聲明他們的公鑰,這被稱為公鑰算法。這就是非對稱密碼系統(tǒng)的優(yōu)勢:與對稱加密方法相反,密鑰永遠不會離開其所有者的視線。
下面我們通過一個簡單例子來了解非對稱加密。。假設用戶A想向用戶B發(fā)送一條加密消息,為此A需要B的公鑰,而B的公鑰允許A加密只有B的私鑰才能解密的消息。這樣除了B,就在沒有其他人沒有人能夠閱讀該消息,包括A也無法解密。
這么做的優(yōu)點是任何人都可以使用用戶B的公鑰加密消息,然后只能B的密鑰解密。由于僅交換公鑰,因此無需創(chuàng)建防篡改的安全通道,因為能解密的只有B。
非對稱加密最通用的加密算法是Rivest、Shamir、Adleman(RSA)和ECC。
Rivest、Shamir、Adleman(RSA)
1977年,數(shù)學家Rivest、Shamir和Adleman提出了一種非對稱加密算法,并以發(fā)明人的名字命名——RSA。RSA是目前普遍認為最安全、最優(yōu)秀的公鑰方法之一。
RSA使用一種基于大素數(shù)相乘的算法。如果將質(zhì)數(shù)14,629和30,491相乘,可以得到結果為446,052,839。這個數(shù)只有四個可能的除數(shù):其中兩個是1和它本身,另外兩個是相乘前的原始素數(shù)。如果將前兩個除數(shù)排除(因為每個數(shù)字都可以被1和它本身整除),那么將得到14,629和30,491的初始值。
以上就是RSA密鑰生成的基礎。公鑰和私鑰都代表兩對數(shù)字:
N即兩個隨機選擇的非常大素數(shù)p和q的乘積N=pxq,以及計算N的歐拉函數(shù)φ(N)=(p-1)(q-1)。
要生成公鑰,則需要e,e是一個根據(jù)一些限制(條件是1<e<φ(N),且e與φ(N)互質(zhì))隨機選擇的數(shù)字。
要生成私鑰,則需要計算e對于φ(N)的模反元素d。所謂“模反元素”就是指有一個整數(shù)d,可以使得ed被φ(N)除的余數(shù)為1。滿足(ed)modφ(N)=1,即ed=kφ(N)+1,k≥1是一個任意的整數(shù);所以,若知道e和φ(N),則很容易計算出d。
然而只根據(jù)N和e(注意:不是p和q)要計算出d是不可能的。因此,任何人都可對明文進行加密,但是只有授權用戶(知道d)才可對密文解密。
RSA算法的保密強度隨其密鑰的長度增加而增強。但是,密鑰越長,其加解密所耗用的時間也越長。因此,要根據(jù)所保護信息的敏感程度與攻擊者破解所要花費的代價值不值得以及系統(tǒng)所要求的反應時間來綜合考慮。
目前互聯(lián)網(wǎng)中最常用的SSL/TLS協(xié)議就是基于RSA算法。如果想要使用特定公鑰加密的信息只能使用附屬于該公匙的私鑰進行解密。經(jīng)客戶端驗證公鑰可以與私鑰進行匹配,才會建立安全連接。
△一些主流SSL證書加密算法均為RSA算法
ECC
在上圖中我們還可以看到非對稱加密的另一種算法ECC,即橢圓加密算法。其數(shù)學基礎是利用橢圓曲線上的有理點構成Abel加法群上橢圓離散對數(shù)的計算困難性。ECC的主要優(yōu)勢是在某些情況下比其他的方法(比如RSA)使用更小的密鑰,提供相當或更高等級的安全。
回到非對稱加密本身。這種加密算法除去“無需創(chuàng)建防篡改的安全通道”這一有點外,也有一個不可忽視的缺點:無法確認通信伙伴的身份。也就是說在非對稱加密中,B不能確定加密的消息確實來自A,理論上第三個用戶C可以使用B的公鑰來加密并傳遞消息。此外,A也不能確定公鑰是否真的屬于B,公鑰可能是由C創(chuàng)建并傳達給A的,這樣可以攔截A發(fā)給B的消息。
因此使用非對稱加密,需要一種機制以便用戶可以測試其通信伙伴的身份驗證。
目前我們使用數(shù)字證書和簽名來解決這個問題:
數(shù)字證書:為了確保非對稱加密方法的安全,通信伙伴可以通過官方認證機構確認其公鑰的真實性。例如,通過HTTPS的TLS/SSL加密數(shù)據(jù)傳輸。
數(shù)字簽名:雖然數(shù)字證書可用于驗證公鑰,但數(shù)字簽名可用于識別加密消息的發(fā)送者。私鑰用于生成簽名,然后接收方使用發(fā)送方的公鑰驗證該簽名。
以上就是我們目前主要用到的加密方式啦,但是加密方式不僅僅如此,隨著互聯(lián)網(wǎng)的不斷發(fā)展,肯定會越來越復雜,盡管它們涉及了很多數(shù)學知識,了解起來非??菰?,但是正是這些枯燥的數(shù)學讓我們的信息越來越安全。