密码学02-流密码

流密码

流密码的基本概念

一次一密

一次一密密码

一种理想的加密方案,叫做一次一密密码(one-time pad),由 Major Joseph Mauborgne和 AT&T 公司的 Gilbert Vernam 1917年发明的

  • 明文:\(x=x_0 x_1 x_2\dots\)

  • 密钥:\(k=k_0 k_1 k_2 \dots\)

  • 密文:\(y=y_0 y_1 y_2 \dots\)

  • 加密函数:\(y_i=x_i+k_i(mod26)\)

  • 解密函数:\(x_i=y_i-k_i(mod26)\)

注:密钥为随机产生的,而且只使用一次

One-time_password.drawio

优点:

  • 密钥随机产生,仅使用一次
  • 无条件安全
  • 加密和解密为加法运算,效率较高

缺点:

  • 密钥长度至少与明文长度一样长,密钥共享困难,不太实用

流密码的定义

概况

流密码(stream cipher)是一种重要的密码体制

  • 明文消息按字符或比特逐位加密
  • 流密码也称为序列密码(Sequence Cipher)

流密码在20世纪50年代得到飞跃式发展

  • 密钥流可以用移位寄存器电路来产生,也促进了线性和非线性移位寄存器发展
  • 流密码主要是基于硬件实现

基本思想

流密码的基本思想

利用密钥k产生一个密钥流\(z=z_0z_1z_2…\),并使用如下规则对明文串\(x=x_0x_{1}x_{2}…\)加密:

\[y=y_0 y_1 y_2 \dots=E_{z_0}(x0) E{z_1}(x1) E{z_2}(x2)\dots \]

密钥流

  • 由密钥流发生器\(f\) 产生:\(z_i=f(k,σ_i)\)
  • \(σ_i\) 是加密器中的记忆元件在时刻 \(i\) 的状态
  • \(f\) 是由 \(k, σ_i\) 产生的函数
流密码.drawio

\[流密码:y_i = E_{z_i}(x_i) \]

分组密码.drawio

\[分组密码:y = E_k(x) \]

内部记忆元件由一组移位寄存器构成

移位寄存器.drawio

\[\sigma_i = (a_0,a_1,\dots,a_n) \]

同步流密码

内部记忆元件的状态 \(σ_i\) 独立于明文字符的叫做同步流密码,否则叫做自同步流密码。

在同步流密码中,由于 \(z_i=f(k,σ_i)\) 与明文字符无关,因而此时密文字符 \(y_i=E_{z_i}(x_i)\) 也不依赖于此前的明文字符。因此,可将同步流密码的加密器分成密钥流产生器和加密变换器两个部分。

体制模型

同步流密码体制模型.drawio

二元加法流密码是目前最为常用的流密码体制,其加密变换可表示为yi=zi ㊉ xi。

二元加法流密码.drawio

需求

一次一密密码加法流密码的原型

  • 如果密钥用作滚动密钥流,则加法流密码就退化成一次一密密码。

密码设计者的最大愿望是设计出一个滚动密钥生成器,使得密钥经其扩展成的密钥流序列具有如下性质:

  • 极大的周期
  • 良好的统计特性
  • 抗线性分析

有限状态自动机

有限状态自动机

模型

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

① 有限状态集\(S=\{ s_i | i=1,2,\dots,l \}\)

②有限输入字符集\(A_1=\{ A^{(1)}_j| j=1,2,\dots,m\}\)和有限输出字符集\(A_2=\{A^{(2)}_k |k=1,2,\dots,n\}\)

③ 转移函数\(A^{(2)}_k=f_1(s_i, A^{(1)}_j )\),$ s_h=f_2(s_i, A^{(1)}_j) $

即在状态为\(s_i\), 输入为\(A^{(1)}_j\)时,输出为\(A^{(2)}_k\), 而状态转移为\(s_h\)

有向图表示

有限状态自动机可用有向图表示,称为转移图

  • 转移图的顶点对应于自动机的状态, 若状态\(s_i\)在输入\(A^{(1)}_i\)时转为状态\(s_j\), 且输出一字符\(A^{(2)}_j\) 则在转移图中, 从状态\(s_i\)到状态\(s_j\)有一条标有\((A^{(1)}_i,A^{(2)}_j)\)的弧线。
有限自动机有向图

矩阵表示

\(S=\{s_1,s_2,s_3\}\)\(A_1=\{A_1^{(1)},A_2^{(1)},A_3^{(1)}\}\)\(A_2=\{A_1^{(2)},A_2^{(2)},A_3^{(2)}\}\), 则该有限状态自动机的矩阵表示如下:

f1 A1(1) A2(1) A3(1)
s 1 A1(2) A3(2) A2(2)
s 2 A2(2) A1(2) A3(2)
s 3 A3(2) A2(2) A1(2)
f2 A1(1) A2(1) A3(1)
s 1 s2 s1 s3
s 2 s3 s2 s1
s 3 s1 s3 s

实例

若输入序列为:

\(A^{(1)}_1,A^{(1)}_2,A^{(1)}_1,A^{(1)}_3,A^{(1)}_3,A^{(1)}_1\)

初始状态为\(s_1\),则得到状态序列:

\(s_1,s_2,s_2,s_3,s_2,s_1,s_2\)

输出字符序列:

\(A^{(2)}_1,A^{(2)}_1,A^{(2)}_2,A^{(2)}_1,A^{(2)}_3,A^{(2)}_1\)

密钥流生成器

产生器

密钥流产生器: 参数为\(k\)的有限状态自动机,

一个输出符号集 \(Z\)、 一个状态集 \(∑\)、两个函数 \(φ\)\(ψ\) 以及一个初始状态 \(σ_0\) 组成。

状态转移函数 \(φ:σ_i→σ_i+1\), 将当前状态σi变为一个新状态\(σ_i+1\)

输出函数\(ψ:σ_i→z_i\), 当前状态σi变为输出符号集中的一个元素 \(z_i\)

作为有限状态自动机的密钥流生成器

作为有限状态自动机的密钥流生成器

设计的关键

  • 关键在于: 找出适当的状态转移函数 \(φ\) 和输出函数 \(ψ\) ,使得输出序列 \(z\) 满足密钥流序列 \(z\) 应满足的随机性条件, 并且要求在设备上是节省的和容易实现的
  • 一般采用线性的 \(φ\) 和非线性的 \(ψ\),这样将能够进行深入的分析并可以得到好的生成器

分解

密钥流生成器的分解
  • 密钥流生成器可分成驱动部分非线性组合部分
  • 驱动部分控制生成器的状态转移,并为非线性组合部分提供统计性能好的序列
  • 非线性组合部分要利用这些序列组合出满足要求的密钥流序列

常见的两种密钥流产生器

目前最为流行和实用的密钥流产生器,其驱动部分是一个或多个LFSR(Linear Feedback Shift Register,线性反馈移位寄存器)

  • 前者称为滤波生成器,或前馈生成器
  • 后者称为非线性组合生成器
  • 还有钟控生成器,缩减生成器,停走生成器等
线性反馈寄存器密钥流产生器 线性反馈寄存器密钥流产生器2

二元序列的伪随机性

二元序列的相关概念

定义

GF(2)上的一个无限序列

\[\underset{\rightarrow}{a} = ( a_1,a_2,\dots,a_n,\dots) \]

称为二元序列, 其中 \(a_i \in GF(2)\)

• 周期:对于二元序列 \(\underset{\rightarrow}{a}\),如果存在正整数\(l\),使得对于一切正整数k都有

\[a_k = a_{k+l} \]

则称 \(\underset{\rightarrow}{a}\) 是周期的。

满足上述条件的最小正整数称为 \(\underset{\rightarrow}{a}\) 的周期,记为 \(p(\underset{\rightarrow}{a})\)

二元序列(Binary Sequence)是一种只包含两种可能值的序列,这两种值通常是0和1。二元序列在计算机科学、信息理论、密码学等领域有着广泛的应用。以下是有关二元序列的详细介绍:

特点

  1. 值的范围: 二元序列中的每个元素都是0或1。这种二元性质使其在计算机中非常容易处理,因为计算机的基本数据单元就是二进制位(bit)。

  2. 长度: 二元序列的长度可以是任意的有限正整数。例如,一个长度为5的二元序列可能是10101

示例

  1. 基本示例
    • 0101101:一个长度为7的二元序列。
    • 111000:一个长度为6的二元序列。

