分組密碼的模式-分組密碼是如何迭代的
主要內(nèi)容:分組密碼模式ECB、CBC、CFB、OFB、CTR
上一篇文章簡(jiǎn)要記錄了對(duì)稱密碼以及它們的python實(shí)現(xiàn),細(xì)心的同學(xué)可能已經(jīng)發(fā)現(xiàn)了一些模式的運(yùn)用。在代碼中,我們創(chuàng)建一個(gè)新的實(shí)例的時(shí)候,要指定要使用的模式,這個(gè)模式是分組密碼特有的,這里說(shuō)一下分組密碼的定義:分組密碼是每次只能處理特定長(zhǎng)度的一塊數(shù)據(jù)的一類密碼算法,這里的“一塊”就稱為分組,一個(gè)分組的比特?cái)?shù)就稱為分組長(zhǎng)度。上文中的DES、3DES和AES都屬于分組密碼。流密碼:對(duì)數(shù)據(jù)進(jìn)行連續(xù)處理的一類密碼算法,因?yàn)橐獙?duì)數(shù)據(jù)進(jìn)行連續(xù)處理,所以要保持內(nèi)部狀態(tài)。密碼算法分為分組密碼和流密碼兩種。
什么是模式?分組密碼算法只能加密固定長(zhǎng)度的分組,理想的情況是明文長(zhǎng)度剛好是密碼算法分組要求的長(zhǎng)度,直接加密就可以了,如果都是這種情況,也就不需要什么模式了?,F(xiàn)實(shí)的情況是往往是要加密的明文長(zhǎng)度超過(guò)分組密碼的分組長(zhǎng)度,這種情況就需要對(duì)分組密碼算法進(jìn)行迭代。如果明文過(guò)長(zhǎng),我們要對(duì)明文進(jìn)行分割。最容易想到的模式就是分割成若干個(gè)分組,逐一對(duì)分組進(jìn)行加密,這種模式就是ECB模式,但是ECB模式有很大的弱點(diǎn)。下面我們來(lái)逐一學(xué)習(xí)分組模式。
ECB模式
ECB模式全稱是Electronic CodeBook mode(電子密碼本模式),它是將明文分組加密后的結(jié)果直接成為密文分組,如下圖
這樣會(huì)形成一個(gè)明文-密文的對(duì)應(yīng)表,因此ECB模式被稱為電子密碼本模式,這種模式簡(jiǎn)單易懂。
ECB模式特點(diǎn)
在所有的模式中屬于最簡(jiǎn)單的一種,明文分組和密文分組一一對(duì)照。觀察密文特點(diǎn),就能夠知道明文中存在怎么樣的重復(fù)組合,并能以此為線索進(jìn)行破譯密碼;可以對(duì)密文進(jìn)行調(diào)換、刪除等密文攻擊,從而操縱明文。雖然可以通過(guò)其他的手段來(lái)增加安全性,但不推薦使用ECB模式。
CBC模式
CBC模式全稱為Cipher Block Chaining模式(密碼分組鏈接模式),這個(gè)模式密文分組像鏈條一樣相互鏈接在一起。CBC模式會(huì)將明文分組與前一個(gè)密文分組進(jìn)行XOR運(yùn)算,然后再進(jìn)行加密,加密過(guò)程如下圖
解密過(guò)程和加密過(guò)程相反。
初始化向量:當(dāng)加密第一個(gè)明文分組時(shí),由于不存在前一個(gè)密文分組,因此需要準(zhǔn)備一個(gè)長(zhǎng)度為一個(gè)分組的比特序列來(lái)代替前一個(gè)密文分組,這個(gè)比特序列稱為初始化向量(通??s寫為IV),一般都會(huì)隨機(jī)生成一個(gè)比特序列作為初始化向量。
CBC模式特點(diǎn)
明文分組在加密之前一定會(huì)與前一個(gè)密文分組進(jìn)行XOR運(yùn)算,因此即便明文分組1和2內(nèi)容相同,密文分組1和2也不一定相等,這樣ECB模式缺陷就不存在了。CBC模式中,無(wú)法單獨(dú)對(duì)一個(gè)中間的明文分組進(jìn)行加密,加密必須滿足條件:前一組密文,當(dāng)前組明文,而要滿足前一組密文存在這個(gè)條件,必須前面所有明文分組進(jìn)行逐一加密,例如生成密文分組3,則必須湊齊明文分組1、2、3才可以。
安全通信協(xié)議之一的SSL/TLS,就是使用CBC模式來(lái)確保通訊的機(jī)密性。
CFB模式
CFB模式全稱Cipher FeedBack模式(密文反饋模式),在CFB模式中,前一個(gè)密文分組會(huì)被送回到密碼算法的輸入端,加密流程圖如下
值得注意的是,明文分組和密文分組之間沒(méi)有經(jīng)過(guò)“加密”這一步驟,只有一個(gè)XOR運(yùn)算,所以在解密的時(shí)候,從初始化向量IV開(kāi)始,執(zhí)行的也是加密操作,然后與密文做一個(gè)XOR運(yùn)算,得到明文。CFB模式中的初始化向量IV和CBC模式一樣,也是一個(gè)隨機(jī)生成的比特序列。解密過(guò)程如下圖:
CFB模式特點(diǎn)
密文分組和明文分組之間沒(méi)有“加密”過(guò)程,只有一個(gè)XOR過(guò)程,其實(shí)這也是一種加密,XOR充當(dāng)了這個(gè)角色,這個(gè)過(guò)程的兩個(gè)對(duì)象,一個(gè)是明文分組,一個(gè)是前一個(gè)密文分組經(jīng)過(guò)加密后的比特序列,密文反饋模式的反饋,指的就是密文返回輸入端。
OFB模式
OFB模式的全稱是Output-Feedback模式(輸出反饋模式),在該模式中,密碼算法的輸出會(huì)反饋到密碼算法的輸入中。OFB模式并不是通過(guò)密碼算法對(duì)明文直接進(jìn)行加密,而是通過(guò)將明文分組和密碼算法的輸出進(jìn)行XOR來(lái)產(chǎn)生密文分組,和CFB模式非常相似。加密過(guò)程如下圖:
解密的過(guò)程也是對(duì)初始化向量進(jìn)行加密生成密鑰流,然后用密鑰流和密文做XOR即可得到明文。
OFB模式特點(diǎn)
OFB模式和CFB模式相同的是不直接對(duì)明文分組進(jìn)行“加密”,而是使用初始化向量IV通過(guò)加密算法生成密鑰流,用加密算法生成的比特序列和明文分組做XOR運(yùn)算,產(chǎn)生的結(jié)果就是密文分組。加密算法產(chǎn)生的輸出反饋到加密算法的輸入,所以叫做輸出反饋模式。
CTR模式
CTR模式的全稱是CounTeR模式(計(jì)數(shù)器模式),該模式是一種通過(guò)將逐次累加的計(jì)數(shù)器進(jìn)行加密來(lái)生成密鑰流的流密碼。CTR模式中,每個(gè)分組對(duì)應(yīng)一個(gè)逐次累加的計(jì)數(shù)器,并通過(guò)計(jì)數(shù)器進(jìn)行加密來(lái)生成密鑰流,最終的密文分組是通過(guò)將計(jì)數(shù)器加密的比特序列,與明文分組進(jìn)行XOR而得到的,和CFB模式、OFB模式類似,不直接對(duì)明文分組進(jìn)行“加密”。下圖為加密過(guò)程:
解密過(guò)程是將計(jì)數(shù)器加密產(chǎn)生比特序列和密文分組進(jìn)行XOR得到明文分組。
計(jì)數(shù)器生成
每次加密都會(huì)生成一個(gè)不同的值(nonce)來(lái)作為計(jì)數(shù)器的初始值,當(dāng)分組長(zhǎng)度為128比特(16字節(jié))時(shí),計(jì)數(shù)器初始值用前八個(gè)字節(jié)為nonce,這個(gè)值每次加密都必須是不同的,后八個(gè)字節(jié)為分組序號(hào),這個(gè)部分會(huì)逐次累加,例如:
前八個(gè)字節(jié)33 2D 4F CD 52 8B 5A 67為nonce主體,后八位為累加計(jì)數(shù)部分,加密過(guò)程中,會(huì)產(chǎn)生如下變化:
CTR模式特點(diǎn)
CTR模式和OFB模式一樣,都屬于流密碼。CTR模式中可以以任意的順序?qū)Ψ纸M進(jìn)行加密和解密,因?yàn)榧用芎徒饷苄枰玫降挠?jì)數(shù)器的值可以由nonce和分組序號(hào)直接計(jì)算出來(lái),能夠?qū)崿F(xiàn)并行計(jì)算。
分組密碼模式比較表(來(lái)源《圖解密碼技術(shù)》)