One-Way-Function

Salsa20/ChaCha20 密鑰流生成是單向的嗎?

  • January 23, 2018

如果將密鑰流和隨機數提供給攻擊者,是否可以在現實時間內重新計算 Salsa20 或 ChaCha20 密鑰?還是單向生成密鑰流,例如加密雜湊函式?

的,Salsa20/ChaCha20 密鑰流生成是單向的,從某種意義上說,,如果將密鑰流和隨機數提供給攻擊者,則不可能在現實時間內重新計算 Salsa20 或 ChaCha20 密鑰,最好目前的知識。

我們沒有證據證明這一點,但有強有力的論據:

綜上所述,Salsa20 是“計數器模式下的雜湊函式”;更詳細地說:

  • 它被定義為 $ \operatorname{doubleround} $ 在每個 32 位的 16 個字的集合上的函式,這是一個可逆且可高效計算的函式,由應用於 32 位字的 32 次加法、固定旋轉和異或序列建構而成; $ \operatorname{doubleround} $ 預計將是一個稍微好的隨機公共固定排列,並對其進行迭代 $ 10 $ 次預計綽綽有餘(也許 $ 20/8 $ 因為 Salsa20/8 完好無損)足以製作 $ \operatorname{doubleround}^{10}(x) $ 一個極好的隨機公共固定排列,除了可以忽略不計的少數怪事,包括 $ \operatorname{doubleround}^{10}(x)=0 $ .

  • 它被定義 $ \operatorname{Salsa20}(x)=x+\operatorname{doubleround}^{10}(x) $ 在哪裡 $ + $ 是添加 16 個單獨的 32 位字 $ \pmod{2^{32}} $ . 與輸入結合起來預計會產生一個單向函式,表現得像一個隨機函式,除了可以忽略不計的少數奇怪之處,包括 $ \operatorname{Salsa20}(0)=0 $ , 和 $ x\to\operatorname{Salsa20}(x)-x $ 是明顯定義的排列 $ - $ .

  • 它定義了一個密鑰流生成器(並從中建構了一個流密碼),如下所示

    • $ x $ 設置為 256 位密鑰(或兩次 128 位密鑰)、128 位相當任意的非零常數(取決於密鑰長度)、128 位隨機數通常分為 64 位隨機數輸入和 64 - 位計數器設置為零;
    • 反复, $ \operatorname{Salsa20}(x) $ 計算,輸出用作 512 位密鑰流塊,以及 $ x $ 遞增。

希望非零常數避免利用任何奇怪的東西 $ \operatorname{Salsa20} $ 繼承自 $ \operatorname{doubleround}^{10} $ , 並且安全性由此而來(包括不可能在知道所有其他輸入和輸出的情況下找回密鑰,這源於無法將輸出與隨機區分開來的更一般的屬性)。

注意:Salsa20 的一個顯著操作缺陷(如eStream 參考程式碼)是其短 $ 64 $ -bit nonce 輸入,不能舒適地輸入隨機數。Nonce 重用顯然會破壞安全性,但不會危及密鑰。

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