分组密码概述
- 流密码
- 逐比特加密。
- 加密方法
- 大文本加密使用分组密码,利用了其加密快的优点。
- 分组密码的密钥使用公钥加密。
- 分组加密要求
- 安全性
- 运行速度
- 存储量
- 实现平台
- 运行模式
- 概率型加密
- 密文一定比明文长。
- 混沌原则
- 将明文、密文和密文关系变得复杂。
- 扩散原则
- 将明文的统计规律和结构规律散射到相当长的一段统计中去。
- 加密要求
- 分组足够多
- 密钥量足够大
- 弱密钥
- 两个密钥加密能够得到完全相同的结果。
- 常见分组密码结构
Feistel Net
(DES
)SP Net
(AES
)
SP Net
-
代换
-
明文和密文分组都长为
n
比特,明文分组都对应唯一的一个密文分组,称这样的可逆变换为代换。 -
可 逆 变 换 的 个 数 有 2 n ! 个 。 可逆变换的个数有2^n!个。 可逆变换的个数有2n!个。
-
-
最基本的密码运算
- 代换(
Substitution
) - 置换(
Permutation
)
- 代换(
-
图示
-
代换
S
一般被称为混淆层,置换P
被称为扩散层。
Feistel Net
- 乘积密码
- 顺序的执行两个及以上基本密码系统,使得最后结果的密码强度高于每个基本密码系统产生的结果。
- 思想
- 利用乘积密码实现混淆和扩散。
- 加密迭代算法
L E i = R E i − 1 R E i = L E i − 1 ⊕ F ( R E i − 1 , K i ) LE_{i}=RE_{i-1}\\RE_i=LE_{i-1}\oplus F(RE_{i-1},K_i) LEi=REi−1REi=LEi−1⊕F(REi−1,Ki)
L
和R
是明文平分的两份,在完成n
次迭代后再合并到一起生成密文。
K
是密钥,i
表示为第i
轮的子密钥。
F
函数是DES
加密的关键。
- 解密迭代算法
L D i + 1 = R D i = L E n − i = R E n − i − 1 R D i + 1 = L D i ⊕ F ( R D i , K n − i ) = L E n − i − 1 LD_{i+1}=RD_{i}=LE_{n-i}=RE_{n-i-1}\\RD_{i+1}=LD_i\oplus F(RD_i,K_{n-i})=LE_{n-i-1} LDi+1=RDi=LEn−i=REn−i−1RDi+1=LDi⊕F(RDi,Kn−i)=LEn−i−1
实际上就是加密流程的逆过程,经过
n
次迭代之后得到明文。
- 图解
DES算法
简介
- 明文和密文分组长度都为
64
位。 - 密钥长度为
64
为,去掉8
位奇偶校验位,有效密钥长度为56
位。 - 算法包括
- 初始置换
IP
16
轮迭代的乘积变换- 逆初始置换
16
个子密钥产生器
- 初始置换
流程
- 利用了
Feistel Net
的框架。
初始置换
逆初始置换
轮结构
-
-
选择扩展运算
E
-
-
选择压缩运算
S
-
将
48
位输入分为8
份,顺序输入8
个S
盒。
S
盒代换
将
6
位输入的第1
位和第6
位作为二元组决定行号,第2
位到第5
位作为四元组决定列号。元组的高位对应输入的高位。
对应到表中的内容可以转换为
4
位二进制组。
P
盒置换
密钥编排
PC-1
PC-2
移位次数
第i 次 | 移位次数 | 第i 次 | 移位次数 |
---|---|---|---|
1 | 1 | 9 | 1 |
2 | 1 | 10 | 2 |
3 | 2 | 11 | 2 |
4 | 2 | 12 | 2 |
5 | 2 | 13 | 2 |
6 | 2 | 14 | 2 |
7 | 2 | 15 | 2 |
8 | 2 | 16 | 1 |
加密实现
等俺偷个懒把解密算法一起打出来再发