周期的性质

\(GF(2)\) 上的一个无限序列 \(\underset{\rightarrow}{a} = ( a_1,a_2,\dots,a_n,\dots)\) 是周期为 \(p(\underset{\rightarrow}{a})\) 的二元序列,并设正整数 \(l\) 对任何非负整数 \(k\) 都有 \(a_k=a_{k+1}\),则一定有

\[p(\underset{\rightarrow}{a})|l \]

• 证明:设 \(l=qp(\underset{\rightarrow}{a})+r\) , 其中 \(q,r\) 为正整数,且 \(0\le r <p(\underset{\rightarrow}{a})\), 则有

\[a_k = a_{k+l} \\ \Rightarrow a_k = a_{qp(a)+r+k}\\ a_k = a_{r+k} \]

又由于 \(0\le r <p(\underset{\rightarrow}{a})\) , 根据 \(p(\underset{\rightarrow}{a})\) 的极小性可知 $r = 0 $, 因此 \(p(\underset{\rightarrow}{a})|l\)

游程的定义

\(a\)\(GF(2)\) 上周期为 \(p(\underset{\rightarrow}{a})\) 的周期序列。将 \(a\) 的一个周期

\[( a_1,a_2,\dots,a_{p(\underset{\rightarrow}{a})}) \]

依次排列在一个圆周上使 \(a_{p(\underset{\rightarrow}{a})}\)\(a_1\)相连, 把这个圆周上形如

\[\underset{都是1}{0\underbrace{11\dots1}0}\,或\, \underset{都是0}{1\underbrace{00\dots1}1} \]

的一连串两两相邻的项分别称为 \(\underset{\rightarrow}{a}\) 的一个周期中一个 1 游程或一个 0 游程。而 1 游程中 1 的个数或 0 游程中 0 的个数称为游程的长度。

游程的例子

游程的例子

周期为15的二元序列

1100010011010111

011110为1的4游程10001为0的3游程

自相关函数

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

\[R(t)=\sum\limits_k^T(-1)^{a_k}(-1)^{a_{k+1}},0\le t <T-1 \]

\(t=0\)时, \(R(t)=T\); 当\(t≠0\)时,称\(R(t)\)异相自相关函数

二元序列的自相关函数(Autocorrelation Function)用于衡量序列与其自身的相似度。自相关函数是信号处理中一个重要的工具,它可以帮助分析序列的周期性和重复性。

定义
对于一个长度为 \(N\) 的二元序列\(\{x_n\}\),其自相关函数 \(R_k\) 定义为:

\[R_k = \frac{1}{N} \sum_{n=0}^{N-1} x_n \cdot x_{(n+k) \mod > N} \]

  • 这里:
    • \(R_k\) 是自相关函数在滞后 \(k\) 下的值。
    • \(x_n\) 是序列的第 \(n\) 个元素。
    • \(x_{(n+k)\mod N}\) 是在滞后 \(k\) 下的序列元素,取模操作确保序列在末尾后循环回到开始。

示例:

假设有一个长度为 \(N = 4\) 的二元序列 \(\{x_n\} = \{1, 0, 1, 0\}\)。我们可以计算其自相关函数 \(R_k\) 如下:

  1. 滞后 \(k = 0\):

\[R_0=\frac{1}{4}(x0⋅x0+x1⋅x1+x2⋅x2+x3⋅x3)\\ =\frac{1}{4}(1⋅1+0⋅0+1⋅1+0⋅0)\\ =\frac{2}{4}=0.5 \]

  1. 滞后 \(k=1\)

\[R_1=\frac{1}{4}(x0⋅x1+x1⋅x2+x2⋅x3+x3⋅x0)\\ =\frac{1}{4}(1⋅0+0⋅1+1⋅0+0⋅1)\\ =\frac{0}{4}=0 \]

  1. 滞后 \(k=2\)

\[R_2=\frac{1}{4}(x0⋅x2+x1⋅x3+x2⋅x0+x3⋅x1)\\ =\frac{1}{4}(1⋅1+0⋅0+1⋅1+0⋅0)\\ =\frac{2}{4}=0.5 \]

  1. 滞后\(k=3\)

\[R_3=\frac{1}{4}(x0⋅x3+x1⋅x0+x2⋅x1+x3⋅x2)\\ =\frac{1}{4}(1⋅0+0⋅1+1⋅0+0⋅1)\\ =\frac{0}{4}=0 \]

因此,该序列的自相关函数为:

\[R=[0.5,0,0.5,0] \]

两种自相关函数的区别

1. 第一种自相关函数

公式:\(R(t)=\sum\limits_k^T(-1)^{a_k}(-1)^{a_{k+1}},0\le t <T-1\)

解释

  • 这是一个特定形式的自相关函数计算公式,其中 \(a_k\) 是二元序列中的元素。
  • 公式中,\((-1)^{a_k}\) 将二元序列中的0和1转换为-1和1,因此公式可以看作是计算了二元序列经过这种转换后的自相关。
  • \((-1)^{a_k}\)\((-1)^{a_{k+1}}\) 之间的乘积用于表示序列在不同位置上的相关性。这种形式的自相关函数常用于检测序列的周期性和模式。
2. 经典自相关函数

公式:\(R_k = \frac{1}{N} \sum_{n=0}^{N-1} x_n \cdot x_{(n+k) \mod > N}\)

解释

  • 这是经典的自相关函数公式,适用于任何二元序列或一般的序列。
  • \(x_n\) 是序列在位置 \(n\) 上的值,\(x_{(n+k) \mod N}\) 是在滞后 \(k\) 后的值。
  • 这个公式计算了序列在滞后 \(k\) 下的自相关程度,结果为滞后 \(k\) 时的相关性,通常用于分析信号的周期性和相似度。
主要区别

形式和转换

  • 第一种公式通过 \((-1)^{a_k}\) 的转换将二元序列中的0和1映射为-1和1,这使得它更适用于特定的分析,例如检测周期性和相位关系。
  • 经典自相关函数公式直接使用二元序列中的0和1进行计算,不进行转换。

计算方式

  • 第一种公式是通过对序列的转换后进行计算,结果通常用于更具体的信号处理或序列分析。
  • 经典自相关函数公式更通用,用于计算序列的自相关值,结果通常用于了解序列的整体相关性和周期性。

适用范围

  • 第一种公式通常用于特殊的二元序列分析,特别是在信号处理中或特定的数学模型中。
  • 经典自相关函数公式适用于一般的自相关分析,包括二元序列和其他类型的序列。

伪随机序列

Golomb伪随机公设

3个随机性公设:
  1. 在序列的一个周期内, 0与1的个数相差至多为1

    • 说明{ai}中0与1出现的概率基本上相同
  2. 在序列的一个周期内,长为i的游程占游程总数的1/2i (i=1,2,…), 且在等长的游程中0的游程个数和1的游程个数相等。

    • 说明0与1在序列中每一位置上出现的概率相同
  3. 异相自相关函数是一个常数。

    • 意味着通过对序列与其平移后的序列做比较,不能给出其他任何信息

伪随机序列的定义

\(\underset{\rightarrow}{a} = ( a_1,a_2,\dots,a_n,\dots)\) 是 GF(2) 上一个周期等于 \(p(\underset{\rightarrow}{a})\) 的周期序列。

如果对于一切 \(t\not\equiv{0(mod{p(\underset{\rightarrow}{a})})}\), 有

\[R(t)=-1 \]

则称序列 \(\underset{\rightarrow}{a} = ( a_1,a_2,\dots,a_n,\dots)\) 为伪随机序列。

可以证明上述定义满足Golomb三个伪随机公设,详情参考万哲先著。代数和编码(第三版)。高等教育出版社, 2007.

伪随机序列的例子

游程的例子

周期为15的二元序列

100010011010111

  1. 0的个数为7

    • 1的个数为8
  2. 0的游程个数为4

    • 1的游程个数为4
  3. 异相自相关函数等于-1

伪随机序列还应满足的条件

  1. 周期 \(p\) 要足够大, 如大于\(10^{50}\)
  2. 序列 \(\{a_i\}_{i \ge 1}\) 产生易于高速生成;
  3. 当序列 \(\{a_i\}_{i \ge 1}\) 的任何部分暴露时, 要分析整个序列, 提取产生它的电路结构信息, 在计算上是不可行的, 称此为不可预测性。

