Encryption

如何為線性回饋移位寄存器計時?

  • August 4, 2021

我很難理解當 LFSR 被計時時會發生什麼。我嘗試了很多例子,但我沒有得到正確的結果。誰能指出我的錯誤?

我有以下多項式:

$$ f(x)=1+x+x^5+x^6+x^8 $$ 作為已知明文攻擊的一部分,我正在對此進行研究,並且我有以下密鑰流:

01010101000110101100

因此,密鑰流的前 8 位必須是 LFSR 的 IV,並且 LFSR 應該對第三位進行 XOR( $ x^2 $ ), 第四 ( $ x^3 $ ), 第五 ( $ x^4 $ ) 和第七 ( $ x^7 $ )。在下一行中,最左邊的位應該出去,最右邊的是 XOR 操作的值,其餘的應該從上面的行移動一個位置,因此結構:

$ 1 \times x^2 \cdots x^3 \cdots x^4 \cdots x^7 $

0 1 0 1 0 1 0 1     
1 0 1 0 1 0 1 0  
0 1 0 1 0 1 0 0  
1 0 1 0 1 0 0 0  
0 1 0 1 0 0 0 0  

因此,每行中最右邊的位應該是第 8 個第一位之後的密鑰流的繼續,這似乎是前三個零的總和,但在那之後它沒有給出密鑰流。

我究竟做錯了什麼?

密鑰流01010101000110101100可以從它的前 8 位和多項式推導出來 $ f(x)=1+x+x^5+x^6+x^8 $ , 如下。

從…開始 $ b_0=0 $ , $ b_1=1 $ , $ b_2=0 $ , $ b_3=1 $ , $ b_4=0 $ , $ b_5=1 $ , $ b_6=0 $ , $ b_7=1 $ (根據讀取順序中密鑰流的前 8 位)。而對於 $ i $ 從增加 $ 0 $ 應用重複 $ b_{i+0}\oplus b_{i+1}\oplus b_{i+5}\oplus b_{i+6}\to b_{i+8} $ , 其中後面的整數 $ _+ $ 是多項式中非零係數的階數。那是:

  • $ b_8\gets b_0\oplus b_1\oplus b_5\oplus b_6=0 $
  • $ b_9\gets b_1\oplus b_2\oplus b_6\oplus b_7=0 $
  • $ b_{10}\gets b_2\oplus b_3\oplus b_7\oplus b_8=0 $
  • $ b_{11}\gets b_3\oplus b_4\oplus b_8\oplus b_9=1 $
  • $ b_{12}\gets b_4\oplus b_5\oplus b_9\oplus b_{10}=1 $
  • $ b_{13}\gets b_5\oplus b_6\oplus b_{10}\oplus b_{11}=0 $

這是使用 LFSR 的斐波那契實現,這很方便,因為它的第一位輸出也是 LFSR 的初始狀態。根據用於定義 Fibonacci 和 Galois 實現的約定,我們可能會使用這樣一個事實,即 Fibonacci 實現的多項式是 Galois 實現的多項式的反映(即,階項的係數 $ j $ 和 $ d-j $ 被交換,其中 $ d $ 是多項式的次數)。

如果我們想應用伽羅瓦實現,我們必須處理這樣一個事實,即 LFSR 的初始狀態不是輸出的第一位,因此在問題的上下文中不會立即知道:按照慣例,給定密鑰流的第一位根本不是具有多項式的伽羅瓦 LFSR 的初始狀態 $ f(x)=1+x+x^5+x^6+x^8 $ 之後立即產生序列的其餘部分。

引用自:https://crypto.stackexchange.com/questions/29822