应用密码学课上学习了 BM 算法,林老师说期末必考。做课后题时,让求解一个20长序列的 LFSR,本人算了两大页纸,还算错了两遍 (╬ ̄皿 ̄)

这里仔细研究下,谈谈我自己对它的理解。

LFSR

线性反馈移位寄存器(Linear-feedback shift register)可用于产生随机序列。有限域 F \mathbb F F 上的 n n n 级(包含 n n n长的状态) LFSR 的结构如下:

在这里插入图片描述

其中 c i ∈ F c_i \in \mathbb F ci​∈F。如果 c n = 0 c_n = 0 cn​=0,那么是退化的 LFSR。反馈逻辑为线性递推关系:
a k = ∑ i + 1 n c i a k − i a_k = \sum_{i+1}^n c_i a_{k-i} ak​=i+1∑n​ci​ak−i​

特征多项式为:
f ( x ) = x n + ∑ i = 1 n c i x n − i f(x) = x^n + \sum_{i=1}^n c_i x^{n-i} f(x)=xn+i=1∑n​ci​xn−i

联接多项式为:
f ~ ( x ) = 1 + ∑ i = 1 n c i x i \tilde f(x) = 1+\sum_{i=1}^n c_i x^i f~​(x)=1+i=1∑n​ci​xi

易知, deg ⁡ f = n \deg f = n degf=n, deg ⁡ f ~ ≤ n \deg \tilde f \le n degf~​≤n

用 G ( f ) G(f) G(f) 表示由特征多项式 f f f 可以生成的所有序列的集合,可以视为 F \mathbb F F上的 n n n 维向量空间。若 a \textbf a a 是 F 2 F_2 F2​ 上的周期序列,那么当仅当存在一个多项式 f f f(极小多项式),使得 a ∈ G ( h ) \textbf{a} \in G(h) a∈G(h)    ⟺    \iff ⟺ h ∈ ( f ) h \in (f) h∈(f),这里 ( f ) ⊆ F 2 [ x ] (f) \subseteq F_2[x] (f)⊆F2​[x] 是个主理想。即, f f f 是可以生成 a \textbf{a} a 的次数最低的特征多项式,对应的 LFSR 的级数 deg ⁡ f \deg f degf 叫做序列 a \textbf a a 的线性复杂度。同时,周期 p ( a ) = p ( f ) p(\textbf{a}) = p(f) p(a)=p(f),这里 p ( f ) p(f) p(f) 是满足 x e ≡ 1 m o d    f x^e \equiv 1 \mod f xe≡1modf 的最小整数(多项式的阶,order)。

Berlekamp-Massey 算法

如果给定一个长度为 N N N 的序列片段 a = a 1 a 2 ⋯ a N ∈ F N \textbf{a} = a_1a_2 \cdots a_N \in \mathbb F^N a=a1​a2​⋯aN​∈FN,已知它是由线性递归关系生成的。如何计算出生成它的最短的 LFSR ?

我们使用联接多项式 f f f 以及阶数 l l l 来描述 LFSR。我们将 ( f N , l N ) (f_N,l_N) (fN​,lN​) 称作 a \textbf{a} a 的线性综合解,如果 f N f_N fN​ 对应的 l N l_N lN​ 级 LFSR 是可以生成 a \textbf a a 的阶数最小的 LFSR。

多项式乘积

给定序列 a = a 1 a 2 ⋯ a n \textbf{a} = a_1a_2 \cdots a_n a=a1​a2​⋯an​,我们定义下述多项式
A ( x ) = 1 + a 1 x + a 2 x 2 + ⋯ a n x n ∈ F N A(x) = 1 + a_1x + a_2x^2 + \cdots a_nx^n \in \mathbb F^N A(x)=1+a1​x+a2​x2+⋯an​xn∈FN

假设一个 l n l_n ln​级的 LFSR 可以生成这个序列,对应的联接多项式为
f ( x ) = c l n x l n + ⋯ + c 1 x + 1 ∈ F [ x ] f(x) = c_{l_n}x^{l_n} + \cdots + c_1x + 1 \in \mathbb F[x] f(x)=cln​​xln​+⋯+c1​x+1∈F[x]

