對於 CTR 模式,可以使用相同密鑰加密的最大消息數是多少?
在加密的計數器模式中,除非選擇新的分組密碼密鑰,否則不能再次使用隨機數。可以使用相同密鑰加密的最大消息數是多少?
計數器模式下使用相同密鑰可以加密的最大消息長度為 $ 2^{39} - 256 $ 位。我想確定我是對的嗎?
您通常應該將加密的數據總量保持在遠低於 $ 2^{64} $ 使用 AES-CTR(或任何使用 AES)的密鑰塊 - 例如,PB ( $ 2^{50} $ ) 每個鍵是一個合理的限制。 這是因為 AES 作為偽隨機函式有輕微缺陷,這正是“CTR 模式”的設計目的——它實際上是偽裝成偽隨機函式的偽隨機排列,相應的安全性損失較小,與 $ q^2!/2^{128} $ 後 $ q $ 消息。
AES-CTR 特別需要使用 $ \operatorname{AES}_k(n \mathbin| c) $ 作為一次性墊塊,其中 $ n $ 是每個消息的隨機數,並且 $ c $ 是消息中的塊計數器,因此連接 $ n \mathbin| c $ 長度為 128 位。就像一次性墊的安全性在兩次墊中煙消雲散一樣,如果您重複,AES-CTR 的安全性也會煙消雲散 $ n \mathbin| c $ . 隨機數的大小 $ n $ 確定消息數量和計數器大小的硬限制 $ c $ 確定任何單個消息的長度的硬限制。
不同的系統使用不同的尺寸 $ n $ 和 $ c $ ,但在 AES-GCM 等中使用的常見合理選擇是96 位 $ n $ 和 32 位 $ c $ ,這將消息限制為 $ 2^{32} - 2 $ 塊,或 $ 2^{36} - 32 $ 字節,或 $ 2^{39} - 256 $ 位。(在 AES-GCM 中使用額外的兩個塊來選擇 GHASH 密鑰進行身份驗證。)無論如何,使用非常大的消息通常是一個壞主意——您接受的最大消息大小是對手可以浪費的最大記憶體量在拒絕偽造之前進行拒絕服務攻擊。
(也有涉及總和的 CTR 變體 $ n + c $ , 在哪裡 $ n $ 是偽隨機而不是順序選擇的,而不是串聯 $ n \mathbin| c $ ; 例如,AES-GCM-SIV 就是這樣做的。但是這個安全故事有點複雜,並且離問題有點遠。)