這種 MAC-then-encrypt 方案安全嗎?
我有以下要求:
- 64位(8字節)的數據( $ D $ ) 要求保密性和完整性;
- 數據本身是一個隨機數,永遠不需要對相同的值進行兩次身份驗證/加密(例如計數器);
- 我只能使用 AES 密碼(128 位密鑰);
- 我最多可以有 128 位作為輸出(一個塊)。
給定兩個不同的 AES-128 密鑰 ( $ K_\mathrm A $ 對於身份驗證, $ K_\mathrm E $ 對於加密),我正在使用以下 MAC-then-Encrypt 方案:
- 計算 $ \mathit{MAC} = \operatorname{CMAC}(K_\mathrm A, D, 8) $ (參見RFC 4493)
- 截斷 MAC 以獲取標籤: $ T = \operatorname{MSB}_{64}(\mathit{MAC}) $ (見NIST 800-38B)
- 獲取明文 $ P = D\mathop\Vert T $ (16 字節)
- 獲取密文 $ C = \operatorname{AES}(K_\mathrm E, P) $ 通過使用
AES/ECB/NoPadding
模式我通常知道 MAC-then-Encrypt 方案可以是安全的,但我無法為這個方案展示它。你能詳細說明一下嗎?有什麼我可以做的改進嗎?
我知道一個不錯的選擇是 AES-GCM(或 CCM)。有沒有辦法通過在 8 個字節的數據上使用 AES-GCM 來適應單個密文塊?
MAC-then-encrypt缺乏通用安全性降低基本上僅適用於加密方案允許修改不影響明文的密文的病態情況,例如 AES-CTR 附加了額外的密鑰流位加密消息,解密時忽略。
那麼您的 AES-CMAC-then-AES 方案或 AES-GCM 變體是否安全?
AES-CMAC-然後-AES。 您所描述的是一種確定性的非連續身份驗證加密方案。因此,它不能隱藏重複的消息,但它提供機密性和身份驗證,只要您在考慮數據之前拒絕無效的 MAC 標籤。找到拒絕重播消息的方法是您的責任。
AES-GCM。 AES-GCM 是一種基於確定性隨機數的認證加密方案。也就是說,AES-GCM 是一種不同於AES-CMAC-then-AES 的密碼系統。**如果您可以為每條消息提供 96 位隨機數,例如消息序列號,那麼它提供的安全性大致相同。*
AES-GCM 對於 nonce 大小也很奇怪:對於 nonce 大小不是 96 位,AES-GCM 的安全性會降低,因為內部 96 位 nonce 推導中的碰撞機率低但不可忽略。而且,當然,隨著隨機數的重複,AES-GCM 的安全性消失了。
但是對於您描述的場景,兩者都比您需要的複雜!
(CAVEAT LECTOR:這不是加密設計的同行評審學術期刊。這是網際網路上的一個匿名陌生人,對你喋喋不休。)
你可以使用 $ C = \operatorname{AES}_k(D \mathbin\Vert 0^{64}) $ , 如果消息不以 64 個零位結尾,則拒絕解密。
對於均勻隨機排列 $ \pi\colon {0,1}^{128} \to {0,1}^{128} $ ,對手猜測密文的機會 $ C’ $ 為此 $ \pi(C’) $ 一次嘗試有 64 個尾隨零位是 $ 2^{-64} $ ,無論如何,這是您希望使用 8 字節身份驗證器獲得的最好結果。
明顯地, $ \operatorname{AES}_k^{-1} $ 對於均勻隨機 $ k \in {0,1}^{128} $ 或者 $ k \in {0,1}^{256} $ 不是完全一致的隨機排列選擇,而是攻擊者的優勢知道 $ \pi = \operatorname{AES}_k^{-1} $ 對於一些關鍵 $ k $ 可以忽略不計:即使在最壞的情況下 $ D $ 是統一的,他們有更好的猜測機會 $ D $ 或鍛造 $ C’ $ 比猜測 $ k $ .
- 短消息在這裡很關鍵,因為攻擊者的偽造機率約為 $ 2^{-\tau} $ 對於 CMAC 但 $ \ell \cdot 2^{-\tau} $ 對於 GCM,對於 $ \tau $ -位標籤和最多 $ 128\ell $ -bit 消息,當標記大小 $ \tau $ 比密碼塊大小 128 小得多。
具體來說,讓 $ n $ 是塊大小(以位為單位); $ \tau $ ,標籤大小,以位為單位; $ \ell $ , 最大消息長度 $ n $ -位塊; $ q $ , oracle 查詢次數;和 $ f $ ,偽造嘗試的次數。假設一個均勻的隨機排列; $ \operatorname{AES}_k $ 是一個足夠好的近似值。對於 CMAC,攻擊者的偽造機率為$$ O(q \ell^2) 2^{-n} + 1 - \operatorname{Binom}(0; f, 2^{-\tau}) = O(q \ell^2) 2^{-n} + 1 - (1 - 2^{-\tau})^f, $$其中,對於 $ f \lll 2^\tau $ , 大約是 $ O(q \ell^2) 2^{-n} + f 2^{-\tau} $ . 對於 GCM,攻擊者的偽造機率為$$ 1 - \operatorname{Binom}(0; f, \ell 2^{-\tau}) = 1 - (1 - \ell 2^{-\tau})^f \approx f \ell 2^{-\tau}. $$
如果 $ \tau $ 例如,32,並且您驗證高達 64 KB 的消息,CMAC 將偽造者的成功限制在大約 40億分之一,而 GCM 將偽造者的成功限制在大約四千分之一。