Nonce
XChaCha20-Poly1305 nonce 抗誤用嗎?
在Libsodium v1.0.12 和 v1.0.13 安全評估中,可以閱讀
ChaCha20-Poly1305 實現結合了流密碼,並通過設計抵抗定時攻擊。此外,這個特殊的結構在 libsodium 中實現了兩個額外的變體:一個 IETF 版本
$$ 7 $$和一個擴展隨機數(XChaCha20-Poly1305) $$ 4 $$. XChaCha20Poly1305 構造的一個好處是它支持隨機數誤用方案。
但是,我不明白 XChaCha20-Poly1305 構造如何防止隨機數誤用。
據我了解,XChaCha20 的工作原理如下:
- 生成一個 192 位隨機隨機數(6 個 32 位字 $ nonce_0,…,nonce_5 $ )
- 建構初始塊 $ B \leftarrow \begin{matrix} c_0 & c_1 & c_2 & c_3\ k_0 & k_1 & k_2 &k_3\ k_4 & k_5 & k_6 &k_7\ nonce_0 & nonce_1 & nonce_2 & nonce_3 \end{matrix} $ 在哪裡 $ c_i $ 是常數和 $ k_i $ 是關鍵詞
- 在不添加最終塊的情況下執行 ChaCha $ B’ \leftarrow \mathtt{HChaCha20}(B) $
- 建構子塊 $ B’’ \leftarrow \begin{matrix} c_0 & c_1 & c_2 & c_3\ B’0 & B’1 & B’2 &B’3\ B’{12} & B’{13} & B’{14} &B’{15}\ counter_0 & counter_1 & nonce_4 & nonce_5 \end{matrix} $
- 使用執行 ChaCha20 $ B’’ $ .
這樣,使用相同的隨機數將輸出相同的密鑰流。但是,據我了解,隨機數濫用抗性方案確保重複的隨機隨機數不會導致明文妥協。
因此,似乎在使用帶有隨機 nonce 的 XChaCha20-Poly1305 時,可以確保重複 nonce 的機率可以忽略不計。但這不是 nonce 抗誤用方案的定義。
如何使用 XChaCha20Poly1305 建構隨機數誤用方案?
關於libsodium AEAD 結構的文件提供了更多詳細資訊。
也就是說,它列出
Hk(random ‖ m)
了一種計算合成 XChaCha20 隨機數的方法。即使random
不是唯一的,對於不同的消息,nonce 也不太可能相同。更相關的是關於nonce-misuse resistance和short nonces的部分。
請注意,與所有其他隨機數誤用抵抗方案一樣,這需要兩次遍歷數據。