《密碼學系列》—— 流密碼

咱們活着不能與草木同腐,不能醉生夢死,枉度人生,要有所做爲。 ——方誌敏git

本文已經收錄至個人GitHub,歡迎你們踊躍star 和 issues。github

https://github.com/midou-tech/articles

點關注,不迷路!!!

 新年就在這場疫情中悄無聲息地過去了,那我就趕在年尾給你們拜個晚年,2020祝你們多掙錢,多升職,多......那就多些平安健康,開心快樂,可是也別忘了關注龍叔,2020,龍叔和你們一塊兒繼續加油。算法

 2020剛開始就很是的不順利,剛過去的這一個月,好像全部的事情都告訴咱們,仍是要珍惜當下,珍惜眼前人,無論發生多少難過的事情,咱們仍是要繼續努力向前看,向前走。安全

 話很少說,接着咱們的密碼學系列開講,以前和你們討論了信息安全的威脅,接下開始咱們的密碼學第一課——流密碼,它是以最小單位比特做爲一次加密、解密的操做元素,利用加密算法進行加密與解密。流密碼的基本思想是利用密鑰 k 產生一個密鑰流 z ,並利用相應的規則對明文串 x進行加密,所獲得的密文爲: y 。微信

 而流密碼與所謂的分組密碼最大的差距除了對於明文的處理方式不一樣之外,還有其加密器中是否含有記憶元件,流密碼的加密器中存在記憶元件,而分組密碼不存在,也正是因爲這個記憶元件,咱們能夠進一步將流密碼分爲同步流密碼和自同步流密碼。函數

同步流密碼:

 是否是聽起來有點複雜,但其實它取決於加密器中記憶元件的存儲狀態,獨立於明文字符的叫作同步流密碼,不然叫作自同步流密碼, 但其實對於自同步流密碼來講,它的密鑰流的產生與輸入的明文有關, 因此在理論上咱們很難可以去分析清楚。而目前,咱們在流密碼方面的全部科研成果絕大多數都是關於同步流密碼的。加密

 同步流密碼的加密過程都與明文無關,故咱們獲得的密文也與明文直接聯繫。因此,一般狀況下咱們將同步流密碼的加密器分紅密鑰流產生器加密變換器兩個部分。在下圖所表示的就是流密碼的加密和解密流程。code

 咱們輸入明文x,利用密鑰流生成器生成的密鑰z,利用加密算法E對明文x進行加密。能夠獲得密文y。blog

 反過來講,當咱們已知密文y時,利用密鑰z和解密算法D解析密文y,就能夠獲得明文x。get

 同步流密碼的加密算法E能夠是各類各樣的,可是咱們必須保證變換是可逆的(也就是說經過明文利用加密算法能夠獲得密文,反過來利用密文和解密算法就能夠獲得明文)。

 實際使用的數字保密通訊系統通常都是二元系統,因此說,在有限域 GF(2)上討論的二元加法流密碼是目前最爲經常使用的流密碼體制。

 其實經過這兩幅圖咱們能夠對比出來,在二元域中,二元加法流密碼就是將咱們的加密算法換成了所謂的二元域上的加法。(相信學計算機的咱們必定對這個不陌生吧!hhhh~)

線性反饋移位寄存器LFSR:

 線性反饋移位寄存器(LFSR):一般由移位寄存器和異或門邏輯組成。其主要應用在:僞隨機數,僞噪聲序列,計數器,BIST,數據的加密和CRC校驗等。在這裏咱們主要說LFSR在密碼學中的應用,尤爲是在流密碼中,線性反饋移位寄存器是組成密鑰流生成器的一個重要部分。

 GF(2 )上一個 n 級反饋移位寄存器由 n 個二元存儲器與一個反饋函數 f ( a1 , a2 ,…, an )組成。話很少說,咱們直接看圖。

 圖中能夠看到每一存儲器稱爲移位寄存器的一級,在任一時刻,這些級的內容構成該反饋移位寄存器的狀態,每一狀態對應於GF(2)上的一個 n 維向量,共有2n種可能的狀態。每一時刻的狀態可用 n 長序列 a1 , a2 ,…, an表示, 其中 ai 是第 i 級存儲器的內容。

 初始狀態由用戶肯定,當第 i 個移位時鐘脈衝到來時,每一級存儲器 ai 都將其內容向下一級 ai - 1 傳遞, 並根據寄存器此時的狀態 a1 , a2 , …, an 計算 f ( a1 , a2 , …, an ) ,做爲下一時刻的 an。

 反饋函數 f ( a1 , a2 , …, an ) 是 n 元布爾函 , 即 n 個變元 a1 , a2 ,…, an 能夠獨立地取 0 和 1 這兩個可能的值, 函數中的運算有邏輯 與、邏輯或、邏輯補等運算,最後的函數值也爲 0 或 1。

 線性反饋移位寄存器輸出序列的性質徹底由其反饋函數決定。 n 級線性反饋移位寄存器最多有 2的n次方個不一樣的狀態。若其初始狀態爲 0,則其狀態恆爲 0。若其初始狀態非 0,則其後邊的狀態也不會爲 0。所以 n 級線性反饋移位寄存器的狀態週期小於等於 2的n次方- 1。其輸出序列的週期與狀態週期相等, 也小於等於 2的n次方- 1。只要選擇合適的反饋函數即可使 序列的週期達到最大值 2的n次方- 1,週期達到最大值的序列稱爲 m 序列。

