现代密码学_电子科技大学_中国大学MOOC(慕课)
计算机网络安全原理_吴礼发、洪征编著_电子工业出版社出版_ISBN:9787121387272
现代密码学_杨波_清华大学出版社_ISBN:9787302465553

秋风阁——北溪入江流:https://focus-wind.com/
秋风阁——现代密码学 | 02:流密码

文章目录

  • 流密码[序列密码](stream cipher)的基本概念
    • 一次一密(one-time pad)
      • 一次一密的特点
    • 流密码(stream cipher)
      • 流密码概况
      • 流密码的基本思想
    • 同步流密码
      • 同步流密码体制模型
      • 流密码的需求
  • 有限状态自动机
    • 有限状态自动机
      • 有限状态自动机模型
      • 有限状态自动机的表示
        • 有限状态自动机的有向图表示
        • 有限状态自动机的矩阵表示
      • 有限状态自动机实例
    • 密钥流生成器
      • 密钥流生成器设计的关键
      • 密钥流生成器的分解
      • 常见的密钥流生成器
  • 二元序列的伪随机性
    • 二元序列
      • 二元序列的定义
        • 周期的性质
      • 游程的定义
        • 游程的例子
      • 自相关函数
    • 伪随机序列
      • Golomb伪随机公设
      • 伪随机序列的定义
        • 伪随机序列示例
      • 伪随机序列应满足的条件
  • 线性反馈移位寄存器
    • 反馈移位寄存器
      • 反馈移位寄存器的状态
      • 反馈函数
      • 反馈移位寄存器示例
    • 线性反馈移位寄存器LFSR(Linear feedback shift register)
      • LFSR的反馈函数
      • LFSR的示例
      • 密钥流的周期
      • LFSR的性质
  • m序列
    • 线性反馈移位寄存器的多项式表示
      • 线性移位寄存器的一元多项式表示
      • 生成函数
        • 生成函数的性质
      • 一些定理和定义
    • m序列产生的条件
      • 不可约多项式
      • m序列产生的必要条件
        • 反例
      • m序列产生的充要条件
      • m序列示例
      • m序列的伪随机性
      • m序列的安全性
        • 解方程方法
        • 线性反馈移位寄存器综合解
          • 线性综合解
          • 线性移位寄存器的综合问题
          • Berlekamp-Massey算法(B-M算法)
            • B-M算法的具体步骤

流密码[序列密码](stream cipher)的基本概念

流密码(stream cipher)也称序列密码,流密码每次加密处理数据流的一位或一个字节,加解密使用相同的密钥,是对称密码算法的一种。 流密码的思想主要来源于一次一密算法

一次一密(one-time pad)

  • 一种理想的加密方案,叫做一次一密密码(one-time pad),由Major Joseph Mauborgne和AT&T公司的Gilbert Vernam1917年发明的
  • 明文:x=x0x1x2...x = x_0x_1x_2...x=x0​x1​x2​...
  • 密钥:k=k0k1k2...k = k_0k_1k_2...k=k0​k1​k2​...
  • 密文:y=y0y1y2...y = y_0y_1y_2...y=y0​y1​y2​...
  • 加密函数:yi=xi+ki(mod26)y_i = x_i + k_i(mod\ 26)yi​=xi​+ki​(mod 26)
  • 解密函数:xi=yi−ki(mod26)x_i = y_i - k_i(mod\ 26)xi​=yi​−ki​(mod 26)
  • 注:密钥为随机产生的,而且只使用一次

在现代的信息技术处理中,数据使用01串来表示,所以一次一密使用01串进行加密和解密,在明文和密码中,使用逐比特的异或来进行加解密的。

xor 0 1
0 0 1
1 1 0

在逻辑运算中,设aaa为明文,bbb为密钥,ccc为加密后的密文,a,b,ca,b,ca,b,c之间由以下关系:
a⊕b=c,c⊕b=aa \oplus b = c,c \oplus b = aa⊕b=c,c⊕b=a

一次一密的特点

  • 优点:

    • 密钥随机产生,仅使用一次
    • 无条件安全
    • 加密和解密为加法运算,效率极高
  • 缺点:
    • 密钥长度至少和明文长度一样,密钥共享困难,实用性低

流密码(stream cipher)

流密码的思想来源主要来源于一次一密算法,针对一次一密密钥长度至少和明文长度一样的特点,流密码的思想是产生一小段密钥,由者一小段密钥可以推导出完整的密钥,解决一次一密实用性较低的特点。

流密码概况

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

    • 明文消息按字符或比特逐位加密
    • 流密码也称为序列密码(sequence cipher)
  • 流密码在20世纪50年代得到飞跃式发展
    • 密钥流可以用移位寄存器电路来产生,也促进了线性和非线性移位寄存器发展
    • 流密码主要是基于硬件实现

流密码的基本思想

  • 流密码的基本思想

    • 利用密钥kkk产生一个密钥流z=z0z1z2...z = z_0z_1z_2...z=z0​z1​z2​...,并使用如下规则对明文串x=x0x1x2...x = x_0x_1x_2...x=x0​x1​x2​...加密:
      y=y0y1y2...=Ez0(x0)Ez1(x1)Ez2(x2)...y = y_0y_1y_2... = Ez_0(x_0)Ez_1(x_1)Ez_2(x_2)...y=y0​y1​y2​...=Ez0​(x0​)Ez1​(x1​)Ez2​(x2​)...
  • 密钥流:
    • 由密钥流发生器fff产生:zi=f(k,σi)z_i = f(k, \sigma_i)zi​=f(k,σi​)
    • σi\sigma_iσi​是加密器中的记忆元件在时刻iii的状态
    • fff是由k,σik, \sigma_ik,σi​产生的函数
    • 内部记忆元件由一组移位寄存器构成

