歷史和標準化
最早出現的工作模式,ECB,CBC,OFB和CFB可以追溯到1981年。2001年,NIST修訂了其早先發布的工作模式系統列表,加入了
AES,並加入了CTR模式。最後,在2010年1月,NIST加入了XTS-AES,而其餘的可信模式並沒有為NIST所認證。例如CTS是一種密文竊取的模式,許多常見的密碼學運行庫提供了這種模式。
ECB,CBC,OFB,CFB,CTR和XTS模式僅僅提供了機密性;為了保證加密信息沒有被意外修改或惡意篡改,需要採用分離的訊息驗證碼,例如CBC-MAC。密碼學社區認識到了對專用的保證完整性的方法的需求,NIST因此提出了HMAC,CMAC和GMAC。
HMAC在2002年通過了認證,
CMAC在2005年通過,GMAC則在2007年被標準化。
在發現將認證模式與加密模式聯合起來的難度之後,密碼學社區開始研究結合了加密和認證的單一模式,這種模式被稱為認證加密模式(AE,Authenticated Encryption),或稱為authenc。AE模式的例子包括
CCM,
GCM,CWC,
EAX,IAPM和
OCB。
初始化向量(IV)
初始化向量(IV,Initialization Vector)是許多任務作模式中用於將加密隨機化的一個位塊,由此即使同樣的明文被多次加密也會產生不同的密文,避免了較慢的重新產生密鑰的過程。
初始化向量與密鑰相比有不同的安全性需求,因此IV通常無須保密,然而在大多數情況中,不應當在使用同一密鑰的情況下兩次使用同一個IV。對於CBC和CFB,重用IV會導致泄露明文首個塊的某些信息,亦包括兩個不同訊息中相同的前綴。對於OFB和CTR而言,重用IV會導致完全失去安全性。另外,在CBC模式中,IV在加密時必須是無法預測的;特別的,在許多實現中使用的產生IV的方法,例如SSL2.0使用的,即採用上一個訊息的最後一塊密文作為下一個訊息的IV,是不安全的。
填充
塊密碼只能對確定
長度的數據塊進行處理,而訊息的長度通常是可變的。因此部分模式(即ECB和
CBC)需要最後一塊在加密前進行填充。有數種填充方法,其中最簡單的一種是在
明文的最後填充空字元以使其長度為塊長度的整數倍,但必須保證可以恢復明文的原始長度;例如,若明文是
C語言風格的
字元串,則只有串尾會有空字元。稍微複雜一點的方法則是原始的
DES使用的方法,即在數據後添加一個1
位,再添加足夠的0位直到滿足塊長度的要求;若訊息長度剛好匹配塊長度,則添加一個填充塊。最複雜的則是針對CBC的方法,例如密文竊取,殘塊終結等,不會產生額外的密文,但會增加一些複雜度。
布魯斯·施奈爾和尼爾斯·弗格森提出了兩種簡單的可能性:添加一個值為128的位元組(
十六進制的80),再以0位元組填滿最後一個塊;或向最後一個塊填充
n個值均為
n的位元組。
CFB,OFB和CTR模式不需要對長度不為密碼塊大小整數倍的訊息進行特別的處理。因為這些模式是通過對塊密碼的輸出與明文進行
異或工作的。最後一個明文塊(可能是不完整的)與密鑰流塊的前幾個位元組異或後,產生了與該明文塊大小相同的密文塊。流密碼的這個特性使得它們可以套用在需要密文和明文數據長度嚴格相等的場合,也可以套用在以流形式傳輸數據而不便於進行填充的場合。
誤差傳播
在
訊息認證碼和認證加密的廣泛套用之前,常常有人討論塊密碼工作模式的“誤差傳播”特性,作為工作模式性能的一部分。例如,若密文傳輸中一個數據塊的錯誤會導致採用ECB模式生成的明文中同樣一個塊的錯誤,而CBC模式中會導致兩個明文塊出錯。
有人認為這樣的特性在應對隨機誤差(例如傳輸噪聲)時會是有益的,而還有人認為這樣的特性使得攻擊者更容易篡改訊息的一部分。
無論如何,若使用了適當的完整性保護措施,這樣的誤差很可能會導致整個訊息重發。若需要應對隨機誤差,則應當在傳送密文之前增加錯誤校正碼。
認證加密
一些工作模式在設計中希望將保密性和認證性結合起來,例如XCBC,
ACBC,
APM,
OCB,
EAX,CWC,
CCM和
GCM。認證加密模式被可以分為單次處理和兩次處理兩種類型。然而,對密碼學用戶社區而言,不幸的是,許多單次處理的認證加密算法,例如OCB,是為專利所保護的。
另外,有的模式也允許為未加密的關聯數據進行認證,因此被稱為AEAD(Authenticated-Encryption with Associated-Data,用於關聯數據的認證加密)。例如,EAX是一種兩次處理的AEAD方法,而OCB模式是單次的。
其它模式和密碼學概念
除了上文中提到的模式以外,還有很多其它的塊密碼工作模式。有的被公眾所接受,有其詳細描述了,甚至被標準化了,並在使用中;而有的則被認為是不安全的,而從未使用過;另外一些則並沒有被分類為保密,認證或簽名加密,例如密鑰反饋模式(KFM,Key Feedback Mode)和AES-hash。
NIST維護著一張塊密碼工作模式列表。
磁碟加密通常使用特殊目的、專門設計的模式。可以調節的小數據塊加密模式(LRW,XEX和XTS)和大數據塊的模式(
CMC和
EME)是設計用於加密磁碟區塊的。
塊密碼也可以用於其它加密協定中,在這些協定中,塊密碼的使用方式與前述工作模式相似。在一切協定中,為了保證其安全性,必須在構建工作模式時特別注意。
認證加密也採用塊密碼作為其中的一部,其同時使用加密和MAC以提供保密性和數據完整性,例如IAPM,
CCM,CWC,
EAX,
GCM和
OCB。