RC4 ,如果我們知道明文和密文,是否有可能找到密鑰?
如果我們知道RC4的明文和密文,是否有可能找到密鑰。我應該如何編寫算法?
不,據我們所知,這是不可能的,除了對所有可能的鍵進行暴力搜尋。RC4 存在已知的加密弱點;但是,在給定明文/密文對的情況下,它們都對恢復密鑰沒有太大幫助。
有些回溯方法可能需要大約 $ 2^{700} $ 與密鑰大小無關的工作量;然而這是不切實際的巨大(除非密鑰很大,否則蠻力搜尋仍然更簡單)
另一方面,如果您有兩個使用相同 RC4 密鑰加密的密文,並且您知道其中一個密文的明文,則很容易恢復另一個明文。您需要做的就是計算兩個密文和已知明文的異或 - 結果將是未知明文。
這是有效的,因為 RC4 獲取密鑰,並使用它生成一長串字節(密鑰流)。RC4 然後獲取密鑰流,並與明文異或,生成密文。也就是說,如果 $ P_i $ 是字節 $ i $ 明文的,和 $ C_i $ 是字節 $ i $ 密文的,和 $ RC4_i(key) $ 是字節 $ i $ 由密鑰生成的密鑰流,則:
$$ C_i = P_i \oplus RC4_i(key) $$ 如果我們有第二個明文 $ P’ $ 和密文 $ C’ $ 用相同的密鑰加密,然後我們有:
$$ C’_i = P’_i \oplus RC4_i(key) $$ 結合它們,我們有:
$$ P_i = P’_i \oplus C_i \oplus C’_i $$ 現在,我們可以恢復 $ RC4_i(key) $ ,但是沒有已知的恢復方法 $ key $ 從此。但是,如果您只想知道明文 $ P $ ,您不需要密鑰。
當然,如果 $ P $ (未知明文)長於 $ P’ $ (已知的明文),這個技巧將只揭示第一部分 $ P $ .
此外,即使你不知道 $ P’ $ ,類似的技巧將允許您計算 $ P \oplus P’ $ - 取決於明文是什麼,這通常足以讓攻擊者推斷出原始值 $ P, P’ $ . 因此,RC4 使用完全相同的密鑰加密兩個不同的東西總是錯誤的。