同步流密码

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

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

同步流密码体制模型

二元加法流密码是目前最为常用的流密码体制,其加密变换可表示为yi=zi⊕xiy_i = z_i \oplus x_iyi​=zi​⊕xi​。

流密码的需求

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

    • 如果密钥用作滚动密钥流,则加法流密码就退化成一次一密密码。
  • 密码设计者的最大愿望是设计出一个滚动密钥生成器,使得密钥经其扩展成的密钥流序列具有如下性质:
    • 极大的周期
    • 良好的统计特性
    • 抗线性分析

有限状态自动机

有限状态自动机

有限状态自动机模型

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

  1. 有限状态集S={si∣i=1,2,...,l}S = \{ s_i | i = 1, 2, ..., l\}S={si​∣i=1,2,...,l}
  2. 有限输入字符集A1={A(1)j∣j=1,2,...,m}A_1 = \{ {A^{(1)}}_j | j = 1, 2,...,m \}A1​={A(1)j​∣j=1,2,...,m}和有限输出字符集A2={A(2)k∣k=1,2,...,n}A_2 = \{ {A^{(2)}}_k | k = 1, 2,...,n \}A2​={A(2)k​∣k=1,2,...,n}
  3. 转移函数A(2)k=f1(si,A(1)j){A^{(2)}}_k = f_1(s_i, {A^{(1)}}_j)A(2)k​=f1​(si​,A(1)j​),Sh=f2(si,A(1)j)S_h = f_2(s_i, {A^{(1)}}_j)Sh​=f2​(si​,A(1)j​),即在状态为sis_isi​,输入为A(1)j{A^{(1)}}_jA(1)j​时,输出为A(2)k{A^{(2)}}_kA(2)k​,而状态转移为ShS_hSh​。

有限状态自动机的表示

有限状态自动机的有向图表示

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

    • 转移图的顶点对应于自动机的状态,若状态sis_isi​在输入A(1)i{A^{(1)}}_iA(1)i​时转为状态sjs_jsj​,且输出一字符A(2)j{A^{(2)}}_jA(2)j​,则在转移图中,从状态sis_isi​到状态sjs_jsj​有一条标有(A(1)i,A(2)j)({A^{(1)}}_i, {A^{(2)}}_j)(A(1)i​,A(2)j​)的弧线。

有限状态自动机的矩阵表示

设S={s1,s2,s3}S = \{s_1, s_2, s_3\}S={s1​,s2​,s3​},A1={A(1)1,A(1)2,A(1)3}A_1 = \{{A^{(1)}}_1, {A^{(1)}}_2, {A^{(1)}}_3\}A1​={A(1)1​,A(1)2​,A(1)3​},A2={A(2)1,A(2)2,A(2)3}A_2 = \{{A^{(2)}}_1, {A^{(2)}}_2, {A^{(2)}}_3\}A2​={A(2)1​,A(2)2​,A(2)3​},则该有限状态自动机的矩阵表示如下:

f1f_1f1​ A(1)1{A^{(1)}}_1A(1)1​ A(1)2{A^{(1)}}_2A(1)2​ A(1)3{A^{(1)}}_3A(1)3​
s1s_1s1​ A(2)1{A^{(2)}}_1A(2)1​ A(2)3{A^{(2)}}_3A(2)3​ A(2)2{A^{(2)}}_2A(2)2​
s2s_2s2​ A(2)2{A^{(2)}}_2A(2)2​ A(2)1{A^{(2)}}_1A(2)1​ A(2)3{A^{(2)}}_3A(2)3​
s3s_3s3​ A(2)3{A^{(2)}}_3A(2)3​ A(2)2{A^{(2)}}_2A(2)2​ A(2)1{A^{(2)}}_1A(2)1​
f2f_2f2​ A(1)1{A^{(1)}}_1A(1)1​ A(1)2{A^{(1)}}_2A(1)2​ A(1)3{A^{(1)}}_3A(1)3​
s1s_1s1​ s2s_2s2​ s1s_1s1​ s3s_3s3​
s2s_2s2​ s3s_3s3​ s2s_2s2​ s1s_1s1​
s3s_3s3​ s1s_1s1​ s3s_3s3​ s2s_2s2​

有限状态自动机实例

若输入序列为:A(1)1A(1)2A(1)1A(1)3A(1)3A(1)1{A^{(1)}}_1{A^{(1)}}_2{A^{(1)}}_1{A^{(1)}}_3{A^{(1)}}_3{A^{(1)}}_1A(1)1​A(1)2​A(1)1​A(1)3​A(1)3​A(1)1​,初始状态为s1s_1s1​,则得到的序列:
s1s2s2s3s2s1s2s_1s_2s_2s_3s_2s_1s_2s1​s2​s2​s3​s2​s1​s2​
输出字符序列:A(2)1A(2)1A(2)2A(2)1A(2)3A(2)1{A^{(2)}}_1{A^{(2)}}_1{A^{(2)}}_2{A^{(2)}}_1{A^{(2)}}_3{A^{(2)}}_1A(2)1​A(2)1​A(2)2​A(2)1​A(2)3​A(2)1​

