🎯对称密码体制
单密钥系统的加密密钥和解密密钥相同,或实质上等同,即从一个易于得出另一个。
(举例:DES,Triple DES,IDEA,AES,RC5,CAST-2018)
- 分组密码算法
明文被分为固定长度的块,即分组,分组一般为64比特,或者128比特。
对每个分组用相同的算法和密钥加/解密。
密文分组和明文分组同样长。
(一般而言,密钥长度和明文长度一样,若不一样,如密钥56位,明文64位,此时需要对密钥进行扩展,通过加奇偶校验位的方法变为64位)
🌸分组加密器本质上就是一个巨大的替换器,在密钥的控制下,能从一个足够大和足够好的置换子集中简单而迅速地选出一个置换,用来对当前输入的明文数字组进行加密变换。分组密码采用了乘积加密器的思想,即轮流使用替代和置换。
💭Shannon提出的设计密码系统的两种基本方法:扩散和混淆
。
扩散:要求明文的统计特征消散在密文
中。即让明文的每个比特影响到密文的许多比特的取值。尽可能使明文和密文的统计关系变复杂。
混淆:使密文与密钥之间的统计关系尽量复杂
,以阻止攻击者发现密钥。
扩散和混淆的目的都是为了挫败推测出密钥的尝试,从而抗击统计分析。迭代密码
是实现混淆和扩散原则的一种有效方法。合理选择的轮函数经过若干次迭代后能够提供必要的混淆和扩散。
🌸分组密码由加密算法、解密算法和密钥扩展算法组成。 - 序列密码算法
每次可加密一个比特或一个字节。
适合比如远程中断输入加密类的应用。
🎯分组密码的一般结构
- Feistel网络结构和SP网络结构
Feistel网络是由Horst Feistel在设计Lucifer分组密码时基于扩散和扰乱的思想所发明的,并因被DES采用而流行。
现在正在使用的几乎所有重要的对称分组密码都使用这种结构,如FEAL、Blowfish等。 - Feistel密码结构的设计动机
分组密码对n比特的明文分组进行操作,产生出一个n比特的密文分组,共有2n个不同的明文分组,每一种都必须产生一个唯一的密文分组,这种变换称为可逆的或非奇异的。
- Feistel密码结构
- Feistel网络结构
Feistel密码结构
其中Li和Ri的计算规则如下:
Li = Ri-1; Ri = Li-1 ⊕ F(Ri-1,Ki)
在第L轮迭代运算后,将LL和RL再进行交换,输出C = RLLL
其中F是轮函数,Ki是由种子密钥K生成的子密钥
Feistel网络的安全性和软、硬件实现速度取决于下列参数:
分组长度
:分组长度越大则安全性越高(其他条件相同时),但加、解密速度也越慢。64比特的分组目前也可用,但最好采用128比特。
密钥长度
:密钥长度越大则安全性越高(其他条件相同时),但加、解密速度也越慢。64比特密钥现在已不安全,128比特是一个折中的选择。
循环次数
:Feistel网络结构的一个特点是循环次数越多则安全性越高,通常选择16次。
子密钥算法
:子密钥算法越复杂则安全性越高。
轮函数
:轮函数越复杂则安全性越高。
快速的软件实现:有时候客观条件不允许用硬件实现,算法被镶嵌在应用程序中。此时算法的执行速度是关键。
算法简洁:通常希望算法越复杂越好,但采用容易分析的却很有好处。若算法能被简洁地解释清楚,就能容易通过分析算法而知道算法抗各种攻击的能力,也有助于设计高强度的算法。 - Feistel网络解密过程
Feistel网络解密过程与其加密过程实质是相同的。
以密文分组作为算法的输入,但以相反的次序使用子密钥,即第一轮使用KL,第二轮使用KL-1,直至第L轮使用K1,这意味着可以用同样的算法来进行加、解密。
先将密文分组C = RLLL,分成左边和右边长度相等的两半,分别记为L0’和R0’,根据下列规则计算 Li’ Ri’
Li’ = Ri-1’ ,Ri’ = Li-1’ F (Ri-1’ ,Ki’) 1≤i≤L
最后输出的分组是RL’ LL’
🎯数据加密标准DES
数据加密标准是至今为止使用最广泛的加密算法(1976年11月23日采纳为联邦标准,批准用于非军事场合的各种政府机构)。
🎯简化的DES
简化的DES是一个提供教学而非安全的加密算法,与DES的特性和结构类似,但是参数较少。S-DES的加密算法以8bit的明文分组和10位的密钥作为输入,产生8bit的明文分组作为输出。加密算法涉及5个函数:初始置换IP;复合函数fk1,它是由密钥K确定的,具有置换和替代的运算 ;转换函数SW; 复合函数fk2;初始置换IP的逆置换IP-1
。
P是转换,S是代替。
🌸S-DES的密钥生成
🌸S-DES加密
S-DES加密:
函数fx
S-DES中最复杂的组成部分是函数fx,这个函数是多个置换函数和替代函数的组合函数。
该函数表示为:令L和R分别是fx的输入的最左边4个比特和最右边4个比特,令F为一个从4bit串到4bit串的映射。令: fx (L,R) = ( L F(R,SK),R)
其中SK是一个子密钥。例如假设经过初始置换后得到的结果是(10111101),对于某个密钥SK,有:F(1101,SK)=(1110)。
由(1011) (1110)=( 0101) 得,fx = ( 0101 1101)。
🏃详细见本人草稿纸笔记(嘻嘻~
🎯简化的DES和DES的关系
DES对64bit的输入分组进行操作,使用一个56bit的密钥,从这个密钥计算出16个48bit的子密钥,这项计算涉及一个56个比特的初始置换和一系列的48bit的以为和置换操作,在加密过程中F不是作用于4比特的(n1,n2,n3,n4)而是作用于32比特的(n1,…n32)。S盒子有8个,每个S盒子有4行16列。
🍺总结
DES加解密的流程、DES密钥扩展、Feistel结构、对称加密过程中反复使用代换和置换、扩散(明文的统计规律消失在密文中)和混淆(让密钥和密文的关系复杂)。