4.分组密码和数据加密标准
- 流密码与分组密码之间的差异:每次加密的明文大小不同。
- 介绍Feistel密码:一种结构化的对称密码算法,通过将明文分成两部分,交替应用多轮相同的函数F和不同的子密钥K进行加解密。
- 说明为什么Feistel解密是加密的逆过程:加解密算法主体相同,只是密钥的使用顺序和轮密钥不同。
- 介绍DES:
- 初始置换
- 轮函数操作
- 子密钥生成算法
- 逆初始置换
- 雪崩效应:明文或密钥 的某位发生变化会导致密文的很多位发生变化。
- DES的密码学强度:
不足以抵抗现代密码学攻击(差分攻击、线性攻击、暴力穷举攻击),由于长度仅56位,易在可接受的时间内被暴力破解。 - 主要的分组密码设计原理:
- 迭代轮数选择:
使密码分析难于穷举的难度。 - 函数F的设计:
- 注入混淆成分。
- 较好的雪崩效应。
- 密钥使用算法:
加大推导子密钥以及密钥种子的难度。
- 迭代轮数选择:
4.1 流密码与分组密码
流密码:每次加密数据流的一位或一字节。(DES、AES、IDEA、RC6…)
分组密码:加密一个明文分组,通常得到与明文等长的密文分组。(RC4、A5、SEAL…)
4.2 Feistel密码
1、设计动机:解决对称加密算法中的密钥管理问题。(轮密钥依据算法生成)
2、概念:
- 混淆:尽可能使密文和加密密钥间的统计关系变得复杂。
- 扩散:使明文的统计特征消散在密文中。
3、密码结构流程
- 将明文分为左右等长两部分
- 左半部分:用上一轮右半部分代替。
- 右半部分:输入轮函数F。
- 将左右部分处理后进行异或运算后得出下一步的右半部分。
- 将上一步的右半部分作为下一步的左半部分。
- 重复上述步骤。
注意:
- 加解密过程轮函数F不变。
- 一个过程中每轮的子密钥不同。
4.密码设计要素
- 分组大小 :分组长,安全性高。(正相关)
- 密钥长度 :密钥长,安全性高,加解密速度慢。
- 迭代轮数 :轮数多,安全性高。(经典轮数16轮)
- 子密钥生成算法 :越复杂,越安全。
- 轮函数F :越复杂,越安全。(分部分—>不要求可逆)
5.其他考虑要素:
- 快速软件加解密
- 简化分析难度
4.3 DES(数据加密标准)介绍
1.什么是DES:最广泛使用的数据加密方案。
2.DES介绍:
-
子密钥生成算法:
-
- 置换选择1:将64bit变成56bit。
- 分组:分为各28位的C和D部分。
- 循环左移:对C和D分别循环左移。
- 合并:将C和D合并。
- 置换选择2:将56bit变成48bit
-
初始置换:将64位明文比特位重新排列,提高DES算法的安全性。(不改变内容,仅改变位置)
-
轮函数操作(F操作):(基于Feistel结构)
- 先将输入的64bit分为左右两半部分,每个部分32bit,下面只对右半部分进行DES操作。
- 扩展运算E:根据固定表格E进行扩展(32bit -> 48bit)
- 轮密钥加:与子密钥进行异或操作(48bit -> 48bit)
- S盒代换:输入数据分为8个子块,每个6位子块经过S盒后变为4位子块。
(8x6 bit -> 8x4 bit)(唯一不可逆的操作) - 置换运算P:按照固定的置换表P重新排列。(32bit -> 32bit)
- 与上一轮的左半部分进行异或运算(32bit -> 32bit),得到这一轮的右半部分。
- 这一轮的左半部分等于上一轮的左半部分(32bit)。这一轮的右半部分(32bit)通过上面的操作已经得到了。
。
- 先将输入的64bit分为左右两半部分,每个部分32bit,下面只对右半部分进行DES操作。
-
逆初始置换:通过1中的逆矩阵将密文排到和明文顺序一样。
(32bit)通过上面的操作已经得到了。
。
-
逆初始置换:通过1中的逆矩阵将密文排到和明文顺序一样。