電子密碼本(ECB)
最簡(jiǎn)單的加密模式即為電子密碼本(Electronic codebook,ECB)模式。需要加密的消息按照塊密碼的塊大小被分為數(shù)個(gè)塊,并對(duì)每個(gè)塊進(jìn)行獨(dú)立加密。

本方法的缺點(diǎn)在于同樣的明文塊會(huì)被加密成相同的密文塊;因此,它不能很好的隱藏?cái)?shù)據(jù)模式。在某些場(chǎng)合,這種方法不能提供嚴(yán)格的數(shù)據(jù)保密性,因此并不推薦用于密碼協(xié)議中。
ECB模式也會(huì)導(dǎo)致使用它的協(xié)議不能提供數(shù)據(jù)完整性保護(hù),易受到重放攻擊的影響,因此每個(gè)塊是以完全相同的方式解密的。
密碼塊鏈接(CBC)
1976年,IBM發(fā)明了密碼分組鏈接(CBC,Cipher-block chaining)模式[14]。在CBC模式中,每個(gè)明文塊先與前一個(gè)密文塊進(jìn)行異或后,再進(jìn)行加密。在這種方法中,每個(gè)密文塊都依賴于它前面的所有明文塊。同時(shí),為了保證每條消息的唯一性,在第一個(gè)塊中需要使用初始化向量。


CBC是最為常用的工作模式。它的主要缺點(diǎn)在于加密過(guò)程是串行的,無(wú)法被并行化,而且消息必須被填充到塊大小的整數(shù)倍。解決后一個(gè)問(wèn)題的一種方法是利用密文竊取。
注意在加密時(shí),明文中的微小改變會(huì)導(dǎo)致其后的全部密文塊發(fā)生改變,而在解密時(shí),從兩個(gè)鄰接的密文塊中即可得到一個(gè)明文塊。因此,解密過(guò)程可以被并行化,而解密時(shí),密文中一位的改變只會(huì)導(dǎo)致其對(duì)應(yīng)的明文塊完全改變和下一個(gè)明文塊中對(duì)應(yīng)位發(fā)生改變,不會(huì)影響到其它明文的內(nèi)容。
填充密碼塊鏈接(PCBC)
填充密碼塊鏈接(PCBC,Propagating cipher-block chaining)或稱為明文密碼塊鏈接(Plaintext cipher-block chaining)[15][16],是一種可以使密文中的微小更改在解密時(shí)導(dǎo)致明文大部分錯(cuò)誤的模式,并在加密的時(shí)候也具有同樣的特性。

PCBC主要用于Kerberos v4和WASTE中,而在其它場(chǎng)合的應(yīng)用較少。對(duì)于使用PCBC加密的消息,互換兩個(gè)鄰接的密文塊不會(huì)對(duì)后續(xù)塊的解密造成影響[17]。正因?yàn)檫@個(gè)特性,Kerberos v5沒(méi)有使用PCBC。
密文反饋(CFB)
密文反饋(CFB,Cipher feedback)模式類似于CBC,可以將塊密碼變?yōu)樽酝降?a target="_blank" rel="nofollow">流密碼;工作過(guò)程亦非常相似,CFB的解密過(guò)程幾乎就是顛倒的CBC的加密過(guò)程:


與CBC相似,明文的改變會(huì)影響接下來(lái)所有的密文,因此加密過(guò)程不能并行化;而同樣的,與CBC類似,解密過(guò)程是可以并行化的。在解密時(shí),密文中一位數(shù)據(jù)的改變僅會(huì)影響兩個(gè)明文塊:對(duì)應(yīng)明文塊中的一位數(shù)據(jù)與下一塊中全部的數(shù)據(jù),而之后的數(shù)據(jù)將恢復(fù)正常。
CFB擁有一些CBC所不具備的特性,這些特性與OFB和CTR的流模式相似:只需要使用塊密碼進(jìn)行加密操作,且消息無(wú)需進(jìn)行填充(雖然密文竊取也允許數(shù)據(jù)不進(jìn)行填充)
輸出反饋(OFB)
輸出反饋模式(Output feedback, OFB)可以將塊密碼變成同步的流密碼。它產(chǎn)生密鑰流的塊,然后將其與明文塊進(jìn)行異或,得到密文。與其它流密碼一樣,密文中一個(gè)位的翻轉(zhuǎn)會(huì)使明文中同樣位置的位也產(chǎn)生翻轉(zhuǎn)。這種特性使得許多錯(cuò)誤校正碼,例如奇偶校驗(yàn)位,即使在加密前計(jì)算,而在加密后進(jìn)行校驗(yàn)也可以得出正確結(jié)果。
由于XOR操作的對(duì)稱性,加密和解密操作是完全相同的:



每個(gè)使用OFB的輸出塊與其前面所有的輸出塊相關(guān),因此不能并行化處理。然而,由于明文和密文只在最終的異或過(guò)程中使用,因此可以事先對(duì)IV進(jìn)行加密,最后并行的將明文或密文進(jìn)行并行的異或處理。
可以利用輸入全0的CBC模式產(chǎn)生OFB模式的密鑰流。這種方法十分實(shí)用,因?yàn)榭梢岳每焖俚腃BC硬件實(shí)現(xiàn)來(lái)加速OFB模式的加密過(guò)程。
計(jì)數(shù)器模式(CTR)
CTR模式(Counter mode,CM)也被稱為ICM模式(Integer Counter Mode,整數(shù)計(jì)數(shù)模式)和SIC模式(Segmented Integer Counter)。
與OFB相似,CTR將塊密碼變?yōu)?a target="_blank" rel="nofollow">流密碼。它通過(guò)遞增一個(gè)加密計(jì)數(shù)器以產(chǎn)生連續(xù)的密鑰流,其中,計(jì)數(shù)器可以是任意保證長(zhǎng)時(shí)間不產(chǎn)生重復(fù)輸出的函數(shù),但使用一個(gè)普通的計(jì)數(shù)器是最簡(jiǎn)單和最常見的做法。使用簡(jiǎn)單的、定義好的輸入函數(shù)是有爭(zhēng)議的:批評(píng)者認(rèn)為它“有意的將密碼系統(tǒng)暴露在已知的、系統(tǒng)的輸入會(huì)造成不必要的風(fēng)險(xiǎn)”[18]。當(dāng)前,CTR已經(jīng)被廣泛的使用了,由輸入函數(shù)造成的問(wèn)題被認(rèn)為是使用的塊密碼的缺陷,而非CTR模式本身的弱點(diǎn)[19]。無(wú)論如何,有一些特別的攻擊方法,例如基于使用簡(jiǎn)單計(jì)數(shù)器作為輸入的硬件差錯(cuò)攻擊[20]。
CTR模式的特征類似于OFB,但它允許在解密時(shí)進(jìn)行隨機(jī)存取。由于加密和解密過(guò)程均可以進(jìn)行并行處理,CTR適合運(yùn)用于多處理器的硬件上。
注意圖中的“nonce”與其它圖中的IV(初始化向量)相同。IV、隨機(jī)數(shù)和計(jì)數(shù)器均可以通過(guò)連接,相加或異或使得相同明文產(chǎn)生不同的密文。


來(lái)源:維基百科