天天看點

淺談對稱加密中的流加密

淺談對稱加密中的流加密

之前介紹的對稱加密算法都是分組加密,如DES,3DES,SM4等。被加密的原文需要分成組,每組長度與密鑰長度相同,再分别加密。實際上,對稱加密裡還有一種類型算法叫做流加密。所謂流加密,就是使用一個與原文同樣長度的密鑰,與原文資料按位進行異或操作,得到的結果就是密文。解密過程和加密類似,就是用同樣的密鑰,對密文在進行按位異或,得到明文。這和異或運算的原理有關,假設P是原文,K是密鑰,E是密文,⊕代表異或運算,則有如下加密算式:

E = P⊕K

根據異或運算原理,相同的數異或結果為0,任何數與0異或得到的是它本身,故可推導如下解密算式:

E⊕K= P⊕K⊕K

=P⊕0

=P

可以這麼了解,流加密就是給原文資料的每一位依次戴個帽子,把原資料隐藏起來,解密就是摘掉帽子,把原資料露出來。是以它的優點就是簡單快捷。看到這裡估計你也意識到了,既然加解密方法這麼簡單,那麼流加密的重點應該就在密鑰上吧?事實确實如此,比如,我們以A、B為明文,使用同樣的密鑰K,進行流加密得到加密結果E(A)和E(B),則根據異或運算特點可以做出如下算式:

E(A)⊕E(B)⊕B=(A⊕K)⊕(B⊕K)⊕B

=A⊕B⊕(K⊕K)⊕B

=A⊕B⊕0⊕B

=A⊕B⊕B

=A⊕0

=A

可以看出,隻要拿到兩個密文和一個明文,就可以計算出另一個明文。實際中,密文是比較容易拿到的,而攻擊者也完全可以自己送出一個明文送給系統加密。即在密鑰相同的情況下,明文是很容易被計算出來的。是以流加密的安全性來源于其密鑰的安全性。實際上,資訊論的祖師爺香農早在1948年就在理論上證明了如果流加密的密鑰要不小于與被加密原文長度,每加密的密鑰做到一次一密,這樣的加密就實作了“完善保密性”,也就是“絕對安全”。當然,目前這種“絕對安全”隻能無限趨同,不可能真正做到。

流加密的密鑰可分為同步流密碼和自同步流密碼。同步流密碼是指密鑰流的生成過程是獨立的,明文及密文不參與其中;而自同步流密碼(也叫異步流密碼)中的密文參與到密鑰流的生成。

同步流密碼一般采用僞随機數生成算法生成随機數列作為密鑰組成部分。顯然,密鑰的随機性越強,明文中的統計特征被覆寫得更好,加密的強度也就越高。在現實中經常使用的一種方法是用線性回報移位寄存器(LFSR)來生成僞随機序列。線性回報移位寄存器是一種電路,它是許多密鑰流生成器的基本部件;非常适合硬體的實作;可以産生大周期序列;可以産生具有良好統計性質的序列;易于利用代數方法對其進行分析。

除了線性回報移位寄存器外,還有一種基于較短的一串給定密鑰,派生出無限長(實際上達到原文長度即可)的僞随機密碼流的流加密方法。具有代表性的是就RC4(Rivest Cipher 4)算法。RC4采用一個256位元組的狀态向量S,256位元組的暫時向量T,和使用者自定義的密鑰輸入構成。通過自定義的密鑰生成暫時向量之後,狀态向量S與暫時向量T通過一系列的置換算法産生可用于加密的僞随機密鑰流,參與加密。

流加密最重要的就是密鑰,但容易出問題的也是密鑰。

首先流加密屬于對稱加密,那就有一個密鑰交換的問題,也就是加解密雙方事先得有一個辦法可以安全地交換密鑰。但流加密的密鑰長度是和明文一樣長的,而且隻能使用一次,交換的成本相對加密行為來說不低。而且,既然能安全交換密鑰,為什麼不直接安全交換同樣長度的明文呢?

其次,流加密安全性來源于密鑰的随機性,也就是僞随機序列的随機性。但前面随機數一文說過,并不存在真随機數。像RC4算法、WEP協定、DVD使用的資料加密協定,由于設計或其他限制,也都存在密鑰随機序列在一定條件下重複出現的機率。這些都會影響流加密的安全效果。

總體來講,由于本身密鑰的使用成本及安全性問題,流加密在實際應用中出現的頻率遠低于分組加密。但流加密的一些優點,也被分組加密算法所吸收應用,如通過不同的工作模式實作類似流密碼算法的特性。

下一篇: TS碼流分析

繼續閱讀