密文竊取

維基百科,自由的百科全書
跳至導覽 跳至搜尋

密碼學中,密文竊取(CTS)是一種使用分組密碼操作模式的通用方法,該操作模式允許處理不能均勻分割成塊的消息,而不會導緻密文的擴展,代價是稍微增加了複雜性。

一般特性[編輯]

竊取密文是一種使用塊密碼加密明文的技術,不需要將消息填充到塊大小的倍數,因此密文與明文的大小相同。

它通過更改消息的最後兩個塊的處理來實現這一點。 除了最後兩個塊之外,所有塊的處理都保持不變,但是倒數第二個塊的密文的一部分被"竊取 "了,用來填充最後一個明文塊。 填充的最後一塊,然後像往常一樣加密。

最終密文的最後兩個塊,包括部分倒數第二塊(刪掉"竊取"部分)和完整的最後一塊,它們的大小與原明文相同。

解密時要求首先解密最後一個塊,然後將被「竊取」的密文恢復到倒數第二個塊,然後可以像往常一樣解密。

原則上,任何使用塊密碼的分組加密模式都可以使用,但流密碼模式已經可以加密任意長度的消息無需填充,因此它們不能進行該操作。 與竊取密文相結合的常用加密方式有電子密碼本(ECB)和密碼塊鏈接(CBC)。

為 ECB 模式而進行的密文竊取要求明文長度超過一個塊。 當明文長度為一個或更少時, 一種可能的解決辦法是,使用一種類似流密碼的分組密碼操作模式,如 CTR、 CFB 或 OFB 模式。

用於 CBC 模式的密文竊取不一定要求明文長於一個塊。 在明文為一個或更少塊長度的情況下,初始向量(IV)可以作為先前的密文塊。 在這種情況下,必須將修改後的 IV 發送到接受者。 但這在發送密文時 IV 不能被發送者自由選擇的情況下(例如,當 IV 是一個派生值或預先確定的值) 不太可能,並且在這種情況下,針對 CBC 模式的密文竊取只能在明長於一個塊文中發生。

為了對未知長度的數據實現 CTS 加密或解密,必須延遲處理(和緩存)最新的兩個數據塊,以便在數據流末端進行適當的處理。

密文格式[編輯]

有幾種不同的方式來排列密文以便傳輸。不同排列方式的密文位元數都是相同的,只是傳輸順序不同,因此選擇不影響安全性,純粹是為了實現上的方便。

這裡的編號取自Dworkin所描述的。 第三種是最流行的,由 Daemen 和 Schneier 進行了描述; Meyer 描述了一個相關但不兼容的方案(關於位排序和密鑰使用)。

CS1[編輯]

安排密文傳輸最顯而易見的方式,不外乎是縮短倒數第二個塊,後面接着完整的最後一個塊。 但這對於接收者來說並不方便,原因有兩個:

  1. 在任何情況下,接收方都必須首先解密最後的塊,並且
  2. 這導致最後一個塊沒有按照自然邊界對齊,並使硬件實現複雜化。

這樣做的好處是,如果最後的明文塊恰好是塊大小的倍數,那麼密文就與原始操作模式相同,避免了密文竊取。

CS2[編輯]

通常,更方便的方式是交換最後兩個密文塊,因此密文結尾先是完整的最後一個塊,然後是截斷的倒數第二個塊。密文塊就會自然對齊。

為了保持與非竊取模式的兼容性,選項 CS2隻在被竊取的密文數量非零時執行這個交換,即原始消息不是塊大小的倍數。

這保持了自然的對齊,以及與非竊取模式的兼容性,但是需要以不同的方式處理對齊和不對齊消息大小的情況。

CS3[編輯]

最流行的替代方案是無條件地交換最後兩個密文塊。 下面的描述是使用該方案的順序。

竊取密文模式描述CS3[編輯]

為了加密或解密數據,對除最後兩個數據塊外的所有數據塊使用標準分組密碼操作模式。

下面的步驟描述了如何處理明文的最後兩個塊,即 Pn-1和 Pn,其中 Pn-1的長度等於以位表示的密碼的塊大小 B; 最後一個塊的長度 Pn 是 M bits(位); k 是正在使用的密鑰。 M 可以範圍從1到 B,所以 Pn 可能是一個完整的塊。 CBC 模式描述還使用了就在有關塊 Cn-2之前的密文塊,如果明文適合在兩個塊內,則該密文塊實際上可能是 IV。

對於這個描述,使用以下函數和操作符:

  • Head (data,a) : 返回"data"字符串的第一個位。
  • Tail (data,a) : 返回'data'字符串的最後一位。
  • Encrypt (k,data) : 在"data"字符串上使用加密模式的底層塊密碼,使用密鑰 k 。
  • Decrypt (k,data) : 在"data"字符串的解密模式下使用基礎塊密碼,使用 密鑰 k。
  • XOR 或運算。 等價於不使用進位的按位加法。
  • | | :與運算符。 合併運算符兩邊的字符串。
  • 0^a: 一個0比特的字符串。

ECB密文竊取[編輯]

ECB 模式下的密文竊取在前兩個塊內引入了一種塊間依賴關係,導致後兩個塊的錯誤傳播行為發生改變。

Ecb 加密步驟(見圖)[編輯]

參考文獻[編輯]