一、分组密码的设计思想
1.1、分组密码的定义
分组密码是指对固定长度的一组明文进行加密的一种加密算法,这一固定长度称为分组长度。
1.2、分组密码的作用
- 消息加密
- 伪造伪随机数生成器(用于产生性能良好的随机数)
- 消息认证/数据完整性保护(通过用于构造消息认证码(MAC)来实现
- 构造流密码
- 构成其他密码协议的基本模块(如秘钥管理协议,身份认证协议)
1.3、分组密码的五要素
明文、密文、加密算法、解密算法、秘钥
1.4、分组密码的要求
- 对于每一个k,Ek : {0,1}^n --> {0,1}^n 是一一映射的
- 加密函数易记算
- 从方程c = E(m,k) 或 m = D(c,k)中解出k是一个困难问题
1.5、分组密码的设计原则
1.5.1、安全性设计原则
- 混淆原则(数据关系变复杂):明文、密文、密钥之间的依赖关系相当复杂,防止密码分享者利用统计分析方法进行破译攻击
- 扩散原则(微小输入改变导致输出多位变化):
- 密钥的每一个比特影响密文的每一个比特,以防止对密钥进行逐段破译
- 明文的每一个比特影响密文的每一个比特,以便最充分地隐蔽明文的统计特性。
1.5.2、迭代分组密码基本设计原则
- 分组长度n要足够大:防止明文穷举攻击
- 密钥长度l要足够大:尽可能不存在弱密钥和防止密钥穷举攻击
- 加解密算法要足够复杂:实现混淆与扩散
- 加解密运算简单:易于软硬件高速实现
- 数据扩展:采用随机化加密等技术时,可引入。
1.5.3、实现性设计原则
- 软件实现的设计原则
- 将分组n划分成若干字块。子块的数据长度能自然适应软件编程,如8,16,32比特
- 选择简单的运算,如模加、移位、异或、乘等。
- 硬件实现的设计原则
- 硬件实现时,应该保证加密和解密的相似性,即 加密和解密可以便用同样的器件来实现
1.6、分组密码设计思想
- 直接构造密码学性质强的复杂函数(不常用)
- 迭代型分组密码:构造密码学性质相对较弱的 简单函数,并且基于简单函数进行多次迭代(常用)
1.6.1、分组迭代密码
- 每一迭代称为一轮,相应的函数G称作轮函数
- 每一轮输入都是前一轮输出的函数
- 其中Ki是第i轮的字密钥,由秘密密钥K作为种子密钥通过密钥扩展算法生成。
1.6.2、分组密码的轮函数
1.6.3、轮函数G—S盒与P盒实现
S盒:非线性部件,规模较小,局部混淆
- 非线性关系:实现混淆
- 规模:较小
- DES(6进4出)
- AES(8进8出)
- SM4(8进8出)
- 局部:各个S盒之间没有关联,混淆是在各个S盒之内进行的,是局部的。
P盒:线性部件,整体扩散。
1.6.4、迭代型密码的基本结构
- Feistel结构(典型代表DES,SM4)
- 加解密算法相同,只是轮密钥逆序使用
- 结构保证可逆,但S盒不需要可逆
- SPN结构(AES)
- 加解密结构相似
- S盒通常需要可逆
- 扩散速度较Feistel快,因而轮数比Feistel少。
二、DES(重点)
DES是一个包含16个阶段的“替换—置换”的分组密码,以56位为分组对数据进行加密
2.1、基本参数(重点)
- 分组长度:64比特
- 密钥长度:64比特。实际上用户只提供56位(通常是转换成ASCII位的7个字母单词作为密钥),其他的8位由算法提供,分别放在8,16,24,32,40,48,56,64)位上。添加的位是有选择的,使得每个8位的块都含有奇数个奇偶检验位(1的个数是奇数)。
- 轮数:16
- 结构:Feistel结构
- 基本思想:利用乘积密码(顺序的执行两个或多个基 本密码系统,使得最后结 果的密码强度高每个基本 密码系统产生的结果)实现混淆和扩散。
2.2、加密流程
2.3、加密过程详细说明
2.3.1、初始置换
简称IP置换,在第一轮运算之前执行。数组打乱
2.3.2、密钥置换
DES加密算法输入的初始密钥大小为8个字节,每个字节的第8位作为检验位,所以初始密钥不考虑每个字节的第8位。实际上是对56位先进行密钥置换(顺序打乱),再通过压缩置换选出48位字密钥。
2.3.3、扩展变换(E—盒)
也被称为E-盒,将64位输入序列的右半部分Ri扩展到48位。
2.3.4、S-盒变换(重点)
经过密钥置换得到的48位轮密钥和拓展变换得到的分组进行异或运算,得到48位结果序列,对这个序列进行替换运算。替换由8个替换盒(S-盒)。每个S-盒对应6位的输入序列,得到相应的4位输出序列。每个S盒大小为64.
输入输出序列转换:
输入b1,b2, b3, b4, b5, b6 ; b1b6表示行。b2,b3b4b5表示列
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 10 | 0 | 9 | 14 | 6 | 3 | 15 | 5 | 1 | 13 | 12 | 7 | 11 | 4 | 2 | 8 |
1 | 13 | 7 | 0 | 9 | 3 | 4 | 6 | 10 | 2 | 8 | 5 | 14 | 12 | 11 | 15 | 1 |
2 | 13 | 6 | 4 | 9 | 8 | 15 | 3 | 0 | 11 | 1 | 2 | 12 | 5 | 10 | 14 | 7 |
3 | 1 | 10 | 13 | 0 | 6 | 9 | 8 | 7 | 4 | 15 | 14 | 3 | 11 | 5 | 2 | 12 |
例如输入101011 行:11 = 3,列0101 = 5 输出9 = 1001
2.3.5、P-盒替换
经S-盒替换运算得到的32位输出再进行置换,结果与本轮输入的64位分组的左半部分进行异或,得到本轮的右半部分;本轮加密输入序列的右半部分直接输出,作为本轮加密输出的左半部分。
P-盒设计特点:
- P盒的各输入组的4个比特都分配到不同的输出组之中
- P盒的各输入组的4个比特都 分配到不同的输出组之中
- P盒的各输入组的4个比特都 分配到不同的输出组之中
2.3.6、逆初始置换
初始置换的逆过程。
2.3.7、DES解密
解密过程是加密的逆过程。
2.4、DES安全性分析
2.4.1、互补性
2.4.2、弱密钥
密钥k满足
DESk(m) = DESk ^ -1 (m)
四种弱密钥:
- k = 01 01 01 01 01 01 01 01
- k = 1F 1F 1F 1F 1F 1F 1F 1F
- k = E0 E0 E0 E0 E0 E0 E0 E0
- k = FE FE FE FE FE FE FE FE
2.4.3、半弱密钥
密钥k和k`满足:
DESk(m) = DESk ^ -1 (m)。
2.4.4、双重DES
2.4.5、三重DES
三、AES(重点)
3.1、数学基础(重点)
AES中的运算是按字节或4字节的字定义的,并把1字节看成系数在GF(2)上的次数小于8的多项式,即是GF(2^8)中的一个元素;把一个4字节的字看成系数在GF(2 ^8)上且次数小于4的多项式。
3.2、基本参数(重点)
-
分组长度:128
-
密钥长度及轮次
AES-128 AES-192 AES-256 密钥长度 128 192 256 轮数 10 12 14
3.3、加密过程
四、IDEA,SM4,RC5
4.1、IDEA
4.1.1、基本参数
- 密钥长度:128
- 分组长度:64
- 轮数:8
- 结构:LAI-MASSEY
4.1.2、加密流程
4.2、SM4
4.2.1、基本参数
- 密钥长度:128
- 分组长度:128
- 轮数:32
- 结构:非平衡型FEISTEL
4.3、RC5
特点:
-
简单、加解密速度快,因为只用基本计算机运算 (模加、异或、移位等)
-
灵活:轮数可变,密钥位数可变
参数 定义 取值范围 w word (字长) 一次加密2个word 16, 32, 64 r 加密轮数 0~255 b 密钥大小对应的字节个数 0~255