Remove ads
来自维基百科,自由的百科全书
密文竊取(CTS)是密碼學中使用分組密碼操作模式的通用方法,該操作模式允許處理不能均勻分割成塊的消息,而不會延長密文,代價是略為複雜。
密文竊取是一種使用塊密碼對明文進行加密的技術,但不將信息填充為塊大小的倍數,因此密文與明文大小相同。
它通過改變信息最後兩個區塊的處理過程來實現這一目的。除最後兩個區塊外,其他所有區塊的處理都保持不變,但倒數第二個區塊的部分密文會被 "竊取",以填充最後一個明文區塊。然後照常加密經過填充的最後一個區塊。
最後兩個區塊的最終密文由部分倒數第二個區塊(省略 "竊取 "部分)和完整的最後一個區塊組成,大小與原始明文相同。
解密時需要先解密最後一個區塊,然後將竊取的密文還原到倒數第二個區塊,然後再像往常一樣解密。
原則上,可以使用任何面向區塊的區塊密碼操作模式,但類似流密碼的模式已經可以應用於任意長度的信息,而無需填充,因此它們無法從這項技術中受益。與密文竊取相結合的常見操作模式是電子密碼本(ECB)和密碼塊鏈(CBC)。
ECB 模式的密文竊取要求明文長度超過一個區塊。一種可行的變通方法是,當明文長度為一個或更少時,使用類似流密碼的塊密碼操作模式,如 CTR、CFB 或 OFB 模式。
CBC 模式的密文竊取並不一定要求明文長度超過一個區塊。在明文長度為一個區塊或更短的情況下,初始化向量(IV)可以充當密碼文本的前一個區塊。在這種情況下,必須向接收方發送修改後的 IV。如果發送方在發送密文時不能自由選擇 IV(例如,IV 是一個派生或預先確定的值),則可能無法做到這一點,在這種情況下,CBC 模式的密文竊取只能發生在明文長度超過一個區塊的情況下。
要對未知長度的數據進行 CTS 加密或解密,必須延遲處理(和緩衝)最近的兩個數據塊,以便在數據流結束時對其進行適當處理。
有幾種不同的方式來排列密文以便傳輸。不同排列方式的密文位元數都相同,只是傳輸順序不同,因此選擇不影響安全性,純粹是為了方便實現。
這裡的編號取自Dworkin所描述的。第三種最流行,由Daemen和Schneier描述;Meyer描述了相關但不兼容的方案(關於位排序和密鑰使用)。
安排密文傳輸最顯而易見的方式,不外乎是縮短倒數第二塊,後面接着完整的最後一塊。但這對接收者來說不方便,原因有二:
這樣做的好處是,如果最後的明文塊恰好是塊大小的倍數,密文就與原始操作模式相同,避免了密文竊取。
通常,更方便的方式是交換最後兩塊密文塊,因此密文結尾先是完整的最後一塊,然後是截斷的倒數第二塊。密文塊就會自然對齊。
為了保持與非竊取模式的兼容性,CS2隻在竊取密文的數量非零時交換,即原始消息不是塊大小的倍數。
這保持了自然的對齊,以及與非竊取模式的兼容性,但是需要以不同的方式處理對齊和不對齊消息大小的情況。
最流行的替代方案是無條件交換最後兩塊密文塊。下面描述了使用該方案的順序。
為了加密或解密數據,對除最後兩個數據塊外的所有數據塊使用標準分組密碼操作模式。
下面的步驟描述了如何處理明文的最後兩個塊,即Pn-1和Pn,其中Pn-1的長度等於以位表示的密碼的塊大小B;最後一個塊的長度Pn是百萬位元(Mbit);k是正在使用的密鑰。M可以範圍從1到B,所以Pn可能是一個完整的塊。CBC模式描述還使用了就在有關塊Cn-2之前的密文塊,如果明文適合在兩個塊內,則該密文塊實際上可能是IV。
對於這描述,使用以下函數和操作符:
ECB模式的密文竊取在前兩塊內引入了塊間依賴關係,改變後兩塊的錯誤傳播行為。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.