Authenticated-Encryption
了解 ChaCha20-Poly1305 AEAD
在https://www.rfc-editor.org/rfc/rfc7539#section-2.8.1中描述的 AEAD 方案中,aad 和 cyphertext 被填充為 16 字節長度的倍數。為什麼這是必要的?與簡單地不填充數據相比,它有什麼優勢嗎?
是身份驗證——使用 Poly-1305 需要填充;填充不會擴展密文。Poly-1305 在 128 位塊上執行。應用填充以便 Poly-1305 始終可以處理完整的輸入塊。之後填充被丟棄 - 它不與密文一起保存。
在驗證期間重新應用填充,否則計算出的身份驗證標籤將與使用 / 保存的身份驗證標籤不同,它是密文的一部分。
在 Poly1305 的情況下,似乎額外的經過身份驗證的數據(AAD 或僅 AD)是單獨填充的,而不是連接兩者並填充兩者的組合。正如DannyNiu 的回答所表明的那樣,這使得可以獨立於身份驗證標籤的密文組件來計算 AAD 組件。
請注意,在實踐中,將在 Poly-1305 功能的實現中使用單個塊輸入緩衝區。實現將填充緩衝區而不是實際輸入。丟棄包括清除緩衝區 - 如果完全清除,它也可以忽略其中的數據。