AES-CCM8 模式和 AES-CCM 模式有什麼區別?
我知道 AES-GCM 和 AES-CCM,但是 AES-CCM8 模式和 AES-CCM 模式有什麼區別?是密碼的長度嗎?
8 是標籤長度(以字節為單位)。
CCM 是一系列 AEAD(帶有關聯數據的認證加密)算法,其參數化如下:
- 具有 128 位塊大小的塊密碼算法(例如 AES-128、AES-192、AES-256、Camellia-128 ……);
- 計數器生成功能;
- 第一個塊的格式化函式;
- 標籤長度。
CCM 由NIST SP 800-30C定義。
在實踐中,每個人都使用 NIST SP 800-30C 附錄 A 中指定的計數器生成和格式化函式。格式化函式的規範實際上是一系列函式,只有一個參數:AEAD 欄位的長度。所以“AES-CCM”留下了三個不明確的參數:AES 密鑰的長度、AEAD 欄位的長度q和標籤的長度**t。
q的值對安全性沒有直接影響。它限制了可以傳輸的 AEAD 的大小,也限制了 nonce 的大小。t的值對安全性有影響:太短的標籤可能會被暴力破解。標籤長度可以低至 4 個字節,這很容易被暴力破解。這種短標籤用於通信協議中,其中暴力破解標籤將是一種主動攻擊,並且主動攻擊成功的機率被認為是可以接受的低。
參數q和t在數據的第一個塊中編碼,因此對於給定的塊密碼的 CCM 解密驗證實現可以明確地解密和驗證輸入,無論這些值是什麼。一些協議將q和t限制為特定值。對於標籤長度t,這是一個安全參數。對於q,這可以使實現更簡單一些,並使互操作性更容易(支持差異的風險更小、一致的 AEAD 大小限制、互操作性測試的負擔更小……)。
請注意,q和t是標籤計算的輸入。因此標籤值取決於這些參數。特別是,對於給定的消息,n字節 CCM 標記不是將 16 字節標記截斷為n字節。(這對於 GCM 是不同的,其中帶有較短標籤的 GCM 只是帶有截斷全長標籤的 GCM。)
如果沒有明確指定,標籤長度通常是可能的最大值,即一個塊(128 位 = 16 字節)。這也可以寫成“AES-CCM-16”(或印刷變體)。“AES-CCM-8”表示帶有 64 位 = 8 字節標籤的 AES-CCM,依此類推。
例如,在 TLS 1.2 中,CCM 密碼套件由RFC 6655(以及 Camellia 和 ARIA 的其他 RFC)定義,參考RFC 5116 §5.3和§5.4。RFC 6655 §3指定了一個 12 字節的 nonce,這相當於說q = 3。
xxx_CCM
密碼套件使用最大長度標籤 ( t = 16),而xxx_CCM_8
密碼套件使用半長標籤 ( t = 8)。在攻擊者可以暴力破解所有可能的標籤的情況下,一個 8 字節(64 位)的標籤會非常小。但是,當標籤用於 TLS 通信時,如果攻擊者對標籤做出錯誤的猜測,接收者會立即關閉連接,因此每次猜測都需要一個新的連接。這使得蠻力非常昂貴。使用 DTLS,接收方將接受許多損壞的數據包,因此攻擊者可以對每個連接進行多次猜測,但攻擊仍然是對正在進行的連接的主動攻擊,攻擊者嘗試不可忽略的數量通常是不切實際的猜測而不會使接收器的頻寬飽和或觸發洪水防禦。
正如 RFC6655 的第 6.1 節所定義的,AES-CCM8 的不同之處在於身份驗證標籤的大小是 8 字節(即 64 位)而不是 AES-CCM 的 16 字節(即 128 位)。SP800-38C 第 6.1 節中的 NIST CCM 規範允許一系列可能的身份驗證標籤長度。較短的標籤可以被認為是較長標籤的最高有效位。加密的有效載荷沒有區別。