Mac
加密多個塊中的數據時先加密然後MAC?
給定一個像 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 最有意義,因為如果其中一個塊壞了,您可以停止下載。