有沒有辦法讓 RC4 (ARCFOUR) 安全,或者它完全被破壞了?
我需要一種方法來與另一個程序進行身份驗證,以便在它們之間建立程序間通信,以防止惡意程序試圖掛接到系統上。目前我只是在兩個程序之間發送一個明文密碼,主機程序只是與它的密碼副本進行字元串比較,如果它們不匹配,將斷開連接程序。當我僅限於連接本地主機上的每個程序時,這很好,但如果有人碰巧可以訪問每個程序之間的網路並且可以嗅探數據包,這顯然是不安全的。請注意,我只關心密碼交換的加密,我真的不需要它來保護通信。
所以基本上我需要一種不需要很好地保護其內容但確實需要保護其密鑰的加密算法,並且需要盡可能快地使用最少的 RAM 和 I/O 成本。是的,數據交換比 I/O 更受 CPU 限制,因為這兩個程序將執行大量計算,並且它們很可能會通過 localhost 進行連接。現在,我遇到了 RC4,它的吞吐量是 AES-128 的兩倍多,但很明顯它有一些弱點,我對如何以安全的方式實現它有很多疑問。
那麼第一個問題 - 它在標題中。**RC4 是否完全損壞並且應該避免使用?**我聽到很多“如果正確使用它是安全的”,然後很多“不鼓勵使用 RC4”。
我計劃在兩個程序上保留明文密碼,並對它們進行 SHA-224 雜湊處理,並將雜湊與 32 位 IV 連接起來作為 RC4 的 256 位密鑰。**這種方法是否存在任何安全風險?**也許我可以用 SHA-256 散列連接的 IV 和散列密碼?我很清楚 WEP 被破解是因為它使用了 24 位 IV,但 32 位 IV 具有超過 40 億的唯一值。我應該避免在每個數據包(如 WEP)之後增加 IV 嗎?
**當談到 RC4-drop$$ n $$,n 的合理值是多少?256、512、768 字節?**您將如何在唯一的公共操作是加密字節數組的庫上實現 drop n - 在使用密鑰初始化引擎後傳遞長度為n的字節數組?這是否意味著您每次更改 IV 後基本上都必須處理n 個空字節(在每個數據包之後發生)?
資料來源:http ://www.rsa.com/rsalabs/node.asp?id=2009
編輯:在閱讀了所有這些優秀的回復之後,我意識到我對整個主題聽起來是多麼的無知。在這一天之前我沒有密碼學經驗,我只能從有限的Google結果中了解 RC4 的風險,我幾乎無法理解。感謝所有對我有耐心的人!
如果我錯了,請糾正我,但我相信更好的解決方案是使用 AES(這並不慢,因為在每個數據包後重新鍵入 RC4 很昂貴)或通用消息身份驗證程式碼。我可以輕鬆地使用 AES,但我對 MAC 的理解有點不穩定。只有在更新序列是隨機且不可預測的情況下,IV 才是安全的,這意味著我必須為每條發送的消息發送一個 128 位的 IV,這會給通常發送的 4 字節短數據包增加 400% 的成本我的應用程序。如果使用 SHA-256,HMAC 可以添加兩倍以上的數量。我將不得不進一步調查這件事。
幾點觀察:
- RC4 遭受相關的密鑰攻擊。這意味著連接 224 位密鑰和 32 位 IV 的想法不是一個好主意。你應該使用 $ \operatorname{SHA-256}(Key\mathbin|IV) $
- 請記住,永遠不能重複使用 (Key, IV) 對。
如果它是一個計數器,一個 32 位 IV 可以工作,但 IMO 這樣的方案是不必要的脆弱。我寧願為每個加密生成一個新的、隨機的 128 位值。 3. 即使有下降,RC4 還是有點偏。如果攻擊者可以觀察到數十億次通信,這可以允許密碼恢復。 4. 您不保護數據完整性。例如,攻擊者可能會保持加密密碼完好無損,但會更改消息的其餘部分。我不太了解你的問題,不知道這是否是一個問題。 5. 可能存在重播攻擊,其中攻擊者完全或部分重複較早的消息。 6. 您認為 RC4 比其他密碼更快的假設不一定正確。在許多現代系統上,AES 非常快。還有其他現代流密碼,例如 Salsa20,它比 RC4 速度快且強大得多。
RC4 的初始化成本很高。因此,如果您很少需要初始化它,它只會很快。特別是如果你為每個數據包重新初始化,它的性能肯定會低於 AES。 7. 你真的需要一個密碼嗎?使用 MAC 可能會更好。您似乎對身份驗證感興趣,而不是機密性。通用 MAC 可以非常快。 8. 使用者密碼通常具有低熵,因此您需要在將其用作密鑰之前對其進行加強。加強它們的計算成本很高,並且是使用 KDF 完成的,例如 scrypt 或 PBKDF2。
考慮使用高熵密鑰而不是密碼。 9. 如果您使用硬編碼到執行檔中的常量密鑰,則這些執行檔可能永遠不會在不受信任的機器上執行。否則,攻擊者可以簡單地從執行檔中提取密鑰。
簡而言之:
- 你的協議中的弱點可能比 RC4 中的弱點嚴重得多。
- 幾乎沒有理由在新協議中使用 RC4。有快速而強大的替代方案。