Mac

加密然後 MAC 或 MAC 然後加密什麼更有效

  • June 12, 2022

我一直在網際網路上搜尋有關先加密然後 MAC、MAC 然後加密、MAC 和加密以及散列然後加密的效率的資源,但我想出了所有這些資源。大多數消息來源會給出他們將保護的內容,但沒有人會告訴我什麼在時間和資源方面更有效。

Encrypt-then-MAC 和 MAC-then-encrypt 的效率差不多。當使用分組密碼實現時,兩者都需要相同的數字 $ 2\lceil n/b\rceil+1 $ 塊加密,對於 $ n $ -位消息和 $ b $ 位塊。

當效率很重要時,應該通過通用雜湊使用具有完整性的身份驗證加密,例如 AES-GCM 或 ChaCha-Poly1305:因為通用雜湊比 CBC-MAC 快得多,對於與 MAC 相同的功能,可以顯著節省成本-然後加密。

您沒有發現太多關於性能的資訊,因為它基本上是相同的。關於他們的相對安全性,有很多有趣的事情要說,但除了“基本相同”之外,沒有太多要說的。

撇開大多數不起作用的 hash-then-encrypt 不談,有三種方法。給定一個明文 P:

  • Encrypt-then-MAC:加密明文並附加密文C = E(P)的 MAC T = M(E(P))。在另一個方向,給定C || T,檢查那TC然後解密C找到的 MAC P
  • MAC-then-encrypt:計算明文的MAC,對T = M(P)明文附加MAC進行加密E(P || T)。在另一個方向,解密密文,將結果拆分為P || T並檢查T = M(P).
  • MAC-and-encrypt:加密明文C = E(P)並附加明文的MAC T = M(P)。在另一個方向,給定C || T,解密C以查找P並檢查T是 的 MAC P

在所有情況下,對於長度為 的消息n,您需要計算字節的 MAC 和n字節的加密或解密n。區別最多是是否需要加密/解密 MAC 值。這是一個恆定的成本(與消息長度無關),它與算法的其他細節具有相同的數量級,例如是否涉及填充,消息的長度如何編碼,密鑰如何準備使用,等等。所以通用方法之間沒有有意義的區別。

上面我沒有考慮並行化。如果您的硬體支持,並行進行身份驗證計算和加密/解密計算是很有吸引力的。以 encrypt-then-MAC 為例,MAC 的輸入是加密的輸出,所以你不能同時完美地完成這兩者。相反,MAC-and-encrypt 允許加密和 MAC 並行化,而不是最後一步加密 MAC。但是,大多數原語從左到右一次處理一小塊數據,因此一旦加密處理了一個塊,您就可以使用該塊開始 MAC 操作:因此 encrypt-then-MAC 可以並行化為

  1. 加密第一個塊。
  2. MAC 第一個塊,同時加密第二個塊。
  3. MAC第二個塊,同時加密第三個塊。

等等。因此,無論消息長度如何,並行化懲罰都只有一個塊。此外,並行化懲罰被反轉以用於解密。結果,即使考慮並行化,性能差異也很小,而且它們在加密和解密之間是相反的,所以再一次,泛型結構對性能的影響不如算法的細節。

引用自:https://crypto.stackexchange.com/questions/100536