Aes
在一種 AES 模式下加密並在另一種模式下解密,兩者都使用 HMAC
假設有2個密碼, $ enc $ 和 $ dec $ , 在哪裡:
- $ enc $ 將加密數據,並且 $ dec $ 將解密它。
- 兩個都 $ enc $ 和 $ dec $ 必須是 AES 密碼。
- $ enc $ 和 $ dec $ 將使用相同的密鑰 $ k $ 和相同的隨機數 $ n $ .
- 的模式 $ enc $ 不應該等於模式 $ dec $ .
- 它們不應該是 AEAD 密碼(例如,它們的模式不能是
GCM
等CCM
)- 他們都應該使用 HMAC(這裡
HMAC-SHA-256
)。Encrypt-then-MAC
被使用 $ enc $ .根據條件,假設 $ enc $ 是
AES-256-CTR-HMAC
和 $ dec $ 是AES-256-CFB-HMAC
,都用一些鍵初始化 $ k $ 和隨機數 $ n $ 在哪裡:$$ k_{len} = 32 $$
和
$$ n_{len} = 16 $$
讓 $ data $ 表示一些要提供的數據 $ enc $ , 在哪裡:
$$ data_{len} = 32 $$
和 $ ctext $ 是密文,那麼:
$$ ctext = enc(data) $$
讓 $ result $ 表示的輸出 $ dec $ 什麼時候 $ ctext $ 被餵給它,即:
$$ result = dec(ctext) $$
眾所周知 $ data \ne result $ ,但雜湊 $ h $ 兩者的 HMAC $ enc $ 和 $ dec $ 將是相同的。這是我的問題。
- 這是一些設計缺陷,還是一定會發生?
- 如果這不是缺陷,那麼我的假設哪裡出錯了?
- 如果我的假設存在缺陷,那麼將 HMAC 與非 AEAD 的 AES 模式一起使用的正確方法是什麼,例如。
CTR
,CFB
, 等等?
一般來說,我們總是假設操作模式是提前知道的。實際上,這應該綁定到密鑰 - 如果密鑰僅用於單一操作模式,則不應發生上述情況。但是,如果同一密鑰用於多種操作模式,則模式 ID 應成為密文的一部分,因此應包含在 MAC 中。這將防止您所指的攻擊。