非线性反馈移位寄存器

介绍

为了使得密钥流输出的序列尽可能复杂,会使用非线性反馈移位寄存器,常见的有三种

  • 非线性组合生成器,对多个 LFSR 的输出使用一个非线性组合函数

  • 非线性滤波生成器,对一个 LFSR 的内容使用一个非线性组合函数

  • 钟控生成器,使用一个(或多个)LFSR 的输出来控制另一个(或多个)LFSR 的时钟

非线性组合生成器

简介

组合生成器一般如下图所示。

image-20180713223743681

Geffe

这里我们以 Geffe 为例进行介绍。Geffe 包含 3 个线性反馈移位寄存器,非线性组合函数为

$F(x_1,x_2,x_3)=(x_1 \and x_2) \oplus (\urcorner x_1 \and x_3)=(x_1 \and x_2) \oplus ( x_1 \and x_3)\oplus x_3$

2018 强网杯 streamgame3

简单看一下题目

可以看出,该程序与 Geffe 生成器非常类似,这里我们使用相关攻击方法进行攻击,我们可以统计一下在三个 LFSR 输出不同的情况下,最后类 Geffe 生成器的输出,如下

$x_1$
$x_2$
$x_3$
$F(x_1,x_2,x_3)$

0

0

0

0

0

0

1

1

0

1

0

0

0

1

1

0

1

0

0

0

1

0

1

1

1

1

0

1

1

1

1

1

可以发现

  • Geffe 的输出与 $x_1$ 相同的概率为 0.75

  • Geffe 的输出与 $x_2$ 相同的概率为 0.5

  • Geffe 的输出与 $x_3$ 相同的概率为 0.75

这说明输出与第一个和第三个的关联性非常大。 因此,我们可以暴力去枚举第一个和第三个 LFSR 的输出判断其与 类 Geffe 的输出相等的个数,如果大约在 75% 的话,就可以认为是正确的。第二个就直接暴力枚举了。

脚本如下

运行结果如下

从而 flag 为 flag{01b9cb05979c16b2f3}。

题目

  • 2017 WHCTF Bornpig

  • 2018 Google CTF 2018 Betterzip

参考

  • https://www.rocq.inria.fr/secret/Anne.Canteaut/MPRI/chapter3.pdf

  • http://data.at.preempted.net/INDEX/articles/Correlation_Attacks_Geffe.pdf

Last updated