密碼學中,串流加密法(英語: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]seedr[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取代。

硬碟加密

硬碟使用流加密時,同樣會使用同一密碼本對不同文字進行加密,因而調換兩個文字中少量資訊,可以得到同樣的冗餘結果。避免這個問題的方案通常是避免使用流加密。

CSS

eStream

RC4

Salsa20/Chacha20

參考文獻

參見

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.