在 Salsa20 和 ChaCha 中擴展密鑰大小?
我已經編寫了接受 384 和 448 位密鑰的 Salsa20 和 ChaCha 的實現。實現起來相當簡單,“sigma”常數被替換為密鑰材料,計數器(初始化為 0)旋轉並可以初始化為任何值。因此,與 64 位向量一起,現在可以通過鍵/向量初始化整個 512 位狀態。
這不會以任何方式影響性能,如果使用 key + sigma + 0 構造密鑰,則輸出與使用 256 位密鑰的實現一致。假設使用的密鑰是使用強 PRNG 創建的,並且替換常量的值足夠不對稱,這不應該出現問題,因為常量函式似乎純粹是為了減少對稱性。
上面的描述有什麼不正確的地方嗎?
另一個問題:我正在考慮將最大輪數擴展到 24,我查看了數學模型,似乎除了進一步分散輸入之外,這不應該做任何事情。那是對的嗎?
您對延長輪數是正確的。增加輪數是安全的。在大多數情況下,它會增加安全邊際。
刪除常量對我來說似乎不是一個好主意,因為 Salsa20 和 ChaCha 沒有任何圓形常量。常量的目的也是為了減少攻擊者可以控制的位數,但是不假設密鑰是由攻擊者控制的。常量還分隔不同的密鑰長度。
我也擔心滑動攻擊,但是我不知道它們是否適用於 Salsa20 和 ChaCha,因為它們不是分組密碼。用 key 設置計數器的起始值會導致相同的塊輸出在某些點用不同的 key,因為 counter 會改變 key。
即使用密鑰替換常量和計數器是安全的,在 Salsa20 或 ChaCha 中設置 448 位密鑰也不能保證 448 位安全。對於更長的密鑰密碼(排列)必須更強。使用 128 位密鑰對 Salsa20 的最佳攻擊可以打破 7 輪,而使用 256 位密鑰則可以打破 8 輪。另請參閱Keccak 置換區分符。
Mouha 和 Preneel證明15 輪 Salsa20 對差分密碼分析是 128 位安全的。這意味著具有 15 輪和 448 位密鑰的 Salsa20可能會被複雜度約為 128 位的差分密碼分析破解。
您可以使用 XSalsa20 將密鑰(而不是隨機數)擴展 128 位。這至少與 256 位 Salsa20 一樣安全。