密碼學(xué)之流密碼(Stream Cipher)
前言
Stream cipher由兩個部分組成,一個是內(nèi)部的state,一個是key。
一般而言,Stream cipher通過key和initialization?vector進行初始化(初始化只進行一次)。然后每一個timestep ,基于我們的key和state,stream cipher將輸出一個單位的密碼。重復(fù)執(zhí)行的話就能連續(xù)地輸出密碼。

一、Linear Feedback Shift Registers (LFSR)
LFSR有兩個部分,一個是內(nèi)部的state,由個所謂的register組成——
,每一個register只儲存1個bit的信息(要么是0要么是1,另外注意下標的順序)。另外一個是,長度同樣為
的feedback coefficients——
.
在初始化階段,我們讓state 等同于我們的key
,設(shè)置好我們的feedback
。接下來,每一個timestep
,我們輸出最右側(cè)的那個bit
,然后將state里面的所有bit朝右位移1個bit:
,最后,最左側(cè)的那個bit
由我們的state和feedback決定:

當我們的LSFR遍歷所有?state,并且沒有遇到過重復(fù)時,這個時候我們稱我們的LFSR具有maximum length. 而LFSR具有maximum length的條件是:
為primitive.
LFSR并非一個安全的cipher,因為我們可以從前個輸出的bit中知道我們的初始state(也就是我們的key),然后從前
個輸出的bit中知道我們的feedback coefficient
.

二、RC4
RC4以8-bit的byte為單位,每次輸出一個byte的密碼。我們使用一個長度為256-byte的state,以及一個任意長度的key:

下面是自己用Python寫的一段代碼(未驗證正確性,只供參考):
RC4也并不是一個安全的cipher,如果我們的初始state的第3個byte為0,第2個byte不為2,那么我們輸出的密碼流的第2個byte為0,這個情況出現(xiàn)的概率為.?
RC4還有其他的一些統(tǒng)計學(xué)上的bais,導(dǎo)致攻擊者可以利用這些特性來攻擊基于RC4的密碼.

后記
Stream cipher(看上去)其實還是挺簡單的。
參考資料:
Jonathan Katz; Yehuda Lindell -?Introduction to Modern Cryptography
使用工具:Drawio

THE END.