密碼技術(shù)(三、二)之對稱密碼(DES)

對稱密碼 (共享密鑰密碼)

——用相同的密鑰進(jìn)行加密和解密
此次主要介紹比特序列運(yùn)算和XOR(異或)運(yùn)算。這兩種運(yùn)算在計(jì)算機(jī)數(shù)據(jù)處理中經(jīng)常出現(xiàn),因此大家應(yīng)該在此屬性他們。

  • 一次性密碼本 (絕對無法破解的密碼,這一點(diǎn)已經(jīng)得到證明)
  • DES
  • 三重DES
  • AES
  • 其他一些密碼算法

DES

? DES(Data Encryption)是1977年美國聯(lián)邦信息處理標(biāo)準(zhǔn)(FIPS)中所采用的一種對稱密碼(FIPS46-3)。DES一直以來被美國及其他國家的政府和銀行等廣泛使用。
?隨著計(jì)算機(jī)的進(jìn)步,現(xiàn)在DES已經(jīng)能夠被暴力破解,強(qiáng)度大不如前了。20世紀(jì)末,RSA公司舉辦過破譯DES密鑰的比賽,我們可以看一看RSA公司官方公布的比賽結(jié)果:1997年的DES Challenge I 中用了96天破譯密鑰,1998年的DES Challenge II-1中用了41天,1998年的DES Challenge II-2中用了56小時(shí),1999年的DES Challenge III 中只用了22小時(shí)15分鐘。
?由于DES的密文可以在短時(shí)間內(nèi)被破譯,因此除了用它來解密一起的密文以外,現(xiàn)在我們不應(yīng)該再使用DES了。

加密和解密

?DES是一種將64比特的明文加密成64比特的密文的對稱密碼算法,它的密鑰的長度是56比特。盡管從規(guī)格上來說,DES的密鑰長度是64比特,但由于每隔7比特會設(shè)置一個(gè)用于錯(cuò)誤檢查的比特,因此實(shí)質(zhì)上其密鑰長度是56比特。
?DES 是以64比特的明文(比特序列)為一個(gè)單位來進(jìn)行加密的,這個(gè)64比特的單位稱為分組 ,一般來說,以分組為單位進(jìn)行處理的密碼算法稱為分組密碼,DES就是分組密碼的一種。
?DES每次只能加密64比特的數(shù)據(jù),如果要加密的明文比較長,就需要對DES加密進(jìn)行迭代(反復(fù)),而迭代的具體方式就稱為模式。

DES的加密和解密.png

DES的結(jié)構(gòu)(Feistel網(wǎng)絡(luò))

?DES的基本結(jié)構(gòu)是由Horst Feistel設(shè)計(jì)的,因此也稱為Feistel網(wǎng)絡(luò)(Feistel network)、Feistel結(jié)構(gòu)(Feistel structure)或者Feistel密碼(Feistel cipher)。這一結(jié)構(gòu)不僅被用于DES,在其他很多密碼算法中也有應(yīng)用。
?Feistel網(wǎng)絡(luò)中,加密的各個(gè)步驟稱為輪,整個(gè)加密過程就是進(jìn)行若干次輪的循環(huán),下圖,展現(xiàn)的是Feistel網(wǎng)絡(luò)中一輪的計(jì)算流程。DES是一種16輪循環(huán)的Feistel網(wǎng)絡(luò)。

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

? 上圖兩個(gè)方框表示Feistel網(wǎng)絡(luò)中的一輪的輸入(明文)。輸入的數(shù)據(jù)被等分為左右兩半分別進(jìn)行處理。在圖中,左半部分寫作“左側(cè)”,右半部分寫作“右側(cè)”。
?下圖的兩個(gè)方框表示本輪的輸出(密文)。輸出的左半部分寫作“加密后的左側(cè)”,右半部分寫作“右側(cè)”。
?中間的“子密鑰”指的是本輪加密所使用的的密鑰,在Feistel網(wǎng)絡(luò)中,每一輪都需要使用一個(gè)不同的子密鑰。由于密鑰只在一輪中使用,它只是一個(gè)局部的密鑰,因此才稱為子密鑰(subkey)。
? 輪函數(shù)的作用是根據(jù)“右側(cè)”和子密鑰生成對“左側(cè)”進(jìn)行加密的比特序列,它是密碼系統(tǒng)核心。將輪函數(shù)的輸出與“左側(cè)”進(jìn)行XOR運(yùn)算,其結(jié)果就是“加密后的左側(cè)”。也就是說,我們用XOR將輪函數(shù)的輸出與“左側(cè)”進(jìn)行合并。而輸入的“右側(cè)”則會直接成為輸出的“右側(cè)”。
總結(jié)一下,一輪的具體計(jì)算步驟如下。

  1. 將輸入的數(shù)據(jù)等分為左右兩個(gè)部分
  2. 將輸入的右側(cè)直接發(fā)送到輸出的右側(cè)
  3. 將輸入的右側(cè)發(fā)送到輪函數(shù)
  4. 輪函數(shù)根據(jù)右側(cè)數(shù)據(jù)和子密鑰,計(jì)算出一串看上去是隨機(jī)的比特序列
  5. 將上一步得到的比特序列與左側(cè)序列進(jìn)行XOR運(yùn)算,并將結(jié)果作為加密后的左側(cè)。

