分组密码¶
分组密码概述¶
特点
安全性依赖密码
加密秘钥=解密密钥
速度快,易实现
实现
DES
Blowfish
IDEA
LOKI
RC5
AES
分组密码和序列密码
序列密码(流密码):单独加密每个位
分组密码:每次使用相同的密钥加密整个明文分组
分组密码的基本原理
代换
扩散
使明文密文间的统计关系变 得复杂,使攻击者无法得到从密文推出明文
混淆
使密文和密钥之间的统计关系变得尽可能 复杂,以使攻击者无法得到密钥
分组密码结构
Feistel分组密码的特点
最后一轮没有进 行左右交换
利用同一算法实现加解密
SP分组密码结构和特点
代换S(代换)一般称为混淆层
置换或可逆的线性变换P一般称为扩散层
SP网络可以看作Feistel网络的推广,但SP型 分组密码的加密过程与解密过程一般不相似
DES¶
加密流程
初始置换\(IP\)
16轮迭代
初始置换\(IP^{-1}\)
轮密钥生成
16轮迭代的每一轮秘钥都不相同。每一轮迭代使用的秘钥长度均为48bit。这48bit的轮密钥生成规则如下:
首先通过PC–1置换 将64bits变换成56bits, 然后再通过16轮的循环 移位和PC–2置换处理 就可以得到16个48bits 的轮密钥
加密函数
加密函数\(F\)是整个DES算法的核xz心
graph
A(扩展置换E -- 32bit->48bit)-->B(异或运算 -- 和48bit的轮密钥异或运算)-->S(S盒变换 核心 -- 48bit->32bit)-->P(置换P -- 结果重排)-.->A
AES¶
特点
安全、高效、易实现、灵活
AES中分组长度只能是128bit,但是密钥长度可以是128bit、192bit、256bit(依次增加64bit)
密钥长度不同,加密轮数不同
AES算法
密钥长度
分组长度
加密轮数
AES-128
128bit
128bit
10
AES-192
192bit
128bit
12
AES-256
256bit
128bit
14
算法过程(以AES-128为例)
AES处理的基本单位是字节(DES处理的基本单位是比特)
128bit的明文P和输入秘钥K都被分为16字节
加密过程和解密过程不一致(SP分组结构,区别Feistel结构的DES)
只有轮密钥加阶段使用了密钥
状态矩阵(从上到下、从左至右)
每一轮的加密过程
graph
A(字节代换 -- 使用S盒替换每个字节)-->B(行移位 -- 将明文的状态矩阵每一行移位对应的位数)-->C(列混合 -- 和固定矩阵相乘)-->D([轮密钥加 -- 和128bit的秘钥位异或 XOR])
E(密钥扩展 -- 通过种子密钥生成多重密钥)
分组密码的工作模式¶
DES的四种工作模式
密码
模式
电子密码本(ECB)
密文分组链接(CBC)
密文反馈(CFB)
输出反馈(OFB)
计数器模式(CTR)
公钥密码¶
公钥密码体制概述¶
使用一对密钥(公钥和私钥),公钥和私钥不可互相求解
公钥密码的设计要求
生成密钥对容易
通过公钥求私钥是在计算上不可行的
加密和解密的次序可换
本质上是一个单项陷门函数
RSA公钥密码体制¶
密钥的生成
选择连个较大的树\(p\),\(q\)
计算\(n=pq\),\(\phi(n)=(p-1)(q-1)\)
随机选取和\(\phi(n)\)互质的树\(e(e \lt n)\)
求解d,使得\(ed \equiv 1 \pmod{\phi(n)}\)
公钥\((n,e)\),私钥\((n,d)\)
加密解密(明文是M)
加密\(C \equiv M^e \pmod n\)
解密\(M \equiv C^d \pmod n\)
安全性分析
针对参数选择
共模攻击
低指数攻击
循环攻击法
因子分解法
侧信道安全性分析(物理设备上的安全性)
密码哈希函数¶
Hash函数的定义¶
把任意长度的输入通过散列算法变成固定长度的输出,输出值就是散列值。Hash算法又称散列算法
哈希函数的性质
压缩
高效
单向性
弱抗碰撞性
强抗碰撞性
生日攻击¶
第一类生日攻击
找出具有给定Hash值的一个消息需要执行\(n/2\)次运算
第二类生日攻击
找出相同的Hash值的两个消息需\(\sqrt{n}\)次运算
HAMC算法描述¶
输入\(b\)-bit,输出\(n\)bit
Hash函数的构造¶
主要形式
使用压缩函数迭代哈希【MD结构】
大多数的结构。例如 MD5、SHA1、SM3等等
使用将输入转换成相同大小的输出的函数进行迭代哈希【海绵函数】
Hash函数的迭代结构
单向散列函数的工作模式
填充为还包括输入的长度,增加了复杂度
MD5算法描述