Authenticated-Encryption
使用 Chacha20+Poly1205 AEAD 時是否應該在 AAD 中包含密文長度?
我想使用RFC7539定義的 ChaCha20 和 Poly1305 構造一個限時授權令牌。我選擇了以下簡單的佈局:
version || nonce || ciphertext || Poly1305 tag 1B 12B *B 16B
其中版本和隨機數的串聯用作 Poly1305 的 AAD。
但是,該方案沒有明確指定要遵循的密文的長度,因此攻擊者可能希望嘗試截斷或擴展令牌的密文部分。如果我在version和nonce之間添加**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 中,這不會有什麼壞處;然而,這是設計師已經想到的,所以你不需要。