可以將密鑰 CRC 用作 MAC 嗎?
考慮一個使用對稱密鑰的“MAC” $ K $ 生成認證標籤 $ t $ 留言 $ M $ 通過以下方式:
將時間戳與消息連接起來(以防止重放攻擊)
$$ m = \mathit{Timestamp}\mathbin\Vert M $$ 分成合適數量的塊。 $$ m = m_0\mathbin\Vert m_1\mathbin\Vert m_2\mathbin\Vert\cdots\mathbin\Vert m_n $$ 計算每個塊之間連接的對稱密鑰的 CRC。(CRC 算法是已知的 - CRC-16/CCITT/CRC32)。 $$ t = \operatorname{CRC}(K\mathbin\Vert m_0\mathbin\Vert K\mathbin\Vert m_1\mathbin\Vert K\mathbin\Vert m_2\mathbin\Vert\cdots\mathbin\Vert K\mathbin\Vert m_n) $$ 發送 $ C=\mathit{Timestamp}\mathbin\Vert M\mathbin\Vert t $ 作為消息。 這個方案是否適合在給定足夠大的密鑰大小的情況下針對已知明文攻擊進行消息認證,並假設暴力破解所有攻擊是不可行的? $ t $ 期間 $ \mathit{Timestamp} $ 已驗證?
我看過以下論文,但是,他們都說CRC多項式必須是一個秘密。
https://eprint.iacr.org/2015/035.pdf
https://eprint.iacr.org/2015/1138.pdf
稍微相關,但它使用加密的 CRC 作為 MAC。我問的是使用 CRC 作為 MAC,其中密鑰包含在 CRC 計算中。
編輯:案例:我在微控制器中有硬體 CRC 模組,它可以與執行其他計算的核心*非同步評估 CRC。*我正在查看是否也可以使用此 CRC 模組進行消息身份驗證。
**普通偽造:**如果您知道 CRC 多項式,那麼您可以在不更改 CRC 的情況下將它的任意倍數添加(‘xor’)到消息中。
簡短的回答。 如果硬體只能評估具有硬體設計人員確定的固定多項式的 CRC,那麼它對您製作 MAC 的用處不大。如果您可以選擇多項式並且硬體對其保密,那麼您已經找到了一些關於如何執行此操作的參考資料!
從 CRC 中生成 MAC的標準方法是選擇一個秘密的不可約多項式,我們可以將其稱為多項式除法MAC ,有時根據 Rabin 的類似想法稱為 Rabin 指紋辨識。 $ g \in \operatorname{GF}(2)[x] $ 和一個秘密多項式 $ h \in \operatorname{GF}(2)[x] $ 兩個學位 $ d $ ,均勻隨機;然後,驗證單個消息多項式 $ m \in \operatorname{GF}(2)[x] $ , 傳遞多項式 $ h + (m \cdot x^d \bmod g) $ 作為身份驗證標籤。
(拉賓指紋很簡單 $ m \bmod g $ ; 它保留了任何程度的加法 $ {<}d $ 多項式 $ m $ ,即使被掩蓋,也能進行微不足道的偽造 $ h $ , 所以它作為帶內驗證器是沒有用的,儘管它更方便用於其他目的。)
根據數論的標準結果(替代說明),當 $ d $ 是素數,有 $ (2^d - 2)/d $ 不可約多項式 $ d $ ; 複合材料 $ d $ 少,所以素數 $ d $ 給出最有效的密鑰空間。但這並不能涵蓋所有 $ d $ 位字元串,並生成一個密鑰,隨機均勻地選擇一個不可約多項式,例如使用Rabin 的論文中的算法(第 3-4 頁),成本很高。 使用次數總和為的不可約多項式的乘積 $ d $ 可以更便宜地生成密鑰,但密鑰空間和標籤空間的浪費甚至比不可約 $ g $ ——偽造機率是不可約因素的指數。
更糟糕的是,計算多項式除法 $ \operatorname{GF}(2)[x] $ 任意除數是昂貴的。一些 CRC 硬體允許可程式生成多項式,但典型的硬體使用固定多項式,例如 Intel CRC32 指令,這對此毫無用處——更不用說 32 位標籤太小而無法提供任何安全性。在軟體實現中,人們很想使用表查找來獲得任何類似的性能——總是通過時序側通道洩露秘密。因此,將其設計到任何協議中都是危險的,因為您正在將時序側通道的誘惑設計到協議中。
對於硬體和軟體,已經有非常好的高效 MAC:多項式評估MAC。 修復一個欄位 $ k $ ; 一次性密鑰是一對元素 $ r, s \in k $ 隨機均勻選擇,消息是多項式 $ m $ 在 $ k $ 最多學位 $ n $ , 消息的驗證者是 $ t = m(r) + s $ . 對手偽造標籤的成功機率 $ t’ $ 在一條消息上 $ m’ \ne m $ 給定 $ m $ 和 $ t $ 不超過 $ #k/n $ , 通過計算多項式根的標準參數 $ m’(r) - m(r) + t - t’ $ 在變數中 $ r $ . 最常見的例子是 Poly1305,其中 $ k $ 是素數場 $ \mathbb Z/(2^{130} - 5)\mathbb Z $ 軟體方便,還有 GHASH,其中 $ k $ 是二進製欄位 $ \operatorname{GF}(2^{128}) $ 硬體方便。
生成密鑰——隨機均勻地挑選欄位的元素——速度很快:對於二進製欄位,均勻的隨機位串可以工作;對於一個大素數域 ( $ {>}2^{128} $ ),對統一隨機位串進行拒絕採樣是有效的,並且拒絕的機率非常小,您可以放心地忽略它。派生 $ r $ 和 $ s $ 從消息序列號的 PRF 或足夠大的隨機令牌中,您將獲得多次 MAC。
使用多項式除法MAC 而不是多項式評估MAC的唯一原因是一種奇怪的情況,其中 (a) 您沒有可用的快速二進制多項式乘法或整數運算,但 (b) 您確實擁有可以有效評估多項式的硬體除以任意程度- $ {\geq}128 $ 除數,並且這些性能約束會覆蓋協議設計中的所有其他考慮因素。