天天看點

加密的藝術

加密算法最早誕生在什麼時候?計算機出現之後嗎?不,早在公元前 7 世紀,古希臘人就已經在使用加密算法了。他們使用一根叫 scytale 的棍子來傳遞加密資訊,加密時先繞棍子卷一張紙條,把資訊沿棒水準方向寫,寫一個字旋轉一下,直到寫完。解下來後,紙條上的文字消息雜亂無章,這就是密文。将它繞在另一個同等尺寸的棒子上後,就能看到原始的消息。如果不知道棍子的粗細,就無法解密裡面的内容。

加密方式發展到今天,相比 scytale 的簡單原理已經有了無法想象的巨大發展,我們現在基于更複雜的數學過程,即更為複雜的算法來進行加密。許多使用現代手段建立的成熟密碼系統基本被認為是不可破解的。一個不可被破解的加密方式到底有多複雜?下面我們就來領略一下。

我們通常所說的加密是指使用密鑰将純文字轉換為難以了解的序列的方法,通常由兩個基本部分構成:算法和密鑰。

算法是将普通的文本(或者可以了解的資訊)與一串數字(密鑰)的結合,産生不可了解的密文的步驟,密鑰是用來對資料進行編碼和解碼的一種算法。加密可以描述為一種方法,通過該方法,明文和密鑰通過密碼算法,産生秘密文本。

在期望的情況下,加密文本的内容隻有擁有對應密鑰的使用者才能通路。除了文本消息,現代加密還可以應用于其他電子傳輸資訊,例如語音消息、圖像檔案或程式代碼等。

在現代,我們主要用到對稱加密(私人密鑰加密)和非對稱加密(公開密鑰加密)兩種加密方式。

對稱加密方法

對稱加密起源于凱撒密碼等古老的加密方法。其主要原理是檔案加密和解密使用相同的密鑰。如果兩個通信方想要交換加密資料,則發送方和接收方都需要擁有相同密鑰的副本,同時還需要找到一種秘密傳輸共享密鑰的方法。為了保護加密資訊不被第三方通路,密鑰是保密的,密鑰的長度也決定了該加密算法的安全性。

對稱加密算法使用起來簡單快捷,密鑰較短,且破譯困難。衆所周知的對稱加密方法包括比較典型的資料加密标準(DES)及其進階加密标準(AES)。

資料加密标準(DES)

DES 是一種對稱加密方法,由 IBM 在 1970 年代開發,并于 1977 年由美國國家标準與技術研究院(NIST)标準化。按照當時的标準,DES 是一種安全的計算機輔助加密方法,是現代密碼學的基礎。密鑰長 64 位,但實際上隻有 56 位參與運算(第 8、16、24、32、40、48、56、64 位是校驗位,使得每個密鑰都有奇數個 1),在如今基本上已經過時了。當今的技術,使用蠻力攻擊可以在短短幾個小時内破解出 DES 密鑰。

該算法由排列和替換組成,整個過程需要 16 輪,其原理結構圖如下:

首先是初始置換 ,64 位的塊被分成 32 位的塊;建立了左半塊 L0 和右半塊 R0。然後經過 16 輪相同的操作(此處為函數 f )将資料與密鑰組合。16 輪過後,左右兩塊重新組合,經過最後的置換,得到密文。DES 加密密文的解密遵循相同的方案,但順序相反。

DES 的主要缺點是 56 位的密鑰長度相對較小,無法承受當今計算能力可用的蠻力攻擊。DES 的一種變體是 Triple-DES ( 3DES ) ,其中加密方法在三個連續輪次中執行。但是 3DES 的有效密鑰長度仍然隻有 112 位,仍低于當今 128 位的最低标準。是以,DES 已在很大程度上被取代。AES(Advanced Encryption Standard) 算法接替了 DES,它也是一種對稱加密方法。

進階加密标準(AES)

到了 90 年代,很明顯最常用的加密标準 DES 已經落伍了,需要一個新的加密标準來替代。于是,AES 誕生了,由于其具有更高的安全性、靈活性,它也是美國聯邦政府采用的一種區塊加密标準。

