Cryptanalysis

增量RC4算法?

  • August 20, 2017

我目前正在分析一個顯然使用 RC4 的客戶端-伺服器應用程序。我有密鑰和隨機數,我對他們加密數據包的方法感到非常驚訝。

由於我不是密碼學專家,我將解釋我做了什麼以使其有效。

  1. 我用完整的密鑰(nonce + secret)創建了一個字元串,並且我附加了所有未加密的字節而不在任何時候清除它
  2. 我 RC4 整個字元串(顯然隨著時間的推移而增長)
  3. 我對結果字元串進行切片,以便剪切所有舊字節,只剩下我的“新字節”

我無法想像伺服器端會為每個連接的客戶端維護整個字節歷史記錄,因此我想知道它是某種 RC4 算法/修改還是自定義實現

如果我理解正確,您正在分析的協議在加密之前不會重新初始化加密,所以它似乎正在加密它發送的所有內容,並且只發送“新”部分。

為了回答您的問題,讓我們對流密碼(如 RC4)進行一些討論。這些密碼基本上生成一個隨機數流,然後與明文進行異或運算。要解密,您必須再次生成密鑰流,然後將其與密文進行異或。

$ C = P \oplus K $

$ P = C \oplus K $

( $ C $ 是密文, $ P $ 是明文, $ K $ 是密鑰流和 $ \oplus $ 是異或)

這種密碼的一個特性是,要加密或解密一個部分,您只需要密鑰流的相關部分。因此,在您的協議中,可能會發生以下情況:

客戶端:

  1. 計算 $ K_{0} $
  2. 發送 $ C_0 = P_0 \oplus K_0 $
  3. 計算 $ K_1 $
  4. 發送 $ C_1 = P_1 \oplus K_1 $

注意客戶端不需要 $ K_0 $ 也不 $ P_0 $ 加密 $ P_1 $ .

伺服器端:

  1. 計算 $ K_0 $
  2. 收到 $ C_0 $ 並使用解密它 $ P_0 = C_0 \oplus K_0 $
  3. 計算 $ K_1 $
  4. 收到 $ C_1 $ 並使用解密它 $ P_1 = C_1 \oplus K_1 $ ,伺服器不需要 $ K_0 $ 也不 $ P_0 $ 解密 $ C_1 $ ,因此它不必執行您在逆向工程時所做的操作。

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