导图社区 对称密码思维导图
这是一篇关于对称密码: AES,DES 做题笔记的思维导图。该思维导图比较系统全面地归纳总结了关于这一部分的知识点。
编辑于2021-09-03 11:48:23对称密码
分组密码
分组密码设计原则(简答或选择)
分组长度n
防止对明文的穷搜攻击奏效
密钥空间K
足够大,防止对密钥的穷搜攻击奏效
混乱
要使密文和明文以及密文和密钥之间的依赖关系相当复杂,使密码分析者无法利用其依赖性
扩散
使每bit密钥影响一半以上bit密文,以防止对密钥进行逐段破译;每bit明文也应影响一半以上bit密文,以便隐蔽明文的统计特性
即|K|>=|C|>=|P|
稳定的安全性
部分密钥被破译后,分组密码仍有一定的抗攻击能力
设计结构
迭代
Feistel
把输入块分为左右两部分,只变化右边部分
加密
解密
S盒和P盒
S盒
混合作用
P盒
扩散作用
DES和AES
DES
概念
雪崩效应
明文或密钥的1比特的变化,引起密文许多比特的改变
DES密码有良好的雪崩效应
DES分析
时间复杂度分析
差分分析
迭代密码的有效方法
一种选择明文攻击
分析特定明文差分对密文差分的影响去获得较大可能性的k
线性分析
一种已知明文攻击
使用线性近似值来描述分组密码的操作
寻找明文、密文和密钥的线性逼近
密钥
密钥长度
64bits
但实际只用到56bits,有8位奇偶校验位
弱密钥和半弱密钥
对合
弱密钥
K是自己的对合
K=K'
个数
4种
半弱密钥
K存在异于自己的对合
个数
12种
Des算法
加密
子密钥(轮密钥)产生详解
step1
输入的64位密钥,去掉奇偶效验位(也即PC-1置换),得到56位密钥
step2
将56位密钥分成左右28位分别赋给C和D
step3
计算第i轮所需子密钥,首先进行循环左移,循环左移位数取决于i的值, 循环移位后的值 一是经过PC-2置换,变为子密钥 二是作为下一次循环左移的输入
其中每轮左移位数
16轮加密,每一轮步骤
把Ri赋给Li+1
Ri通过E盒扩展为48位E(Ri)
E(Ri)在与第i+1轮的子密钥异或
在将异或得到值分成8组,分别通过8个S盒得到32位输出
再将得到的32位进行P盒置换操作
最后与Li异或得到下一轮的Ri+1
方法
step1
将输入的(64位比特)密钥,然后使用初始置换表(PC-1)置换表,得到56位密钥
解密
解密是加密的逆过程
对Feistel框架密码,采用相同算法,但是子密钥使用的次序正好相反:
IP变换抵消加密的最后一步IP-1 ;
第一轮使用密钥K16 ;
第二轮使用密钥K15 ;
……
第十六轮使用密钥K1 ;
IP-1 变换抵消加密的第一步IP;
获得解密明文
一些盒
S盒
2DES(双重DES)
3DES
对密钥的要求
密钥长度
AES
概念
以字节为单位
1byte=8bits
GF(2^8)
作用
相当于分组“8个bit=1字节”一组
仿射变换
三种密钥长度对应的迭代次数
当密钥长度为128bits
128bits=>16byte
4x4的矩阵
步骤
字节替换
行移位
步骤
第一行保存不变,第二行循环左移1个字节,第三行循环左移2个字节,第四行循环左移3个字节
列混淆
步骤
计算方法
某个数为x
x * 01
为x本身
x * 02
x * 03
如
02*d4
d4的二进制11010100,左移一位得10101000,因为本身最高位为1,所以再异或1B,得10110011(B3)
03*bf
01*5d
5d
01*30
30
轮密钥加
加密过程中,每轮的输入与轮密钥异或一次(当前分组和扩展密钥的一部分进行按位异或)
密钥扩展
目的是将输入的128位密钥扩展成11个128位的子密钥
AES的密钥扩展算法是以字为一个基本单位(一个字为4个字节),刚好是密钥矩阵的一列。因此4个字(128位)密钥需要扩展成11个子密钥,共44个字
将初始密钥以列为主,转化为4个32 bits的字,分别记为w[0…3];
按照如下方式,依次求解w[i],其中i是整数并且属于[4,43]
step1:将w[i]循环左移一个字节
step2:分别对每个字节按S盒进行映射
step3:32 bits的常量(RC[i/4],0,0,0)进行异或
RC是一个一维数组,其中RC = {01, 02, 04, 08, 10, 20, 40, 80, 1B, 36}
step4:除了轮密钥的第一列使用上述方法,之后的二到四列都是w[i]=w[i-4]⊕w[i-1]
step5:最终得到的第一个扩展密钥为(之后的每一轮密钥都是在前一轮的基础上按照上述方法得到的)
工作模式
采用适当的工作模式来隐蔽明文的统计特性、数据的格式等,以提高整体的安全性,降低删除、重放、插入和伪造成功的机会
流密码
将分组密码算法设计为一个密钥流产生器,而明文加密和解密采用最简单异或运行
分类
分组模式
ECB(电子密码本) [Electronic Code Book]
分组密码算法根据需求选择,如DES、AES、SM4等
加解密
特征
直接利用加密算法分别对分组数据组加密。
最大特性:在给定的密钥下,同一明文组总产生同样的密文组。这会暴露明文数据的格式和统计特征。
在固定的格式明文数据,例如需要以协议的形式定义,重要的数据常常在同一位置上出现,使密码分析者可以对其进行统计分析、重传和代换攻击。
错误传播:单个密文分组中有一个或多个比特错误只会影响该分组的解密结果。
分组重放攻击
例子
如何避免ECB模式的明文的格式和统计特性暴露?
每组明密文之间是独立 解决方法:破坏独立性
CBC(密码分组链接) [Cipher-Clock Chaining]
加解密
特征
初始矢量IV(Initial Vector):第一组明文加密时无反馈密文,为此需要在寄存器中预先置入一个,收发双方必须选用同一IV。
每个明文组加密之前,先与反馈至输入端的前一组密文按位模2求和后,再送至加密算法加密
实际上,IV的完整性要比其保密性更为重要。在CBC模式下,最好是每发一个消息,都改变IV,比如将其值加一。
CBC的错误传播
1. 明文有一组中有错,会使以后的密文组都受影响,但经解密后的恢复结果,除原有误的一组外,其后各组明文都正确地恢复。
2.若在传送过程中,某组密文组出错时,则该组恢复的明文和下一组恢复数据出错。再后面的组将不会受中错误比特的影响。
序列模式
OFB(输出反馈) [Output Feed Back]
j比特-输出反馈OFB模式
加解密
特征
1、将分组密码算法作为一个密钥流产生器,其输出的j-bit密钥直接反馈至分组密码的输入端,同时这j-bit密钥和输入的j-bit明文段进行对应位模2相加。
2、克服了CBC和CFB的错误传播所带来的问题。
3、对于密文被篡改难以进行检测
4、OFB模式属于同步序列密码
解密
采用相同方案,但是使用加密函数而非解密函数
OFB就相当于DES加密完(还不是密文)的就输出给下一组
CFB(密码反馈) [Cipher Feed Back]
j-比特密码反馈CFB模式
加解密
特征
若待加密消息必须按字符(如电传电报)或按比特处理时,可采用CFB模式。
CFB实际上是将加密算法DES作为一个密钥流产生器。
CFB与CBC的区别是反馈的密文长度为j,且不是直接与明文相异或,而是反馈至密钥产生器。
与CBC一样,对错误的差错比较敏感,可以用于认证。
解密:采用相同方案,但是使用加密函数而非解密函数
错误传播
1、明文某一组中有错,会使以后的密文组都受影响,但经解密后的恢复结果,除原有误的一组外,其后各组明文都正确地恢复。
2、密文里的一位错误会引起明文的一个单独错误,此处,错误进入移位寄存器,导致密文成为无用信息,直到该错误从移位寄存器中移出。
如
对于8位(1个字节)的加密,则会产生9字节的错误
CFB就相当于把密文输出给下一组
计数模式
CTR(计数器模式) [Counter]
加解密
特征
使用与明文分组规则相同的计数器长度
加密不同的分组所使用的计数器值必须不同
解密
采用相同方案,但是使用加密函数而非解密函数。
几种方式的优缺点
序列密码
概念
分组密码与序列密码的主要区别
在于有无记忆性
序列密码有记忆性
输出的密钥是周期序列
周期越大越好
密钥序列生成器(KG)基本要求
混乱性
k的每一bit均与k的大多数bit有关
如
LFSR
扩散性
k任一bit的改变要引起k在全貌上的变化
游程
序列中取值相同的那些相继的元素合称为一个游程
游程长度
一个游程中元素的个数
如
100110101111000
游程为 [从左往右]
1,00,11,0,1,0,1111,000
总数为
8
其中有一半的游程长度为2,长度为2的游程为四分之一,有 一个长度为4的游程和一个长度为3的游程
随机性假设
在序列的一个周期内,0与1的个数相差至多为1
自相关函数是一个常数
类型
同步流密码
自同步/异同步流密码
根据状态函数是否独立于明文或密文,可以将序列密码分为
同步序列密码
密钥流独立于消息流产生
特点
(1)同步:在一个同步序列中,发送方和接收方必须是同步的,即用同样的密钥且该密钥操作在同样的位置(状态),才能保证正确的解密。
(2)无错误传播:在传输期间,一个密文字(或位)被改变(不是删除和插入)只能影响该密文字(或位)的恢复,不会对后续密文字(或位)产生影响。
(3)主动攻击破坏同步:按照同步要求,一个主动攻击对密文进行插入、删除或重放操作都会立即破坏其同步,从而可能被解密器检测出来。作为无错误传播的结果,主动攻击者可能有选择地对密文进行改动,并准确地知道这些改动对明文的影响,这时可以采用为数据源提供认证并保证数据完整性的技术。
设计
极大的周期、良好的统计特性、抗线性分析、抗统计分析
例子
分组密码的OFB模式
自同步序列密码
也称为异步流密码
其密钥流的产生不是独立于明文流和密文流的,与种子密钥和其前面已产生若干密文字有关
特点
(1)自同步:自同步的实现依赖于密文字被删除或插入,这是因为解密只取决于先前固定数量的密文字。自同步序列密码在同步丢失后能够自动重新建立同步,并正确地解密,只有固定数量的明文字不能解密。
(2)有限的错误传播:因为自同步序列的状态取决于t个已有的密文字符,若一个密文字(或位)在传输过程中被修改(插入或删除),则解密时最多只影响到后续 t个密文字的解密,即只发生有限的错误传播。
(3)难检测主动攻击:相比于同步,自同步使得主动攻击者发起的对密文字的插入、删除、重放等攻击只会产生非常有限的影响,正确的解密能很快自动重建。因此,主动攻击对自同步序列密码很困难的,可能需要采用为数据源提供认证并保证数据完整性的技术。有限的错误传播特性使得主动攻击者对密文字的任何改动都会引起一些密文字解密出错。
(4)明文统计扩散:每个明文字都会影响其后的整个密文,即明文的统计特性被扩散到密文中。所以,自同步序列密码体制在抵抗利用明文冗余度而发起的攻击方面要强于同步序列密码
例子
分组密码的CFB模式
反馈移位寄存器(LFSR)
概念
用于序列密码产生密钥流的一个主要组成
GF(2)上一个n级反馈移位寄存器由n个二元存储器与一个反馈函数f(a1,a2,…,an)组成
线性反馈移位寄存器
如图
级
每个存储器称为移位寄存器的一级,在任一时刻,这些级的内容构成该反馈移位寄存器的状态
状态
每个状态对应于GF(2)上的一个n维向量,共有2^n种可能的状态
初始状态
由用户确定,当第i个移位时钟脉冲到来时,每一级存储器ai都将其内容向下一级ai-1传递,并根据寄存器此时的状态a1,a2,…,an计算f(a1,a2,…,an),作为下一时刻的an
注
反馈函数
f(a1,a2,…,an)是n元布尔函数,即n个变元a1,a2,…,an可以独立地取0和1值,最后的函数值也为0或1
f可写为
例
LFSR的特征多项式
研究结论
LFSR输出序列的性质完全由其反馈函数决定
若其初始状态为0,则其状态恒为0。若其初始状态非0,则其后继状态不会为0
周期达到最大值的序列称为m序列
m序列
GF(2)上的n长m序列{ai}具有如下性质
0,1平衡性
游程特性
综合题
RC4
概念
步骤
step1
先初始化状态向量S(256个字节)
按照升序,给每个字节赋值0,1,2,3,4,5,6.....,254,255
step2
初始密钥(由用户输入),长度任意
如果输入长度小于256个字节,则进行轮转,直到填满
如
输入密钥的是1,2,3,4,5 , 那么填入的是1,2,3,4,5,1,2,3,4,5,1,2,3,4,5........
由上述轮转过程得到256个字节的向量T
step3
开始对状态向量S进行置换操作
step4
秘钥流的生成与加密
生成
加密
解密过程
由于加密只是使用密码流对明文做了异或运算,因此解密过程只需要使用相同步骤产生密码流并对密文进行同样的异或运算即可得到加密前的明文
其他
Enigma轮转机密码
对称加密算法