AES 也是将加密後的明文分成塊,是以與 DES 一樣是基于塊加密的。該标準支援 128、192 和 256 位密鑰。但 AES 使用的不是 64 位的塊,而是使用大很多的 128 位塊,這些塊在連續幾輪中使用代換-置換網絡(Substitution-Permutation Network,SPN)進行加密。加密過程大緻分為四個步驟:

1、KeyExpansion 密鑰擴充: AES 和 DES 一樣,對每個加密循環使用一個新的輪密鑰。在這個過程中,輸出密鑰的長度也被擴充,生成映射所需數量的 128 位輪密鑰。每個輪密鑰都基于擴充輸出密鑰的一部分。所需的輪密鑰數等于輪數(R),包括關鍵輪,加上初始輪的輪密鑰(密鑰數 = R + 1)。

2、Initial round 初始輪: 在初始輪中,将 128 位的輸入塊轉移到二維表(Array)中,并使用按位異或 XOR(AddRoundKey)連結到第一輪密鑰。該表由四行四列組成。每個單元包含要加密的塊的一個位元組(8 位)。

3、加密輪數: 加密輪數取決于使用的密鑰長度:AES128 為 10 輪,AES192 為 12 輪,AES256 為 14 輪。每輪加密使用以下操作:

**SubBytes(位元組替代) : ** 一個非線性替換步驟,其中根據查找表将每個位元組替換為另一個位元組。

ShiftRows(行移位): 一個轉置步驟,其中狀态的最後三行循環移位一定數量的步驟。

MixColumns(列混淆): 一種線性混合操作,它對狀态的列進行操作,将每列中的四個位元組組合在一起。

AddRoundKey(輪密鑰加): 在每輪加密結束時,發生另一個 AddRoundKey。就像初始輪一樣,基于資料塊與目前輪次密鑰的異或連結。

4. 密鑰輪: 密鑰輪是最後的加密輪。與前幾輪不同的是,它不包括 MixColumns 轉換,是以隻包括 SubBytes、ShiftRows 和 AddRoundKey 操作。最後一輪的結果得到密文。

由于其本身的算法,AES 已認證了高水準的安全性認證。對于至少 128 位的密鑰長度,蠻力攻擊是很低效的。除此之外,AES 還用作 WPA2、SSH 和 IPSec 的加密标準。該算法還用于加密壓縮檔案存檔,例如 7-Zip 或 RAR。

以上兩種對稱加密方法都是依托于對稱加密的算法,而對稱加密算法則分以下兩大類:

流密碼:也叫序列密碼,每次加密都通過密鑰生成一個密鑰流,解密也是使用同一個密鑰流,明文與同樣長度的密鑰流進行異或運算得到密文,密文與同樣的密鑰流進行異或運算得到明文。

塊密碼:也叫分組密碼,它把加密和解密序列分成了一個個分組,最後把每一塊序列合并到一起,形成明文或者密文。

非對稱加密方法

相對于對稱加密加密通信的雙方需使用相同的密鑰來說,非對稱加密的通信雙方會為每個頁面都生成一個密鑰對。通信中的每個參與者都有兩把鑰匙可供使用:一把公鑰和一把私匙。為了能夠加密資訊,每一方都必須事先聲明他們的公鑰,這被稱為公鑰算法。這就是非對稱密碼系統的優勢:與對稱加密方法相反,密鑰永遠不會離開其所有者的視線。

下面我們通過一個簡單例子來了解非對稱加密。。假設使用者 A 想向使用者 B 發送一條加密消息,為此 A 需要 B 的公鑰,而 B 的公鑰允許 A 加密隻有 B 的私鑰才能解密的消息。這樣除了 B,就在沒有其他人沒有人能夠閱讀該消息,包括 A 也無法解密。

這麼做的優點是任何人都可以使用使用者 B 的公鑰加密消息,然後隻能 B 的密鑰解密。由于僅交換公鑰,是以無需建立防篡改的安全通道,因為能解密的隻有 B。

非對稱加密最通用的加密算法是 Rivest、Shamir、Adleman (RSA)和 ECC。

