偏離 CCM 規範 - 安全影響?
以下問題是關於使用修改版 CCM 模式的特定協議。由於我不是密碼學家,協議規範沒有為 CCM 的這種更改或安全證明提供任何理由,我想知道這是否對加密和身份驗證的安全性有任何實際或理論上的影響。
在NIST 800-38C和RFC 3610中,CCM 模式創建 $ S_0, …, S_m $ 通過以下方式加密計數器塊:
- 為了 $ j=0 $ 至 $ m $ , 做 $ S_j=CIPH_K(Ctr_j) $
然後 $ S_1 $ 至 $ S_m $ 連接起來形成 $ S $ . 注意這不使用 $ S_0 $ :
- $ S = S_1 || S_2 || … || S_m $ .
明文的加密 $ P $ 是通過與 $ Plen $ 的最高有效位 $ S $ 和 MAC $ T $ 與 $ Tlen $ 的最高有效位 $ S_0 $ :
- $ C = (P \oplus MSB_{Plen}(S)) || (T \oplus MSB_{Tlen}(S_0)) $
有問題的協議偏離標準 CCM 的步驟是在建構 $ S $ . 這包括 $ S_0len - Tlen $ 的最低有效位 $ S_0 $ 進入 $ S $ .
- $ S = LSB_{S_0len - Tlen}(S_0) || S_1 || S_2 || … || S_m $
密文仍然通過以下方式創建:
- $ C = (P \oplus MSB_{Plen}(S)) || (T \oplus MSB_{Tlen}(S_0)) $
確保 $ MSB_{Tlen}(S_0) $ 和 $ LSB_{S_0len - Tlen}(S_0) $ 從不重疊。
在我外行的眼裡,這似乎是一個奇怪的變化。然而,由於 $ Ctr_0 $ 以與其他計數器塊相同的方式構造,並且用於異或的特定字節在加密和身份驗證之間不一樣,它可能不會降低安全性?有什麼明顯的理由為什麼有人想要包含 $ S_0 $ 進入加密?
之所以 $ S_0 $ 不被加密使用是因為它已經被最終計算的認證標籤使用:
認證值 U 是通過用密鑰流塊 S_0 加密 T 並將其截斷為所需長度來計算的。
U := T XOR first-M-bytes( S_0 )
所以,是的,該協議只是使用密鑰流第一個塊的剩餘位。這些對對手來說應該是不可預測的,所以我認為使用它們沒有任何問題。
當涉及到某些消息的塊操作量時,它顯然稍微更有效。這對於有限機器上的小消息最有意義,其中塊操作比所有其餘計算花費更多時間,並且 16 字節對齊無關緊要。如果消息都是特定大小的,那麼它可能會為每條消息刪除一個塊操作。
總而言之,使用密鑰流中未使用的位是可以的。對我來說,我想知道是否值得偏離它的標準,但這不是安全問題,而是互操作性問題。您必須從編寫或調整算法開始,這樣本身就可能有足夠的理由放棄它。
當然,它還假設標籤大小小於 128 位,並且削弱標籤大小本身也是危險的(儘管它沒有與例如 GCM 相同的安全含義)。如果標籤大小為 128 位,則使用整個塊,並且該方案再次成為普通 CCM。