那么对于 l n + 1 ≤ k ≤ n l_n+1 \le k \le n ln​+1≤k≤n,要满足约束:
a k + ∑ i = 1 l n c i a k − i = 0 ∈ F a_k + \sum_{i=1}^{l_n} c_i a_{k-i} = 0 \in \mathbb F ak​+i=1∑ln​​ci​ak−i​=0∈F

注意到 a k + ∑ i = 1 l n c i a k − i a_k + \sum_{i=1}^{l_n} c_i a_{k-i} ak​+∑i=1ln​​ci​ak−i​ 就是 f ⋅ A f \cdot A f⋅A 的单项 x k x^k xk 的系数,也就是说:
f ( x ) ⋅ A ( x ) = t a i l n ( x ) m o d    x n + 1 f(x) \cdot A(x) = tail_n(x) \mod x^{n+1} f(x)⋅A(x)=tailn​(x)modxn+1

这里 t a i l n ( x ) tail_n(x) tailn​(x) 是多项式截尾,明显满足 deg ⁡ ( t a i l n ) ≤ l n \deg(tail_n) \le l_n deg(tailn​)≤ln​,这对应到 f ( x ) f(x) f(x) 无法约束的可生成 a [ 1 : n ] \textbf{a}[1:n] a[1:n] 所需的初始状态 a [ 1 : l n ] \textbf{a}[1:l_n] a[1:ln​](是自由的,无法被 LFSR 约束)

所以,我们想要找出最短的 LFSR,只需找出满足上述约束的联接多项式 f ( x ) f(x) f(x)。给定序列 a \textbf{a} a,BM 算法的思路是:迭代地构造一系列 f n f_n fn​,使得 ( f n , l n ) (f_n,l_n) (fn​,ln​) 是可以生成 a [ 1 : n ] \textbf{a}[1:n] a[1:n] 的线性综合解,当 n = N n = N n=N 时结束迭代。

思路

假设我们获得了 ( f n , l n ) (f_n,l_n) (fn​,ln​),满足
f n ( x ) ⋅ A ( x ) = t a i l n ( x ) m o d    x n + 1 f_n(x) \cdot A(x) = tail_n(x) \mod x^{n+1} fn​(x)⋅A(x)=tailn​(x)modxn+1

也就是 f n f_n fn​ 可以约束 a [ 1 : n ] \textbf{a}[1:n] a[1:n]

如果
f n ( x ) ⋅ A ( x ) = t a i l n ( x ) m o d    x n + 2 f_{n}(x) \cdot A(x) = tail_n(x) \mod x^{n+2} fn​(x)⋅A(x)=tailn​(x)modxn+2

那么 f n f_n fn​ 依然可以约束 a [ 1 : n + 1 ] \textbf{a}[1:n+1] a[1:n+1],从而 ( f n + 1 , l n + 1 ) : = ( f n , l n ) (f_{n+1},l_{n+1}) := (f_n,l_n) (fn+1​,ln+1​):=(fn​,ln​)

如果
f n ( x ) ⋅ A ( x ) = t a i l n ( x ) + d n + 1 x n + 1 m o d    x n + 2 f_{n}(x) \cdot A(x) = tail_n(x) + d_{n+1}x^{n+1} \mod x^{n+2} fn​(x)⋅A(x)=tailn​(x)+dn+1​xn+1modxn+2

其中 d n + 1 ≠ 0 ∈ F d_{n+1} \neq 0 \in \mathbb F dn+1​=0∈F,那么说明 f n f_n fn​ 无法约束 a [ 1 : n + 1 ] \textbf{a}[1:n+1] a[1:n+1] 了,我们需要对它做调整。

我们寻找一个 ( f m , l m ) (f_m,l_m) (fm​,lm​),它无法约束 a [ 1 : m + 1 ] \textbf{a}[1:m+1] a[1:m+1],即
f m ( x ) ⋅ A ( x ) = t a i l m ( x ) + d m + 1 x m + 1 m o d    x m + 2 f_{m}(x) \cdot A(x) = tail_m(x) + d_{m+1}x^{m+1} \mod x^{m+2} fm​(x)⋅A(x)=tailm​(x)+dm+1​xm+1modxm+2