3决定了密码的强度, 是流密码理论的核心。 它包含了流密码要研究的许多主要问题, 如线性复杂度、 相关免疫性、 不可预测性等等。

线性反馈移位寄存器

反馈移位寄存器

反馈移位寄存器

移位寄存器是流密码产生密钥流的一个主要组成部分。

\(GF(2)\)上一个n级反馈移位寄存器由 \(n\) 个二元存储器与一个反馈函数\(f(a1,a2,…,an)\)组成,如下图所示。

反馈移位寄存器

反馈移位寄存器的状态

在任一时刻,这些级的内容构成该反馈移位寄存器的状态,每一状态对应于\(GF(2)\)上的一个n维向量,共有 \(2^n\)种可能的状态。每一时刻的状态可用 \(n\) 维向量

\[(a_1,a_2,\dots,a_n) \]

反馈函数

初始状态由用户确定。

反馈函数\(f(a_1,a_2,\dots,a_n)\)\(n\)元布尔函数,即函数的自变量和因变量只取0和1这两个可能的值。

函数中的运算有逻辑与、逻辑或、逻辑补等运算。

反馈函数

例子

如图是一个3级反馈移位寄存器,其初始状态\((a_1,a_2,a_3)=(1,0,1)\), 输出可由右表给出。

3级反馈移位寄存器
\(状态(a_3,a_2,a_1)\) \(输出\)
\(1 0 1\) \(1\)
\(1 1 0\) \(0\)
\(1 1 1\) \(1\)
\(0 1 1\) \(1\)
\(1 0 1\) \(1\)
\(1 1 0\) \(0\)

即输出序列为101110111011…,周期为4。

线性反馈移位寄存器

线性反馈移位寄存器LFSR(linear feedback shift register)

GF(2)上的n级线性反馈移位寄存器

线性反馈移位寄存器 $$ f(a_1, a_2, \dots, a_n) = c_1a_n\oplus c_2a_{n-1}\oplus\dots \oplus c_na_1 $$

LFSR的反馈函数

输出序列\(\{a_t\}\)满足:

\[f(a_1,a_2,\dots,a_n) = c_1a_n\oplus c_2a_{n-1}\oplus\dots \oplus c_na_1 \\ a_{n+1}=c_1a_n\oplus c_2a_{n-1}\oplus\dots\oplus c_na_1\\ a_{n+2}=c_1a_{n+1}\oplus c_2a_{n}\oplus\dots\oplus c_na_2\\ \ldots\ldots\\ a_{n+t}=c_1a_{n+t-1}\oplus c_2a_{n+t-2}\oplus\dots\oplus c_na_t,t=1,2,\dots \]

线性反馈移位寄存器: 实现简单、速度快、有较为成熟的理论,成为构造密钥流生成器的最重要的部件之一。

LFSR的实例

下图是一个5级线性反馈移位寄存器,其初始状态为\((a_1,a_2,a_3,a_4,a_5) =(1,0,0,1,1)\)

5级线性反馈移位寄存器

反馈函数:\(a_{5+t}=a_{t+3}\oplus a_t,t=1,2,\dots\)

求解如:

\(a_6 = a_{5+1} = a_{1+3}\oplus a_1 = a_4\oplus a_1 = 1 \oplus 1 = 0\)

可求出输出序列为 :

\(\underbrace{10011}_{初始序列}\,01001000010101110110001111100110…\)

周期31。

密钥流的周期

给定密钥流\(\{a_i\}=a_1,a_2,a_3,\dots a_n,\dots\),如果存在整数 \(r\),使得对于任意 \(a_i\) ,都有 \(a_{i+r}=a_i\),则称 \(r\) 为该密钥流的一个周期,称满足 \(a_{i+r} = a_i\)最小正整数为该密钥流的最小周期或简称周期。

LFSR的性质

总是假定\(c_1,c_2,…,c_n\)中至少有一个不为0,否则\(f(a1,a2,\dots,an)\equiv 0\)。总是假定\(c_n=1\)

  • LFSR输出序列的性质: 完全由其反馈函数决定。
  • n级LFSR状态数: 最多有\(2^n\)
  • n级LFSR的状态周期: \(\le2^{n-1}\)
  • 输出序列的周期=状态周期, \(\leq2^{n-1}\)

选择合适的反馈函数可使序列的周期达到最大值 \(2^{n-1}\) , 周期达到最大值的序列称为\(m\)

m-序列

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

定义2.1\(n\)级线性移位寄存器的输出序列满足递推关系:

\[a_{n+k}=c_1a_{n+k-1}\oplus c_2a_{n+k-2}\oplus\dots\oplus c_na_{k} \]

用延迟算子 \(D(Da_k=a_{k-1})\) 作为未定元, 给出的反馈多项式为:

\[p(D)=1+c_1D+\dots +c_{n-1}D^{n-1}+c_nD^{n} \]

这种递推关系可用一个一元高次多项式 :

\[p(x)=1+c_1x+\dots +c_{n-1}x^{n-1}+c_nx^{n} \]

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

关于特征多项式的解释

\[a_{n+k}=c_1a_{n+k-1}\oplus c_2a_{n+k-2}\oplus\dots\oplus c_na_{k} \\ 由\,a_{n+k}\oplus a_{n+k}=0 有 \\ \Leftrightarrow a_{n+k}\oplus c_1a_{n+k-1}\oplus c_2a_{n+k-2}\oplus\dots\oplus c_na_{k} = 0 \]

\(D(a_k)=a_{k-1}\),用 \(p(D)=1+c_1D+\dots+c_bD^n\) 作用于 \(a_{n+k}\) 后恰好就是上式左侧,即:

\[p(D)(a_{n+k})=(1+c_1D+\dots+c_nD^n)\\ = a_{n+k}+c_1D(a_{n+k})+\dots +c_nD^n(a_{n+k})\\ = a_{n+k}+c_1a_{n+k-1}+c_2a_{n+k-2}+\dots +c_na_k \]

生成函数

定义2.2 给定序列{ai}, 幂级数 :

\[A(x)=\sum^{\infty}_{i=1}a_ix^{i-1} \]

称为该序列的生成函数

生成函数的性质

定理2.1 设 \(p(x)=1+c_1x+ \dots +c_{n-1}x^{n-1}+c_n x_n\)\(GF(2)\)上的多项式, \(G(p(x))\)中任一序列\({a_i}\)的生成函数\(A(x)\)满足:

\[A(x)=\frac{\phi(x)}{p(x)}\\ 其中\,\phi(x)=\sum^n_{i=1}(c_{n-i}x^{n-1}\sum^i_{j=1}a_jx^{j-1}) \]

一些定理和定义

根据初始状态的不同,由递推关系\((*)\)生成的非恒零的序列有\(2^n-1\)个,记这\(2^n-1\)个非零序列的全体为\(G(p(x))\)

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

——该定理说明:可用\(n\)级LFSR产生的序列,也可用级数更多的LFSR来产生。

定义2.3\(p(x)\)\(GF(2)\)上的多项式,使\(p(x)|(x^p-1)\)成立的最小正整数\(p\)称为\(p(x)\)的周期或阶。

定理2.3 若序列\({ai}\)的特征多项式\(p(x)\)定义在\(GF(2)\)上, \(p\)\(p(x)\)的周期,则\({ai}\)的周期\(r|p\)

—— 该定理说明: \(n\)级LFSR输出序列的周期 \(r\),不依赖于初始条件,而依赖于特征多项式 \(p(x)\)

m-序列产生的条件

不可约多项式

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

m-序列产生的必要条件

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

该定理的逆不成立,即LFSR的特征多项式为不可约多项式时,其输出序列不一定是m序列。

定理2.5 的反例

例2.4 \(f(x)=x^4+x^3+x^2+x+1\)\(GF(2)\)上的不可约多项式,这可由\(x,x+1,x^2+x+1\)都不能整除f(x)得到。以f(x)为特征多项式的LFSR的输出序列可由

\[a_k=a_{k-1}\oplus a_{k-2}\oplus a_{k-3}\oplus a_{k-4}(k≥4) \]

和给定的初始状态求出,设初始状态为0001,则输出序列为000110001100011…,周期为5,不是\(m\)序列。

m-序列产生的充要条件

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

定理2.6\({ai}\in G(p(x))\)\({ai}\)\(m\)序列的充要条件是\(p(x)\)本原多项式

m-序列举例

