流密碼
此條目需要補充更多來源。 (2013年9月23日) |
在密碼學中,流密碼(英語: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)等。
線性同餘生成器
線性同餘生成器中,令r[0]
為seed
,r[i] =(a * r[i-1] + b)mod p
,其中a,b,p
均為常數,則可輕易順次推出整個密鑰流,從而進行解密。
一次性密碼本
流加密攻擊
多次使用同一密碼本
一種嚴重的錯誤即反覆使用同一密碼本對不同明文進行加密。攻擊者可利用這種方式對密文進行解密。
用p表示明文,C表示密文,k表示種子,PRG表示密鑰流生成算法,則:
- C1 = p1 xor PRG (k)
- C2 = p2 xor PRG (k)
攻擊者監聽到此段消息(包含兩段相同密鑰流加密的密文)後,即可利用:
- C1 xor C2得到p1 xor p2
足量的冗餘(此處表示p1,p2)則可破解明文。
例子
WEP
一個失敗的例子即WEP網絡傳輸協議。
- 該協議中服務器和客戶端共享同一密鑰流,該密鑰流由一段24位的數據IV和一段密鑰組成,表示為PRG(IV || k),通過異或操作對明文數據流加密。而IV最多組合情況為224個(約16M大小),因而攻擊者可輕易暴力破解獲取IV,或通過多次截取數據包(當數據流量足夠大,密鑰流必定多次重複)最終得到明文。
- 另一個弱點在於,802.11網卡重啟後自動設置IV為初始狀態0。兩種情況下都能表明WEP安全性並不盡如人意。
WEP已被WPA和WPA2取代。
硬盤加密
當硬盤使用流加密時,同樣會使用同一密碼本對不同文本進行加密,因而調換兩個文本中少量信息,可以得到同樣的冗餘結果。避免這個問題的方案通常是避免使用流加密。