密钥流生成器

  • 密钥流产生器:参数为kkk的有限状态自动机
  • 一个输出符号集ZZZ、一个状态集Σ\SigmaΣ、两个函数φ\varphiφ和ψ\psiψ以及一个初始状态σ0\sigma_0σ0​组成。
  • 状态转移函数φ:σi→σi+1\varphi: \sigma_i \rightarrow \sigma_{i + 1}φ:σi​→σi+1​,将当前状态σi\sigma_iσi​变为一个新状态σi+1\sigma_{i + 1}σi+1​
  • 输出函数ψ:σi→zi\psi: \sigma_i \rightarrow z_iψ:σi​→zi​,当前状态σi\sigma_iσi​变为输出符号集中的一个元素ziz_izi​

密钥流生成器设计的关键

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

密钥流生成器的分解

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

常见的密钥流生成器

  • 目前最为流行和实用的密钥流产生器,其驱动部分是一个或多个线性反馈移位寄存器。

    • 前者称为滤波生成器,或前馈生成器
    • 后者称为非线性组合生成
    • 还有钟控生成器,缩减生成器,停走生成器等

二元序列的伪随机性

二元序列

二元序列的定义

  • GF(2)GF(2)GF(2)上的一个无限序列a→=(a1,a2,...,an,...)\mathop{a}\limits_{\rightarrow} = (a_1, a_2,..., a_n,...)→a​=(a1​,a2​,...,an​,...)称为二元序列,其中ai∈GF(2)a_i \in GF(2)ai​∈GF(2)。
  • 周期:对于二元序列a→\mathop{a}\limits_{\rightarrow}→a​,如果存在正整数lll,使得对于一切正整数kkk都有ak=ak+la_k = a_{k + l}ak​=ak+l​,则称a→\mathop{a}\limits_{\rightarrow}→a​是周期的。
    • 满足上述条件的最小正整数称为a→\mathop{a}\limits_{\rightarrow}→a​的周期,记为p(a→)p(\mathop{a}\limits_{\rightarrow})p(→a​)

周期的性质

设GF(2)GF(2)GF(2)上的一个无限序列a→=(a1,a2,...,an,...)\mathop{a}\limits_{\rightarrow} = (a_1, a_2,..., a_n,...)→a​=(a1​,a2​,...,an​,...)是周期为p(a→)p(\mathop{a}\limits_{\rightarrow})p(→a​)的二元序列,并设正整数lll对任何非负整数kkk都有ak=ak+la_k = a_{k + l}ak​=ak+l​,则一定有p(a→)∣lp(\mathop{a}\limits_{\rightarrow})|lp(→a​)∣l

证明:
设l=qp(a→)+rl = qp(\mathop{a}\limits_{\rightarrow}) + rl=qp(→a​)+r,其中q,rq, rq,r为正整数,且0⩽r<p(a→)0 \leqslant r < p(\mathop{a}\limits_{\rightarrow})0⩽r<p(→a​),则有:
ak=ak+l⇒ak=aqp(a)+r+k⇒ak=ar+ka_k = a_{k + l} \\ \Rightarrow a_k = a_{qp(a) + r + k} \\ \Rightarrow a_k = a_{r + k} ak​=ak+l​⇒ak​=aqp(a)+r+k​⇒ak​=ar+k​
又由于0⩽r<p(a→)0 \leqslant r < p(\mathop{a}\limits_{\rightarrow})0⩽r<p(→a​),根据p(a→)p(\mathop{a}\limits_{\rightarrow})p(→a​)的极小性可知r=0r = 0r=0,因此p(a→)∣lp(\mathop{a}\limits_{\rightarrow})|lp(→a​)∣l。

游程的定义

设a→\mathop{a}\limits_{\rightarrow}→a​是GF(2)GF(2)GF(2)上周期为p(a→)p(\mathop{a}\limits_{\rightarrow})p(→a​)的周期序列。将a→\mathop{a}\limits_{\rightarrow}→a​的一个周期(a1,a2,...ap(a→))(a_1, a_2,...a_{p(\mathop{a}\limits_{\rightarrow})})(a1​,a2​,...ap(→a​)​)依次排列在一个圆周上使ap(a→)a_{p(\mathop{a}\limits_{\rightarrow})}ap(→a​)​与a1a_1a1​相连,把这个圆周上形如011⋯110⏟都是1\begin{matrix} \underbrace{ 011 \cdots110 } \\ 都是1 \end{matrix}011⋯110​都是1​或100⋯001⏟都是0\begin{matrix} \underbrace{ 100 \cdots001 } \\ 都是0 \end{matrix}100⋯001​都是0​的一连串两两相邻的项分别称为a→\mathop{a}\limits_{\rightarrow}→a​的一个周期中一个1游程或一个0游程。而1游程中的1的个数或0游程中0的个数称为游程的长度。

游程的例子

周期为15的二元序列

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

自相关函数

GF(2)GF(2)GF(2)上周期为TTT的序列{ai}\{a_i\}{ai​}的自相关函数定义为:
R(t)=∑k=1T(−1)ak(−1)ak+l,0⩽t⩽T−1R(t) = \sum_{k = 1} ^ T (-1)^{a_k}(-1)^{a_{k + l}}, 0 \leqslant t \leqslant T - 1 R(t)=k=1∑T​(−1)ak​(−1)ak+l​,0⩽t⩽T−1
当t=0t = 0t=0时,R(t)=TR(t) = TR(t)=T,当t≠0t \ne 0t​=0时,称R(t)R(t)R(t)为异相自相关函数