m序列:

 m序列也就是最長線性移位寄存器序列的簡稱,是由線性反饋的移存器產生的週期最長的序列,也是一種僞隨機序列。

什麼是僞隨機序列?

 僞隨機序列也就是,即便截獲其中一段,也沒法推測後面是什麼。若是說密鑰流是週期的, 要徹底作到隨機性是困難的。嚴格地說, 這樣的序列不可能作到隨機, 只能要求截獲比周期短的一段密鑰流時不會泄露更多信息, 這樣的序列稱爲僞隨機序列。

m序列的性質:
  • 均衡性:
     由m序列的一個週期中,通常狀況下,0和1的數目基本相等或者1的數目比0的數目多一個。

 例如0111101101001100000111001010101看出:總共有16個1和15個0。

  • 遊程分佈:
     m序列中取值相同的那些相繼的元素合稱爲一個「遊程」。遊程中元素的個數稱爲遊程長度。

 n級的m序列中,總共有2n-1個遊程,其中長度爲1的遊程佔總遊程數的1/2,長度爲2的遊程佔總遊程數的1/4,長度爲k的遊程佔總遊程數的2k。且長度爲k的遊程中,連0與連1的遊程數各佔一半。

 如序列0111101101001100000111001010101中,遊程總數爲18-1=17,此序列各類長度的遊程分佈以下:
 長度爲1的遊程數目爲10,其中5個1遊程和5個0遊程;
 長度爲2的遊程數目爲4,2個11遊程,2個00遊程;
 長度爲3的連1遊程數目爲1;
 長度爲4的連0遊程數目爲1;
 長度爲5的連1遊程數目爲1。

  • 移位相加特性
     一個m序列m1,m序列經任意延遲移位產生的另外一序列m2,將m1與m2進行模2加運算,所獲得的序列還是m1的某次延遲移位序列 m3,而且m3等於m1與m2 異或。

  • 相關特性

 咱們能夠根據移位相加特性來驗證m序列的自相關特性。由於移位相加後獲得的仍是m序列,所以0的個數比1的個數少1。

Golomb 公設:

 由m序列的性質,咱們能夠驗證Golomb 對僞隨機週期序列提出了應知足的以下3 個隨機性公設,具體以下:

① 在序列的一個週期內, 0 與 1 的個數相差至多爲 1。

  • 公設①說明{ ai}中 0 與 1 出現的機率基本上相同

② 在序列的一個週期內,長爲 i 的遊程佔遊程總數的2的n次方分之1 ( i = 1, 2 ,… ),且在等長的遊程中 0 的遊程個數和 1 的遊程個數相等。

  • 公設②說明 0 與 1 在序列中每一位置 上出現的機率相同。

③ 異相自相關函數是一個常數。

③ 異相自相關函數是一個常數。

  • 公設③意味着經過對序列與其平移後的序列作比較, 不能給出其餘任何信息。

 關於流密碼呢,固然還有一些非線性序列,可是非線性序列的生成也是以線性序列爲基礎的,非線性序列生成器也是以LFSR爲基礎的,通常來講,非線性序列生成器都須要多個LFSR 來驅動,這個的應用就至關的少了,大體瞭解就好。

 最後的最後,龍叔仍是要嘮嘮叨叨的提醒你們,注意安全,戴口罩,勤洗手,平安健康。

密碼學熱門文章:

聊聊密碼學中的DES算法

懂點密碼學

信息安全威脅

求點贊👍 求關注❤️

「轉發」是明目張膽的喜歡,「在看」是偷偷摸摸的愛。

若是有人想發文章,我這裏提供有償徵文(具體細則微信聯繫),歡迎投稿或推薦你的項目。提供如下幾種投稿方式:

  • 去個人github提交 issue: https://github.com/midou-tech/articles

  • 發送到郵箱: 2507367760@qq.com 或者 longyueshier@163.com 或者 longyueshier@gmail.com

  • 微信發送: 掃描下面二維碼,公衆號裏面有做者微信號。

精選文章都同步在公衆號裏面,公衆號看起會更方便,隨時隨地想看就看。微信搜索 龍躍十二或者掃碼便可訂閱。

相關文章
相關標籤/搜索