Aes
驗證小數據包
我打算驗證小數據包,每個數據包在 16 到 256 個字節之間。其中一些也需要加密。這將用於小型微控制器,RAM 大小在 1 KB 到 64 KB 之間。
我最初的方法是使用 AES-128 作為帶有 MAC(例如 GCM)的分組密碼模式的基本密碼。但是,考慮到小數據包大小,我想知道這是否安全。所以我正在考慮為明文添加前綴,一個 32 位數字,它是明文 CRC16 程式碼和 16 位 nounce 的串聯。然後在塊計數器模式下使用 AE 加密結果(CRC16 || 16 位通知 || 明文)。
身份驗證將通過解密加密數據包並驗證 CRC16 來完成。這種方法看起來很明顯,但我找不到它的任何實現,我擔心我忽略了一些重要的東西。
我的問題:將 CRC 與數據包一起加密是否與將 MAC 附加到數據包一樣安全(意味著難以破解)?
不,通常以這種方式使用 CRC 是不安全的。CRC 並非設計用於對抗對手,它用於檢測其保護的數據(以及 CRC 本身)的隨機位變化。16 位 CRC 肯定不如 8 字節 MAC 值安全,後者旨在防止此類攻擊。如果沒有額外的措施,16 位 CRC 將很容易暴力破解。
請注意,有許多反對先驗證後加密的論據。它可能不太安全的原因之一是它允許對分組密碼操作模式進行攻擊。在這種情況下,密文可能容易受到填充預言攻擊。