OCB模式的語義安全
正如 OCB 規範中定義的那樣,標籤只依賴於校驗和(也就是普通塊的二進制和),所以如果我們構造兩個具有相同和的消息(這很容易做到),我們可以得到具有完全相同標籤的兩個不同的密文。
因此,我們可以輕鬆地對 OCB 發起密文完整性攻擊,並且可以以機率 1 贏得語義安全遊戲(我們可以使用先前獲得的密文構造新的有效密文)。
我錯過了什麼 OCB 仍然被認為是安全的?
我終於找到了問題:Coursera Cryptography 1(作者 Dan Boneh)中介紹的 OCB 模式課程中存在錯誤。在查閱OCB模式的官方規範(RFC 7253)時,發現標籤構造所用的值是塊數m而不是課程中給出的0(見下圖),否則方案就變成了不安全(可以很容易地對語義安全遊戲進行完整性攻擊!)。
標籤僅取決於校驗和(這只是普通塊的二進制和)
這在技術上是正確的,但忽略了一個關鍵點:“plain blocs”是通過解密密文獲得的明文。它們不是攻擊者提供的明文。
OCB 是一種 AE(AD) 模式。這些模式的安全模型是攻擊者必須不能送出有效的密文(不參考任何特定的明文)。這與 MAC 的安全模型不同,後者是攻擊者不能送出存在性偽造,即攻擊者選擇的明文的有效標籤。
所以你是非常正確的,攻擊者可以獲取一個已知的明文/密文對,修改明文,使其異或到與已知明文相同的值,並且在 OCB 下加密時會產生相同的標籤。但是,OCB密文顯然會有所不同!並且攻擊者無法生成與修改後的明文對應的這種不同的密文。
這強調了 AE(AD) 模式和加密+MAC 範式之間的一個重要區別:使用 AE(AD),驗證者必須始終處理整個密文,即使他們獨立接收(他們認為是)有效的明文(因為它可能是由一個樂於助人的攻擊者選擇的,他希望為您省去解密的麻煩)。
底線:OCB 標籤不是 MAC!
(確實從OCB的AD部分的規範中可以明顯看出:AD當然沒有加密,因此不能與明文一起解密以饋入標籤計算。相反,AD通過密碼處理並進入標籤計算作為密文,而不是明文)。
我認為這是問題的正確答案。正如另一個答案中提出的那樣,標籤計算調整的輸入是一個紅鯡魚。