工作模式是一項增強密碼演演算法或使用演演算法適應具體應用的技術。為了將分組密碼應用於各種各樣的實際應用,NIST(SP800-38A)定義了5種「工作模式」。這5中模式實際上覆蓋了大量使用分組密碼的應用。
一次處理一組明文分塊,每次使用相同的金鑰加密,如圖所示。
明文若長於b位,則可以簡單的將其分為b位一組的塊,如果有必要則對最後一塊進行填充。解密也是一次執行一塊,使用相同的金鑰。
ECB模式特別適合用於資料較少的情況,比如加密金鑰。比如傳輸一個DES或者AES的金鑰,可以選擇這種模式。
ECB模式中,如果一段訊息中有相同的明文組,那麼密文也會出現相同的密文分組。
為了克服ECB模式,需要對重複的明文分組加密成不同的密文分組。CBC模式下加密演演算法的輸入是當前的明文組和上一個密文組的互斥或,使用相同的金鑰完成。這就相當於將所有的明文組連結起來,加密演演算法的每次輸入與本明文組沒有固定的關係,如果重複的明文組,加密後看不出來。
解密時,每個密文分組分別進行解密,再與上一個密文互斥或即可恢復明文。
初始向量IV是和密文具有相同長度的資料分組,IV必須為收發雙發共用,但是第三方不可預測。特別的,對於任意的給定明文,在IV產生之前,不能預測和本明文有關聯的IV。為了最大程度的安全,IV不能不經過授權就被修改。對IV先用ECB加密後再傳送的方式可以實現這一要求。
串流加密法不需要將明文填充到長度是分組長度的整數倍,且可以實時操作。密文反饋模式(CFB),輸出反饋模式(OFB),計數器模式(CTR)可以看做串流加密法,但是分組密碼。串流加密法的密文和明文是等長的。
加密函數:輸入b位的移位暫存器,值為初始化向量IV
加密函數輸出最左邊的s位與明文的第一個分段互斥或得到密文的第一個單元,然後將密文傳送出去接著移位暫存器左移s位,填入移位暫存器的最右邊s位。
解密的時候,將收到的密文單元與加密函數的輸出互斥或得到明文單元。
用加密函數的輸出填充移位暫存器,對整個明文和密文分組進行運算,而不是僅對s位的子集運算。
加密表示為
解密表示為
令分組長度為b位,如果最後一個分組包含u位,u<b,最後的輸出分組的最左邊的u位用來做互斥或運算。最後的輸出分組的其餘b-u位丟棄不用。
OFB模式需要一個初始化向量IV,IV必須是一個時變值,即每次加密運算都是唯一的。加密輸出的分組僅僅依賴於金鑰和IV,而不依賴於明文。對於給定的金鑰和IV,用於和明文流進行互斥或運算的輸出位流是固定的,如果兩個不同的訊息在相同的地方有一個相同的明文分組,那麼攻擊者就能夠判斷出那部分的輸出。
OFB的一個優點是輸出過程中,在某位上發生的錯誤不會影響其他位。缺點是抗訊息流篡改攻擊的能力不如CFB。即密文中的某位取反,恢復出的明文相應位也取反。所以攻擊者有辦法控制對恢復明文的改變。
OFB是典型串流加密法的結構,密碼產生的位流是初始值和金鑰的函數,產生的位流和明文進行互斥或。位流和明文獨立。
計數器模式使用與明文分組規模相同的長度,SP 800-38A對此的唯一要求是加密不同的明文組計數器對於的值必須不同。
計數器首先被初始化為某一個值,然後隨著訊息塊的增加計數器的值加1。加密時,計數器加密後與明文分組互斥或得到密文分組,解密使用相同值的計數器序列,用加密後的計數器的值與密文分組互斥或來恢復明文分組。所以在解密的是必須知道初始計數器的值。
計數器初始值必須為時變值,使用相同金鑰加密的所有訊息必須各自具有不同的時變值,而且時變值必須唯一。保證時變值唯一的一個辦法是訊息計數器都增加1,即每個訊息的第一個計數器的值都要比前一條訊息的最後一個計數器的值多1。
計數器模式的優點
各個工作模式的反饋特徵
OFB和CTR模式的輸出獨立於明文和密文。