那么,我们令
f n + 1 ( x ) = f n ( x ) − d n + 1 d m + 1 − 1 x m − n f m ( x ) f_{n+1}(x) = f_n(x) - d_{n+1}d_{m+1}^{-1} x^{m-n} f_m(x) fn+1​(x)=fn​(x)−dn+1​dm+1−1​xm−nfm​(x)

画的草图:

在这里插入图片描述

可以验证:
f n + 1 ( x ) ⋅ A ( x ) = f n ( x ) ⋅ A ( x ) − d n + 1 d m + 1 − 1 x n − m f m ( x ) ⋅ A ( x ) = t a i l n ( x ) + d n + 1 x n + 1 − d n + 1 d m + 1 − 1 d m + 1 x m + 1 x n − m − d n + 1 d m + 1 − 1 x n − m t a i l m ( x ) = t a i l n ( x ) − d n + 1 d m + 1 − 1 x n − m t a i l m ( x ) m o d    x n + 2 \begin{aligned} f_{n+1}(x) \cdot A(x) &= f_n(x) \cdot A(x) - d_{n+1}d_{m+1}^{-1} x^{n-m} f_m(x) \cdot A(x)\\ &= tail_n(x) + d_{n+1}x^{n+1} - d_{n+1}d_{m+1}^{-1}d_{m+1}x^{m+1}x^{n-m} - d_{n+1}d_{m+1}^{-1}x^{n-m}tail_m(x)\\ &= tail_n(x) - d_{n+1}d_{m+1}^{-1}x^{n-m}tail_m(x) \mod x^{n+2} \end{aligned} fn+1​(x)⋅A(x)​=fn​(x)⋅A(x)−dn+1​dm+1−1​xn−mfm​(x)⋅A(x)=tailn​(x)+dn+1​xn+1−dn+1​dm+1−1​dm+1​xm+1xn−m−dn+1​dm+1−1​xn−mtailm​(x)=tailn​(x)−dn+1​dm+1−1​xn−mtailm​(x)modxn+2​

对应的 t a i l n + 1 = t a i l n ( x ) − d n + 1 d m + 1 − 1 x n − m t a i l m ( x ) tail_{n+1} = tail_n(x) - d_{n+1}d_{m+1}^{-1}x^{n-m}tail_m(x) tailn+1​=tailn​(x)−dn+1​dm+1−1​xn−mtailm​(x),其度数为 deg ⁡ ( t a i l n + 1 ) ≤ max ⁡ ( l n ,   n − m + l m ) \deg(tail_{n+1}) \le \max(l_n,\, n-m+l_m) deg(tailn+1​)≤max(ln​,n−m+lm​)

多项式选取

给定序列 a = a 1 a 2 ⋯ a N ∈ F N \textbf{a} = a_1a_2 \cdots a_N \in \mathbb F^N a=a1​a2​⋯aN​∈FN,我们首先找到第一个非零元素 a n 0 ≠ 0 a_{n_0} \neq 0 an0​​=0

  • 设置 f 0 = 1 f_0=1 f0​=1,对应的 l 0 = 0 l_0=0 l0​=0 级的 LFSR 可以生成空序列。

  • 对于 1 ≤ i < n 0 1 \le i < n_0 1≤i<n0​,明显 a [ 1 : i ] = 0 i \textbf{a}[1:i] = 0^i a[1:i]=0i 是零序列,从而可以由 f i ( x ) = 1 f_i(x)=1 fi​(x)=1 的 l i = 0 l_i=0 li​=0 级的 LFSR 来生成。

  • 对于 i = n 0 ≥ 1 i=n_0 \ge 1 i=n0​≥1,序列 a [ 1 : n 0 ] = 0 n 0 − 1 ∥ 1 \textbf{a}[1:n_0] = 0^{n_0-1}\|1 a[1:n0​]=0n0​−1∥1 可以由任意的 l n 0 = n 0 l_{n_0}=n_0 ln0​​=n0​ 级的 LFSR 生成,方便起见选取:
    f n 0 = 1 − a n 0 x n 0 f_{n_0} = 1 - a_{n_0} x^{n_0} fn0​​=1−an0​​xn0​

