参考网课:吉林大学密码学

注:第一章引言部分略过

目录

2. 流密码

2.1 流密码的基本概念

2.1.1 同步流密码

2.1.2 有限状态自动机

2.2 线性反馈移位寄存器

2.3 线性反馈移位寄存器的一元多项式表示

2.4 m序列的伪随机性

2.5 m序列密码的破译

2.6 非线性序列

2.6.1 Geffe序列生成器

2.6.2 J-K触发器

2.6.3 Pless生成器

2.6.4 钟控序列生成器


2. 流密码

2.1 流密码的基本概念

流密码的基本思想是利用密钥k产生一个密钥流z=z_0z_1...,并使用如下规则对明文串x=x_0x_1x_2...加密:y=y_0y_1y_2...=E_{z0}E_{z1}E_{z2}...。密钥流由密钥流发生器产生:z_i=f(k,\sigma_i ),这里的\sigma_i是加密器中的记忆元件(存储器)在时刻i的状态,f是由密钥k\sigma_i产生的函数。

分组密码与流密码的区别就在于有无记忆性,如下图:

2.1.1 同步流密码

在同步流密码中,由于与明文字符无关,因而此时密文字符也不依赖于此前的明文字符。因此,可将同步流密码的加密器分成密钥流产生器和加密变换器两部分。如下图所示

同步流密码的加密变换E_{z_1}可以有多种选择,只要保证变换时可逆的即可。实际使用的数字保密通信系统一般都是二元系统,因而在有限域GF(2)上讨论的二元加法流密码,是目前最为常用的流密码体制,加密变换可表示为y_i=z_i \oplus x_i

2.1.2 有限状态自动机

有限状态自动机是具有离散输入和输出(输入集和输出集均有限)的一种数学模型,由以下3部分组成:

  • 有限状态集S=\left \{ s_i|i=1,2,...,l \right \}
  • 有限输入字符集A_1=\left \{ A_{j}^{\left ( 1 \right )} j=1,2,...,m\right \}和有限输出字符集A_2=\left \{ A_{k}^{\left (2 \right )}| k=1,2,...,m\right \}
  • 转移、输出函数A_{k}^{2}=f_1(s_i,A_{j}^{1}),s_h=f_2(s_i,A_{j}^{1})

输出函数f1(可以使用非线性函数增加输出复杂度):根据当前状态和当前输入,产生一个输出。

状态转移函数f_2(一般是线性的函数):根据当前状态和当前输入,更新到下一个状态。

同步密码流的关键是密钥流产生器。一般可将其看成一个参数为k的有限状态自动机,由一个输出符号集Z,一个状态集\sum,两个函数\varphi\psi以及一个初始状态\sigma _0组成(如下图所示)。\varphi为状态转移函数,\psi为输出函数。这种密钥流生成器设计的关键在于找出适当的状态转移函数\varphi和输出函数\psi,使得输出序列Z满足密钥流序列应满足的几个条件,并且要求在设备上是节省的和容易实现的。

目前最流行和实用的密钥流产生器如下图所示,其驱动部分是一个或多个线性反馈移位寄存器(LFSR)

2.2 线性反馈移位寄存器

移位寄存器是流密码产生密钥流的一个主要组成部分。如下图所示为一个n级反馈移位寄存器,由n个二元存储器与一个反馈函数f(a_1,a_2,...,a_n)组成

如果移位寄存器的反馈函数f(a_1,a_2,...,a_n)a_1,a_2,...,a_n的线性函数,则称之为线性反馈移位寄存器LFSR。例如下述反馈函数:

f(a_1,a_2,...,a_n)=c_na_1\oplus c_{n-1}a_2\oplus ...\oplus c_1a_n

其中常数c_i=01c_i至少有一个不为0\oplus是异或运算,c_i=01可以用开关的断开和闭合来实现,如下图所示:

2.3 线性反馈移位寄存器的一元多项式表示

GF(2)全称是Galois Field (2),即阶为 2 的伽罗瓦域(也叫有限域)。简单来说,它是一个只包含两个元素{0, 1}的数学系统,其运算规则完美契合了计算机的二进制逻辑。

设n级线性移位寄存器的输出序列\left \{ a_i \right \}满足递推关系

a_{n+k}=c_1a_{n+k-1} \oplus c_2a_{n+k-2} \oplus ... \oplus c_na_k         (*)

对于任何k\geq 1成立。这种递推关系可以用一个高次多项式

p(x)=1+c_1x+...+c_{n-1}x^{n-1}+c_nx^n

表示,称这个多项式为LFSR的特征多项式或特征多项式

设n级线性移位寄存器对应于递推关系(*),由于a_i\in GF(2)(i=1,2,...,n),所以共有2^n组初始状态,即有2^n个递推序列,其中非恒零的有2^n-1个,记2^n-1个非零序列的全体为G(p(x))

定义2-1 给定序列\left \{ a_i \right \},幂级数

A(x)=\sum_{i=1}^{\infty }a_ix^{i-1}

称为该序列的生成函数。

定理2-1 p(x)=1+c_1x+...+c_{n-1}x^{n-1}+c_nx^nGF(2)上的多项式,G(p(x))中任一序列\left \{ a_i \right \}的生成函数A(x)满足:

A(x)=\frac{\phi(x)}{p(x)}

其中

\phi (x)=\sum_{i=1}^{n}(c_{n-i}x^{n-i}\sum_{j=1}^{i}a_jx^{j-1})

