簡介
在密碼學中, 流加密(英語: Stream cipher),又譯為 流加密、 數據流加密,是一種對稱加密算法,加密和解密雙方使用相同偽隨機加密數據流(pseudo-random stream)作為密鑰,明文數據每次與密鑰數據流順次對應加密,得到密文數據流。實踐中數據通常是一個位(bit)並用異或(xor)操作加密。
該算法解決了對稱加密完善保密性(perfect secrecy)的實際操作困難。“完善保密性”由克勞德·香農於1949年提出。由於完善保密性要求密鑰長度不短於明文長度,故而實際操作存在困難,改由較短數據流通過特定算法得到密鑰流。
偽隨機密鑰流(keystream)由一個隨機的種子(seed)通過算法(稱為:PRG,pseudo-random generator)得到,k作為種子,則G(k)作為實際使用的密鑰進行加密解密工作。
為了保證流加密的安全性,PRG必須是不可預測的。弱算法包括glibc random()函式,線性同餘生成器(linear congruential generator)等。
流加密過程
加密過程:首先生成一個對稱秘鑰,使用用戶公鑰加密這個對稱秘鑰後存儲在檔案頭,然後用生成的對稱秘鑰加密檔案數據存儲。
解密過程:首先使用自己的私鑰解密被加密的對稱秘鑰,再用該對稱秘鑰解密出數據原文。
類型
流密碼基於內部狀態生成密鑰流的連續元素。這種狀態基本上以兩種方式更新:如果狀態獨立於明文或密文訊息而改變,則密碼被分類為同步流密碼。相比之下,自同步流密碼根據以前的密文數字更新其狀態。
同步流密碼
在同步流密碼中,獨立於明文和密文訊息生成一個偽隨機數字流,然後與明文(加密)或密文(解密)組合。在最常見的形式中,使用二進制數字(比特),並且使用獨占或操作(XOR)將密鑰流與明文結合。這被稱為二元加法流密碼。
在同步流密碼中,傳送方和接收方必須準確地進行解密才能成功。如果在傳輸過程中將數字添加到訊息中或從訊息中刪除數字,則同步丟失。為了恢復同步,可以系統地嘗試各種偏移量以獲得正確的解密。另一種方法是在輸出中的標準點處用標記標記密文。
但是,如果一個數字在傳輸中被損壞而不是被添加或丟失,則明文中只有一個數字會受到影響,並且錯誤不會傳播到訊息的其他部分。當傳輸錯誤率很高時,此屬性非常有用;然而,這樣做不太可能在沒有進一步機制的情況下檢測到錯誤。而且,由於這個特性,同步流密碼非常容易受到主動攻擊:如果攻擊者可以改變密文中的數字,他可能能夠對相應的明文位進行可預測的改變;例如,翻轉密文中的一位會導致相同的位在明文中翻轉。
自同步流密碼
另一種方法使用幾個前 N個密文數字來計算密鑰流。這種方案被稱為自同步流密碼,異步流密碼或密文自動密鑰(CTAK)。自同步的想法在1946年獲得專利,其優點是接收器在接收到 N個密文數字後會自動與密鑰流生成器同步,如果數字被丟棄或添加到訊息流中,更容易恢復。一位數錯誤的效果有限,僅影響 N個明文數字。
自同步流密碼的一個例子是密碼反饋(OFB)模式中的分組密碼。
例子
WEP
一個失敗的例子即WEP網路傳輸協定。
•該協定中伺服器和客戶端共享同一密鑰流,該密鑰流由一段24位的數據IV和一段密鑰組成,表示為PRG(IV || k),通過異或操作對明文數據流加密。而IV最多組合情況為2個(約16M大小),因而攻擊者可輕易暴力破解獲取IV,或通過多次截取數據包(當數據流量足夠大,密鑰流必定多次重複)最終得到明文。
•另一個弱點在於,802.11網卡重啟後自動設定IV為初始狀態0。兩種情況下都能表明WEP安全性並不盡如人意。
更好的解決方案是針對不同段的信息使用偽隨機密鑰(不同k值),例如TLS所為。
硬碟加密
當硬碟使用流加密時,同樣會使用同一密碼本對不同文本進行加密,因而調換兩個文本中少量信息,可以得到同樣的冗餘結果。避免這個問題的方案通常是避免使用流加密。
CSS
內容擾亂系統(英語:Content Scramble System,CSS),是通過種子生成密鑰,對DVD進行流加密的技術。它也作為數字著作權管理系統,曾套用於幾乎所有的DVD光碟。CSS有一個40-bit的流加密算法,1996年首次投入使用,1999年被首次破解。
CSS目前已被更高級的加密技術如運用於高清DVD(HD DVD)和藍光的AES,AACS所取代。它們分別擁有56和128個比特的密鑰長度。