Algorithm-Design

ChaCha20 塊功能是否可以使用已知明文可逆?

  • October 22, 2021

我最近一直在使用 Poly1305 實現 chacha20 流密碼。由於構成 chacha20 四分之一輪的核心操作(ARX - A ddition Rotation X or)確實可逆的,如果攻擊者知道該函式生成的 512 位密鑰流,通過已知的對由已知明文異或前密鑰流生成的密文的明文攻擊?

據我了解,Chacha20 的設計以處理器友好的 ARX 為核心,使其非常高效、快速和安全,因此被廣泛採用,我也對它提供的混亂和擴散充滿信心。

但是,如果不是經典電腦,它在量子電腦面前是可逆的嗎?

對不起,如果我的擔憂是幼稚的!

生成密鑰流塊的函式基於 512 位置換函式。根據定義,排列是雙射的。

這種排列的倒數在軟體中實現是微不足道的。只需以相反的順序執行單個操作(加、旋轉、異或),用模減代替模加並反轉旋轉方向。

但是,如果密鑰未知,則嘗試反轉整個密鑰流塊生成功能將失敗。實際的密鑰流塊是通過組合排列的輸入位與輸出位形成的。1這些輸入位的一部分是密鑰位(應均勻分佈且保密)。

由於置換函式可以很好地混淆輸入,因此您基本上可以將每個輸入及其對應的置換輸出視為統計上獨立的。

(**警告:**刻意過度簡化。這僅用於說明目的。我不想說“炒得好”就足夠了。甚至ChaCha的內部排列足以以非標準方式濫用。)

如果你改變一個輸入位而不是鍵,那麼排列的輸出看起來會完全不同。當密鑰被重新添加時,它會掩蓋實際排列輸出的值。

即使您知道除了輸入向量的非秘密部分之外的密鑰流塊的完整值,您也必須猜測 128 位或 256 位密鑰才能向後工作。(IV、計數器和常量。將這些非秘密輸入添加到排列輸出不會影響安全性,但出於軟體效率的原因,它無論如何都包含在算法規範中。)


人們幾乎可以做出更強有力的主張,即密鑰流塊生成函式是單向的,就像散列函式是單向的一樣。雜湊函式設計其實是ChaCha20前身的靈感來源。

單向我的意思是沒有有效的算法來計算產生任意選擇的輸出值的輸入。對於任何非零輸出塊值,這可能是不可能的(或者至少是不平凡的)。

那個工程 $ F(x) = x \oplus P(x) $ 應該使 $ F $ 單向函式 if $ x $ 有足夠多的位和 $ P $ 是隨機排列。(從所有的集合中均勻選擇 $ (2^n)! $ 可能的 n 位排列。)

這種排列不太可能在輸入值和輸出值之間存在任何系統關係。這阻礙了尋找理想的原像 $ P $ . 如果 $ \oplus $ 被替換為 $ \boxplus $ .

我們目前不知道找到用於 ChaCha20 的類似雜湊操作的原像的算法,當我們不知道該原像時,除了值零。2

該異常對於某些應用程序可能非常重要。所以不要冒險讓 ChaCha 適應你自己的算法!


  1. 具體來說,ChaCha20 使用 mod $ 2^{32} $ 16字輸入/輸出向量的加法。如果設計要求對輸入和輸出逐位進行異或運算,它也會起作用,因為加​​法和異或對於置換函式都是非線性的,並且任何操作都不應該產生有偏差的結果。

  2. ChaCha20 使用純 ARX 排列。 $ F(0) = 0 $ 因為 $ P(0) = 0 $ 因為 $ 0 \oplus 0 = 0, 0 \boxplus 0 = 0, \text{and}\ 0 >>>> r = 0 $ .

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