允許填充預言機攻擊的操作模式
在我看來,填充預言攻擊主要是 CBC 模式加密的使用者關心的問題。問題:是否有任何其他操作模式容易受到填充預言攻擊?如果是這樣,為什麼?
這個答案的評論部分有一些關於歐洲央行的討論,但沒有得出結論。如果歐洲央行允許提供比明文長度更多的資訊的填充預言攻擊,我會感到驚訝,但我寧願確定。
答案只需要解決對稱分組密碼和維基百科頁面上提到的操作模式。
在填充預言機攻擊中,你有一個預言機,它只告訴你特定選擇的密文是否解密為正確填充的明文。該預言機用於建構最後的預言機,迭代使用可以揭示整個資訊。
它在 CBC 模式下工作的原因是我們可以通過修改密文(倒數第二個塊或 IV)對最後一個塊的明文進行可預測的任意更改:
$$ P_i = E(C_{i}) \oplus C_{i-1} $$ 對於易受攻擊的另一種模式,將需要相同類型的控制。
如果歐洲央行允許提供比明文長度更多的資訊的填充預言攻擊,我會感到驚訝,但我寧願確定。
在 ECB 中,密文僅通過解密函式,因此對其進行的任何更改都會對其影響的唯一明文塊產生不可預知的更改。
除了,我們可以做出一個可預測的改變:我們可以用有效消息的任何其他密文塊替換最後一個。如果它通過了填充預言,我們知道它以
1
,2|2
, …之一結束16|...|16
(假設這是使用的填充模式),但我們無法進行其他檢查。這不太可能有幫助,因為文本(ASCII 或 UTF-8)消息永遠不會包含其中的大部分——
9|...|9
(製表符)和10|...|10
(換行符)是我能想像看到的唯一消息。在“隨機”二進制明文中,您可能至少會看到一些1
s,但這可能沒有幫助。不過,我猜這會洩露資訊,所以它應該算作攻擊。
問題:是否有任何其他操作模式容易受到填充預言機攻擊?
如上所述,歐洲央行只是部分脆弱,但其他模式呢?
CFB、OFB 和 CTR 都允許對最後一個明文塊進行可預測的更改。但是,它們本質上是不需要填充的流密碼。如果一個實現確實使用了填充,它可能很容易受到攻擊。GCM 是經過身份驗證的,因此它不會為攻擊留下空間,並且無論如何也不需要填充。
例如,這裡有一個 padding oracle 攻擊 $ b $ -byte blocksize CTR 填充 $ p = 1 $ 到 $ b $ 每個字節等於 $ p $ ,最多為塊大小的倍數:
- 密文只是消息和 IV 派生密鑰流的異或: $ C = M \oplus K $ . 你知道最後的1- $ b $ 字節 $ M $ 將是填充,所以你可以在最後一個字節中翻轉一個位,測試它;倒數第二個,測試;等等只要oracle返回0。你會找到填充長度,從而知道最後一個 $ p $ 兩個字節 $ M $ ( $ M_i=p $ ) 和 $ K $ ( $ K_i=C_i \oplus p $ ).
- 設置最後一個 $ p $ 字節,以便它們對於 a 是正確的 $ p+1 $ 字節填充(或者如果 $ p = b $ ,刪除最後一個密文塊)。現在您可以在下一個位置嘗試所有可能的密文字節( $ p+1 $ 從右數)。其中一個將通過 oracle,返回 1。現在你知道最後一個了 $ p+1 $ 兩個字節 $ M $ 和 $ K $ .
- 您可以多次重複第 2 步,以查找整個密鑰流和消息。