RC4演算法是對稱的密碼編譯演算法,加密和解密的步驟都是眾所周知的、固定不變的。唯一的保密性來自於初始的key。這個key理論上來說只有通訊雙方知道,但是如果第三方從某種途徑獲得了這個key,那麼第三方可以毫不費力地用RC4來解密他截獲到的加密字串了。
第三方如何得到這個key呢?家賊難防,有人泄露給競爭者,那實在是沒辦法的事情,趕緊換key吧;同時,第三方也可以不依賴於間諜,直接暴力破解,成功率應該不低。 暴力破解的前提是,需要知道一些正確的解密結果。就是知道:若干加密串(或是加密串片段)對應的原文,這樣才可以驗證暴力破解是否成功。如果RC4隻是用於有限個個體間通訊,那麼破解方要獲得這些先驗的正確結果可能比較困難,但如果你提供服務的對象是整個互連網使用者,那麼想破解你的人自然可以合法地方便地擷取到很多先驗正確結果來輔助暴力破解。 理論上來說,RC4演算法是很難被破解的。RC4中用到的key是長度在[1,256]的unsigned char字串,可能性就是256+256^2+256^3+....256^256≈256^256次方種可能性,量級在10^600以上。如果你真的設定了一個256byte(不是bit哦)的key,別人想要暴力破解幾乎是不可能的。要知道,“天河一號”每秒也不過千萬億次(10^15)運算。但是設定這麼長的key,加密解密的時間也是線性增長的,所以一般使用的key至多是幾十byte而已。那這個複雜度就大大降低了,特別是現在分散式運算這麼普及的情況下。 最囧的是網上有些論文,不過是暴力破解了40bit(5byte)的RC4,居然也可以發到《電腦工程與科學》這類期刊上去,我只能呵呵了。 那怎麼樣在不顯著增加key長度的情況下,提高被人破解的難度呢? 1.定時更換key,就像網民應該定時更換自己的密碼一樣。 2.在真實原文裡混雜一些隨機字串再加密。 3.並不把加密串直接暴露給公眾,可以對加密串做二次加密。(迴圈移位、字元-字元對應表、按某種規則打散、再做一次RC4、等等)