伪随机序列

Golomb伪随机公设

3各随机性公设:

  • 在序列的一个周期内,0与1的个数相差至多为1

    • 说明{ai}\{a_i\}{ai​}中0与1出现的概率基本上相同
  • 在序列的一个周期内,常委iii的游程占游程总数的12i(i=1,2,...)\frac{1}{2^i}(i = 1, 2,...)2i1​(i=1,2,...),且在登场的游程中0的游程个数和1的游程个数相等。
    • 说明0与1在序列中每一位置上出现的概率相同
  • 异相自相关函数时一个常数
    • 意味着通过对序列与其平移后的序列做比较,不能给出其他任何信息

伪随机序列的定义

设a→=(a1,a2,...,ap(q),...)\mathop{a}\limits_{\rightarrow} = (a_1, a_2,..., a_{p(q)},...)→a​=(a1​,a2​,...,ap(q)​,...)是GF(2)GF(2)GF(2)上一个周期等于p(a→)p(\mathop{a}\limits_{\rightarrow})p(→a​)的周期序列。
如果对于一切t≢0(modp(a→))t \not\equiv 0(mod\ p(\mathop{a}\limits_{\rightarrow}))t​≡0(mod p(→a​)),有
R(t)=−1R(t) = -1R(t)=−1
则称序列a→=(a1,a2,...,ap(q),...)\mathop{a}\limits_{\rightarrow} = (a_1, a_2,..., a_{p(q)},...)→a​=(a1​,a2​,...,ap(q)​,...)为伪随机序列。

  • 上述定义满足Golomb三个伪随机公设。

伪随机序列示例

周期为15的二元序列100010011010111

  • 0的个数为7,1的个数为8
  • 0的游程个数为4,1的游程个数为4
  • 异相自相关函数等于-1

伪随机序列应满足的条件

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

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

线性反馈移位寄存器

反馈移位寄存器

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

反馈移位寄存器的状态

在任一时刻,这些级的内容构成该反馈移位寄存器的状态,每一状态对应于GF(2)GF(2)GF(2)上的一个nnn维向量,共有2n2^n2n种可能的状态。
每一时刻的状态可用nnn维向量:
(a1,a2,...,an)(a_1, a_2,...,a_n)(a1​,a2​,...,an​)
表示,其中aia_iai​是第iii级存储器的内容。

反馈函数

初始状态由用户确定。
反馈函数f(a1,a2,...,an)f(a_1, a_2,..., a_n)f(a1​,a2​,...,an​)是nnn元布尔函数,即函数的自变量和因变量只取0和1这两个可能的值。
函数中的运算有逻辑与、逻辑或、逻辑补等运算

反馈移位寄存器示例

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

一个三级反馈移位寄存器的状态和输出:

a3a_3a3​ a2a_2a2​ a1a_1a1​ 输出
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)GF(2)GF(2)上的nnn级线性反馈移位寄存器:

f(a1,a2,...,an)=c1an⊕c2an−1⊕⋅⋅⋅⊕cna1f(a_1, a_2,...,a_n) = c_1a_n \oplus c_2a_{n - 1} \oplus ··· \oplus c_na_1f(a1​,a2​,...,an​)=c1​an​⊕c2​an−1​⊕⋅⋅⋅⊕cn​a1​

LFSR的反馈函数

输出序列{at}\{ a_t \}{at​}满足:
f(a1,a2,...,an)=c1an⊕c2an−1⊕⋅⋅⋅⊕cna1an+1=c1an⊕c2an−1⊕⋅⋅⋅⊕cna1an+2=c1an+1⊕c2an⊕⋅⋅⋅⊕cna2......an+t=c1an+t−1⊕c2an+t−2⊕⋅⋅⋅⊕cnat,t=1,2,...f(a_1, a_2,...,a_n) = c_1a_n \oplus c_2a_{n - 1} \oplus ··· \oplus c_na_1 \\ a_{n + 1} = c_1a_n \oplus c_2a_{n - 1} \oplus ··· \oplus c_na_1 \\ a_{n + 2} = c_1a_{n + 1} \oplus c_2a_n \oplus ··· \oplus c_na_2 \\ ...... \\ a_{n + t} = c_1a_{n + t - 1} \oplus c_2a_{n + t - 2} \oplus ··· \oplus c_na_t, t = 1, 2,... f(a1​,a2​,...,an​)=c1​an​⊕c2​an−1​⊕⋅⋅⋅⊕cn​a1​an+1​=c1​an​⊕c2​an−1​⊕⋅⋅⋅⊕cn​a1​an+2​=c1​an+1​⊕c2​an​⊕⋅⋅⋅⊕cn​a2​......an+t​=c1​an+t−1​⊕c2​an+t−2​⊕⋅⋅⋅⊕cn​at​,t=1,2,...
线性反馈移位寄存器:实现简单、速度快、有较为成熟的理论,成为构造密钥流生成器的最重要的部件之一

LFSR的示例

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

反馈函数:a5+t=at+3⊕at,t=1,2,...a_{5 + t} = a_{t + 3} \oplus a_t, t = 1, 2,...a5+t​=at+3​⊕at​,t=1,2,...
输出序列为:1001101001000010101110110001111100110…,周期为31。

密钥流的周期

