電子密碼本(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)的做法籽腕。使用簡(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)源:維基百科