用心分享相寇,共同成長(zhǎng)
沒(méi)有什么比你每天進(jìn)步一點(diǎn)點(diǎn)更實(shí)在了
?繼上一期的流密碼之后慰于,我們就趁熱打鐵趕緊來(lái)看看分組密碼是怎么一回事呢?
?在常用的一些密碼系統(tǒng)中唤衫,分組密碼在維護(hù)系統(tǒng)安全中仍然扮演著一個(gè)重要角色婆赠,同流密碼一樣,分組密碼的使用也有許許多多需要我們注意的問(wèn)題佳励。
?分組密碼是什么呢休里?分組分組顧名思義就是將明文消息分成組來(lái)進(jìn)行加密,也就是說(shuō)赃承,加密器每次只能處理特定長(zhǎng)度的一組數(shù)據(jù)妙黍,這里的"一組數(shù)據(jù)"就被稱之為分組。我們也將每一個(gè)分組的比特?cái)?shù)就稱為分組長(zhǎng)度瞧剖。
?<font face="宋體" color=blue size=4>噔噔噔噔拭嫁!畫重點(diǎn)來(lái)嘍壶辜!</font>
?看完分組密碼的解釋,你就能明白流密碼和分組密碼的加密器中是否含有記憶元件的解釋了:對(duì)于分組密碼尽爆,它處理完一個(gè)分組就結(jié)束一次加密進(jìn)程事秀,因此不需要通過(guò)內(nèi)部狀態(tài)來(lái)記錄加密的進(jìn)度;相反的是怕品,對(duì)于流密碼來(lái)說(shuō)妇垢,它是對(duì)一個(gè)數(shù)據(jù)流進(jìn)行連續(xù)的加密處理,因此需要加密其中的記憶元件來(lái)記錄加密器內(nèi)部的狀態(tài)肉康。
分組密碼:
?分組密碼闯估,就是將明文消息編碼表示后的數(shù)字序列 x0 , x1 , …, xi , …,將其劃分成長(zhǎng)為 n 的組 x = ( x0 , x1 , …, xn - 1 )吼和,各一個(gè)長(zhǎng)度為 n 的分組都分別在密鑰 k = ( k0 , k1 , …, kt - 1 ) 控制下涨薪,變換成長(zhǎng)度為m的等長(zhǎng)的輸出數(shù)字序列 y = ( y0 , y1 , …, ym - 1 ),其加密函數(shù) E: Vn× K→ Vm纹安,Vn和Vm分別是 n 維和 m 維矢量空間尤辱,K為密鑰空間。
?在圖中可以看到厢岂,輸入一個(gè)長(zhǎng)度為n的明文分組光督,經(jīng)過(guò)加密器后輸出一個(gè)長(zhǎng)度為m的密文,但是在一般情況下塔粒,我們?nèi)=n结借,如果遇到n>m,則說(shuō)明在數(shù)據(jù)加密中存在數(shù)據(jù)壓縮卒茬,若n<m,則在數(shù)據(jù)加密中有數(shù)據(jù)擴(kuò)展船老。
?下面來(lái)看看幾種簡(jiǎn)單的設(shè)計(jì)分組密碼常用的方法。
代換:
?如果明文和密文的分組長(zhǎng)度都為 n 比特, 則明文的每一個(gè)分組都有2的n次方個(gè)可能的取值圃酵。
? 為保證加密后得到的密文可以通過(guò)解密運(yùn)算還原成為明文消息柳畔,明文的每一個(gè)分組都應(yīng)產(chǎn)生惟一的一個(gè)密文分組,我們把這樣的變換稱為可逆的, 稱明文分組到密文分組的可逆變換為代換郭赐。
?我們以n=4為例薪韩,來(lái)看看分組密碼到底數(shù)怎樣加密的?
?對(duì)于分組長(zhǎng)度為4的代換結(jié)構(gòu)捌锭,我們可以依據(jù)代換表給出代換以后的密文俘陷。
?但是,這種代換結(jié)構(gòu)在實(shí)際應(yīng)用中還有一些問(wèn)題需要考慮观谦。
?如果分組長(zhǎng)度太小拉盾,如 n = 4,系統(tǒng)則等價(jià)于古典的代換密碼豁状,容易通過(guò)對(duì)明文的統(tǒng)計(jì)分析而被攻破捉偏。
?這個(gè)弱點(diǎn)不是代換結(jié)構(gòu)固有的倒得,只是因?yàn)榉纸M長(zhǎng)度太小。如果分組長(zhǎng)度n足夠大夭禽,而且從明文到密文可有任意可逆的代換屎暇,明文的統(tǒng)計(jì)特性就不會(huì)太過(guò)明顯,這樣以來(lái)驻粟,利用代換結(jié)構(gòu)就不容易被攻破。
feistel結(jié)構(gòu):
?Feistel凶异,基本上使每一個(gè)剛接觸密碼學(xué)的小伙伴們最頭疼的部分了蜀撑,別怕別怕,今天龍叔跟你細(xì)說(shuō)Feistel結(jié)構(gòu)剩彬。
?其實(shí)對(duì)于很多分組密碼來(lái)說(shuō)酷麦,它們的結(jié)構(gòu)從本質(zhì)上說(shuō)都是基于一個(gè)稱為 Feistel 網(wǎng)絡(luò)的結(jié)構(gòu)。Feistel 提出利用乘積密碼可獲得簡(jiǎn)單的代換密碼喉恋,目的是為了使最后結(jié)果的密碼強(qiáng)度高于每個(gè)基本密碼系統(tǒng)產(chǎn)生的結(jié)果沃饶。
乘積密碼:依次使?兩個(gè)或兩個(gè)以上基本密碼。
下來(lái)我們看看真正的feistel結(jié)構(gòu)轻黑。
?上圖為整個(gè)feistel的n輪結(jié)構(gòu)糊肤,但其實(shí)每一輪都是進(jìn)行同樣的操作,接下來(lái)我們就分析在一輪中到底都做了些什么氓鄙?
- Feistel加密1輪的迭代過(guò)程
? - 明?2w?特馆揉,被分為等?的兩部分
? - 第i輪?密鑰由初始密鑰K推導(dǎo)出的
? - ?般來(lái)說(shuō),每輪?密鑰與K不同抖拦,也互不相同
? - F稱為輪函數(shù)(每輪都?樣)
?在每一輪中升酣,都要進(jìn)行左右的一次運(yùn)算,并將運(yùn)算結(jié)果傳遞給下一輪态罪。
?再來(lái)看看我們的feistel解密過(guò)程噩茄。
- Feistel解密1輪迭代過(guò)程
? - 被解密的數(shù)據(jù)左右交換
? - 解密過(guò)程按照與加密過(guò)程相反順序使?密鑰
?解密同加密一樣,也需要進(jìn)行左右消息分組的運(yùn)算复颈,并且要將運(yùn)算結(jié)果傳遞給下一輪绩聘。
?通過(guò)feistel結(jié)構(gòu)的加密和解密,我們可以發(fā)現(xiàn)在明文消息在經(jīng)過(guò)加密以后的密文券膀,可以通過(guò)解密算法將其還原為原始的明文君纫,也就是說(shuō)該加密算法是可逆的。
?分組密碼的應(yīng)用非常廣泛芹彬,它易于構(gòu)造偽隨機(jī)數(shù)生成器蓄髓、流密碼、消息認(rèn)證碼(MAC)和雜湊函數(shù)等舒帮,還可進(jìn)而成為消息認(rèn)證技術(shù)会喝、數(shù)據(jù)完整性機(jī)制陡叠、實(shí)體認(rèn)證協(xié)議以及單鑰數(shù)字簽字體制的核心組成部分。
?實(shí)際應(yīng)用中對(duì)于分組密碼可能提出多方面的要求肢执,除了安全性外枉阵,還有運(yùn)行速度、存儲(chǔ)量(程序的長(zhǎng)度预茄、數(shù)據(jù)分組長(zhǎng)度兴溜、高速緩存大小)、實(shí)現(xiàn)平臺(tái) (硬件耻陕、軟件拙徽、芯片)、運(yùn)行模式等限制條件诗宣。 這些都需要與安全性要求之間進(jìn)行適當(dāng)?shù)恼壑羞x擇膘怕。
?今天就先和大家說(shuō)到這里,下一期呢召庞,本應(yīng)按照計(jì)劃講講DES算法岛心,但是DES算法在之前我們就已經(jīng)說(shuō)過(guò)啦,還有不明白的小伙伴可以翻回去再看看篮灼,鏈接給大家忘古,請(qǐng)盡情暴擊!
精選文章都同步在公眾號(hào)里面诅诱,公眾號(hào)看起會(huì)更方便存皂,隨時(shí)隨地想看就看。微信搜索
龍躍十二
即可訂閱逢艘。