0%

Crypto · LFSR初探

LFSR

线性反馈移位寄存器,一个LFSR由若干个时钟存储元件(触发器)和一个反馈路径组成。

几个概念

  • LFSR作用

    产生长伪随机序列,通常为二进制

  • 存储元件(触发器)

    存储数据的一个概念,知道可以存数据即可。

  • 反馈路径

    计算移位寄存器中某些触发器的XOR和,并将其传递。

  • LFSR由若干时钟存储元件(触发器)组成,而存储元件的个数就是LFSR的度。

简单LFSR

考虑度m=3、拥有三个触发器的FF2、FF1和FF0,且反馈路径如下

image-20220130095350383

让我们来看看它究竟是如何运作的,又有什么性质。

  1. 假设初始状态为:S2=1, S1=0, S0=0 ;最右位的FF0往外输出

  2. 在每一个时间单位下,内部状态位向右移动一位

    从左往右看

    • 原先S2的值(1)给到 FF1
    • 原先S1的值(0)给到 FF0
    • 原先S0的值(0)和 原先S1的值(0)异或后(得到0)给到 FF2
    • 原先S0的值(0)输出,LFSR得到数据 0
  3. 多次移位后,得到数据

    Clk FF2 FF1 FF0=si
    0 1 0 0
    1 0 1 0
    2 1 0 1
    3 1 1 0
    4 1 1 1
    5 0 1 1
    6 0 0 1
    7 1 0 0
    8 0 1 0

可见,LFSR从第6个时间周期后开始重复,这意味此LFSR周期长度为7

接下来,我们试着用一个简单的公式来描述此过程。

$$ S3 ≡ S1 + S0 \mod 2$$

$$ S4 ≡ S2 + S1 \mod 2$$

$$ S5 ≡ S3 + S2 \mod 2$$

$$ …$$

其中 Si 就是第i次输出的数据,i从0开始

而这里的S3其实就是第2步中FF2获得的值,右移了几次所输出的

不难归纳出输出位的计算公式为:

$$ S_{i+3} ≡ S_{i+1} + S_i \mod 2$$

其中,i = 0, 1, 2…

通过以上这个简单例子,我们便知晓了LFSR的大致流程具有周期这个性质。

接下来,向现实迈进!

LFSR通用形式

考虑一个度为m的LFSR通用形式。

还得再提一个概念

  • 反馈系数

    某条反馈路径是否活跃取决于反馈系数P0, P1, …, Pm-1

    • 若Pi = 1,此反馈是活跃的
    • 若Pi = 0,对应触发器的输出将不会被反馈

image-20220130095532809

反馈系数很好理解。

在简单LFSR只异或、移位的基础上,多乘一个系数P罢了。

例如,对于 Sm-1 在一个周期内

  1. 它的值给到下一个触发器
  2. 还有条支路,导致 Sm-1 需要去乘 Pm-1,再异或

此时可见,若Pm-1 = 0,乘后得到的结果就是0,0再去与其他值异或,对异或的结果不造成影响。

接下来我们再对其具体性质进行剖析。

假设这个LFSR初始加载的值为S0, …, Sm-1, 则LFSR的下一个输出位Sm,可表示为:

$$S_m ≡ S_{m-1}P_{m-1} +···+ S_1P_1 + S_0P_0 \mod 2$$

再下一个输出位:

$$S_{m+1} ≡ S_{m}P_{m-1} +···+ S_2P_1 + S_1P_0 \mod 2$$

归纳,可得:

$$S_{i+m} ≡ \sum_{j=0}^{m-1} P_{j}·S_{i+j} \mod 2; S_i, P_j∈{0, 1}; i = 0, 1, 2, …$$

为什么下一位输出是Sm,可以试着理解下

接下来介绍的概念,虽未见其作用,但终究决定拓展开来。

简单LFSR的例子中,我们知道了周期性

问:度为m的LFSR可以产生 最大的 不重复序列长度是多少?

答案是显而易见的

度为m的LFSR可以产生的最大序列长度为$ 2^m-1 $

一言以蔽之

  • LFSR的输出由m个内部寄存器状态唯一确定

  • 给定某个状态,也能确定下一个状态

所以,只要LFSR 回到 从前有过的任何一个状态,它将立即开始重复。

因此,问最大序列长度 就是 问最小正周期 也相当于 问m个寄存器能有多少个非零状态,自然是$ 2^m-1 $

注:必须排除所有为零的状态。若某LFSR状态为全零,输出值将一直为0,谈周期性没意义。

本原多项式

LFSR还可以用多项式表达

$$ P(x)=x^m+P_{m-1}x^{m-1}+…+P_1x+P_0 $$

最大长度LFSR(周期为$ 2^m-1 $)拥有所谓的本原多项式

本原多项式是一种特殊的不可约分多项式,因子除了1就是多项式本身,此特性便利计算。

而对于同一个度m,可能存在多个本原多项式。

可见表格,其中(0, 1, 2)表示$1+ x + x^2$ ; (0, 2, 5)表示$ 1 + x^2 + x^5 $

那么,再对照多项式表达,便可知道对应反馈系数P的取值。

image-20220130095639887

LFSR · 已知明文攻击

如果将LFSR当作序列密码使用,密钥K就是反馈系数向量(Pm-1, …, P1, P0)

若知道某些明文与对应的密文,便可发起攻击。

这里假设已经知道度m(不知道的话,可以一个个值爆破出来

理一下已知参数

  • 度: m

  • 已知明文: x0, x1, …, x2m-1

  • 对应密文: y0, y1, …, y2m-1

第一步,异或得到2m个密钥序列位

$$ S_i ≡ x_i + y_i \mod 2; i=0, 1, …, 2m-1 $$

第二步,找出反馈系数Pi(密钥)

依据先前讨论,有 S 与 P 关系如下:

$$S_{i+m} ≡ \sum_{j=0}^{m-1} P_{j}·S_{i+j} \mod 2; S_i, P_j∈{0, 1}; i = 0, 1, 2, …$$

所以,得到:

$$ i=0, S_m ≡ P_{m-1}S_{m-1}+…+P_1S_1+P_0S_0 \mod 2$$

$$ i=0, S_{m+1} ≡ P_{m-1}S_{m}+…+P_1S_2+P_0S_1 \mod 2$$

$$ … $$

$$ i=m-1, S_{2m-1} ≡ P_{m-1}S_{2m-2}+…+P_1S_m+P_0S_{m-1} \mod 2$$

现在,咱有了m个未知数(P0, P1, …, Pm-1)的m个线性等式

可利用高斯消去、矩阵求逆等方法来解此线性等式系统

思路通而题可做矣