Implementation

省略 RC4 的偽隨機生成算法的前兩行會削弱密碼嗎?

  • February 26, 2016

美國政府機構發布的特定教育軟體程序使用 RC4 的變體來混淆其數據文件(請參閱Stack Overflow 問題)。所討論的 RC4 變體與標準 RC4 相同,除了在偽隨機生成算法的開頭。開發人員省略了下面的前兩行(來自Wikipedia 的描述),因為他的程式碼基於 2005 年左右 Planet Source Code 的錯誤實現

i := 0
j := 0
while GeneratingOutput:
   i := (i + 1) mod 256
   j := (j + S[i]) mod 256
   swap values of S[i] and S[j]
   K := S[(S[i] + S[j]) mod 256]
   output K
endwhile

因此,ij保留它們從密鑰調度算法執行時開始的最終值(i = 256,不0,以及j = (j + S[i] + key[i mod keylength]) mod 256i = 255KSA 期間的時間)。

在這種情況下,加密沒有提供實際的安全性,因為密鑰被硬編碼到軟體中,但假設開發人員使用該程式碼加密了他硬碟上的秘密文件。這個實現錯誤是否會顯著削弱 RC4 的實力?

的,這個遺漏削弱了密碼:輸出 $ \mathtt K $ 對於相當大的密鑰類別(65536 中的一個)具有較短的周期(最多 65280 字節)。下面詳細說明原因。

因為早期的程式碼離開了 $ \mathtt i=256 $ 並且第一次執行i := (i + 1) mod 256使得它相當於 $ \mathtt i=0 $ , 不初始化 $ \mathtt i $ 對後續程式碼沒有影響;因此沒有任何安全隱患。

但是早期的程式碼離開了 $ \mathtt j $ 到一個依賴於鍵的值,因此缺乏初始化 $ \mathtt j $ 有效果。特別是,如果在密鑰調度結束時 $ \mathtt j=1 $ 和 $ \mathtt S[1]=1 $ ,然後(通過歸納)在我們擁有的整個流生成期間 $ \mathtt j=(\mathtt i+1)\bmod 256 $ 和 $ \mathtt S[\mathtt j]=1 $ ; 因此產生的輸出有一個短週期(最多) $ 256\cdot 255 $ 字節。這在真正的 RC4 中從未發生過(正如 Hal Finney 在 1994 年觀察到的,在一個不可能發生的 RC4 循環中,總結在RC4 頁面上),但發生在 $ 2^{-16} $ 修改後的密碼中的密鑰。

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