Authenticated-Encryption

使用 Chacha20+Poly1205 AEAD 時是否應該在 AAD 中包含密文長度?

  • April 2, 2018

我想使用RFC7539定義的 ChaCha20 和 Poly1305 構造一個限時授權令牌。我選擇了以下簡單的佈局:

version || nonce || ciphertext || Poly1305 tag
1B         12B      *B            16B

其中版本隨機數的串聯用作 Poly1305 的 AAD。

但是,該方案沒有明確指定要遵循的密文的長度,因此攻擊者可能希望嘗試截斷或擴展令牌的密文部分。如果我在versionnonce之間添加**ctlength值,會提高安全性嗎?

沒有必要; ChaCha20+Poly1305 已經將密文的長度包含在經過 MAC 處理的數據中(因此將其攪拌到標籤中),因此您不需要。如果有人附加或截斷密文數據,他們會更改計算 MAC 的數據,因此標籤將無法驗證。

我們可以看到虛擬碼(在 RFC 的第 2.8.1 節中),其中包括這一行中的密文長度:

    mac_data |= num_to_4_le_bytes(ciphertext.length)
    tag = poly1305_mac(mac_data, otk)

現在,如果您決定將長度包含在 AAD 中,這不會有什麼壞處;然而,這是設計師已經想到的,所以你不需要。

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