例2.5 设\(p(x)=x^4+x+1\), 若LFSR以\(p(x)\)为特征多项式,则输出序列的递推关系为

\[a_k=a_{k-1}\oplus a_{k-4}(k\ge 4) \]

若初始状态为1001,则输出为

\[\underline{100100011110101}100100011110101\dots \]

周期为\(2^4-1=15\)

若初始状态为1000,则输出为

\[\underline{100011110101100}100011110101\dots\\ 100\underline{100011110101100}100011110101\dots \]

m-序列的伪随机性

回顾:

游程: 设\({a_i}=(a_1a_2a_3…)\)二元序列, 例如 00110111, 其前两个数字是00,称为0的2游程;接着是11, 是1的2游程;再下来是0的1游程和1的3游程。

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

\[ R(t)=\sum^T_{k=1}(-1)^a_k(-1)^{a_{k+t}},0\leq t\leq T-1 \]

\(t=0\)时, \(R(t)=T\); 当\(t≠0\)时, 称\(R(t)\)为异相自相关函数。

Golomb伪随机公设

3个随机性公设:

  1. 在序列的一个周期内, 0与1的个数相差至多为1。
  • 说明{ai}中0与1出现的概率基本上相同
  1. 在序列的一个周期内,长为\(i\)的游程占游程总数的\(\frac{1}{2^i}(i=1,2\dots)\),且在等长的游程中0的游程个数和1的游程个数相等。

    • 说明0与1在序列中每一位置上出现的概率相同
  2. 异相自相关函数是一个常数

    • 意味着通过对序列与其平移后的序列做比较,不能给出其他任何信息

伪随机序列的定义

\(\underrightarrow{a}=(a_1,a_2,\dots,a_{p(\underrightarrow{a})},\dots)\) 是 GF(2) 上一个周期等于 \(p(\underrightarrow{a})\)的周期序列。如果对于一切\(t\not\equiv0(mod\,p(\underrightarrow{a}))\), 有

\[R(t)=-1 \]

则称序列 \(\underrightarrow{a}=(a_1,a_2,\dots,a_{p(\underrightarrow{a})},\dots)\) 为伪随机序列。

m-序列的伪随机性

m序列满足Golomb的3个随机性公设。

定理2.7 \(GF2)\)上的\(n\)\(m\)序列\({a_i}\)具有如下性质:

  1. 在一个周期内, 0、 1出现的次数分别为\(2^{n-1}-1\)\(2^{n-1}\)

  2. 在一个周期内,总游程数为\(2^{n-1}\); 对\(1≤i≤n-2\), 长为\(i\)的游程有\(2^{n-i}-1\)个,且0、1游程各半;长为\(n-1\)的0游程一个,长为n的1游程一个。

  3. {ai}的自相关函数为 :

\[R(t)= \begin{cases} 2^n-1,&t =0\\ -1,&0<t\leq2^n-2 \\ \end{cases} \]

证明1:

\(n\)\(m\)序列的一个周期内,除了全0状态外, 每个\(n\)长状态(共\(2^n- 1\)个)都恰好出现一次。

LFSR的输出为每个状态的\(a_1\) ,因此输出为1的状态必然是\((**…*1)\)的形式,而\(m\)序列这类状态共有\(2^{n-1}\)个,所以输出中1的个数为\(2^{n-1}\)个。

LFSR

输出为0的状态必然是\((**…*0)\)的形式,而\(m\)序列这类状态共有\(2^{n-1}-1\)个(因为不能有全零状态),所以输出中0的个数为\(2^{n-1}-1\)个。

证明2:

对n=1,2, 易证结论成立。

\(n>2\), 当\(1≤i≤n-2\)时, \(n\)\(m\)序列的一个周期内,长为i的0游程数目等于序列中如下形式的状态数目: \(100…01… …\),其中\(n-i-2\)个可任取0或1。这种状态共有\(2^{n-i-2}\)个。同理可得长为i的1游程数目也等于\(2^{n-i-2}\), 所以长为\(i\)的游程总数为\(2^{n-i-1}\)

由于寄存器中不会出现全0状态,所以不会出现0的\(n\)游程,但必有一个1的\(n\)游程,而且1的游程不会更大,因为若出现1的\(n+1\)游程,就必然有两个相邻的全1状态,但这是不可能的。这就证明了1的\(n\)游程必然出现在如下的串中:

\[0\underbrace{11\dots1}_{n个1}0 \]

当这n+2位通过移位寄存器时,便依次产生以下状态:

\[0\,\underbrace{11\dots1}_{n-1个1}\quad \underbrace{11\dots1}_{n个1}\quad \underbrace{11\dots1}_{n-1个1}\,0 \]

由于 \(0\,\underbrace{11\dots1}_{n-1个1}\quad \underbrace{11\dots1}_{n-1个1}\,0\) 两个状态只能各出现一次,所以不会再有1的n-1游程。

0的n-1游程只有一个

\[1\,\underbrace{00\dots0}_{n-1个0}\,1 \]

于是在一个周期内,总游程数为 :

\[1+1+\sum^{n-1}_{i=1}2^{n-i-1}=2^{n-1} \]

证明3:

\({ai}\)是周期为\(2^n-1\)\(m\)序列,对于任一正整数\(t(0<t<2^n-1)\)\({a_i}+{a_i+t}\)在一个周期内为0的位数正好是序列\({a_i}\)\({a_i+t}\)对应位相同的位数。设序列\({a_i}\)满足递推关系:

\[a_{h+n}=c_1a_{h+n-1}\oplus c_2a_{h+n-2}\oplus\dots\oplus c_na_h\\ \]

\[故:a_{h+n+t}=c_1a_{h+n+t-1}\oplus c_2a_{h+n+t-2}\oplus\dots\oplus c_na_{h+t} \]

\[有:a_{h+n}\oplus a_{h+n+t}=c_1(a_{h+n-1}\oplus a_{h+n+t-1})\oplus c_2(a_{h+n-2}\oplus a_{h+n+t-2})\oplus c_n(a_n\oplus a_{h+t})\\ \]

\(b_j=a_j\oplus a_{j+t}\),序列\({b_j}\)满足:\(b_{h+n}=c_1b_{h+n-1}\oplus c_2b_{h+n-2}\oplus \dots \oplus c_nb_n\)

因为对应同样的特征多项式,所以 也是 序列。

所以

\[R(t)=\sum^T_{k=1}(-1)^{a_k}(-1)^{a_{k+t}}=\sum^T_{k=1}(-1)^{b_k}=2^{n-1}-1-2^{n-1}=-1 \]

m-序列的安全性

寻找m序列的递推关系式。

  1. 已知一段序列,如果知道其反馈多项式,就可以将其后的序列依次求出

  2. 已知序列能否获得相应的反馈多项式(或线性递推式)呢?

    1. 解方程方法——已知序列 \({ai}\) 是由 \(n\) 级线性移存器产生的,并且知道 \({ai}\) 的连续 \(2n\) 位,可用解线性方程组的方法得到反馈多项式。
    2. 线性反馈移位寄存器综合解——Berlekamp-Massey算法

解方程方法

例1 设序列 \(a = (01111000…)\) 是由4级线性移存器所产生序列的连续8个信号,求该移存器的线性递推式。


解:设该4级移存器的线性递推式为:

\[a_{n}=c_{1}a_{n-1}\oplus c_{2}a_{n-2}\oplus c_{3}a_{n-3}\oplus c_{4}a_{n-4}(n\geq_{4}) \]

由于知道周期序列的连续8个信号,不妨设为开头的8个信号,即

\[a_{0}a_{1}a_{2}a_{3}a_{4}a_{5}a_{6}a_{7}=01111000 \]

\(n=4\) 时,由递归式可得:\(a_{4}=c_{1}a_{3}\oplus c_{2}a_{2}\oplus c_{3}a_{1}\oplus c_{4}a_{0}\)

\[\begin{aligned} 即:c_{1}\oplus c_{2}\oplus c_{3}&=1\\ 同理可得:c_{1}\oplus c_{2}\oplus c_{3}\oplus c_{4}&=0\\ c_{2}\oplus c_{3}\oplus c_{4}&=0\\ c_{3}\oplus c_{4}&=0\\ 解方程可得:c_{1}=0,c_{2}=0,c_{3}=1,c_{4}=1 \end{aligned} \]

故所求移存器递推式为:\(a_{n}=a_{n-3}\oplus a_{n-4}(n\geq_{4})\)


