加密的藝術

加密算法最早誕生在什麼時候?計算機出現之後嗎?不,早在公元前 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 位)。

在 AddRoundKey 中,將每個狀態中的字節與該回合密鑰做異或

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 算法。如果想要使用特定公鑰加密的信息只能使用附屬於該公匙的私鑰進行解密。經客戶端驗證公鑰可以與私鑰進行匹配,纔會建立安全連接。

一些主流 SSL 證書加密算法均爲 RSA 算法

ECC

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

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

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

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

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

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

以上就是我們目前主要用到的加密方式啦,但是加密方式不僅僅如此,隨着互聯網的不斷髮展,肯定會越來越複雜,儘管它們涉及了很多數學知識,瞭解起來非常枯燥,但是正是這些枯燥的數學讓我們的信息越來越安全。

推薦閱讀

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

靈魂畫手:漫畫圖解 SSH

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章