定理2-2 p(x)|q(x)的充要条件是G(p(x)) \subset G(q(x))

定义2-2 p(x)GF(2)上的多项式,使p(x)|(x^p-1)(即p(x)能够整除(x^p-1))的最小p称为p(x)的周期或阶。

定理2-3 若序列\left \{ a_i \right \}的特征多项式p(x)定义在GF(2)上,pp(x)的周期,则\left \{ a_i \right \}的周期r|p

定义2-3 仅能被非0的常数或自身的常数倍除尽,但不能被其它多项式除尽的多项式称为即约多项式或不可约多项式。

定理2-4 设p(x)n次不可约多项式,周期为m,序列\left \{ a_i \right \}\in G(p(x)),则\left \{ a_i \right \}的周期为m

定理2-5 n级LFSR产生的序列有最大周期2^n-1的必要条件是其特征多项式为不可约的。

定义2-4 n次不可约多项式p(x)的阶为2^n-1,则称p(x)n次本原多项式。

定理2-6 设\left \{ a_i \right \}\in G(p(x))\left \{ a_i \right \}m序列的充要条件是p(x)为本原多项式

2.4 m序列的伪随机性

流密码的安全性取决于密钥流的安全性,要求密钥流序列有好的随机性,使得密码分析者无法预测。如果密钥流是周期的,要完全做到随机性是困难的。严格地说,这样的序列不可能做到随机,只能要求截获比周期短的一段时不会泄露更多信息,这样的序列称为伪随机序列。

首先介绍一下游程,设\left \{ a_i \right \} = \left \{ a_1a_2a_3... \right \}为01组成的序列,例如00110111,其前两个数字是00,称为0的2游程;接着是11,是1的2游程;再接下来是0的1游程和1的3游程。

定义2-5 GF(2)上周期为T的序列\left \{ a_i \right \}的自相关函数定义为

R(\tau ) = \frac{1}{T} \sum_{k=1}^{T} (-1)^{a_k} (-1)^{a_{k+\tau }} , 0\leq \tau \leq T-1

\tau = 0时,R(\tau ) = 1;当\tau \neq 0时,称R(\tau )为异相自相关函数。

Golomb提出伪随机周期序列应满足如下三个随机性公设:

  1. 在序列的一个周期内,0与1的个数相差至多为1。
  2. 在序列的一个周期内,长为1的游程占游程总数的\frac{1}{2},长为2的游程占游程总数的\frac{1}{2^2},......,长为i的游程占游程总数的\frac{1}{2^i},......,且在等长的游程中0的游程个数和1的游程个数相等。
  3. 异自相关函数是一个常数。

下面这条定理说明,m序列满足上述三个随机性公设

定理2-7 GF(2)上的nm序列\left \{ a_i \right \}具有如下性质:

  1. 在一个周期内,0、1出现的次数分别是2^{n-1}-12^{n-1}
  2. 在一个周期内,总游程数为2^{n-1};对1\leq i\leq n-2,长为i的游程有2^{n-i-1}个,且0、1游程各半;长为n-1的0游程一个,长为n的1游程一个;
  3. \left \{ a_i \right \}的自相关函数为R(\tau ) = \begin{cases} 1 & \text{ } \tau = 0\\ -\frac{1}{2^n-1}& \text{ } 0 < \tau \leq 2^n-2 \end{cases}

2.5 m序列密码的破译

这一节主要证明了只要敌手知道一段长为2n的明密文对,便可求出一段长为2n的密钥序列,并且可以由此破译整段m序列密码。

2.6 非线性序列

这一节介绍4种由多个LFSR驱动的非线性序列生成器。

2.6.1 Geffe序列生成器

Geffe序列生成器由3个LFSR组成,其中LFSR2作为控制生成器使用,如下左图所示

当LFSR2输出1时,LFSR2与LFSR1连接;当LFSR2输出0时,LFSR2与LFSR3相连接。设LFSRi的输出序列为\left \{ a_i \right \}(i=1,2,3),则输出序列\left \{ b_k \right \}可以表示为

Geffe序列生成器也可以表示为上右图的形式,其中LFSR1和LFSR3作为多路复合器的输入,LFSR2控制多路复合器的输出。设LFSRi的特征多项式分别为n_i次本原多项式,且n_i两两互素,则Geffe序列的周期为

\prod_{3}^{i=1}(2^{n_i}-1)

线性复杂度为

(n_1+n_3)n_2+n_3

2.6.2 J-K触发器

j-k触发器如下图所示,两个输入端分别用J和K表示,其输出c_k不仅依赖输入,还依赖于前一个输出位c_{k-1},即

其中x_1x_2分别是J和K端的输入。

由此可得J-K触发器的真值表如下表所示

J K c_k
0 0 c_{k-1}
0 1 0
1 0 1
1 1 \overline{c_{k-1}}

利用J-K触发器的非线性序列生成器见下图:

令驱动序列\left \{ a_i \right \}\left \{ b_i \right \}分别为m级和n级m序列,则有

当m与n互素且a_0+b_0=1时,序列\left \{ c_k \right \}的周期为(2^m-1)(2^n-1)

2.6.3 Pless生成器

Pless生成器由8个LFSR、4个J-K触发器和1个循环计数器构成,由循环计数器进行选通控制,如下图所示。时刻t输出第t(mod4)个单元。

2.6.4 钟控序列生成器

钟控序列最基本的模型是用一个LFSR控制另外一个LFSR的移位时钟脉冲,如下图所示:

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