例2

\[\begin{aligned} 设敌手得到密文串&: 101101011110010\\ 和相应的明文串&: 011001111111001\\ 因此,可得相应的密钥流&: 110100100001011\\ \end{aligned} \]

进一步假定敌手还知道密钥流是使用5级线性反馈移位寄存器产生的,那么敌手可分别用密钥流中的前10个比特建立如下方程

\[\begin{pmatrix} a_{6} & a_{7} & a_{8} & a_{9} & a_{10} \end{pmatrix} = \begin{pmatrix} c_{5} & c_{4} & c_{3} & c_{2} & c_{1} \end{pmatrix} \begin{pmatrix} a_{1} & a_{2} & a_{3} & a_{4} & a_{5}\\ a_{2} & a_{3} & a_{4} & a_{5} & a_{6} \\ a_{3} & a_{4} & a_{5} & a_{6} & a_{7} \\ a_{4} & aa_{5} & a_{6} & a_{7} & a_{8} \\ a_{5} & a_{6} & a_{7} & a_{8} & a_{9} \end{pmatrix} \]

\[\begin{pmatrix} 0 & 1 & 0 & 0 & 0 \end{pmatrix}= \begin{pmatrix} c_{5} & c_{4} & c_{3} & c_{2} & c_{1} \end{pmatrix} \begin{pmatrix} 1 & 1 & 0 & 1 & 0 \\ 1 & 0 & 1 & 0 & 0 \\ 0 & 1 & 0 & 0 & 1 \\ 1 & 0 & 0 & 1 & 0 \\ 0 & 0 & 1 & 0 & 0 \end{pmatrix} \]

\[\begin{pmatrix} 1 & 1 & 0 & 1 & 0 \\ 1 & 0 & 1 & 0 & 0 \\ 0 & 1 & 0 & 0 & 1 \\ 1 & 0 & 0 & 1 & 0 \\ 0 & 0 & 1 & 0 & 0 \end{pmatrix}^{-1}= \begin{pmatrix} 0 & 1 & 0 & 0 & 1 \\ 1 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 1 \\ 0 & 1 & 0 & 1 & 1 \\ 1 & 0 & 1 & 1 & 0 \end{pmatrix} \]

从而得到

\[\begin{pmatrix} c_{5} & c_{4} & c_{3} & c_{2} & c_{1} \end{pmatrix}= \begin{pmatrix} 0 & 1 & 0 & 0 & 0 \end{pmatrix} \begin{pmatrix} 0 & 1 & 0 & 0 & 1 \\ 1 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 1 \\ 0 & 1 & 0 & 1 & 1 \\ 1 & 0 & 1 & 1 & 0 \end{pmatrix} \]

所以

\[\begin{pmatrix} c_{5} & c_{4} & c_{3} & c_{2} & c_{1} \end{pmatrix}= \begin{pmatrix} 1 & 0 & 0 & 1 & 0 \end{pmatrix} \]

密钥流的递推关系为

\[a_{i+5}=c_{5}a_{i}\oplus c_{2}a_{i+3}=a_{i}\oplus a_{i+3} \]

密钥流的递推关系为

\[a_{i+5}=c_{5}a_{i}\oplus c_{2}a_{i+3}=a_{i}\oplus a_{i+3} \]

线性反馈移位寄存器综合

根据密码学的需要,对线性反馈移位寄存器(LFSR)主要考虑下面两个问题:

  1. 如何利用级数尽可能短的LFSR产生周期大、随机性能良好的序列。
  • 这是从密钥生成角度考虑,用最小的代价产生尽可能好的、参与密码变换的序列。
  1. 当已知一个长为N序列 \(\underline{a}\) 时,如何构造一个级数尽可能小的LFSR来产生它。
  • 这是从密码分析角度来考虑,要想用线性方法重构密钥序列所必须付出的最小代价。

线性综合解

\(\underline{ a }=(a_{0},a_{1},\dots a_{N-1})\)\(F_{2}\) 上的长度为N的序列,而 \(f(x)=c_{0}+c_{1}x+c_{2}x^{2}+\dots c_{l}x^l\)\(F_{2}\) 上的多项式,\(c_{0}=1\)

如果序列中的元素满足递推关系:

\[ak=c_{1}a_{k-1}\oplus c_{2}a_{k-2}\oplus\dots \oplus c_{l}a_{k-l},k=1,l+1,\dots,N-1 \]

则称 \(\langle{f(x),l}\rangle\) 产生二元序列 \(\underline{a}\) 。其中 \(\langle{f(x),l}\rangle\) 表示以 \(f(x)\) 为特征多项式的 \(l\) 级线性移位寄存器。

如果 \(f(x)\) 是一个能产生a并且级数最小的线性移位寄存器的特征多项式, \(l\) 是该移存器的级数, 则称 \(\langle{f(x),l}\rangle\) 为序列 \(\underline{a}\)线性综合解

线性移位寄存器的综合问题

线性移位寄存器的综合问题可表述为:给定一个N长二元序列 \(\underline{a}\),如何求出产生这一序列的最小级数的线性移位寄存器,即最短的线性移存器。

  1. 特征多项式 \(f(x)\) 的次数小于 \(l\)。 因为产生 \(\underline{a}\) 且级数最小的线性移位寄存器可能是退化的,在这种情况下 \(f(x)\) 的次数小于 \(l\);并且此时 \(f(x)\) 中的\(c_{l}=0\),因此在特征多项式 \(f(x)\) 中仅要求\(c_{0}=1\),但不要求\(c_{l}=1\)
  2. 规定:0级线性移位寄存器是以 \(f(x)=1\) 为特征多项式的线性移位寄存器, 且 \(n\)\((n=1, 2, …, N)\) 全零序列, 仅由0级线性移位寄存器产生。 事实上, 以f(x)=1为反馈特征多项式的递归关系式是: \(a_k=0, k=0, 1, \dots, n-1\). 因此, 这一规定是合理的。
  3. 给定一个N长二元序列 \(\underline{a}\),求能产生 \(\underline{a}\) 并且级数最小的线性移位寄存器,就是求 \(\underline{a}\) 的线性综合解。 利用 \(B-M\) 算法可以有效的求出。

Berlekamp-Massey算法(B-M算法)

用归纳法求出一系列线性移位寄存器:

\[\langle{f(x),l}\rangle\quad\delta^0f_{n}(x)\leq l_{n},\quad n=1,2,\dots ,N \]

每一个 \(\langle{f_{n}(x),l_{n}}\rangle\) 都是产生序列 \(\underline{a}\) 的前n项的最短线性一位寄存器,在 \(\langle{f_{n}(x),l_{n}}\rangle\) 的基础上构造相应的 \(\langle{f_{n+1}(x),l_{n+1}}\rangle\) ,使得是 \(\langle{f_{n+1}(x),l_{n+1}}\rangle\)
产生给定序列前n+1项的最短移存器,则最后普得到的 \(\langle{f_{N}(x),l_{N}}\rangle\) 就是产生给定N长二院序列 \(\underline{a}\) 的最短的线性移位寄存器。

任意给定一个N长序列 \(\underline{a}=(a_{0},a_{1},\dots,a_{N-1})\) ,按 \(n\) 归纳定义

\[\langle{f_{n}(x),l_{n}}\rangle\qquad n=0,1,2,\dots,N-1 \]

  1. 取初始值: \(f_0(x)=1, l_{0} = 0\)
  2. \(\langle{f_{0}(x),l_{0}}\rangle,\langle{f_{1}(x),l_{1}}\rangle,\dots,\langle{f_{n}(x),l_{n}}\rangle(0\geq{N})\) 均以求得,且 \(l_{0}\geq,l_{1}\geq\dots\geq l_{n}\)
  3. 记:\(f_{n}(x)=c_{0}^{(n)}+c_{1}^{(n)}x+\dots+c_{l}^{(n)}x^{l_{n}}=1,\)再计算:

\[d_{n}=c_{0} \]

非线性序列1

非线性序列
密钥流生成器可分解为驱动子系统和非线性组合子系统,如图所示
![[非线性序列1.png]]

  • 驱动子系统常用一个或多个线性反馈移位寄存器来实现
  • 非线性组合子系统用非线性组合函数F来实现
  • 为了使密钥流生成器输出的二元序列尽可能复杂,也应保证其周期尽可能大、 线性复杂度和不可预测性尽可能高