?但是,這樣看來,“右側(cè)”根本沒有加密,因此我們需要用不同的子密鑰對一輪的處理重復(fù)若干次,并在沒兩輪處理指間將左側(cè)和有責(zé)的數(shù)據(jù)對調(diào)。


Feistel網(wǎng)絡(luò)的加密(3輪).png

上圖展現(xiàn)了一個(gè)3輪的Feistel網(wǎng)絡(luò),3輪加密計(jì)算需要進(jìn)行兩次左右對調(diào)。對調(diào)只在兩輪指間進(jìn)行,租后一輪結(jié)束不需要對調(diào)。

那么,F(xiàn)eistel網(wǎng)絡(luò)如何解密呢?


用相同的子密鑰運(yùn)行兩次Feistel網(wǎng)絡(luò)就能夠?qū)?shù)據(jù)還原.png

如上圖所示,通過上述操作都能夠?qū)⒚芪恼_的還原明文。

Feistel網(wǎng)絡(luò)的解密(3輪).png

有多輪的情況也是一樣的,也就是說,F(xiàn)eistel網(wǎng)絡(luò)的解密操作,只要按照相反的順序來使用子密鑰就可以完成了,而Feistel網(wǎng)絡(luò)本身的結(jié)構(gòu),在加密和解密都是完全相同的。

Feistel網(wǎng)絡(luò)性質(zhì)

  • Feistel網(wǎng)絡(luò),輪數(shù)可以任意增加。無論運(yùn)行多少輪的加密計(jì)算,都不會發(fā)生無法解密的情況
  • Feistel網(wǎng)絡(luò),加密時(shí)無論使用任何函數(shù)作為輪函數(shù)都可以正確解密。
  • Feistel網(wǎng)絡(luò),加密和解密可以用完全相同的結(jié)構(gòu)來實(shí)現(xiàn),這也是Feistel網(wǎng)絡(luò)的一個(gè)特點(diǎn)。

該系列的主要內(nèi)容來自《圖解密碼技術(shù)第三版》
我只是知識的搬運(yùn)工
文章中的插圖來源于原著

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 本文章是對《圖解密碼技術(shù)》一書第一部分的一個(gè)總結(jié)。 密碼分類 密碼算法需要密鑰,根據(jù)密鑰的使用方法,可以將密...
    發(fā)仔很忙閱讀 1,625評論 1 2
  • 前言 《圖解密碼技術(shù)》一書介紹了很多關(guān)于密碼的知識,通讀一遍需要不少時(shí)間。為了方便學(xué)習(xí),我對書中關(guān)鍵的部分進(jìn)行了總...
    咖枯閱讀 7,565評論 1 25
  • 本文分為7個(gè)部分,第1部分介紹密碼學(xué)的基本概念,第2部分講解常見的對稱加密算法,第3部分講解常見的非對稱加密算法,...
    youclavier閱讀 3,667評論 0 6
  • 1 公鑰私鑰 2 公鑰加密 別人用A的公鑰加密傳輸?shù)男畔?,只有A的私鑰可以解密。保證了傳輸?shù)男畔⒌陌踩浴?2 私...
    skykira閱讀 1,021評論 0 1
  • 1、晚上下班和妹妹、妹夫一道去看在省城看病的表哥一家人。 2、在表哥家大家交流時(shí)能時(shí)時(shí)回歸覺察。 3、讀完潘麟老師...
    晴空壹鶴閱讀 153評論 0 0

友情鏈接更多精彩內(nèi)容