Algorithm-Design

與 Daniel J. Bernstein 的流密碼混淆

  • December 17, 2014

我知道贏得 ESTREAM 比賽的Salsa20 。這是 2007 年 12 月 25 日的日期。

還有 ChaCha20 流密碼 (cr.yp.to/chacha.html)。這聲稱增加了每輪的擴散量。這是 2008 年 1 月 28 日的日期。

然後還有另一個稱為XSalsa20的變體,它具有 192 位隨機數而不是 64 位。這是 2011 年 2 月 4 日。我不確定它是否包含來自 ChaCha20 的每輪擴散改進。

問題是,其中哪種變體最安全?我不在乎速度。如果密碼學家只是將他們的密碼版本/改進編號為 1.0、1.1、1.2,那將是非常好的,這樣人們就可以輕鬆地知道哪個是最新的算法。

一方面,帶有 XSalsa20 的 192 位隨機數聽起來比 64 位隨機數更安全。也許有人可以解釋這樣做的好處?使用 256 位隨機數會使其與密鑰大小保持一致是否有優勢?另一方面,與最初的 Salsa20 相比,ChaCha20 的每輪更好的擴散聽起來也是一件好事。能否將 XSalsa20 和 ChaCha20 的改進結合起來?

XSalsa20 使用與 Salsa20 相同的加密核心,並附帶一個安全證明,如果 Salsa20 是安全的,它就是安全的。它不使用ChaCha的核心,因此傳播效果較差。

XSalsa20 的工作方式是它使用 HSalsa 將其 256 位密鑰和隨機數的前 128 位雜湊到 256 位密鑰,然後在 Salsa20 中將該密鑰與剩餘的 64 位隨機數一起使用。您可以在論文擴展 Salsa20 nonce中找到詳細資訊。

隨機數的問題是你必須確保你永遠不會重複使用隨機數。對於 64 位隨機數,計數器執行良好,但計數器是有狀態的。如果你想要一個無狀態的 nonce,通常的方法是生成一個隨機的隨機數,並假設衝突不太可能發生。假設具有隨機 128 位值的唯一性是非常安全的,但使用隨機 64 位值,即使消息數量適中,衝突也很可能發生。所以你不能使用隨機的 64 位隨機數。但是如果你有一個 192 位的隨機數,你可以隨機化它。

因此,增加的 nonce 大小不是安全性改進,而是允許隨機 nonce 的功能。

原則上,可以在 ChaCha 中使用相同的 nonce 擴展技術,但 Bernstein 沒有發布規範。在我對Can I use the ChaCha core as a 256-bit to 256-bit 單向函式的回答中?我描述瞭如何從 ChaCha 建構 HChaCha,就像 HSalsa20 是從 Salsa20 建構的一樣。將 HChaCha 和 ChaCha 組合成 XChaCha 很簡單。

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