流密码总结

一.流密码基本概念

流密码一般逐字节或者逐比特处理信息。一般来说

  • 流密码的密钥长度会与明文的长度相同。
  • 流密码的密钥派生自一个较短的密钥,派生算法通常为一个伪随机数生成算法。

需要注意的是,流加密目前来说都是对称加密。
伪随机数生成算法生成的序列的随机性越强,明文中的统计特征被覆盖的更好。
流密码加解密非常简单,在已知明文的情况下,可以非常容易地获取密钥流。
流密码的关键在于设计好的伪随机数生成器。一般来说,伪随机数生成器的基本构造模块为反馈移位寄存器。当然,也有一些特殊设计的流密码,比如 RC4。

二.线性反馈移位寄存器(LFSR)

线性反馈移位寄存器(LFSR)是指,给定前一状态的输出,将该输出的线性函数再用作输入的移位寄存器。异或运算是最常见的单比特线性函数:对寄存器的某些位进行异或操作后作为输入,再对寄存器中的各比特进行整体移位。

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

G F ( 2 ) 上 一 个 n 级 反 馈 移 位 寄 存 器 由 n 个 二 元 存 储 器 与 一 个 反 馈 函 数 f ( a 1 , a 2 , , . . . , a n ) 组 成 GF(2)上一个n级反馈移位寄存器由n个二元存储器与一个反馈函数f(a_1,a_2,,...,a_n)组成 GF(2)nnf(a1,a2,,...,an)

1.基本结构

例子

2.反馈表达式

输出序列满足

三.m序列的为随机性

什么是m序列?

m序列也就是最长线性移位寄存器序列的简称,是由线性反馈的移存器产生的周期最长的序列,也是一种伪随机序列。

什么是伪随机序列?
伪随机序列也就是,即使截获其中一段,也无法推测后面是什么。如果说密钥流是周期的, 要完全做到随机性是困难的。严格地说, 这样的序列不可能做到随机, 只能要求截获比周期短的一段密钥流时不会泄露更多信息, 这样的序列称为伪随机序列。

Golomb对伪随机周期序列提出了应满足的如下3个随机公设:

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

  • 在序列的一个周期内,长为1的游程占游程总数的1/2,长为2的游程占游程总数的1/4,长多为 i 的游程占游程总数的 1/2i ,且在等长的游程中0的游程个数和1的游程个数相等。

  • 异自相关函数是一个常数。

n长m序列满足Golomb的3个随机性公设,具有如下性质:

  • 在一个周期内,0和1出现的次数分别为2n-1-1和2n-1。

  • 在一个周期内,总游程数为2n-1;对 1≤ i ≤ n-2,长为 i 的游程有2n-i-1个,且0和1游程各半;长为n-1的0游程一个,长为n的1游程一个。

四.m序列的破译

对于m序列(周期为2^n-1),如果攻击者知道了2n位明密文对,则可确定反馈多项式的系数(因为ki = mi+ ci),从而确定该LFSR接下来的状态,也就能得到余下的密钥序列。

  • 明文M={m1,m2,……,m2n},
  • 密文C={c1,c2,……,c2n},
  • 由ci=mi ⨁ \bigoplus zi,zi=ci ⨁ \bigoplus mi,i=1,2,……,2n
  • 可得密钥z={z = z1z2····z2n},

z = z1z2····z2n

则LFSR输出序列的连续的n+1个状态:

S1 = (z1z2····zn)

S2 = (z2z3····zn+1)

S3 = (zn+1zn+2····z2n)

流密码总结_第1张图片
流密码总结_第2张图片
流密码总结_第3张图片

流密码总结_第4张图片

非线性序列

关于流密码呢,当然还有一些非线性序列,但是非线性序列的生成也是以线性序列为基础的,非线性序列生成器也是以LFSR为基础的,一般来说,非线性序列生成器都需要多个LFSR 来驱动,这个的应用就相当的少了,大致了解就好。

LFSR序列密码在已知明文攻击下是可破译的,故人们向非线性领域探索。

  1. 非线性反馈移位寄存器序列
  • 令反馈函数为非线性函数,便构成非线性移位寄存器,其输出序列为非线性序列,序列周期最大可达2^n,达最大周期的序列称为M序列。
  • M序列具有很好的随机统计特性,又有大量的不同序列可供选择,是序列密码中主要的研究内容之一,目前还处于艰难的研究当中。
  1. 多个LFSR的非线性组合序列
  • 为提高序列的线性复杂度和随机性,可将多个LFSR进行组合,LFSR用来保证密钥流周期的长度,非线性组合函数用来保证密钥流的各种密码性能,以抗击各种可能的攻击。

流密码总结_第5张图片

你可能感兴趣的:(密码学)