容易看出,这些 ( f i , l i ) (f_i,l_i) (fi​,li​) 都是最短的 LFSR。易知, l n 0 = max ⁡ ( l n 0 − 1 , n 0 − l n 0 − 1 ) l_{n_0} = \max(l_{n_0-1},n_0-l_{n_0-1}) ln0​​=max(ln0​−1​,n0​−ln0​−1​),因为 l n 0 − 1 = 0 l_{n_0-1}=0 ln0​−1​=0

后续将证明,每一次对 LFSR 的修正,从 ( f m , l m ) (f_m,l_m) (fm​,lm​) 到 ( f m + 1 , l m + 1 ) (f_{m+1},l_{m+1}) (fm+1​,lm+1​),都会满足
l m + 1 = max ⁡ ( l m ,   m + 1 − l m ) l_{m+1} = \max(l_{m},\, m+1 - l_m) lm+1​=max(lm​,m+1−lm​)

这样,我们就获得了最初的 ( f n 0 , l n 0 ) (f_{n_0},l_{n_0}) (fn0​​,ln0​​),这个 LFSR 满足
f n 0 ( x ) ⋅ A ( x ) = t a i l n 0 ( x ) = 0 m o d    x n 0 + 1 f_{n_0}(x) \cdot A(x) = tail_{n_0}(x)=0 \mod x^{n_0+1} fn0​​(x)⋅A(x)=tailn0​​(x)=0modxn0​+1

也就是 f n 0 f_{n_0} fn0​​ 可以约束 a [ 1 : n 0 ] \textbf{a}[1:n_0] a[1:n0​],然后我们就可以迭代计算后续所有的 ( f n , l n ) (f_n,l_n) (fn​,ln​) 了。

当我们遇到 d n + 1 ≠ 0 d_{n+1} \neq 0 dn+1​=0 时,我们可以这么选取 f m f_m fm​:

  1. 找到 l m < l m + 1 = ⋯ = l n l_m < l_{m+1} = \cdots = l_n lm​<lm+1​=⋯=ln​,此时必然有 f m f_m fm​ 无法约束 a [ 1 : m + 1 ] \textbf{a}[1:m+1] a[1:m+1],于是存在对应的 d m + 1 ≠ 0 d_{m+1} \neq 0 dm+1​=0 是可逆元

  2. 由于 l n = l m + 1 = max ⁡ ( l m ,   m + 1 − l m ) > l m l_n = l_{m+1} = \max(l_m,\, m+1-l_m) > l_m ln​=lm+1​=max(lm​,m+1−lm​)>lm​,因此必然有 l n = m + 1 − l m l_{n} = m+1-l_m ln​=m+1−lm​,从而 n − m + l m = n + 1 − l n n-m+l_m = n+1-l_n n−m+lm​=n+1−ln​,即
    deg ⁡ ( t a i l n ( x ) − d n + 1 d m + 1 − 1 x n − m t a i l m ( x ) ) ≤ max ⁡ ( l n ,   n + 1 − l n ) \deg(tail_n(x) - d_{n+1}d_{m+1}^{-1}x^{n-m}tail_m(x)) \le \max(l_n,\, n+1-l_n) deg(tailn​(x)−dn+1​dm+1−1​xn−mtailm​(x))≤max(ln​,n+1−ln​)

    因此,我们设置 LFSR 的级数为 l n + 1 = max ⁡ ( l n ,   n + 1 − l n ) l_{n+1} = \max(l_n,\, n+1-l_n) ln+1​=max(ln​,n+1−ln​)

定理 1:如果 ( f , l ) (f,l) (f,l) 可以约束前 n n n 项,而无法约束第 n + 1 n+1 n+1 项。那么对于可以生成前 n + 1 n+1 n+1 项的 LFSR,它的级数必然满足:
l ′ ≥ n + 1 − l l' \ge n+1-l l′≥n+1−l

