跳转至

分组密码

分组密码概述

特点

  • 安全性依赖密码
  • 加密秘钥=解密密钥
  • 速度快,易实现

实现

  • DES
  • Blowfish
  • IDEA
  • LOKI
  • RC5
  • AES

分组密码和序列密码

  • 序列密码(流密码):单独加密每个位

  • 分组密码:每次使用相同的密钥加密整个明文分组

分组密码的基本原理

  • 代换

  • 扩散

使明文密文间的统计关系变 得复杂,使攻击者无法得到从密文推出明文

  • 混淆

使密文和密钥之间的统计关系变得尽可能 复杂,以使攻击者无法得到密钥

image-20231218175059087

分组密码结构

image-20231218175446908

  1. Feistel分组密码的特点
  2. 最后一轮没有进 行左右交换
  3. 利用同一算法实现加解密
  4. SP分组密码结构和特点
  5. 代换S(代换)一般称为混淆层
  6. 置换或可逆的线性变换P一般称为扩散层
  7. SP网络可以看作Feistel网络的推广,但SP型 分组密码的加密过程与解密过程一般不相似

DES

加密流程

  1. 初始置换\(IP\)
  2. 16轮迭代
  3. 初始置换\(IP^{-1}\)

轮密钥生成

16轮迭代的每一轮秘钥都不相同。每一轮迭代使用的秘钥长度均为48bit。这48bit的轮密钥生成规则如下:

首先通过PC–1置换 将64bits变换成56bits, 然后再通过16轮的循环 移位和PC–2置换处理 就可以得到16个48bits 的轮密钥

image-20231218182317593

加密函数

加密函数\(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)

  • 只有轮密钥加阶段使用了密钥

  • 状态矩阵(从上到下、从左至右

image-20231218190655675

image-20231218190245865

每一轮的加密过程

graph 
A(字节代换 -- 使用S盒替换每个字节)-->B(行移位 -- 将明文的状态矩阵每一行移位对应的位数)-->C(列混合 -- 和固定矩阵相乘)-->D([轮密钥加 -- 和128bit的秘钥位异或 XOR])
E(密钥扩展 -- 通过种子密钥生成多重密钥)

分组密码的工作模式

DES的四种工作模式

密码 模式
电子密码本(ECB) image-20231218192310653
密文分组链接(CBC) image-20231218192323396
密文反馈(CFB) image-20231218192346046
输出反馈(OFB) image-20231218192435661
计数器模式(CTR) image-20231218192445058

公钥密码

公钥密码体制概述

使用一对密钥(公钥和私钥),公钥和私钥不可互相求解

公钥密码的设计要求

  • 生成密钥对容易
  • 通过公钥求私钥是在计算上不可行的
  • 加密和解密的次序可换
  • 本质上是一个单项陷门函数

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函数的迭代结构

  • 单向散列函数的工作模式

image-20231218224552456

填充为还包括输入的长度,增加了复杂度

MD5算法描述