给定密钥流{ai}=a1,a2,a3,...,an,...\{ a_i \} = a_1, a_2, a_3,..., a_n, ...{ai​}=a1​,a2​,a3​,...,an​,...,如果存在整数rrr,使得对于任意aia_iai​,都有ai+r=aia_{i + r} = a_iai+r​=ai​,则称rrr为该密钥流的一个周期,称满足ai+r=aia_{i + r} = a_iai+r​=ai​的最小正整数为该密钥流的最小周期或简称周期

LFSR的性质

总是假定c1,c2,...,cnc_1, c_2,..., c_nc1​,c2​,...,cn​ 中至少有一个不为0,否则f(a1,a2,...,an)≡0f(a_1, a_2,..., a_n) \equiv 0f(a1​,a2​,...,an​)≡0。
总是假定cn=1c_n = 1cn​=1。

  • LFSR输出序列的性质:完全由其反馈函数决定。
  • nnn级LFSR状态数:最多有2n2^n2n个
  • nnn级LFSR的状态周期:≤2n−1\le 2^n - 1≤2n−1
  • 输出序列的周期 = 状态周期,≤2n−1\le 2^n - 1≤2n−1

选择合适的反馈函数可使序列的周期达到最大值2n−12^n - 12n−1,周期达到最大值的序列称为m序列。

m序列

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

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

定义:设n级线性移位寄存器的输出序列满足递推关系:
an+k=c1an+k−1⊕c2an+k−2⊕⋅⋅⋅⊕cnaka_{n + k} = c_1a_{n + k - 1} \oplus c_2a_{n + k - 2} \oplus ··· \oplus c_na_k an+k​=c1​an+k−1​⊕c2​an+k−2​⊕⋅⋅⋅⊕cn​ak​
用延迟算子D(Dak=ak−1)D(Da_k = a_{k - 1})D(Dak​=ak−1​)作为未定元,给出的反馈多项式为:
p(D)=1+c1D+...+cn−1Dn−1+cnDnp(D) = 1 + c_1D +...+c_{n - 1}D^{n-1} + c_nD^np(D)=1+c1​D+...+cn−1​Dn−1+cn​Dn
这种递推关系可用一个一元高次多项式:
p(x)=1+c1x+...+cn−1xn−1+cnxnp(x) = 1 + c_1x +...+c_{n - 1}x^{n-1} + c_nx^np(x)=1+c1​x+...+cn−1​xn−1+cn​xn
表示,称这个多项式为LFSR的特征多项式
根据初始状态的不同,由递推关系生成的非恒零的序列有2n−12^n - 12n−1个,记2n−12^n - 12n−1个非零序列的全体为G(p(x))G(p(x))G(p(x))。

生成函数

定义:给定序列{ai}\{ a_i \}{ai​},幂级数:
A(x)=∑i=1xaixi−1A(x) = \sum^{x}_{i = 1}a_ix^{i - 1}A(x)=i=1∑x​ai​xi−1
称为该序列的生成函数

生成函数的性质

定理:设p(x)=1+c1x+...+cn−1xn−1+cnxnp(x) = 1 + c_1x +...+c_{n - 1}x^{n-1} + c_nx^np(x)=1+c1​x+...+cn−1​xn−1+cn​xn是GF(2)GF(2)GF(2)上的多项式,F(p(x))F(p(x))F(p(x))中任一序列{ai}\{ a_i \}{ai​}的生成函数A(x)A(x)A(x)满足:
A(x)=ϕ(x)p(x)A(x) = \frac{\phi(x)}{p(x)}A(x)=p(x)ϕ(x)​
其中:
ϕ(x)=∑i=1n(cn−ixn−i∑j=1iajxj−1)\phi(x) = \sum^n_{i = 1}(c_{n - i}x^{n - i}\sum^i_{j = 1}a_jx^{j - 1})ϕ(x)=i=1∑n​(cn−i​xn−ij=1∑i​aj​xj−1)

一些定理和定义

根据初始状态的不同,由递推关系生成的非恒零的序列有2n−12^n - 12n−1个,记2n−12^n - 12n−1个非零序列的全体为G(p(x))G(p(x))G(p(x))。
定理1:p(x)∣q(x)p(x)|q(x)p(x)∣q(x)的充要条件是G(p(x))⊂G(q(x))G(p(x)) \subset G(q(x))G(p(x))⊂G(q(x))。
——该定理说明:可用n级LFSR产生的序列,也可用级数更多的LFSR来产生。
定义:设p(x)p(x)p(x)是GF(2)GF(2)GF(2)上的多项式,使p(x)∣(xp−1)p(x)|(x^p - 1)p(x)∣(xp−1)成立的最小正整数ppp称为p(x)p(x)p(x)的周期或阶。
定理2:若序列{ai}\{ a_i \}{ai​}的特征多项式p(x)p(x)p(x)定义在GF(2)GF(2)GF(2)上,ppp是p(x)p(x)p(x)的周期,则{ai}\{ a_i \}{ai​}的周期r∣pr|pr∣p
——该定理说明:n级LFSR输出序列的周期rrr,不依赖于初始条件,而依赖于特征多项式p(x)p(x)p(x)。

m序列产生的条件

不可约多项式

定理:设p(x)p(x)p(x)是n次不可约多项式,周期为m,序列{ai}∈G(p(x))\{ a_i \} \in G(p(x)){ai​}∈G(p(x)),则{ai}\{ a_i \}{ai​}的周期为m。

m序列产生的必要条件

定理:n级LFSR产生的序列有最大周期2n−12^{n - 1}2n−1的必要条件是其特征多项式为不可约的。
该定理的逆不成立:即LFSR的特征多项式为不可约多项式时,其输出序列不一定是m序列。

