Aes
使用 (key||plaintext) 的散列函式而不是 IV 的隨機值
對於在 CBC 模式下實現 AES 的協議, $ IV $ 每次加密都需要(初始化向量)。而不是挑選 $ IV $ 隨機,我們是否建議設置 $ IV $ 成為 $ \text{SHA1}(k||m) $ 在哪裡 $ k $ 是關鍵,並且 $ m $ 是個 $ 1^{st} $ 128 位的明文,例如這個方案在語義上是否安全?歡迎任何想法!謝謝!
不,它在語義上不安全。
證明:選擇兩個初始128位相同的明文;並將它們送出給 Oracle 進行加密。生成的密文也將具有相同的初始 128 位,因此可以將加密器與生成隨機輸出的東西區分開來。
如果你使用整個消息和一個抗衝突的散列函式,你可以獲得某種形式的安全性,但不是 IND-CPA(相當於語義安全性)。IND-CPA 遊戲主要與公鑰加密一起使用,通過對稱加密,攻擊者可以訪問加密預言機。然後任何類型的確定性加密都會自動失敗,因為攻擊者可以只要求預言機對兩個密文進行加密,而挑戰就是其中之一。
如果您通過不允許攻擊者查詢所選明文來使攻擊者更弱,這將起作用。‘但我不認為這實際上是一個常用的安全定義。
如果您只有原像抗性而沒有抗碰撞性,則可能存在其他問題 - 但這取決於如何找到碰撞,這使得正式分析變得困難。
但是關於抗碰撞性的觀點是反對 SHA-1 的有力案例,長期以來一直被認為是破壞抗碰撞性的。(現在在 2017 年 2 月,發現了一次碰撞)。一般來說,新協議永遠不應該建立在過時(幾乎過時)的加密功能上。
- 這個問題解決了什麼時候可以使用 SHA-1,什麼時候不可以。
- Bruce Schneier 2012 年的這篇文章也很有趣,其複雜性大致為 $ 2^{60} $ 尋找碰撞。
- 在這裡你可以看到比特幣網路雜湊率在 $ 2 \cdot 10^{18} \approx 2^{60.79} $ 每秒(即使需要其他專用硬體,因為它們執行 SHA 256 雜湊)