因此,上述的 f m f_m fm​ 的选择就是最优的。使用其他的选择,得到的 LFSR ( f n + 1 , l n + 1 ) (f_{n+1},l_{n+1}) (fn+1​,ln+1​) 的级数不会更短。于是 BM 算法产生的每个 ( f n , l n ) (f_n,l_n) (fn​,ln​) 就是可以生成 a 1 a 2 ⋯ a n a_1a_2\cdots a_n a1​a2​⋯an​ 的(不一定唯一)最短 LFSR。

定理 2:如果 ( f , l ) (f,l) (f,l) 可以约束 N N N 长的序列 a \bf a a 的线性综合解,那么它是唯一解    ⟺    2 l ≤ N \iff 2l \le N ⟺2l≤N

也就是说,如果求解的最终结果满足 l n ≤ n / 2 l_n \le n/2 ln​≤n/2,那么它就是唯一解,与一开始的 f n 0 f_{n_0} fn0​​ 的选择无关。但如果不是,那么选择其他的 f n 0 f_{n_0} fn0​​ 结果就可能会不一样(为了考试!),当然它们都是正确的 LFSR。

BM 算法

给定序列 a = a 1 a 2 ⋯ a N ∈ F N \textbf{a} = a_1a_2 \cdots a_N \in \mathbb F^N a=a1​a2​⋯aN​∈FN,算法如下:

  1. 初始化步骤

    1. 设置 d 0 = 0 d_0 = 0 d0​=0, f 0 = 1 f_0 = 1 f0​=1, l 0 = 0 l_0 = 0 l0​=0
    2. 如果 a i = 0 ,   ∀ 1 ≤ i < n 0 a_i=0,\, \forall 1 \le i < n_0 ai​=0,∀1≤i<n0​,那么设置 d i = 0 d_i = 0 di​=0, f i = 1 f_i = 1 fi​=1, l i = 0 l_i = 0 li​=0
    3. 设置 d n 0 = a n 0 d_{n_0} = a_{n_0} dn0​​=an0​​, f n 0 = 1 − d n 0 x n 0 f_{n_0} = 1-d_{n_0}x^{n_0} fn0​​=1−dn0​​xn0​, l n 0 = n 0 l_{n_0} = n_0 ln0​​=n0​
  2. 迭代步骤

    1. 假设已经获得了 ( f n , l n ) (f_n,l_n) (fn​,ln​),那么计算 d n + 1 = a n + 1 + ∑ i = 1 l n c i a n + 1 − i d_{n+1} = a_{n+1} + \sum_{i=1}^{l_n} c_i a_{n+1-i} dn+1​=an+1​+∑i=1ln​​ci​an+1−i​
    2. 如果 d n + 1 = 0 d_{n+1} = 0 dn+1​=0,那么设置 f n + 1 = f n f_{n+1} = f_n fn+1​=fn​, l n + 1 = l n l_{n+1} = l_n ln+1​=ln​
    3. 如果 d n + 1 ≠ 0 d_{n+1} \neq 0 dn+1​=0,那么
      1. 寻找 l m < l m + 1 = ⋯ = l n l_m < l_{m+1} = \cdots = l_n lm​<lm+1​=⋯=ln​ 的 m m m 对应的 f m f_m fm​ 和 d m + 1 ≠ 0 d_{m+1} \neq 0 dm+1​=0
      2. 设置 f n + 1 = f n − d n + 1 d m + 1 − 1 x n − m f m f_{n+1} = f_n - d_{n+1}d_{m+1}^{-1} x^{n-m} f_m fn+1​=fn​−dn+1​dm+1−1​xn−mfm​, l n + 1 = max ⁡ ( l n ,   n + 1 − l n ) l_{n+1} = \max(l_n,\, n+1-l_n) ln+1​=max(ln​,n+1−ln​)
    4. 当 n + 1 = N n+1=N n+1=N 时,结束迭代,输出 ( f N ,   l N ) (f_N,\, l_N) (fN​,lN​)

例子

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