一、引言
上一篇文章討論了 DES 算法,現(xiàn)在我們有了“給定 64-bit 的明文、64-bit 的密鑰,輸出 64-bit 的密文”的加密手段。這離實(shí)際應(yīng)用還有一點(diǎn)點(diǎn)距離,因?yàn)橐獋鬟f的信息當(dāng)然不止 64 位。
要用 DES 加密一條信息,一般先把信息填充到 64 的倍數(shù),于是就可以分成許多組,每組 8 個(gè)字節(jié)。利用密鑰對每一組進(jìn)行加密,最終的結(jié)果拼接起來,這就是 ECB(Electronic Code Book,電子密碼本) 模式。
然而,簡單的拼接會暴露一些統(tǒng)計(jì)信息,不夠安全,還有其他的一些工作模式,能夠?qū)γ繅K加密的結(jié)果進(jìn)行再一次混淆。
二、塊加密的工作模式
1. ECB(電子密碼本)
ECB 是最樸素的工作模式。把明文每 8 位一組進(jìn)行加密,得到的密文直接拼接。
ECB 模式是最簡單的模式。由于每個(gè)塊都是獨(dú)立加密的,所以它對并行加密解密很友好。此外,傳輸過程中出現(xiàn)的偶然錯誤,不會擴(kuò)大到影響整個(gè)數(shù)據(jù)。但正因?yàn)槊總€(gè)塊都獨(dú)立加密,重復(fù)的塊會被加密成重復(fù)的明文。這會導(dǎo)致泄漏明文的一些統(tǒng)計(jì)信息。
2. CBC(密碼塊鏈接)
CBC(Cipher-block chaining,密碼塊鏈接)模式需要一個(gè)初始向量 IV。
加密過程中,先把 IV 與第一塊明文混合,再交由 DES 加密;對于下一塊,其 IV 采用這一塊的加密結(jié)果。
CBC 由于每一個(gè)塊在加密的時(shí)候,都需要把明文與上一個(gè)塊的加密結(jié)果進(jìn)行異或,故加密是串行的。不過解密可以并行,因?yàn)榻饷軙r(shí)已知每一個(gè)密文塊,直接拿來異或即可。
顯然,由于明文每次加密開始的時(shí)候,都得異或上前一塊的密文,故對任何明文的改動,都將會影響到此后的所有塊。CBC 克服了 ECB “相同明文塊變成相同密文塊” 的缺點(diǎn)。
3. CFB(密文反饋)
CFB(Cipher feedback,密文反饋)是一種接近于 流密碼 的工作模式。它不用 DES 加密明文,而是把 DES 作為偽隨機(jī)數(shù)生成器,把 IV 作為種子。這樣就可以從 IV 和指定的 key 生成字節(jié)流,然后把明文與這個(gè)字節(jié)流異或。
CFB 模式中,每次加密明文的一個(gè)字節(jié)。故 CFB 模式不需要添加Padding。工作流程如下:

加密過程中,維護(hù)了一個(gè)寄存器 reg ,長度為 64-bit,初始值為 IV。每次對明文的一個(gè)字節(jié)進(jìn)行加密時(shí),把這個(gè) reg 交給 DES 加密,生成一個(gè) 64-bit 的結(jié)果 K;然后把 K 的高 8-bit 與明文的這一個(gè)字節(jié)異或,得到了一個(gè)字節(jié)的密文。接下來,把這個(gè) 8-bit 密文補(bǔ)充到移位寄存器 reg 的最右邊,拋棄 reg 此前的高 8 位。
隨著加密的進(jìn)行, reg 不斷地變化,每次都往右邊加 8 位(也就是上一輪得到的密文)、拋棄掉最左邊的 8 位。
CFB 模式的加密(左)和解密(右):

而解密過程也很簡單:既然 CFB 模式是流密碼,那么解密的時(shí)候,只要得到與加密過程一樣的密鑰流,拿去與密文異或就能得到明文了。文章來源:http://www.zghlxwxcb.cn/news/detail-569418.html
總結(jié)
我們討論了 ECB, CBC, CFB 三種工作模式,其中:文章來源地址http://www.zghlxwxcb.cn/news/detail-569418.html
- ECB 模式是不安全的模式。
- 對明文進(jìn)行改動,CBC、CFB 模式都會使得后序所有塊錯誤。
- CBC 模式,如果密文傳輸過程中有錯誤,則后面所有密文都出錯。
- CFB 模式,如果密文傳輸過程中出錯,只會影響到之后幾個(gè)塊(因?yàn)橐莆患拇嫫鞯拇嬖?,?8 個(gè)塊之后這個(gè)錯誤就會離開 reg ,此后的數(shù)據(jù)都會正常)。
- ECB、CBC 模式需要填充。填充常用 PKCS#5 規(guī)則。CFB 模式是類似于流密碼的逐字節(jié)加密,無需填充。
參考鏈接
- 塊加密的工作模式
到了這里,關(guān)于【密碼學(xué)】塊加密(分組加密)的工作模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!