反例

f(x)=x4+x3+x2+x+1f(x) = x^4 + x^3 + x^2 + x + 1f(x)=x4+x3+x2+x+1为GF(2)GF(2)GF(2)上的不可约多项式,这可由x,x+1,x2+x+1x, x + 1, x^2 + x + 1x,x+1,x2+x+1都不能整除f(x)f(x)f(x)得到。以f(x)f(x)f(x)为特征多项式的LFSR的输出序列可由:
ak=ak−1⊕ak−2⊕ak−3⊕ak−4(k≥4)a_k = a_{k - 1} \oplus a_{k - 2} \oplus a_{k - 3} \oplus a_{k - 4}(k \ge 4)ak​=ak−1​⊕ak−2​⊕ak−3​⊕ak−4​(k≥4)
和给定的初始状态求出,设初始状态为0001,则输出序列为000110001100011…,周期为5,不是m序列。

m序列产生的充要条件

定义:若n次不可约多项式p(x)的阶为2n−12^n - 12n−1,则称p(x)p(x)p(x)是n次本原多项式
定理:设{ai}∈G(p(x)),{ai}\{ a_i \} \in G(p(x)), \{ a_i \}{ai​}∈G(p(x)),{ai​}为m序列的充要条件是p(xp(xp(x)为本原多项式
对于任意的正整数n,至少存在一个n次本原多项式。所以对于任意的n级LFSR,至少存在一种连接方式使其输出序列为m序列。

m序列示例

设p(x)=x4+x+1p(x) = x^4 + x + 1p(x)=x4+x+1,若LFSR以p(x)p(x)p(x)为特征多项式,则输出序列的递推关系为:
ak=ak−1⊕ak−4(k≥4)a_k = a_{k-1} \oplus a_{k - 4}(k \ge 4)ak​=ak−1​⊕ak−4​(k≥4)
若初始状态为1001,则输出为:100100011110101100100011110101…
周期为24−1=152^4 - 1 = 1524−1=15。
任意初始状态为1000,则输出为:

  • 1000011110101100010000111101011000…
  • 100100011110101100100011110101…

m序列的伪随机性

m序列满足Golomb的3个随机性公设。
定理:GF(2)GF(2)GF(2)上的n长m序列{ai}\{ a_i \}{ai​}具有如下性质:

  1. 在一个周期内,0、1出现的次数分别为2n−1−12^{n - 1} - 12n−1−1和2n−12^{n - 1}2n−1。
  2. 在一个周期内,总游程数为2n−12^{n - 1}2n−1;对1≤i≤n−21 \le i \le n - 21≤i≤n−2,长为i的游程有2n−i−1−12^{n - i - 1} - 12n−i−1−1个,且0、1游程各半;长为n-1的0游程一个,长为n的1游程一个。
  3. {ai}\{ a_i \}{ai​}的自相关函数为:
    R(t)={2n−1,t=0−1,0≤t≤2n−2R(t) = \left \{ \begin{array}{c} 2^n - 1, & t=0 \\ -1, & 0 \le t \le 2^n -2 \end{array} \right . R(t)={2n−1,−1,​t=00≤t≤2n−2​

m序列的安全性

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

    • 已知一段序列,如果知道其反馈多项式,就可以将其后的序列依次求出
    • 已知序列如何获得相应的反馈多项式(线性递推式):
      • 解方程方法——已知序列{ai}\{ a_i \}{ai​}是由n级线性移位寄存器产生的,并且知道{ai}\{ a_i \}{ai​}的连续2n位,可用解线性方程组的方法得到反馈多项式
      • 线性反馈移位寄存器综合解——Berlekamp-Massey算法

解方程方法

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

解:设该4级移位寄存器的线性递推式为:
an=c1an−1⊕c2an−2⊕c3an−3⊕c4an−4(n≥4)a_n = c_1a_{n - 1} \oplus c_2a_{n - 2} \oplus c_3a_{n - 3} \oplus c_4a_{n - 4} (n \ge 4)an​=c1​an−1​⊕c2​an−2​⊕c3​an−3​⊕c4​an−4​(n≥4)
由于知道周期序列的连续8各信号,不妨设为开头的8个信号,即:
a0a1a2a3a4a5a6a7=01111000a_0a_1a_2a_3a_4a_5a_6a_7 = 01111000a0​a1​a2​a3​a4​a5​a6​a7​=01111000
当n=4n = 4n=4时,由递推式可得:a4=c1a3⊕c2a2⊕c3a1⊕c4a0a_4 = c_1a_3 \oplus c_2a_2 \oplus c_3a_1 \oplus c_4a_0a4​=c1​a3​⊕c2​a2​⊕c3​a1​⊕c4​a0​
即:
c1⊕c2⊕c3=1\begin{array}{c} c_1 \oplus c_2 \oplus c_3 = 1 \end{array} c1​⊕c2​⊕c3​=1​
同理可得:
c1⊕c2⊕c3⊕c4=0c2⊕c3⊕c4=0c3⊕c4=0\begin{array}{c} 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 \\ \end{array} c1​⊕c2​⊕c3​⊕c4​=0c2​⊕c3​⊕c4​=0c3​⊕c4​=0​
解方程组得:
c1=0,c2=0,c3=1,c4=1c_1 = 0, c_2 = 0, c_3 = 1, c_4 = 1c1​=0,c2​=0,c3​=1,c4​=1
故所求移位寄存器递推式为:an=an−3⊕an−4(n≥4)a_n = a_{n - 3} \oplus a_{n - 4}(n \ge 4)an​=an−3​⊕an−4​(n≥4)

线性反馈移位寄存器综合解

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

  • 如何利用级数尽可能短的LFSR产生周期大、随机性能良好的序列。

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

设a‾=(a0,a1,...,aN−1)\underline{a} = (a_0, a_1,..., a_{N - 1})a​=(a0​,a1​,...,aN−1​)是F2F_2F2​上的长度为N的序列,而f(x)=c0+c1x+c2x2+⋅⋅⋅+clxlf(x) = c_0 + c_1x + c_2x^2 + ··· + c_lx^lf(x)=c0​+c1​x+c2​x2+⋅⋅⋅+cl​xl是F2F_2F2​上的多项式,c0=1c_0 = 1c0​=1。
如果序列中的元素满足递推关系:
ak=c1ak−1⊕c2ak−2⊕⋅⋅⋅⊕clak−l,k=l,l+1,...,N−1a_k = c_1a_{k - 1} \oplus c_2a_{k - 2} \oplus ··· \oplus c_la_{k - l}, k = l, l + 1,..., N - 1ak​=c1​ak−1​⊕c2​ak−2​⊕⋅⋅⋅⊕cl​ak−l​,k=l,l+1,...,N−1
则称<f(x),l><f(x), l><f(x),l>产生二元序列a‾\underline{a}a​。其中<f(x),l><f(x), l><f(x),l>表示以f(x)f(x)f(x)为特征多项式的lll级线性移位寄存器。
如果f(x)f(x)f(x)是一个能产生a‾\underline{a}a​并且级数最小的线性移位寄存器的特征多项式,lll是该移位寄存器的级数,则称<f(x),l><f(x), l><f(x),l>为序列a‾\underline{a}a​的线性综合解。

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

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

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

用归纳法求出一系列线性移位寄存器:
<fn(x),ln>δ0fn(x)≤ln,n=1,2,...,N<f_n(x), l_n> \delta ^ 0 f_n(x) \le l_n, n = 1, 2,..., N<fn​(x),ln​>δ0fn​(x)≤ln​,n=1,2,...,N
每一个<fn(x),ln><f_n(x), l_n><fn​(x),ln​>都是产生序列a‾\underline{a}a​的前n项的最短线性移位寄存器,在<fn(x),ln><f_n(x), l_n><fn​(x),ln​>的基础上构造相应的<fn+1(x),ln+1><f_{n + 1}(x), l_{n + 1}><fn+1​(x),ln+1​>,使得<fn+1(x),ln+1><f_{n + 1}(x), l_{n + 1}><fn+1​(x),ln+1​>是产生给定序列前n+1项的最短移存器,则最后得到的<fn(x),ln><f_n(x), l_n><fn​(x),ln​>就是产生给定N长二元序列a的最短的线性移位寄存器。

B-M算法的具体步骤

任意给定一个N长序列a‾=(a0,a1,...,aN−1\underline{a} = (a_0, a_1,..., a_{N - 1}a​=(a0​,a1​,...,aN−1​,按n归纳定义:
<fn(x),ln>n=0,1,2,...,N−1<f_n(x), l_n> n=0, 1, 2,..., N - 1<fn​(x),ln​>n=0,1,2,...,N−1

  1. 取初始值:f0(x)=1,l0=0f_0(x) = 1, l_0 = 0f0​(x)=1,l0​=0
  2. 设<f0(x),l0>,<f1(x),l1>,...,<fn(x),ln>(0≤n≤N)<f_0(x), l_0>, <f_1(x), l_1>,..., <f_n(x), l_n>(0 \le n \le N)<f0​(x),l0​>,<f1​(x),l1​>,...,<fn​(x),ln​>(0≤n≤N)均已求得,且l0≤l1≤...≤lnl_0 \le l_1 \le ... \le l_nl0​≤l1​≤...≤ln​,记fn(x)=c0(n)+c1(n)x+⋅⋅⋅+cln(n)xln,c0(n)=1,f_n(x) = c_0^{(n)} + c_1^{(n)}x +···+c_{l_n}^{(n)}x^{l_n}, c_0^{(n)} = 1,fn​(x)=c0(n)​+c1(n)​x+⋅⋅⋅+cln​(n)​xln​,c0(n)​=1,再计算:dn=c0(n)an+c1(n)an−1+⋅⋅⋅+cln(n)an−lnd_n = c_0^{(n)}a_n + c_1^{(n)}a_{n - 1} +···+c_{l_n}^{(n)}a_{n - l_n}dn​=c0(n)​an​+c1(n)​an−1​+⋅⋅⋅+cln​(n)​an−ln​​,称dnd_ndn​为第n步差值。然后分两种情形讨论:
    1. 若dn=0d_n = 0dn​=0,则令:fn+1(x)=fn(x),ln+1=lnf_{n + 1}(x) = f_n(x), l_{n + 1} = l_nfn+1​(x)=fn​(x),ln+1​=ln​
    2. 若dn=1d_n = 1dn​=1,则需区分以下两种情形:
      1. 当:l0=l1=⋅⋅⋅=ln=0l_0 = l_1 = ··· = l_n = 0l0​=l1​=⋅⋅⋅=ln​=0时,取:fn+1(x)=1+xn+1,ln+1=n+1f_{n + 1}(x) = 1 + x^{n + 1}, l_{n + 1} = n + 1fn+1​(x)=1+xn+1,ln+1​=n+1。
      2. 当有m(0≤m<n),m(0 \le m < n),m(0≤m<n),使:lm<lm+1=lm+2=⋅⋅⋅=lnl_m < l_{m + 1} = l_{m + 2} = ··· = l_nlm​<lm+1​=lm+2​=⋅⋅⋅=ln​ ,便置:fn+1(x)=fn(x)+xn−mfm(x),ln+1=max{ln,n+1−ln}f_{n + 1}(x) = f_n(x) + x^{n - m}f_m(x), l_{n + 1} = max\{ l_n, n + 1 - l_n \}fn+1​(x)=fn​(x)+xn−mfm​(x),ln+1​=max{ln​,n+1−ln​}

最后得到的<fn(x),ln><f_n(x), l_n><fn​(x),ln​>便是产生序列a‾\underline{a}a​的最短线性移位寄存器。

现代密码学 | 02:流密码——1相关推荐

  1. 现代密码学 | 02:流密码——2

    现代密码学_电子科技大学_中国大学MOOC(慕课) 计算机网络安全原理_吴礼发.洪征编著_电子工业出版社出版_ISBN:9787121387272 现代密码学_杨波_清华大学出版社_ISBN:9787 ...

  2. 斯坦福Dan Boneh密码学——04 流密码

    斯坦福Dan Boneh密码学--04 流密码 密码学系列第四篇笔记 流密码 简单来说,流密码实现了我们构建使用合理短密钥的安全密码的目的. 伪随机生成器 回想一次性密码本,密钥.消息和密文都是L位字 ...

  3. 【密码学02】密码系统原理及数学背景

    上一篇文章[密码学]四大主题简单介绍 一文提到要实现信息传输的保密性.完整性,以及身份鉴别和抗抵赖,使用的技术手段有: 1)       密码技术(加密与解密). 2)       哈希技术,即散列技 ...

  4. 备考2023年下半年-软考信息安全工程师之路

    中级-信息安全工程师 信息安全工程师是属于软考中级科目,含金量很高的.(软考对应的级别科目如图所示)信息安全工程师在社会上的需求是蛮大的. 信息安全工程师主要涉及计算机信息安全方面,在计算机软硬件.网 ...

  5. 【完整版-斯坦福-密码学】全13讲(流密码)【笔记】

    目录 写在前面的话 参考资料 笔记 写在前面的话 个人笔记,仅供参考,不喜勿喷,谢谢大家. 参考资料 视频:[完整版-斯坦福-密码学]全13讲 理解密码学:如何理解"语义安全(semanti ...

  6. 【现代密码学基础Introduction to Modern Cryptography】02 完美性加密(perfectly secret encryption)

    [现代密码学基础Introduction to Modern Cryptography]02 完美性加密(perfectly secret encryption) Perfect secrecy 1. ...

  7. 密码学之ASCII编码(02)

    ASCII编码 ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用 ...

  8. 密码学与网络安全 - 7 分组加密的工作模式 8 伪随机数的产生和流密码

    7 分组加密的工作模式 7.1 多重加密与三重DES 7.1.1 双重DES 双重DES所对应的映射不被单DES所定义,所以是强于单DES的 中间相遇攻击:可能的密钥加密明文,然后用可能的密钥解密密文 ...

  9. 《信息安全工程师教程》学习笔记02(第二章 密码学基础与应用—DES算法)

    第二章 密码学基础与应用 2.1 密码学的基本概念 1949年香农发表了<保密系统的通信理论> 1976年W.Diffie和M.Hellman提出公开密钥密码 1977年美国联邦政府颁布数 ...

最新文章

  1. B树、B-树、B+树、B*树
  2. javascript创建对象的三种方式
  3. 中科大刘和刚老师的计算机图形学资料 for students
  4. 2021年3月15日_读书|总结笔记目录
  5. 戴尔计算机windows未能启动,戴尔电脑windows7无法启动安装过程怎么办
  6. golang - strings
  7. logstash-input-jdbc 同步mysql数据到es
  8. Netty 实现长连接服务的难点和优化点
  9. 使用selenium webdriver进行元素定位
  10. mysql科目成绩百分比_Mysql学习经验总结【2】
  11. python各个关键词的意思_想学好Python,你必须了解Python中的35个关键词
  12. Pytorch中的collate_fn函数用法
  13. “带锁的门”问题,并有c语言和python代码运行效率对比
  14. Atitit 通用服务端代理接口 转接口 attilax总结
  15. 【STM32】 JDY-31蓝牙模块
  16. [迁移] Luac的使用
  17. xshell 配置公钥 免密码登陆
  18. 修改Android模拟器存储位置,更改AndroidAVD模拟器创建路径位置的方法
  19. 关于如何在chrome中下载网页flash视频
  20. Arturia CZ V(音频合成器)v1.0.0.2695官方版

热门文章

  1. 计算机病毒的检测预防查杀,计算机病毒的预防措施
  2. [转载]AP_INVOICES_ALL应付发票表详解
  3. fresco+recycleview多条目
  4. 织梦PHP版本怎么更新,织梦DedeCMS系统如何打补丁升级
  5. iApp(11)情侣视频播放器
  6. SPM12入门案例1
  7. pycharm安装sklearn失败解决方法
  8. 如何设计出完美的动画技术架构
  9. Java 拦截器重定向无限循环/重定向次数过多报错 的解决方案
  10. java 虚拟机(jvm)-06-JVM jdk 自带工具 jstack jconsole jvisualvm jmap jinfo