前言
本文章是對《圖解密碼技術(shù)》一書第一部分的一個總結(jié)。
密碼分類
密碼算法需要密鑰,根據(jù)密鑰的使用方法,可以將密碼分為對稱密碼和公鑰密碼兩種。
對稱密碼 是指在加密和解密時使用同一個密碼的方式。
公鑰密碼 則是指在加密和解密時使用不同的密鑰的方式。 公鑰密碼又稱為非對稱密碼。
對稱密碼
常見的對稱密碼算法有DES、三重DES、AES等等。
DES
DES是1977年美國聯(lián)邦信息處理標(biāo)準(zhǔn)(FIPS)中所采用的一種對稱密碼,現(xiàn)在DES已經(jīng)能夠被暴力破解。
DES每次只能加密64比特的數(shù)據(jù),如果加密的明文比較長,就需要對DES加密進(jìn)行迭代,迭代的具體方式就稱為模式。
DES的基本結(jié)構(gòu)是Feistel網(wǎng)絡(luò),在Feistel網(wǎng)絡(luò)中,加密的各個步驟稱為輪(round),整個加密就是若干次輪的循環(huán),DES是一種16輪循環(huán)的Feistel網(wǎng)絡(luò),下圖展示的是Feistel網(wǎng)絡(luò)中一輪的計算流程。
一輪的具體計算如下:
- 將輸入的數(shù)據(jù)分為左右兩部分;
- 將輸入的右側(cè)直接發(fā)送到輸出的右側(cè);
- 將輸入的右側(cè)發(fā)送到輪函數(shù);
- 輪函數(shù)根據(jù)右側(cè)數(shù)據(jù)和子密鑰,計算出錯一串看上去隨機(jī)的比特序列;
- 將上一步得到的比特序列與左側(cè)數(shù)據(jù)進(jìn)行XOR運(yùn)算,并將結(jié)果作為加密后的左側(cè)。
這樣一輪下來,“右側(cè)”根本沒有加密,因此需要用不同的子密鑰對一輪的處理重復(fù)若干次,并在每兩輪處理之間將左側(cè)和右側(cè)的數(shù)據(jù)對調(diào)。下圖是Feistel網(wǎng)絡(luò)3輪的加密流程:
Feistel網(wǎng)絡(luò)的揭秘操作按照相反的順序來使用子密鑰就可以完成了,如下是Feistel網(wǎng)絡(luò)3輪的解密流程:
總結(jié)一下,F(xiàn)eistel網(wǎng)絡(luò)的輪數(shù)可以任意增加,并且加密和解密可以用完全相同的結(jié)構(gòu)來實(shí)現(xiàn)。
三重DES
三重DES是為了增加DES難度,將DES重復(fù)3次所得到的一種密碼算法,也成TDES,通常縮寫3DES,其加密流程如下:
其解密流程如下:
AES
AES是取代其前任標(biāo)準(zhǔn)(DES)而成為新標(biāo)準(zhǔn)的一種對稱密碼算法,2000年時,Rijndael對稱密碼算法確定為AES。
關(guān)于Rijndael對稱密碼算法,這里略。
密碼選擇
目前通過暴力破解法能夠在現(xiàn)實(shí)時間內(nèi)完成對DES的破譯,所以在選擇對稱密碼算法時,不推薦DES。同時我們也沒有理由使用三重DES,現(xiàn)在應(yīng)該選擇使用的算法是AES。
公鑰密碼
用對稱密碼進(jìn)行通信時,會出現(xiàn)密鑰配送問題,及如何將密鑰安全的發(fā)送給接收者。為解決密鑰配送問題,我們需要公鑰密碼技術(shù)。
公鑰密碼中,密鑰分為公鑰和私鑰,其中公鑰用來加密數(shù)據(jù),私鑰用來解密數(shù)據(jù)。
在公鑰通信的過程中,數(shù)據(jù)接收者首先生成一對公鑰和私鑰的密鑰對,然后將公鑰發(fā)送給數(shù)據(jù)發(fā)送者(公鑰發(fā)送過程中,可能被竊聽到,不過也沒有關(guān)系),然后數(shù)據(jù)發(fā)送者以接受到的公鑰為密碼,對數(shù)據(jù)進(jìn)行加密,然后將加密的數(shù)據(jù)發(fā)送給接收者(公鑰加密數(shù)據(jù)后,無法用公鑰進(jìn)行解密),然后接收者可以用私鑰進(jìn)行解密。
目前使用最廣泛的公鑰密碼算法是RSA。
RSA
RSA的加密算法如下:
密文 = 明文^E mod N
“明文^E” 表示明文的E次方,也就是說,RSA的密文就是對代表明文的數(shù)字的E次方求 mod N的結(jié)構(gòu)。
其中,E和N的組合就是公鑰。
RSA的解密和加密一樣簡單,其公式如下:
明文 = 密文^D mod N
也就是說,對表示密文的數(shù)字的D次方求mod N就可以得到明文。
其中,D和N的組合就是密鑰。
生成密鑰對
接下來介紹如何生成RSA密鑰對,也就是求E、D和N這個三個數(shù)。RSA密鑰對的生成步驟如下:
- 求N
- 求L(L是僅在生成密鑰對的過程中使用的數(shù))
- 求E
- 求D··
求N
用偽隨機(jī)生成器求p和q,p和q都是質(zhì)數(shù),N等于兩質(zhì)數(shù)相乘: N = p * q。
求L
L為 p-1 和 q-1 的最小公倍數(shù): L = lcm(p-1, q-1)。
求E
1 < E < L 并且 gcd(E, L) = 1; E和L的最大公約數(shù)為1(E和L互質(zhì))
求D
1 < D < L 并且 (E * D) mod L = 1; 也就是說 選一個數(shù)D,使E乘以D,然后模L必須等于1。
備注:
當(dāng)D足夠大時,就不太可能在現(xiàn)實(shí)時間內(nèi)通過暴力破解找出數(shù)D。現(xiàn)在RSA中所使用的p和q長度都是在1024比特以上,N的長度為2048比特以上,所有暴力破解是很難的。
除了暴力破解,可以通過對N進(jìn)行質(zhì)數(shù)分解,但是目前沒有對大整數(shù)進(jìn)行質(zhì)數(shù)分解的高效算法,所有通過對N進(jìn)行質(zhì)數(shù)分解的方法破解RS是很難的。
混合密碼系統(tǒng)
公鑰密碼有個很大的問題,就是公鑰密碼的處理速度遠(yuǎn)遠(yuǎn)低于對稱密碼,為了解決這個問題,引入了混合密碼系統(tǒng)。
混合密碼系統(tǒng)是將對稱密碼和公鑰密碼的優(yōu)勢相結(jié)合的方法,將消息通過對稱密碼來加密,將加密消息時使用的密鑰通過公鑰來加密。其流程如下:
- 接收者將公鑰密碼傳遞給發(fā)送者;
- 發(fā)送者用公鑰密碼加密對稱密碼的會話密鑰;
- 發(fā)送者用會話密鑰加密消息;
- 發(fā)送者將用公鑰密碼加密的會話密鑰和用對稱密碼加密的消息同時發(fā)送給接收者;
- 接收者用公鑰密碼中的私鑰解密會話密鑰,獲得解密消息的會話密鑰;
- 接收者用會話密鑰解密消息。
分組密碼模式
前面在介紹對稱密碼時,里面介紹的幾種算法都只能對固定長度的分組進(jìn)行加密,當(dāng)需要加密的明文長度超過密碼的分組長度是,就需要對分組密碼算法進(jìn)行迭代,迭代的方法就稱為分組密碼的模式。
分組密碼的模式主要有以下5種:
- ECB模式
- CBC模式
- CFB模式
- OFB模式
- CTR模式
接下來,分別來介紹這5種模式。
ECB模式
ECB模式全稱是Electronic CodeBook模式。在ECB模式中,將明文分組加密后的結(jié)果將直接稱為密文分組。
加密:
解密:
ECB優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
簡單,快速,支持并行計算
缺點(diǎn):
- 明文中的重復(fù)排列會反映在密文中
- 通過刪除、替換密文分組可以對明文進(jìn)行操作
- 不能抵御重放攻擊
備注:
不推薦使用。
CBC模式
CBC模式全稱Cipher Block Chaining模式(密文分組鏈接模式)。在CBC模式中,首先將明文分組與前一個密文分組進(jìn)行XOR運(yùn)算,然后在進(jìn)行加密。
加密:
解密:
其中,初始化向量IV是隨機(jī)產(chǎn)生的一個比特序列。
CBC優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
- 明文的重復(fù)排列不會反映到密文中
- 支持并行計算(僅解密)
- 能夠解密任意密文分組
缺點(diǎn):
- 加密不支持并行運(yùn)算
- 對包含某些錯誤比特的密文進(jìn)行解密時,第一個分組的全部比特及后一個分組的相應(yīng)比特會出錯
備注:
推薦使用
CFB模式
CFB模式全稱Cipher FeedBack(密文反饋模式)。在CFB模式中,前一個密文的分組會被送到密碼算法的輸入端。
加密:
解密:
CFB優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
- 不需要填充
- 支持并行計算(僅解密)
- 能夠解密任意密文分組
缺點(diǎn):
- 加密不支持并行運(yùn)算
- 對包含某些錯誤比特的密文進(jìn)行解密時,第一個分組的全部比特及后一個分組的全部比特會出錯
- 不能低于重放攻擊
備注:
推薦使用
OFB模式
OFB模式全稱Output-Feedback模式(輸出反饋模式),在OFB模式中,密碼算法的輸出會反饋到密碼算法的輸入中。
加密:
解密:
OFB優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
- 不需要填充
- 可事先進(jìn)行加密、解密的混吧
- 加密、解密使用相同結(jié)構(gòu)
- 對包含某些錯誤比特的密文進(jìn)行解密時,只有明文中相應(yīng)的比特會出錯
缺點(diǎn):
- 不支持并行運(yùn)算
- 主動攻擊者反轉(zhuǎn)密文分值中的某些比特時,明文分組中相對應(yīng)的比特位也會反轉(zhuǎn)
備注:
推薦使用
CTR模式
CTR模式全稱CounTeR模式(計數(shù)器模式),CTR模式是一種通過將逐次累加的計數(shù)器進(jìn)行加密來生成密鑰流的流密碼。
加密:
解密:
OFB優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
- 不需要填充
- 可事先進(jìn)行加密、解密的混吧
- 加密、解密使用相同結(jié)構(gòu)
- 對包含某些錯誤比特的密文進(jìn)行解密時,只有明文中相應(yīng)的比特會出錯
- 支持并行計算(加密、解密)
缺點(diǎn):
- 主動攻擊者反轉(zhuǎn)密文分值中的某些比特時,明文分組中相對應(yīng)的比特位也會反轉(zhuǎn)
備注:
推薦使用
參考
- 《圖解密碼技術(shù)》[日] 結(jié)城浩 著