密碼技術(shù)簡介之密碼

前言

本文章是對《圖解密碼技術(shù)》一書第一部分的一個總結(jié)。

密碼分類

密碼算法需要密鑰,根據(jù)密鑰的使用方法,可以將密碼分為對稱密碼公鑰密碼兩種。

對稱密碼 是指在加密和解密時使用同一個密碼的方式。
公鑰密碼 則是指在加密和解密時使用不同的密鑰的方式。 公鑰密碼又稱為非對稱密碼。

對稱密碼

常見的對稱密碼算法有DES三重DESAES等等。

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ò)中一輪的計算流程。


Feistel網(wǎng)絡(luò)中的一輪

一輪的具體計算如下:

  1. 將輸入的數(shù)據(jù)分為左右兩部分;
  2. 將輸入的右側(cè)直接發(fā)送到輸出的右側(cè);
  3. 將輸入的右側(cè)發(fā)送到輪函數(shù);
  4. 輪函數(shù)根據(jù)右側(cè)數(shù)據(jù)和子密鑰,計算出錯一串看上去隨機(jī)的比特序列;
  5. 將上一步得到的比特序列與左側(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ò)的揭秘操作按照相反的順序來使用子密鑰就可以完成了,如下是Feistel網(wǎng)絡(luò)3輪的解密流程:


Feistel網(wǎng)絡(luò)中的三輪解密

總結(jié)一下,F(xiàn)eistel網(wǎng)絡(luò)的輪數(shù)可以任意增加,并且加密和解密可以用完全相同的結(jié)構(gòu)來實(shí)現(xiàn)。

三重DES

三重DES是為了增加DES難度,將DES重復(fù)3次所得到的一種密碼算法,也成TDES,通常縮寫3DES,其加密流程如下:


Feistel網(wǎng)絡(luò)中的三輪加密

其解密流程如下:


Feistel網(wǎng)絡(luò)中的三輪解密

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密鑰對的生成步驟如下:

  1. 求N
  2. 求L(L是僅在生成密鑰對的過程中使用的數(shù))
  3. 求E
  4. 求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é)合的方法,將消息通過對稱密碼來加密,將加密消息時使用的密鑰通過公鑰來加密。其流程如下:

  1. 接收者將公鑰密碼傳遞給發(fā)送者;
  2. 發(fā)送者用公鑰密碼加密對稱密碼的會話密鑰;
  3. 發(fā)送者用會話密鑰加密消息;
  4. 發(fā)送者將用公鑰密碼加密的會話密鑰和用對稱密碼加密的消息同時發(fā)送給接收者;
  5. 接收者用公鑰密碼中的私鑰解密會話密鑰,獲得解密消息的會話密鑰;
  6. 接收者用會話密鑰解密消息。

分組密碼模式

前面在介紹對稱密碼時,里面介紹的幾種算法都只能對固定長度的分組進(jìn)行加密,當(dāng)需要加密的明文長度超過密碼的分組長度是,就需要對分組密碼算法進(jìn)行迭代,迭代的方法就稱為分組密碼的模式

分組密碼的模式主要有以下5種:

  • ECB模式
  • CBC模式
  • CFB模式
  • OFB模式
  • CTR模式

接下來,分別來介紹這5種模式。

ECB模式

ECB模式全稱是Electronic CodeBook模式。在ECB模式中,將明文分組加密后的結(jié)果將直接稱為密文分組。

加密

ECB模式加密

解密

ECB模式解密

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)行加密。

加密

CBC模式加密

解密

其中,初始化向量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模式加密

解密

CFB模式解密

CFB優(yōu)缺點(diǎn)
優(yōu)點(diǎn):

  • 不需要填充
  • 支持并行計算(僅解密)
  • 能夠解密任意密文分組

缺點(diǎn):

  • 加密不支持并行運(yùn)算
  • 對包含某些錯誤比特的密文進(jìn)行解密時,第一個分組的全部比特及后一個分組的全部比特會出錯
  • 不能低于重放攻擊

備注:
推薦使用

OFB模式

OFB模式全稱Output-Feedback模式(輸出反饋模式),在OFB模式中,密碼算法的輸出會反饋到密碼算法的輸入中。

加密

OFB模式加密

解密

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)行加密來生成密鑰流的流密碼。

加密

CTR模式加密

解密

CTR模式解密

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é)城浩 著
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內(nèi)容

  • 前言 《圖解密碼技術(shù)》一書介紹了很多關(guān)于密碼的知識,通讀一遍需要不少時間。為了方便學(xué)習(xí),我對書中關(guān)鍵的部分進(jìn)行了總...
    咖枯閱讀 7,239評論 1 25
  • 本文主要介紹移動端的加解密算法的分類、其優(yōu)缺點(diǎn)特性及應(yīng)用,幫助讀者由淺入深地了解和選擇加解密算法。文中會包含算法的...
    蘋果粉閱讀 11,539評論 5 29
  • 對稱加密: DES DES是1977年美國聯(lián)邦信息處理標(biāo)準(zhǔn)中使用的一種對稱密碼技術(shù),曾今被美國和其他國家政府銀行使...
    十三億少女夢丶閱讀 1,138評論 0 10
  • 這篇文章主要講述在Mobile BI(移動商務(wù)智能)開發(fā)過程中,在網(wǎng)絡(luò)通信、數(shù)據(jù)存儲、登錄驗(yàn)證這幾個方面涉及的加密...
    雨_樹閱讀 2,561評論 0 6
  • 本文將分兩個專題去理解HTTPS。 專題一:HTTPS為什么安全 1、http為什么不安全? http協(xié)議屬于明文...
    kaitoulee閱讀 5,312評論 11 82