利用密鑰k產生一個密鑰流。密鑰流由密鑰流發生器f產生 $$z_i = f(k,\delta_i)$$。 \(\delta_i\)是加密器中記憶元件在時刻i的狀態。
分組密碼與流密碼的區別在於有無記憶性。流密碼的最初的滾動密鑰由函數f、密鑰k以及指定的初始狀態\(\delta_0\)決定,后續的密鑰則可以通過輸入加密器的明文,來影響加密器中的記憶元件來改變其狀態。
同步流密碼
根據加密器中的記憶元件的存儲狀態\(\delta_i\)是否依賴於輸入的明文字符,流密碼可以分為同步和自同步兩種。
\(\delta_i\)獨立於明文字符的叫做同步流密碼,否則叫做自同步流密碼。
由於同步流密碼密鑰產生不依賴於此前的明文字符,因此可以將同步流密碼的加密器分為密鑰流產生器以及加密變換器兩部分。 同步流密碼加密變換可以有多種選擇,但只要保證變換可逆即可。
密鑰流產生器
一般可以將密鑰流產生器看成一個參數為k的有限狀態自動機,由一個輸出符號集、一個狀態集、兩個函數(狀態轉移函數和輸出函數)、以及一個初始狀態組成。其設計的關鍵在於找出適當的狀態轉移函數和輸出函數,使得輸出序列滿足密鑰流序列應滿足的幾個條件。並且要求簡單和易於實現,因此,必須采用非線性函數。
由於具有非線性的狀態轉移函數下的有限狀態自動機理論很不完善,相應的密鑰流產生器的分析工作也受到了極大的限制。
線性反饋移位寄存器
GF(2)上一個n級反饋移位寄存器由n個二元存儲器與一個反饋函數f組成。每一個二元存儲器稱為移位存儲器的一級,在任意時刻,這些級的內容構成該反饋移位寄存器的狀態,每一個狀態對應於GF(2)上的一個n維向量,因此共有2^n種可能的狀態。
當第i個移位時鍾脈沖到來的時候,每一級存儲器都會將其內容移交給下一級存儲器。
如果移位存儲器的反饋函數f是a_1,a_2,...,a_n的線性函數,則稱之為線性反饋移位寄存器LFSR
其中常數c_i =1 或 0 xor為異或運算符。
在線性移位寄存器中總是假定c_1,c_2,...,c_n中至少有一個不為0,否則f總是為0。這樣,在n個脈沖之后,其狀態比為00...0,並持續下去。因此,一般對於n級線性反饋移位寄存器來說,總是假定c_n=1
線性反饋移位寄存器的輸出序列性質完全由其反饋函數決定。n級線性反饋移位寄存器最多有2^n個不同的狀態。但周期是小於等於2^n - 1。周期達到最大值的序列稱為m序列。
線性移位寄存器的一元多項式表示
n級線性移位寄存器的輸出序列{a_i}滿足如下關系
對於任何k>=1成立,這種遞推關系可以利用一個一元高次多項式表示:
表示,稱這個多項式為LFSR的特征多項式。
設p(x)是GF(2)上的多項式,使p(x)|(x^p - 1)的最小p稱為p(x)的周期或階
若序列{a_t}的特征多項式p(x)定義在GF(2)上,p是p(x)的周期,則{a_t}的周期為r|p
n級LFSR產生的序列有最大周期的必要條件是其特征多項式為不可約的
設{a_i}∈G(p(x)) {a_i}為m序列的充要條件是p(x)為本原多項式(即n次不可約多項式p(x)的階為2^n - 1)