对称加密---流密码(序列密码)
简介
序列密码又称为流密码,是一类重要的对称密码*,它一次只对明文消息的单个字符进行加解密变换,具有算法实现简单、速度快、错误传播少等特点。
最近在看对称密码相关的一些基础知识,下面我只写一下我的总结,有关每个算法的具体细节,请自行百度或谷歌。
因为流密码中主要是通过**与明文进行异或得出密文,但是一次一密又是极难实现的,况且明文长度太长还想找到与明文长度一样长的随机且不重复的**是特别困难的,所以对主要的扩充就显得及其重要,由此流密码的重心就在于产生比较好的**序列。
历史
首先我想从代替密码说起,已知最早的代替密码就是凯撒密码。主要就是通过取字母表中该字母之后第三个字母来代替该字母,我们可以用公式来表示:
因为测试**只有25个所以当我们已知是这种类型的加密算法时可以对其进行穷举攻击。
然后在凯撒密码的基础上又有人提出了单表代替密码,主要是针对**空间进行增大,之前是只有a->d
,但是现在的话将26个英文字母重新排列,那么就有26!钟对应方式,仍然存在攻击方式,根据语言的一些规律进行攻击,比如说字母使用的相对频率对比英文字母的使用频率分布进行比较。
有两种方法可以减少代替密码里的明文结构对密文的影响:
- 对明文多个字母一起加密
- 采用多表代替密码
单表代替密码here
多字母代替密码playfair密码,它是由**词构成一个5*5
的字母矩阵,先填充**再按26个英文字母表的顺序填充剩余的字母,在我看的这个例子里面它将I/J
放到了一个方框中,加密方式是一次加密两个字母,具体规则自行百度。但是它仍然保留了明文语言的大部分特征。
下面开始说多表代替密码vigenere
维吉尼亚密码,其中的每一个代替表是对明文字母表移位0~25位以后得到多个代替单表,具体细节请移步:
你可以找到更多关于的信息here
Vernam
密码,改成用二进制数据进行计算,比如按位进行异或运算。
改进:一次一密,使用随机且不重复的**来加密实际困难比较大,产生大规模这种**,密文太长**分配比较困难。
这样我们就发现需要对明文做一定的处理使得其失去语言特征。
分类
- 同步序列密码
**序列的产生独立于明文消息和密文消息,分组密码的OFB(output Feedback block)就是同步序列密码的一个例子。同样存在加解密端如果出现不同步,如果传送过程中密文位被插入或删除,使得接收方和发送方之间产生了失步,则解密失败。 - 自同步序列密码
若**序列的产生是**以及固定大小的遗忘密文位的函数,也就是说**序列的产生受明文以及密文的影响,分组密码的CFB(cipher feedback block)模式就是一种。**序列的生成是由主**和密文。解密时是与密文相关的,因此密文位被删除或插入时有可能造成同步丢失。
今天我看了一些流密码的**序列产生器的相关内容,在这里简单写一下:
**序列产生器
它主要由两部分组成:
- 驱动部分
- 组合部分
其中驱动部分产生控制生成器的状态序列,并控制生成器的周期和统计特性。组合部分对驱动部分的各个输出序列进行非线性组合,控制和提高产生器输出序列的统计特性、线性复杂度和不可预测性等,从而保证输出**序列的安全强度。
驱动器一般利用线性反馈移位寄存器(LFSR,Linear Feedback Shift Register),特别是利用最长周期或m序列产生器实现。非线性反馈移位寄存器也可作为驱动器。
线性反馈移位寄存器
由两部分组成:
- 移位寄存器
- 反馈函数
先介绍几个概念:
- 由寄存器的某些位异或计算最左端位的值的过程称为反馈函数。
- 周期是指输出序列从开始到重复时的长度。
- 计算反馈函数的位叫作:抽头。
由
n个触发器
和若干个异或门
组成,是反馈系数,只能取0或1,取为0时表明不存在该反馈之路,取为1时表明存在该反馈之路;这里的反馈系数决定了产生随机数的算法的不同。反馈函数表示成:,该反馈序列是线性的所以叫作线性反馈移位寄存器,如果反馈函数是非线性函数,则叫作非线性反馈移位寄存器。
应该选取哪些位来进行异或才能保证最长周期为,最长周期为而不是因为全0的状态将无止境的输出0序列。这是一个很重要的问题。选取的“某些位”构成的序列叫做抽头序列,理论表明,要使LFSR得到最长的周期,这个抽头序列构成的多项式加1必须是一个本原多项式。此时的输出序列称为序列。比如:
下面以n=3,g0=1,g1=1,g2=0,g3=1为例,说明LFSR的特性,具有该参数的LFSR结构如下图:
假设一开始的时候输入的内容为,则经过一个一轮计算后变为:。
同理继续变换,我们给出循环图:
这就是一个循环周期的长度:贴合理论。