具有隨機數重用或無隨機數的 Sponge Duplex 認證加密
在 Duplex 結構中使用 Sponge 排列,用於經過身份驗證的加密。
插圖範例:ascon; 實際利息(如果相關):keccak
假設沒有關聯數據,也沒有隨機數,只有一個鍵。第一個密文塊出現了一個經典的異或密碼問題,其中
$ C_{a,1}\oplus C_{b,1}= P_{a,1}\oplus P_{b,1} $ . - 對於兩個流 $ a $ 和 $ b $ 用相同的鑰匙
- 但看起來後續的塊很好。
但是,假設您插入的不是關聯數據 $ P_1 $ (然後重複 $ P_1 $ 再次按照施工正常進行)
**基本上使用 $ P_1 $ 作為一個隨機數。**但隨後的每一個 $ P_x $ 是一種額外的隨機數。
您會不會遇到這樣一種情況,即您最終會得到一個不會有 nonce(nonce 為 0*)重用的危險的流密碼?每個使用相同鍵的雙工實例只會產生相同的 $ S_1\ldots S_x $ 對於相同的 $ P_1\ldots P_x $ ( $ S_x $ 存在 $ C_x\oplus P_x $ 或海綿排列的“公共”部分)
這個對嗎?如果是這樣,這種方法的唯一缺點是相同的明文總是會產生相同的密文和標籤嗎?沒有其他安全隱患?
對於明文對,您仍然會遇到 XOR 密碼問題,其中 $ P_{a,1}=P_{b,1} $ . 這是一個相當可信的條件,因為消息通常可以有刻板印象的開頭,例如“親愛的先生/女士”或“分類:絕密”。
如果我們有兩條消息 $ P_{a,1}=P_{b,1} $ ,然後狀態出來 $ p_b $ 在兩條消息的“關聯數據”步驟之後。然後我們看到 $ C_{a,1} $ 和 $ C_{b,1} $ 兩個狀態也相等,對於下一個塊,我們將擁有 $ C_{a,2}\oplus C_{b,2}=P_{a,2}\oplus P_{b,2} $ .
還有一個問題是接收者應該如何重新創建流。他們不知道 $ P_1 $ 所以不能重現出來的狀態 $ p_b $ 在“關聯數據”步驟之後,除非 $ P_1 $ 以明文形式傳輸。