使用 AES-CTR 加密具有相同密鑰的相同明文時,我可以使用不同的 IV 嗎?
我想使用 AES-CTR 多次(在不同的機器上)用相同的密鑰加密相同的明文。我想知道是否應該嘗試每次都使用相同的 IV,或者對相同明文的不同實例使用隨機 IV 是否安全。使用相同的 IV 需要確定性的 IV 選擇方法,這會帶來其自身的問題。
我已經看到了很好的解釋,為什麼在 CTR 模式下使用 AES 加密不同的明文時不應該重複使用密鑰/IV 對。(https://crypto.stackexchange.com/a/2993/83956)
我想知道是否使用相同的密鑰但不同的 IV 對相同的明文進行兩次加密是否會使您面臨類似的攻擊。據我了解,這將為攻擊者提供
$ C_1 = P \oplus F(K, IV_1) $
$ C_2 = P \oplus F(K, IV_2) $
…意思是:
$ C_1 \oplus C_2 = F(K, IV_1) \oplus F(K, IV_2) $
…這對我來說看起來沒有用,但這取決於 $ F $ 我不熟悉。
上下文:我有一個需要密碼和密鑰才能登錄的系統。在網路客戶端中,為了方便起見,我想將密鑰保存在本地儲存中。我知道在本地儲存中保留未加密的秘密是不好的做法,因此我使用從使用者密碼生成的密鑰使用 AES-CTR 對其進行加密。加密的密鑰永遠不會被傳輸——僅使用密碼進行解密以用於登錄目的。他們的密鑰在加密之前被壓縮,因此對密碼的任何猜測都無法通過嘗試解密密鑰來驗證。所有的猜測都會產生看起來有效的密鑰,因此攻擊者仍然必須使用實際的登錄嘗試來暴力破解任何東西。
我想知道我是否應該嘗試每次使用相同的靜脈注射,
不會。對同一條消息使用相同的 IV 兩次意味著您洩露了您發送了相同的消息。如果您的消息集有點小,這允許攻擊者更容易地將對消息的反應與可能的消息內容相關聯。
對相同明文的不同實例使用隨機 IV 是否安全。
是的。CTR 滿足的安全定義(CPA 安全)非常考慮同一消息被發送兩次的事實。這不會洩漏任何東西(在合理範圍內)。看到這個注意 $ F $ 通常被建模為 PRF,也就是說,如果你的對手不知道密鑰,它也可能是一個真正的隨機函式 $ f $ 它接受其輸入,隨機均勻地繪製響應並儲存此輸入的映射。這意味著 $ F(K,I_1) $ 可以翻譯成 $ f(I_1) $ 可以翻譯成隨機字元串 $ R_1 $ 同樣可以建構 $ R_2 $ . 那麼如果你看 $ C_1=P\oplus R_1 $ 和 $ C_2=P\oplus R_2 $ 你會注意到兩者都是“基本上用一次性密碼加密的”,即大小等於消息長度的獨立且均勻隨機的密鑰,顯然不會洩漏任何資訊。