交錯CBC
我一直在研究加密模式,並遇到了一種名為interleaved CBC (ICBC)的晦澀模式。我找不到很多關於它的資訊,我想知道是否有人知道更多。
它基本上是 CBC,但不是連結最後一個塊,而是連結第n - m個塊,其中m是一些常數。這允許一定數量的並行化。例如,如果m為 8,您一次可以做 8 個塊。對於消息不可區分性,您還需要一個與分組密碼乘以m一樣寬的 IV ,這可能是從較短的 IV 擴展而來的。
有誰知道這是什麼嗎?我想它會被認為是過時的,但它可能在某些應用程序中具有一些理想的特性。
編輯:據我所知,這與將消息拆分為
m
較小的消息並使用 CBC 加密每個消息在安全方面是相同的。消息通過“條帶化”而不是拆分為塊來拆分的事實似乎無關緊要。這基本上只是減少到 CBC(假設每個條帶的 IV 是唯一的)?當然,這也必須經過身份驗證,以防止填充 oracle 攻擊。
雖然它確實提供了一些並行處理,但我必須說它如何處理它存在一些問題。通常,如果您要執行多執行緒,您將使用分而治之的方法,該方法只是將明文分成塊並讓其他處理器處理它。此方法需要特定大小的塊流 - 塊大小。更糟糕的是,將這些東西放在一起時需要相同的程序。
如果你使用 $ s $ 流,你有 $ x $ 執行加密服務的處理器,其中 $ x \not= s $ 那麼在服務之間劃分流將是相對棘手的。通常,開發人員會嘗試為*塊密碼實現提供相對大量的塊,*以避免延遲問題。如果你這樣做,那麼你將不得不將塊連接在一起,只是為了再次拆分它們。如果其中一個流變慢,那麼您可能必須緩衝許多小塊。
我並不是說這類問題無法解決,但它確實需要開發人員進行大量工作才能有效地處理所有事情。
現在將其與點擊率進行比較。您為處理器提供了一大塊純文字以及該塊的隨機數和計數器,然後您將其留給加密服務以盡快返回它。密文可以與計數器值一起發回,您可以將其放入執行緒安全的 prio-map 中,直到需要它(當然,或者您用完緩衝區空間)。您可以根據需要製作任意大的塊,並將過程拆分為任意數量的服務。每一步都具有靈活性,並且只需要有限的拆分/連接。
只需要一個小的隨機數,而不是一個巨大的 IV(儘管後者有一些技巧)。
基本上,只要您可以避免隨機數重複的問題,當涉及到並行處理(以及大多數其他屬性,例如對於大密文的更好的跳過屬性)時,CTR 將比此方案更可取。