Geffe序列生成器

Geffe序列生成器由3个LFSR组成,其中LFSR2作为控制生成器使用,如图所示
![[Geffe序列生成器.png]]

  • 当LFSR2输出1时, LFSR2与LFSR1相连接

  • 当LFSR2输出0时, LFSR2与LFSR3相连接
    ![[Geffe序列生成器(续).png]]
    Geffe序列的周期实现了极大化,且0与1之间的分布大体上是平衡的。

若设 \(LFSRi\) 的输出序列为 \(a_{k}^{(i)} (i=1,2,3)\),则输出序列 \(\{b_k\}\) 可以表示为

\[b_{k}=a_{k}^{(1)}a_{k}^{(2)}+a_{k}^{(3)}\overline{a_{k}^{(2)}} =a_{k}^{(1)}a_{k}^{(2)}+a_{k}^{(3)}{a_{k}^{(2)}}+a_{k}^{(3)} \]

设LFSRi的特征多项式分别为ni次本原多项式,且ni 两两互素

则Geffe序列的周期\(=\prod^3_{{i=1}}(i^{n_{i}}-1)\)

线性复杂度 = \((n_{1}+n_{3})n_{2}+n_{3}\)

J-K触发器

J-K触发器如图所示,它的两个输入端分别用J和K表示,其输出ck不仅依赖于输入,还依赖于前一个输出位ck-1, 即

\[c_{k}=\overline{ (x_{1}+x_{2}) }c_{k-1}+x_{1} \]

![[J-K触发器.png]]
其中x1和x2分别是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触发器真值表

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

![[利用J-K触发器的非线性序列生成器.png]]

\[{\large c_{k}=\overline{(a_{k}+b_{k})}c_{k-1}+a_{k}=(a_{k}+b_{k}+1)c_{k-1}+a_{k}} \]

\(m\)\(n\)互素且\(a_{0}+b_{0}=1\)时,序列\(\{c_k\}\)的周期为\((2^m-1)(2^n-1)\)

利用J-K触发器的非线性序列生成器的实例

\(m=2,n=3\), 两个驱动 \(m\) 序列分别为

\[\{a_{k}\}=0,1,1 \]

\[\{b_{k}\}=1,0,0,1,0,1,1,\dots \]

于是,输出序列\(\{ck\}\)\(0,1,1,0,1,0,0,1,1,1,0,1,0,1,0,0,1,0,0,1,0,…,\)
其周期为\((2^2-1)(2^3-1)=21\)

弱点

\(c_{k}=(a_{k}+b_{k}+1)c_{k-1}+a_{k}\)可得

\[c_{k}= \begin{cases} a_{k}, & k-1=0 \\ \overline{b_{k}}, & c_{k-1}=1 \end{cases} \]

  • 如果知道 \(\{c_k\}\) 中相邻位的值\(c_{k-1}\)\({c_k}\), 就可以推断出 \(a_k\)\(b_k\) 中的一个。而一旦知道足够多的这类信息,就可通过密码分析的方法得到序列\(\{a_k\}\)\(\{b_k\}\)
  • 为了克服上述缺点, Pless提出了由多个J-K触发器序列驱动的多路复合序列方案,称为Pless生成器。

Pless生成器

Pless生成器由8个LFSR、 4个J-K触发器和1个循环计数器构成,由循环计数器进行选通控制,如图所示。
![[Pless生成器.png]]

非线性序列2

钟控序列生成器

钟控序列最基本的模型是用一个LFSR控制另外一个LFSR的移位时钟脉冲,如图所示,一个最简单钟控序列生成器
![[钟控序列生成器模型.png]]

  • 假设LFSR1和LFSR2分别输出序列 \(\{a_k\}\)\(\{bk\}\) ,其周期分别为p1和p2。
  • 当LFSR1输出1时,移位时钟脉冲通过与门使LFSR2进行一次移位,从而生成下一位。
  • 当LFSR1输出0时,移位时钟脉冲无法通过与门影响LFSR2。因此LFSR2重复输出前一位。

钟控序列的周期

假设LFSR1和LFSR2分别输出序列 \(\{a_k\}\)\({b_k}\) , 其周期分别为 \(p_{1}\)\(p_{2}\) 。 假设钟控序列 \({c_{k}}\) 的周期为p,可得如下关系:

\[p=\frac{p_{1}p_{2}}{gcd(w_{1},p_{2})},其中w_{1}=\sum^{p_{1}-1}_{i=0}a_{i} \]

\(c_{k}\) 的一个周期至少是LFSR1和LFSR2同时回到初始状态的时刻

  • 显然当运行\(p_{1}× p_{2}\)个节拍后两个LFSR必然回到初态,因此周期至多是 \(p_{1}× p_{2}\)
  • LFSR1运行一个周期, LFSR2运行\(w_{1}=d{t}\) 拍,\(d=gcd(w1,p2)\)
  • 则LFSR1运行 \(\frac{p_{2}}{d}\) 个周期后, LFSR2刚好运行 \(dt\times \frac{p_{2}}{d}=tp_{2}\) 拍,即\(t\)个周期,于是两个LFSR都回到初态,这时运行了 \(\frac{p_{2}}{d}\times p_{1}\)个节拍
  • \(a_{k}\)\(b_{k}\) 的极小特征多项式分别为GF(2)上的m和n次本原多项式 \(f_1(x)\)\(f_2(x)\),且\(m|n\)
    • \(p_{1}=2^m-1,p_{2}=2^n-1\)
    • \(w_{1}\)\({a_{k}}\)一个周期内1的个数,因此 \(w_{1}=2^{m-1}\)
    • \(gcd(w_{1},p_{2})\),所以 \(p=p_{1}p_{2}=(2^m-1)(2^n-1)\)

钟控序列的线性复杂度

可推导出{ck}的线性复杂度为 \(n(2^m-1)\),极小特征多项式为 \(f_{2}(x^{2^m-1})\)

其对应的LFSR2的抽头每隔周期\(p1=2^m-1\)一个,这样,参与运算的每个抽头对应的状态的节奏相同,从而相当于对LFSR2序列进行每 \(2^m-1\) 拍的抽样序列(不计由于LFSR1的0游程而产生的重复),这个序列只是LFSR2的平移和按照LFSR1中的0游程进行迟延,而抽头应该与LFSR2的节奏一致,所以其极小多项式和线性复杂度如上

在这个设置中,LFSR2 的抽头每隔 \(2^m-1\) 个周期被选中。这意味着:

  • LFSR2的抽头位置每隔 \(2^m-1\) 个时钟周期参与运算。这种机制相当于通过 LFSR1 来对 LFSR2 的输出序列进行采样。因为每个抽头位按照这个周期来工作,LFSR2 序列的抽样就遵循了 LFSR1 的周期。

钟控序列的例子

设LFSR1为3级m序列生成器,其特征多项式为\(f_1(x)=1+x+x3\)。设初态为 \(a_{0}=a_{1}=a_{2}=1\) ,于是输出序列为\(\{a_k\}=1,1,1,0,1,0,0,\dots\)

又设LFSR2为3级m序列生成器,且记其状态向量为\({\sigma_{k}}\),则在上图的构造下 \(\sigma_{k}\) 的变化情况如下:

\[\begin{array}{l} \sigma_{0}, & \sigma_{1}, & \sigma_{2}, & \sigma_{3}, & \sigma_{3}, & \sigma_{4}, & \sigma_{4}, & \sigma_{4}, \\ \sigma_{5}, & \sigma_{6}, & \sigma_{0}, & \sigma_{0}, & \sigma_{1}, & \sigma_{1}, & \sigma_{1}, \\ \sigma_{2}, & \sigma_{3}, & \sigma_{4}, & \sigma_{4}, & \sigma_{5}, & \sigma_{5}, & \sigma_{5}, \\ \sigma_{6}, & \sigma_{0}, & \sigma_{1}, & \sigma_{1}, & \sigma_{2}, & \sigma_{2}, & \sigma_{2}, \\\dots \end{array} \]

\(\{c_{k}\}\) 的周期为(23-1)2=49,在它的一个周期内,每个 \(\sigma_{k}\) 恰好出现7次

