Mac

加密多個塊中的數據時先加密然後MAC?

  • August 12, 2016

給定一個像 ChaCha20 這樣的流密碼和一個像 Poly1305 這樣的 MAC,我們如何處理在 encrypt-then-MAC 方案中以塊的形式出現的數據?

例如,明文長度為 530 字節。我們將前 512 個字節讀入緩衝區,處理這個塊,但接下來會發生什麼?

我們要不要

  • 寫入傳入塊的密文
  • 更新並寫入此密文的 MAC

或者

  • 而(傳入塊== 512B)

    • 寫入傳入塊的密文
    • 用這個密文更新 MAC
  • 寫入長度為 L (<512) 的最後一個塊的密文

  • 用這個密文更新mac

  • 寫出MAC

解密呢?

EtM 的目標是能夠在解密之前檢查 MAC,所以我認為 2 是正確的做法,除非我們只需要在文件末尾有一個 MAC 標籤(就像 GCM 一樣)。

你可以做任何一個。雖然確保你收緊你如何做第一個計劃。

在第一種情況下,您將有多個標籤,每個塊 1 個。在後者中,您將有一個標籤。如果您正在下載大約 1MB 的文件,我認為 #2 是有道理的。如果您正在下載 1GB 或 1TB 的文件,也許 #1 最有意義,因為如果其中一個塊壞了,您可以停止下載。

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