Rivest、Shamir、Adleman (RSA)

1977 年,數學家 Rivest、Shamir 和 Adleman 提出了一種非對稱加密算法,并以發明人的名字命名 —— RSA。RSA 是目前普遍認為最安全、最優秀的公鑰方法之一。

RSA 使用一種基于大素數相乘的算法。如果将質數 14,629 和 30,491 相乘,可以得到結果為 446,052,839。這個數隻有四個可能的除數:其中兩個是 1 和它本身,另外兩個是相乘前的原始素數。如果将前兩個除數排除(因為每個數字都可以被 1 和它本身整除),那麼将得到 14,629 和 30,491 的初始值。

以上就是 RSA 密鑰生成的基礎。公鑰和私鑰都代表兩對數字:

N 即兩個随機選擇的非常大素數 p 和 q 的乘積 N = pxq,以及計算 N 的歐拉函數 φ(N) = (p-1)(q-1)。

要生成公鑰,則需要 e,e 是一個根據一些限制(條件是 1< e < φ(N),且 e 與 φ(N) 互質)随機選擇的數字。

要生成私鑰,則需要計算 e 對于 φ(N) 的模反元素 d。所謂“模反元素”就是指有一個整數 d,可以使得 ed 被 φ(N) 除的餘數為 1。滿足 (ed) modφ(N) = 1 ,即 ed = kφ(N) +1,k≥1 是一個任意的整數;是以,若知道 e 和 φ(N) ,則很容易計算出 d。

然而隻根據 N 和 e(注意:不是 p 和 q)要計算出 d 是不可能的。是以,任何人都可對明文進行加密,但是隻有授權使用者(知道 d)才可對密文解密。

RSA 算法的保密強度随其密鑰的長度增加而增強。但是,密鑰越長,其加解密所耗用的時間也越長。是以,要根據所保護資訊的敏感程度與攻擊者破解所要花費的代價值不值得以及系統所要求的反應時間來綜合考慮。

目前網際網路中最常用的 SSL/TLS 協定就是基于 RSA 算法。如果想要使用特定公鑰加密的資訊隻能使用附屬于該公匙的私鑰進行解密。經用戶端驗證公鑰可以與私鑰進行比對,才會建立安全連接配接。

ECC

在上圖中我們還可以看到非對稱加密的另一種算法 ECC,即橢圓加密算法。其數學基礎是利用橢圓曲線上的有理點構成 Abel 加法群上橢圓離散對數的計算困難性。ECC 的主要優勢是在某些情況下比其他的方法(比如 RSA)使用更小的密鑰,提供相當或更高等級的安全。

回到非對稱加密本身。這種加密算法除去“無需建立防篡改的安全通道”這一有點外,也有一個不可忽視的缺點:無法确認通信夥伴的身份。也就是說在非對稱加密中,B 不能确定加密的消息确實來自 A,理論上第三個使用者 C 可以使用 B 的公鑰來加密并傳遞消息。此外,A 也不能确定公鑰是否真的屬于 B,公鑰可能是由 C 建立并傳達給 A 的,這樣可以攔截 A 發給 B 的消息。

是以使用非對稱加密,需要一種機制以便使用者可以測試其通信夥伴的身份驗證。

目前我們使用數字證書和簽名來解決這個問題:

數字證書:為了確定非對稱加密方法的安全,通信夥伴可以通過官方認證機構确認其公鑰的真實性。例如,通過 HTTPS 的 TLS/SSL 加密資料傳輸。

數字簽名:雖然數字證書可用于驗證公鑰,但數字簽名可用于識别加密消息的發送者。私鑰用于生成簽名,然後接收方使用發送方的公鑰驗證該簽名。

以上就是我們目前主要用到的加密方式啦,但是加密方式不僅僅如此,随着網際網路的不斷發展,肯定會越來越複雜,盡管它們涉及了很多數學知識,了解起來非常枯燥,但是正是這些枯燥的數學讓我們的資訊越來越安全。

電信詐騙?一招讓騙子血本無歸!

靈魂畫手:漫畫圖解 SSH