\(f_2(x)=1+x2+x3\) 为LFSR2的特征多项式,且初态为 \(b_{0}=b_{1}=b_{2}=1\),则\(\{b_k\}=1,1,1,0,0,1,0,1,1,1…\)
![[钟控序列的例子.png]]
\(\{ck\}\)的极小特征多项式为 \(1+x^{14}+x^{21}\),其线性复杂度为 \(3·(2^3-1)=21\),下图是其线性等价生成器。
![[钟控序列的例子线性等价生成器。.png]]

A5流密码算法

A5流密码算法的基本用法

A5流密码算法用于蜂窝式移动电话系统语音和数字加密。

A5/1算法用于用户的手机到基站之间的通信加密, 通信内容到基站后先解密变成明文, 然后再进行基站到基站之间、 以及基站到用户手机之间的信息加密, 完成通信内容在通信过程的加密保护
![[A5_1流密码算法通信模式.png]]

  • 应用环节

只需考察用户A到基站1之间通信内容的加解密,中间消息的传送由基站到基站之间的加密完成,而接收方用户B对消息的加解密与用户A到基站1之间的通信完全类似,只不过是用户B先解密消息。

  • 基本密钥\(K_{A1}\)
  • 基本密钥KA1:预置在SIM卡中,与基站1共享。
  • 生存期:一旦植入SIM卡将不再改变。
  • 用途:用来分配用户和基站之间的会话密钥。
  • 会话密钥 \(k\)
  • 产生方式:在每次会话时,基站产生一个64比特的随机数k。
  • 分配方式:利用基本密钥\(K_{A1}\),使用其它密码算法将k加密传给用户手机。
  • 生存期:仅用于一次通话时间。
  • 明文处理

按每帧228比特分为若干帧后逐帧加密,每帧处理方式相同。

\[M=M_{1}||M_{2}||\dots||M_{i}||\dots\quad |M_{i}|=228 \]

![[A5_1流密码算法加解密.png]]
加密方式:

  • 加密:\(E_{k}=E_{k_{1}}(M_{1})E_{k_{2}}(M_{2})E_{k_{3}}(M_{3})\dots\)
  • 一次通话使用一个会话密钥,对每帧使用不同的帧密钥
  • 帧会话密钥:帧序号,长度为22比特
  • 帧会话密钥共产生228比特密钥流,实现对本帧228比特通信数据的加解密
  • 明密结合方式:逐位异或
  • 一次通话量:至多\(2^{22}\)帧数据,约\(0.89× 2^{30}\)比特

A5/1序列密码算法中的线性反馈移位寄存器

![[A5_1序列密码算法中的线性反馈移位寄存器.png]]
注: A5/1算法中, LFSR的移位方式是左移方式。 各寄存器的编号从第0级编号到第n\(-1\)级。

A5流密码算法的基本原理

算法初始化

初始化是利用一次通话的会话密钥k和帧序号设定三个移存器的起点,即初始状态。

  • Step 1:将三个LFSR的初态都设置为全零向量;
  • Step 2: (密钥参与) 三个LFSR都规则动作64次,每次动作1步。在第 \(i\) 步动作时,三个LFSR的反馈内容都首先与密钥的第 \(i\) 比特异或,并
  • 将异或结果作为LFSR反馈的内容。

密钥参与过程举例

以移存器1为例的密钥参与过程:

\[\begin{aligned} k=k_{64}k_{63}\dots k_{1}\qquad f_{1}(x)&=x^{19}\oplus x^{18}\oplus x^{17}\oplus x^{14}\oplus 1\\ 初始状态:S_{0}&=(x_{18},x_{17},\dots x_{0})=(0,0,\dots,0)\\ 动作1步后状态:S_{0}&=(x_{18},x_{17},\dots x_{0})=(0,0,\dots,k_{1})\\ 动作2步后状态:S_{0}&=(x_{18},x_{17},\dots x_{0})=(0,0,\dots,k_{1},k_{2})\\ 动作14步后状态:S_{0}&=(x_{18},x_{17},\dots x_{0})=(0,0,\dots,k_{1},k_{2},\dots k_{13},k_{14})\\ 动作15步后状态:S_{0}&=(x_{18},x_{17},\dots x_{0})=(0,0,\dots,k_{1},k_{2},\dots,k_{14},k_{1}\oplus k_{15}) \\ 动作64步完成密钥参与过程。 \end{aligned} \]

帧序号参与

  • Step 3: (帧序号参与) 三个LFSR都规则动作22次, 每次动作1步。 在第 \(i\) 步动作时, 三个LFSR的反馈内容都首先与帧序号的第 \(i\) 比特异或, 并将异或的结果作为LFSR反馈的内容;帧序号比特的序号是从最低位编到最高位。
  • 帧序号参与方式:与密钥参与方式相同, 不同的明文数据帧按顺序编号,每个编号为22比特。
  • 记帧序号为:\(T_{0}=t_{22}t_{21}\dots t_{1}=00\dots00\quad T_{1}=t_{22}t_{21}\dots t_{1}=00\dots 01\)
  • 帧密钥参与的目的:对不同的帧设置不同的帧会话密钥, 保证对每帧以不同的起点生成密钥流, 尽可能避免密钥重用。

密钥流生成与加解密

  • A5算法中,采用钟控方式控制3个LFSR来产生密钥流。

  • 钟控信号\(x_{1}x_{2}x_{3}\)的采取: \(x_{1}\)取自LFSR-1第9级; \(x_{2}\)取自LFSR-2第11级;\(x_{3}\)取自LFSR-3第11级 。

  • 控制方式:采用多项式 \(g(x)=x_{1}x_{2}+x_{2}x_{3}+x_{3}x_{1}\) 来确定,取钟控信号和多项式值相同的进行移位,不同的就不动。

\((X1,X2,X2)\) 000 001 010 011 100 101 110 111
LFSR-1 不动 不动
LFSR-2 不动 不动
LFSR-3 不动 不动

钟控方式

略,详见ppt

关于加密

  • Step 4:三个LFSR以钟控方式连续动作100次,但不输出密钥流;
  • Step 5:三个LFSR以钟控方式连续动作114次,在每次动作后,三个LFSR都将最高位寄存器中的值输出,这三个比特的异或就是当前时刻输出的1比特密钥。
    • 连续动作114步,共输出114比特密钥流,用于对用户手机到基站传送的114比特数据的加密
    • 加密方式: \(c_{i}=m_{i}\oplus d_{i};i=1,2,\dots,114\)
  • Step 6:三个LFSR以钟控方式连续动作100次,但不输出密钥流;
  • Step 7:三个LFSR以钟控方式连续动作114次,在每次动作后,三个LFSR都将最高级寄存器中的值输出,这三个比特的模2和就是当前时刻输出的1比特密钥流。
    • 连续动作114步,共输出114比特密钥流,这114比特用于对基站到用户手机传送的114比特数据的解密
    • 解密方式:\(m'_{i}=c'_{i}\oplus d_{i;i=115,116,\dots,228}\)

A5/1算法的弱点

  • 移位寄存器太短容易遭受穷举攻击

    • A5/1算法把主密钥作为算法中三个寄存器的初始值, 长度为64比特。 如果利用已知明文攻击, 只需要知道其中两个寄存器的初始值, 就可以计算出另一个寄存器的初始值, 这只需要\(2^{40}\)步就可以得出寄存器LFSR-1和LFSR-2的结构。
  • 事实上, A5/1加密算法中存在严重的安全问题

    • 利用了GSM通信加密中的两个安全漏洞, 可以通过离线迭代计算生成一个彩虹表, 它包含有密钥和其相对应的输出密码。 这个彩虹表的大小为984GB。 得到了彩虹表之后, 安全专家就可以在短短的九秒内确定用于加密通信数据的密钥。

密钥流生成器的基本原则

设计一个性能良好的序列密码是一项十分困难的任务。最基本的设计原则是“密钥流生成器的不可预测性” ,它可分解为下述基本原则:

  1. 长周期
  2. 高线性复杂度(用最少的移位寄存器来实现)。
  3. 统计性能良好
  4. 足够的“混乱” 。
  5. 足够的“扩散” 。
  6. 抵抗不同形式的攻击

祖冲之密码

  • ZUC 算法最初是面向4G LTE 空口加密设计的序列密码算法
  • 2011年9月被3GPP LTE 采纳为国际加密标准(3GPP TS 33.401)
  • 2012年3月,发布为国家密码行业标准GM/T0001-2012
  • 2016年10月,发布为国家标准GB/T 33133-2016
  • ZUC 算法目前主要用于通信领域
  • ZUC算法是一个基于字设计的同步序列密码算法
  • 种子密钥SK和初始向量IV的长度均为128比特
  • 在SK和IV的控制下,每拍输出一个32比特字
  • 标准起草人:冯登国、林东岱、冯秀涛、周春芳

