Aes

帶有臨時密鑰的 AES-CTR 與 IV

  • September 10, 2015

假設我們進行了某種密鑰交換,讓AB共享長期秘密 $ S $ . 然後,AB想要使用 AES-CTR 進行通信,這給我們留下了幾種可能的策略:

  1. 在密鑰交換期間,A 和 B 都生成並發送隨機數 $ N_a $ 和 $ N_b $ 它們在密鑰派生函式中與 $ S $ 為交換生成唯一的密鑰。我們留下 IV = 0。
  2. 在密鑰交換期間,A 和 B 都生成並發送隨機數 $ N_a $ 和 $ N_b $ 混合生產和 IV。密鑰是從 S 派生的。
  3. 在密鑰交換過程中,A 和 B 都生成並發送 $ N_a $ , $ N’_a $ , $ N_b $ , $ N’_b $ . $ N_a $ 和 $ N_b $ 混合著 $ S $ 生成密鑰。 $ N’_a $ 和 $ N’_b $ 混合以產生 IV。

換句話說:隨機密鑰/固定IV、固定密鑰/隨機IV或隨機密鑰/隨機IV。

哪一個更可取?(假設 HMAC-SHA256 或類似的混合密鑰/IV)

首先,有一個支持選項 2 的非安全論點:如果您可以跨密鑰交換記憶體 AES 密鑰,則可以節省密鑰設置的時間。這是否相關,我會讓你決定。

當相同的鍵輸入對被使用兩次時,CTR 會失敗。讓我們首先假設隨機數 $ N_a $ 和 $ N_b $ 始終是唯一的,並且密鑰派生和混合很強大。

  1. 鍵碰撞的生日界限是 $ 2^{64} $ 對於 AES-128, $ 2^{128} $ 用於 AES-256 等。
  2. 如果生成 96 位隨機數,與 32 位計數器一起使用,生日界限為 $ 2^{48} $ . 具有 128 位隨機數和消息短於 $ 2^{32} $ 您可以獲得更高的值,但除非您只有一個塊消息,否則它小於 $ 2^{64} $ .
  3. 使用 96 位 AES 隨機數,生日界限是 $ 2^{112} $ 對於 AES-128 或 $ 2^{176} $ 對於 AES-256。同樣,您可以通過更大的隨機數和更短的消息獲得更好的界限,接近 $ 2^{128} $ 和 $ 2^{192} $ .

顯然最後一個是“最好的”,但即使只有一個隨機的 96 位隨機數,您也可以進行數十億次密鑰交換,即使發生一次沖突的可能性也很小。那個有點邊緣,但我認為其他任何選擇都足夠好。

請注意所做的假設,即隨機數是唯一的。如果隨機數本身發生衝突,則從它們派生的任何數據也會發生衝突。對於隨機隨機數,您希望它們至少與從它們派生的總數據一樣長。此外,nonce 的交換應設計為攻擊者無法影響它並導致衝突。


順便說一句,選項 3. 不一定需要兩組隨機數。您可以使用單個 HMAC-SHA-256 派生 128 位密鑰和隨機數,或者您可以使用兩個不同的加鹽 HMAC 派生更多材料。這樣做會使隨機數依賴於 $ S $ ,但這似乎不是問題。

點“1”和“3”具有同等的安全性。顯然“1”是更少的工作。如果 $ N $ 的太小或攻擊者可以控制 $ N $ 的。

引用自:https://crypto.stackexchange.com/questions/9103