目录
1 密码学概述
1.1 密码学的基本概念
1.1.1 为什么要学密码学
1.1.2 什么是密码学
1.1.2 密码算法的基本模型
1.1.3 密码算法的分类
1.2 密码分析学
1.3 古典密码算法
1.3.1 置换密码
1.3.2 单表代替密码算法
1.3.3多表代替密码算法
2 分组密码
2.1 分组密码的基本概念
2.2 分组密码的设计
2.2.1 理想分组密码
2.2.2 安全性原则
2.2.3 主要设计结构
2.3 Feistel结构
2.4 SPN结构
2.5 DES算法
2.5.1 初始置换编辑与逆初始置换编辑
2.5.2 DES的轮函数
2.5.3 函数F(R,K)的计算过程
2.5.4 DES密钥编排
2.5.5 DES的安全性
2.6 多重DES
2.6.1 双重DES算法
2.6.2 三重DES算法
2.7 分组密码的工作模式
2.7.1 电码本(ECB)模式
2.7.2 密码分组链接(CBC)模式
2.7.3 密码反馈(CFB)模式
2.7.4 输出反馈(OFB)模式
2.7.5 计数器模式
2.8 AES算法
2.9 SM4算法
3 流密码
3.1 一次一密密码
3.2 流密码的基本概念
3.2.1 流密码的基本思想
3.2.2 流密码与分组密码的区别
3.3 同步流密码
3.3.1 同步流密码模型
3.3.2 自同步流密码模型
3.4 线性反馈移位寄存器
3.4.1 反馈移位寄存器
3.4.2 线性反馈移位寄存器
3.4.3 m-序列与B-M算法
3.5 常见的非线性组合生成器
3.5.1 Geffe序列生成器
3.5.2 J-K触发器
3.5.3 Pless生成器
3.5.4 钟控序列生成器
3.6 典型序列密码算法
3.6.1 RC4算法
3.6.2 A5/1流密码算法
1 密码学概述
1.1 密码学的基本概念
1.1.1 为什么要学密码学
信息安全是密码学的目标,密码学是保障信息安全的核心技术。
1.1.2 什么是密码学
密码是指采用特定变换的方法对信息进行加密保护、安全认证的技术、产品和服务。--------《中华人民共和国密码法》
密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保护通信秘密的成为密码编码学,应用于破译密码以获取通信情报的,称为密码分析学。
如上图,在Alice向Bob发送信息的过程中存在着许多安全问题,是否有其他人看到信息内容(机密性),信息内容是否被改动(完整性),是否是Alice发送的信息(消息源认证),是否是发给Bob的信息(通信实体认证),是否Alice真的给Bob发过信息(不可否认性)。而密码学就是来解决这些问题的关键技术。
1.1.2 密码算法的基本模型
![](https://img-blog.csdnimg.cn/e2955b4036e2430aa0925955b6ceea9c.png)
基本概念:
明文(planintext): 被隐蔽的消息
密文(ciphertext): 隐蔽后的消息
加密算法(encryption algorithm):发送者对明文进行加密时所采用的规则
解密算法(decryption algorithm):接受者对密文进行解密时所采用的规则
密钥(key):加密和解密通常在一组key(encryption key;decryption key)控制下进行
1.1.3 密码算法的分类
(1)对称密钥加密算法:指加密密钥和解密密钥相同的密码算法,分为分组密码算法和流密码算法。 常见算法:DES、AES、SM4。
(2)非对称密码算法:指加密密钥和解密密钥不同的密码算法,加密密钥可以公开(公钥),解密密钥必须保密(私钥)。常见算法:RSA、ECC、SM2。
(3)无密钥密码算法:指把任意长度的输入消息数据转化为固定长度的输出数据的一种密码算法,又称为 散列函数 、 哈希函数 、 杂凑函数 、单向函数。通常用来做数据完整性的判定。常见算法:SHA系列、MD5、SM3。
1.2 密码分析学
密码分析学的目标:恢复合法密文相应的明文,恢复密钥。
Kerckhoffs假设:假定密码分析者和敌手知道所使用的密码系统。即密码体制的安全性仅依赖于对密钥的保密(一切秘密皆蕴含在密钥中!),而不依赖于算法的保密。现代密码学基本观点:在Kerckhoffs假设下达到安全性。
密码分析者攻击密码体制的方法:
(1)穷举攻击:通过试遍所有的密钥来进行破译。
对抗:可增大密钥的数量。
(2)统计分析攻击:通过分析密文和明文的统计规律来破译。
对抗:设法使明文和密文的统计规律不同。
(3)解密变换攻击:针对加密变换的数学基础,通过数学求解设法找到解密变换。
对抗:选用具有坚实的数学基础和足够复杂的加密算法。
密码体制的攻击(密码破译):
唯密文攻击:密码分析者仅知道一些密文
已知明文攻击:密码分析者知道一些明文和相应的密文
选择明文攻击:密码分析者可以选择一些明文,并得到相应的密文
选择密文攻击:密码分析者可以选择一些密文,并得到相应的明文
密码算法只要满足一下两条准则之一就行:
(1)破译密文的代价超过被加密信息的价值。
(2)破译密文所花的时间超过信息的有用期。
满足以上两个准则的密码算法在实际中是可用的。
1.3 古典密码算法
1.3.1 置换密码
置换密码(Permutation Cipher)又叫换位密码(Transposi-tionCipher),对明文字符或字符组进行位置移动,以便打破明文的结构特性。
置换密码的特点:保持明文的所有字符不变,只是利用置换打乱了明文字符的位置和次序。
1.3.2 单表代替密码算法
代替密码算法针对英文字母进行处理。构造一个或多个密文字母表,然后用密文字母表中的字母或者字母组来代替明文字母或字母组,各字母或字母组的相对位置不变,但本身的值发生了改变。
单表代替密码可分为:加法密码、乘法密码、仿射密码。
1.3.3多表代替密码算法
维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。
在一个凯撒密码中,字母表中的每一字母都会作一定的偏移,例如偏移量为3时,A就转换为了D、B转换为了E……而维吉尼亚密码则是由一些偏移量不同的恺撒密码组成。
![](https://img-blog.csdnimg.cn/img_convert/467e52c9a1bf1c14c8f6055a149fc760.png)
为了生成密码,需要使用表格法。这一表格包括了26行字母表,每一行都由前一行向左偏移一位得到。具体使用哪一行字母表进行编译是基于密钥进行的,在过程中会不断地变换。
例如,假设为:ATTACKATDAWN
选择某一关键词并重复而得到密钥,如关键词为LEMON时,密钥为:LEMONLEMONLE
对于明文的第一个字母A,对应密钥的第一个字母L,于是使用表格中L行字母表进行加密,得到第一个字母L。类似地,明文第二个字母为T,在表格中使用对应的E行进行加密,得到密文第二个字母X。
以此类推,可以得到:
明文:ATTACKATDAWN 密钥:LEMONLEMONLE 密文:LXFOPVEFRNHR
解密的过程则与加密相反。例如:根据密钥第一个字母L所对应的L行字母表,发现密文第一个字母L位于A列,因而明文第一个字母为A。密钥第二个字母E对应E行字母表,而密文第二个字母X位于此行T列,因而明文第二个字母为T。以此类推便可得到明文。
用数字0-25代替字母A-Z,维吉尼亚密码的加密文法可以写成的形式:
![C_{i}\equiv P_{i}+K_{i}(mod 26)](https://latex.csdn.net/eq?C_%7Bi%7D%5Cequiv%20P_%7Bi%7D+K_%7Bi%7D%28mod%2026%29)
解密方法则能写成: ![P_{i}\equiv C_{i}-K_{i}(mod 26)](https://latex.csdn.net/eq?P_%7Bi%7D%5Cequiv%20C_%7Bi%7D-K_%7Bi%7D%28mod%2026%29)
转载于:https://baike.baidu.com/item/%E7%BB%B4%E5%90%89%E5%B0%BC%E4%BA%9A%E5%AF%86%E7%A0%81/4905472?fr=aladdin
2 分组密码
2.1 分组密码的基本概念
分组密码属于对称加密算法,消息接收方与发送方拥有同一个密钥、能力对等。
![](https://img-blog.csdnimg.cn/4d5de8128fcc4da49e3b71f321a94426.png)
将明文划分为m比特长的组,每一块依次进行加密算法。
由密钥k决定一个明文到密文的可逆映射。
2.2 分组密码的设计
2.2.1 理想分组密码
Feistel提出: 理想的分组密码,可以允许生成最大数量的加密映射,来映射明文分组。加密和解密映射用表定义。
![](https://img-blog.csdnimg.cn/43296c88e80349e3b6c05588a87a9b4b.png)
对于n比特到n比特的可逆置换,共有
!种可能的置换表。密钥长度:n*
bits。
若要抵抗统计攻击,
,密钥至少
比特。
理想的分组密码,虽然安全性高,可能的置换非常多,但并不可行。
2.2.2 安全性原则
混淆与扩散:分组密码设计的本质
混淆:打乱密文、明文、密钥之间的依赖关系。
扩散:明文的统计特性消散在密文中。每个明文比特尽可能地影响多个密文,密文每个比特受多个明文比特影响。
乘积密码:
实现混淆扩散的一种有效方法——“乘积密码”。
先用一种密码体制
对明文加密得到密文
,再用另一种密码体制
对
加密,得到最终的密文
,香农称之为“乘积”组合密码体制。
2.2.3 主要设计结构
Feistel结构:DES、CAST、Skipjack
SPN网络(Substitution-PermutationNetwork):AES、Serpent
迭代分组密码:一个内部函数(轮函数)的连续重复。参数包括轮数r、分组的比特长度n和输入密钥K的比特长度k,r个轮密钥
由K生成。满足可逆性,对每个
,轮函数在轮输入上是一个双射。
2.3 Feistel结构
简单理解Feistel结构就是顺序执行两个或多个基本密码系统,使得最后结果的密码强度大于每个密码系统的结果。
假设加密过程的输入为分组长2w的明文和一个密钥K(K在运算过程中将分成多个子密钥Ki),将明文分为两部分,左边记为L0,右边记为R0.以下是加密解密过程图:
![](https://img-blog.csdnimg.cn/b21452b53d084809b24a3d4620691b7c.png)
Feistel加密过程:
第一轮:R0与子密钥k0进行运算,记为F(R0,k0),得到的结果与L0进行异或运算。 最终得到的结果将作为第二轮运算的右半部分记为R1,而R0直接作为第二轮的左半部分记为L1。
第二轮:L1和F(R1,K1)(R1和K1运算的结果)进行异或运算,产生的结果为第三轮的R2,R1直接变为L2。
第三轮以后一次类推,n轮迭代之后,左右两边再合并到一起为最后的密文分组。
每轮的置换可以由以下函数表示 :Li = Ri-1
Ri = Li-1⊕F(Ri-1,Ki)
Feistel解密过程:本质上与加密过程一样,就是把加密过程反过来。
与Feistel结构有关的参数:
(1)分组大小。分组越多安全性越高,加密速度越慢,分组密码中普遍使用的分组大小为64bit。
(2)密钥大小。密钥越长安全性越高,加密速度越慢,一般使用128bit的密钥或者更长。
(3)轮数。轮数越多安全性越高,一般为16轮。
(4)子密钥产生算法。该算法越复杂安全性越高。
(5)轮函数。轮函数越复杂安全性越高。
转载于:https://www.cnblogs.com/OneFriday/p/11470210.html
2.4 SPN结构
Shannon建议交替使用代换和置换两种方法,即他称之为混乱(confusion)和扩散(diffusion)的过程,破坏对密码系统进行的各种统计分析。
SPN(substitution-permutation network)代换-置换网络是一类特殊的迭带密码。代换-置换网络的轮函数包括三个变换:代换(S-box)、置换(P)、密钥混合。
SPN结构比Feistel结构更易于并行处理,要求S盒可逆,轮数较短,软硬件需求更大。
2.5 DES算法
DES是一个16轮Feistel型密码,分组长度为64bits;密文分组长度也是64bits;密钥长度为64bits,有8bits奇偶校验,有效密钥长度为56bits。
算法主要包括:初始置换
、16轮迭代的乘积变换、逆初始置换
以及16个子密钥产生器。
2.5.1 初始置换
与逆初始置换
初始置换是将64bit明文的位置进行置换,得到一个乱序的64bit明文组。
逆初始置换
:将16轮迭代后给出的64bit组进行置换,得出输出的密文组。输出为阵中元素按行读得的结果。
和
在密码意义上作用不大,它们的作用在于打乱原来输入x的ASCII码字划分的关系。
2.5.2 DES的轮函数
无论f函数如何选取,DES的轮函数是一个对合变换 。
DES算法轮结构
DES算法每一轮展开都是以下的结构,左边是轮函数,右边是密钥编排。
2.5.3 函数F(R,K)的计算过程
F(R,K)函数实际上是由几个函数复合而成的,首先将32比特数据通过选择扩展运算E转换为48比特,然后与该轮的子密钥进行异或,异或的结果作为S盒的输入,再通过S盒输出为32比特,最后通过置换P得到32比特的输出。
DES的S盒的输入和输出关系
在DES算法中替代由8个不同的S盒完成,每个S盒有6位输入4位输出。
一个S盒就是一个4行16列的表格,盒中的每一项都是一个4位二进制数表示的十进制数,输入的高低两位作为行数H,中间四位作为列数L,在S-BOX中查找第H行L列对应的数据。
2.5.4 DES密钥编排
(1)首先需要去掉8个校验位,得到56比特的值;
(2)然后经过置换选择1,得到56比特的输出;
(3)再将56比特的输出分为左右两部分,各28比特,分别进行循环左移,最后合并成56比特;
(4)再通过置换选择2,就得到这一轮的轮密钥。
DES中的子密钥的生成
2.5.5 DES的安全性
https://blog.csdn.net/weixin_43211186/article/details/125427860
2.6 多重DES
在密码学界,能够研究出来一种新的加密标准并且可以超过目前使用广泛的加密算法,是实实在在、真真切切不容易,也是密码学界的响当当的头等大事。在DES完成自己十年的任命期后,由于新的算法未被提出,DES不得不临危受命,继续肩负重任,在接下来的十年里,依然活跃在国际保密通信的舞台上。直至多重DES的出现,打破了这个僵局。
2.6.1 双重DES算法
为了增加密钥长度,我们可以采用多重的DES算法,最常用的就是二重DES。二重 DES 是多重使用 DES 时最简单的形式,其具体的加密解密操作如下图。
图中,明文信息为 P,两个加密密钥为 K1 和 K2。
加密后,密文为: C = EK2 [ EK1§]
解密后,明文为: P = DK1 [DK2 ©] {注:解密时,以相反顺序使用两个密钥}
从上边我们可以看到,在利用二重 DES时,我们就可以巧妙的将原有的56bit的密钥变成112bit,极大的增加了加密时的安全性。
但是,放过来我们可以想到,假设对任意两个密钥 K1 和 K2,如果存在另一密钥 K3,使得 EK2 [ EK1§]= EK3 [ P] (也就是说,在单重的DES中存在一个密钥,与二重DES合起来加密时等价的),那么,二重 DES 以及多重 DES 都没有意义, 因为它们与 56 比特密钥的单重 DES 等价,但是后来经过证实,我们这种假设对于 DES算法并不能够成立。
中间相遇攻击:
一种对所有分组密码均有效的攻击方法。
首先,以二重DES为例。
加密:C = EK2 [ EK1§]
解密:P = DK1 [DK2 ©]
首先设定一个中间值X,有 :X = EK1(P)= DK2 ©
在已知给定的消息对(P,C),首先,将明文P按所有可能的密钥 K1 加密,得到的256个结果,按X的值将所有结果排序放在一个表内,然后用所有可能的密钥K2对密文C解密,每解密一次,将解密结果与表中的数值进行对比,如果相等,就将刚才测试的两个密钥对一个新的明密文对进行验证,若验证成功,则认定这两个密钥对是正确的密钥。
结论:中间相遇攻击使用两组已知明密文对就可以猜出正确的密钥。
原文链接:https://blog.csdn.net/qq_33828738/article/details/105050602
2.6.2 三重DES算法
两个密钥的三重DES算法:
抵抗中途相遇攻击的一种方法是使用 3 个不同的密钥做 3 次加密,从而可使已知明文攻击的代价增加到 2112。然而, 这样又会使密钥长度增加到 56×3 = 168 bit,就会使密钥过于复杂,造成加密信息的冗余。
所以我们就想出,能不能利用两个不同的密钥进行3次加密,一种实用的方法是仅使用两个密钥做 3 次加密,实现方式为加密 -解密-加密,即: C =EK1 [DK2 [ EK1(P)]] ,第 2 步解密的目的仅在于使得用户可对一重 DES 加密的数据解密。
此方案已在密钥管理标准 ANS X .917 和 ISO 8732 中被采用。
三个密钥的三重DES算法:
三个密钥的三重 DES 密钥长度为 168 bit,加密方式为C =EK3 [DK2 [ EK1(P)]] 。
原文链接:https://blog.csdn.net/qq_33828738/article/details/105050602
2.7 分组密码的工作模式
分组(block)密码的工作模式(mode of operation)允许使用同一个分组密码密钥对多于一块的数据进行加密,并保证其安全性。分组密码只能加密长度等于密码分组长度的单块数据,若要加密变长数据,则数据必须先被划分为一些单独的密码块。通常而言,最后一块数据也需要使用合适填充方式将数据扩展到匹配密码块大小的长度。一种工作模式描述了加密每一数据块的过程,并常常使用基于一个通常称为初始化向量的附加输入值以进行随机化,以保证安全。
工作模式主要用来进行加密和认证。 对加密模式的研究曾经包含数据的完整性保护,即在某些数据被修改后的情况下密码误差传播特性。后来的研究则将完整性保护作为另一个完全不同的,与加密无关的密码学目标。部分现代的工作模式用有效的方法将加密和认证结合起来,称为认证加密模式。
2.7.1 电码本(ECB)模式
电子密码本模式是最基本、最易理解的工作模式。每次加密均产生独立的密文分组,每组的加密结果不会对其他分组产生影响,相同的明文加密后对应产生相同的密文,无初始化向量(也称为加密向量)。可以认为有一个非常大的电码本,对任意一个可能的明文分组,电码本中都有一项对应于它的密文,这也是该模式的名称由来。
优点: 易于理解且简单易行;便于实现并行操作;没有误差传递的问题。
缺点:不能隐藏明文的模式,如果明文重复,则对应的密文也会重复,密文内容很容易被替换、重排、删除、重放;对明文进行主动攻击的可能性较高。
用途:适合加密密钥、随机数等短数据。例如,安全地传递DES密钥,ECB是最合适的模式。
2.7.2 密码分组链接(CBC)模式
密文链接模式是目前应用最广泛的工作模式(已丧失安全性,不推荐使用)。明文加密前需先与前面的密文进行异或运算(XOR)后再加密,因此只要选择不同的初始向量,相同的明文加密后产生不同的密文。
优点:密文链接模式加密后的密文上下文关联,即使在明文中出现重复的信息也不会产生相同的密文;密文内容如果被替换、重排、删除、重放或网络传输过程中发生错误,后续密文即被破坏,无法完成解密还原;对明文的主动攻击的可能性较低。
缺点:不利于并行计算,目前没有已知的并行运算算法;误差传递,如果在加密过程中发生错误,则错误将被无限放大,导致加密失败;需要初始化向量。
用途:可加密任意长度的数据;适用于计算产生检测数据完整性的消息认证码Mac。
2.7.3 密码反馈(CFB)模式
密文反馈模式类似于自同步流密码,分组加密后,按8位分组将密文和明文进行移位异或后得到输出同时反馈给移位寄存器。CFB是上下文相关的,明文的一个错误会影响后面的密文(扩散)。CFB需要一个初始化向量,加密后与第一个分组进行异或运算产生第一组密文;然后,对第一组密文加密后再与第二个分组进行异或运算取得第二组密文;以此类推,直到加密完成。
优点:可以按字节逐个进行加密解密,也可以按n位字节处理;隐藏了明文的模式,每一个分组的加密结果必受其前面所有分组内容的影响,即使出现多次相同的明文,也均产生不同的密文;分组密码转化为流模式,可产生密钥流;可以及时加密传送小于分组的数据。
缺点:与CBC模式相类似。不利于并行计算,目前没有已知的并行运算算法;存在误差传送,一个单元损坏影响多个单元;需要初始化向量。
用途:因错误传播无界,可用于检查发现明文密文的篡改。
2.7.4 输出反馈(OFB)模式
输出反馈模式,它将分组密码作为同步流密码运行,和CFB相似,不过OFB用的是前一个n位密文输出分组反馈给移位寄存器,OFB没有错误扩散问题。该模式产生与明文异或运算的密钥流,从而产生密文,这一点与CFB大致相同,唯一的差异是与明文分组进行异或的输入部分是反复加密后得到的。
优点:隐藏了明文的模式;分组密码转化为流模式;无误差传送问题;可以及时加密传送小于分组的数据。
缺点:不利于并行计算;对明文的主动攻击是可能的,安全性较CFB差。
用途:适用于加密冗余性较大的数据,比如语音和图像数据。
2.7.5 计数器模式
计数器的特点是将计数器从初始值开始计数所得到的值发送给分组密码算法。随着计数器的增加,分组密码算法输出连续的分组来构成一个位串,该位串被用来与明文分组进行异或运算。计数器模式是用来提取分组密码的最大效能以实现保密性。在AES的实际应用中,经常会选择CBC模式和CTR模式,但更多的是选择CTR模式。
优点:可并行计算;安全性至少与CBC模式一样好;加密与解密仅涉及密码算法的加密。
缺点:没有错误传播,因此不易确保数据完整性。
用途:适用于各种加密应用。
2.8 AES算法
AES算法主要有四种操作处理,分别是密钥加法层(也叫轮密钥加,英文Add Round Key)、字节代换层(SubByte)、行位移层(Shift Rows)、列混淆层(Mix Column)。而明文x和密钥k都是由16个字节组成的数据(当然密钥还支持192位和256位的长度,暂时不考虑),它是按照字节的先后顺序从上到下、从左到右进行排列的。而加密出的密文读取顺序也是按照这个顺序读取的,相当于将数组还原成字符串的模样了,然后再解密的时候又是按照4*4数组处理的。AES算法在处理的轮数上只有最后一轮操作与前面的轮处理上有些许不同(最后一轮只是少了列混淆处理),在轮处理开始前还单独进行了一次轮密钥加的处理。
转载:https://zhuanlan.zhihu.com/p/78913397
2.9 SM4算法
SM4算法是我国商用密码标准,其前身是SMS4算法。SM4算法是一个分组加密算法,分组长度和密钥长度均128bit。SM4算法使用32轮的非线性迭代结构。SM4在最后一轮非线性迭代之后加上了一个反序变换,因此SM4中只要解密密钥是加密密钥的逆序,它的解密算法与加密算法就可以保持一致。SM4的主体运算是非平衡Feistel网络。整体逻辑结构如下图所示,经过32轮变换把明文变换为密文。
转载:https://blog.csdn.net/m0_51565722/article/details/124330892
3 流密码
3.1 一次一密密码
一次一密密码(one-time pad)是一种理想的加密方案,由Major Joseph Mauborgne和AT& T公司的Gilbert Vernam1917年发明的。
明文:
密钥:
密文:
加密函数:
解密函数:
注意:密钥为随机产生的,而且只使用一次
加密过程如下图所示:
优点:密钥随机产生,仅使用一次;无条件安全;加密和解密为加法运算,效率较高。
缺点:密钥长度至少与明文长度一样长,密钥共享困难,实用性差。
3.2 流密码的基本概念
流密码(stream cipher)是一种重要的密码体制。明文信息按字符或比特逐位加密,密钥流可以用移位寄存器电路来产生,也促进了线性和非线性移位寄存器发展,流密码主要是基于硬件实现。
流密码的特点:在实时处理反面效率更高;实现简单;便于硬件实现;加解密处理速度快;没有或只有有限的错误传播。
应用场景:专用或机密机构、无线通信、外交通信等。
3.2.1 流密码的基本思想
在流密码中,加密方法可以公开,但密钥需要进行保密(有点像双钥密码体制,但只有一个密钥)密码学中计算大多用到加法、乘法和异或,减法用加负数代替,除法用逆元代替。
下图是分组密码和流密码的比较,二者区别在于有无记忆性:
3.2.2 流密码与分组密码的区别
处理消息的方式不同:分组密码将消息分割成固定长度的数据块,以分组大小作为每次处理的基本单元;流密码加密不定长度的明文数据流,以一个元素(字母或比特)为基本处理单元。
记忆性:分组密码的加解密变换不是时变的,加解密器中不存在记忆元件;流密码中密钥流的产生由当前时刻的内部状态和种子密钥所决定,加解密变换是时变的,其时变性由加解密器中的记忆元件来保证。
3.3 同步流密码
一个六元组(P,C,K,L,E,D)和函数g,并满足以下条件:P是由所有可能明文构成的有限集;C是由所有可能密文构成的有限集;K是由所有可能密钥构成的有限集;L是一个称为密钥流字母表的有限集;g是一个密钥流生成器,用种子密钥k作为输入,产生密钥流。
3.3.1 同步流密码模型
密钥流的产生独立于明文和密文
同步流密码举例
同步要求:
(1)发送方和接受方必须同步
(2) 用同样的密钥且该密钥操作在同样的位置,才能保证正确的解密。
无错误传输:
(1)在传输期间,一个密文字符(或位)被改变,只影响该字符(或位)的恢复,不会对后继字符(或位)产生影响。
(2)对应一位出错,其他位不受影响。
注意:改变不是删除,插入和删除将导致同步丢失。
3.3.2 自同步流密码模型
密钥流的产生与密钥和已经产生的固定数量的密文字符有关
自同步流密码举例
自同步特点:
(1)解密只取决于先前固定数量(即移位寄存器的长度t)的密文字符
(2)在同步丢失后能自动重新建立正确的解密,只有固定数量的明文字符不能被恢复。
有限的错误传播
(1)态取决于t个已有的密文字符
(2)如果一个密文字符在传输过程中出现差错,则解密时最多影响到当前位和后续t个字符的解密
3.4 线性反馈移位寄存器
3.4.1 反馈移位寄存器
移位寄存器是流密码产生密钥流的一个主要组成部分。
GF(2)上一个n级反馈移位寄存器由n个二元存储器与一个反馈函数组成,如下图所示
在任一时刻,这些级的内容构成该反馈移位寄存器的状态,每一状态对应于GF(2)上的一个n维向量,共有
中可能的状态。
每一时刻的状态可用n维向量
表示,其中
是第i级存储内容。
初始状态由用户确定。反馈函数
是n元布尔函数,即函数的自变量和因变量只取0和1折两个可能的值。
函数中的运算有逻辑与、逻辑或、逻辑补等运算。
二元序列的相关知识点链接:后续更新
3.4.2 线性反馈移位寄存器
3.4.3 m-序列与B-M算法
参考:https://zhuanlan.zhihu.com/p/531272487
3.5 常见的非线性组合生成器
密钥流生成器可分解为驱动子系统和非线性组合子系统,如下图所示
![](https://img-blog.csdnimg.cn/3e89a8581f224b819af27d1a8a63449f.png)
驱动子系统常用一个或多个线性反馈移位寄存器来实现,非线性组合子系统用非线性组合函数F来实现,为了使密钥流生成器输出的二元序列尽可能复杂,也应保证其周期尽可能大、线性复杂度和不可预测性尽可能高。
3.5.1 Geffe序列生成器
![](https://img-blog.csdnimg.cn/afbbe4a3430841f3817e306fad0407f7.png)
![](https://img-blog.csdnimg.cn/cde6ccc97f4848d197a718d509085fcb.png)
3.5.2 J-K触发器
![](https://img-blog.csdnimg.cn/9e29b7d14f9944b2b02cea679d407260.png)
![](https://img-blog.csdnimg.cn/f650183443084f258589d4e3aa801308.png)
![](https://img-blog.csdnimg.cn/9ebb83e2f8084201b03a25149f85f6db.png)
![](https://img-blog.csdnimg.cn/9ef4cb31c37f4f608ee422b467b0c055.png)
3.5.3 Pless生成器
![](https://img-blog.csdnimg.cn/b03737df32874d0d9152711090dcf439.png)
3.5.4 钟控序列生成器
![](https://img-blog.csdnimg.cn/cae51b6c0be24fdd94ce97e11b6d1c68.png)
![](https://img-blog.csdnimg.cn/9aa78b564c9d4e149d898ce768b5f043.png)
参考:https://blog.csdn.net/Drifter_Galaxy/article/details/107667564
3.6 典型序列密码算法
3.6.1 RC4算法
RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇。RC4算法是一种在电子信息领域加密的技术手段,用于无线通信网络,是一种电子密码,只有经过授权(缴纳相应费用)的用户才能享受该服务。
参考:https://blog.csdn.net/weixin_43211186/article/details/125438478
3.6.2 A5/1流密码算法
用于蜂窝式移动电话系统语音和数字加密。
A5/1算法用于用户的手机到基站之间的加密通信,通信内容到基站后先解密变成明文,然后再进行基站到基站之间、以及基站到用户手机之间的信息加密,完成通信内容在通信过程的加密保护。
参考:https://blog.csdn.net/Drifter_Galaxy/article/details/107675611
【总结二】现代密码学_FansMing的博客-CSDN博客