算法中的符号及含义

数制表示

文中整数如果不加特殊说明都为十进制,如果有前缀“0x” 则表示十六进制,如果有下标“2” 则表示二进制。

例 整数 \(a\) 可以有以下不同数制表示形式。

\[\begin{aligned} a&=1234567890\\ &=0x499602D2\\ &={1001001100101100000001011010010}_{2} \end{aligned} \]

数据位序

文中所有数据的最高位(或字节)在左边,最低位(或字节)在右边。如=10010011001011000000010110100100, 的最高位为其最左边一位1, 的最低位为其最右边一位0

运算符号

\(+\) 两个整数相加
\(ab\) 两个整数 \(a\)\(b\) 相乘
\(=\) 赋值运算
\(mod\) 整数取模
\(\oplus\) 整数间逐比特异或(模2加)
\(\boxed{+}\) \(2^{32}\)
\(a||b\) \(a\)\(b\) 的级联
\(a_{H}\) 整数 \(a\) 的高(最左) 16位
\(a_{L}\) 整数 \(b\) 的低(最右)16位
\(a\lll{k}\) \(a\)循环左移\(k\)
\(a\gg{1}\) \(a\)右移一位
\(a_{1},a_{2},\dots ,a_{n}\) \(a_{i}\)\(b_{i}\) 的并行赋值
算法中的符号及含义

\(a=0x1234,b=0x5678,c=a||b=0x12345678\)

\(a=\overline{ 100100110010110}\overline{ \underline{0}}\underline{000001011010010}_{2}\),则

\[a_{H}=1001001100101100_{2},a_{L}=0000001011010010_{2} \]

\(a=11001001100101100000001011010010_{2}\),则

\[a\gg{1}=1100100110010110000000101101001_{2} \]

例 设 \(a_{1},a_{2},\dots,a_{15},b_{1},b_{2},\dots,b_{15}\) 都是整数,\((a_{1},a_{2},\dots,a_{15})\to(b_{1},b_{2},\dots,b_{15})\)
意味着 \(b_{i}=a_{i}(1\leq i \leq {15})\)

祖冲之密码的算法结构

![[祖冲之密码的算法结构.png]]

线性反馈移位寄存器

线性反馈移位寄存器(LFSR)由16个31比特寄存器单元\(s_{1},s_{2},\dots s_{15}\)组成,每个单元在集合 \(\left\lbrace 1,2,3,\dots,2^{31}-1 \right\rbrace\) 中取值。

线性反馈移位寄存器的特征多项式是有限域 \(GF(2^{31}-1)\) 上的16次本原多项式

\[p\left( x \right)=x^{16}-2^{15}x^{15}-2^{17}x^{13}-2^{21}x^{10}-2^{20}x^4-\left( 2^8+1 \right) \]

其输出为有限域 \(GF(2^{31}-1)\) 上的 \(m\) 序列,具有良好的随机性。

\[s_{16+t}=2^{15}s_{15+t}+2^{17}s_{13+t}+2^{21}s_{10+t}+2^{20}s_{4+t}+\left( 2^8+1 \right) s_{t}(mod 2^{31}-1) \]

线性反馈移位寄存器的运行模式有两种:初始化模式工作模式

(1)初始化模式

在初始化模式中, LFSR接收一个31比特字, 是由非线性函数 \(F\) 的32比特输出 \(W\) 通过舍弃最低位比特得到,即 \(u=W\gg{1}\) 。计算过程如下:

\[\begin{align} &LFSRWithInitialisationMode(u) \\ &\quad1.v=2^{15}s_{15}+2^{17}s_{13}+2^{21}s_{10}+2^{20}s_{4}+(1+2^{8})mod(2^{31}-1) \\ &\quad2.s_{16}=(v+r)mod(2^{31}-1) \\ &\quad 如果 s_{16}=0,则 s_{16}=2^{31}-1 \\ &\quad{4}. \left( s_{1},s_{2},s_{3},\dots,s_{15},s_{16} \right) \to \left( s_{0},s_{1},\dots,s_{14},s_{15} \right) \end{align} \]

(2) 工作模式

在工作模式下, LFSR没有输入。其计算过程如下:

\[\begin{align} &LFSRWithWorkMode( ) \\ &\quad{1}. s_{16}=2^{15}s_{15}+2^{17}s_{13}+2^{21}s_{10}+2^{20}s_{4}+(1+2^{8})s_{0}\mod(2^{31}-1) \\ &\quad 如果s_{16}=0 \qquad则置 s_{16}=2^{31}-1 \\ &\quad (s_{1},s_{2},\dots,s_{15},s_{16})\to (s_{0},s_{1},\dots,s_{14},s_{15}) \end{align} \]

比特重组

比特重组从LFSR的寄存器单元中抽取128比特组成4个32比特字 ,其中前3个字将用于下层的非线性函数 ,第4个字参与密钥流的计算。

![[祖冲之密码的算法结构比特重组.png]]

\[\begin{align} & BitReconstruction() \\ & \quad 1. X_{0}=s_{15H}||s_{9H} \\ & \quad 2. X_{1}=s_{11L}||s_{9H} \\ & \quad 3. X_{2}=s_{7L}||s_{5H} \\ & \quad 4. X_{3}=s_{2L}||s_{0H} \end{align} \]

非线性函数F

非线性函数 有2个32比特长的存储单元 \(R_{1}\)\(R_{2}\) ,其输入为来自上层比特重组的3个32比特字 \(X_{0}、X_{1}、X_{2}\),输出为一个32比特字 。因此,非线性函数 是一个把96比特压缩为32比特的一个非线性压缩函数。

具体计算过程如下:

\[\begin{aligned} &F(X_{0},X_{1},X_{2}): \\ &\quad W=(X_{0}R_{1})\boxed{+}R_{2} \\ &\quad W_{1}=R_{1}\boxed{+}X_{1}\\ &\quad W_{2}=R_{2}\oplus X_{2}\\ &\quad R_{1}=S\left( L_{1}(W_{1L}||W_{2H}) \right) \\ &\quad R_{1}=S\left( L_{2}(W_{2L}||W_{1H}) \right) \end{aligned} \]

S盒: (即输入长和输出长都为32比特)的S盒由4个并置的 的S盒构成,即

\[S=(S_{0},S_{1},S_{2},S_{3}) $$其中 $s_{2}=s_{0},s_{3}=s_{1}$ ,于是有 \]

S=(S_{0},S_{1},S_{0},S_{1})

\[(2)经S盒替换后$\to$线性变换 $L_{1}$ 和 $L_{2}$:$L_{1}$ 和 $L_{2}$ 为32比特线性变换,定义如下: \]

\begin{cases}
L_{1}(X)=X\oplus(X\lll 2)\oplus(X\lll{10})\oplus(X\lll{18})\oplus(X\lll{24}) \

L_{2}(X)=X\oplus(X\lll 8)\oplus(X\lll{14})\oplus(X\lll{22})\oplus(X\lll{30})
\end{cases}

\[非线性函数$F$输出的$W$与比特重组(BR)输出的$x_{3}$异或,形成输出密钥序列Z。 ##### 密钥载入 密钥载入过程将128比特的初始密钥 和128比特的初始向量 $IV$ 扩展为16个31比特长的整数,作为LFSR寄存器单元 $s_{0},s_{1},\dots,s_{15}$ 的初始状态。 设 $k$ 和 $IV$ 分别为 $k=k_{0}||k_{1}||\dots||k_{15}$ 和 $IV=iv_{0}||iv_{1}||\dots||iv_{15}$ 其中:$k_{i}$ 和 $iv_{i}$ 均为 8bit 长字节,$0\leq i\leq {15}$。 ##### 密钥载入步骤 1. 设D为240比特的常量,可按如下方式分成16个15比特的子串: \]

D=d_{0}||d_{1}||\dots||d_{1}5

\[2. 对 $0\leq i\leq 15$,取 $s_{i}=k_{i}||d_{i}||iv_{i}$ #后续暂时不想写了。。。\]

posted @ 2025-02-25 11:40  seveN1foR  阅读(12)  评论(0编辑  收藏  举报