7 分组加密的工作模式
7.1 多重加密与三重DES
7.1.1 双重DES
双重DES所对应的映射不被单DES所定义,所以是强于单DES的
中间相遇攻击:可能的密钥加密明文,然后用可能的密钥解密密文,如果能前后两个密钥能匹配,则说明是正确的密钥
7.1.2 使用两个密钥的三重DES
具体过称则是:加密-解密-加密
当前暂无对3DES有效的攻击方法
7.1.3 使用三个密钥的三重DES
这种情况下,密钥很长
7.2 五种工作模式
工作模式是为了增强密码算法和使算法适用于不同的技术
模式 | 描述 | 典型应用 |
---|---|---|
电码本(ECB) | 使用相同密钥独立加密明文 | 单个数据安全传输 |
密码分组链接(CBC) | 输入是上一个密文组和下一个明文组的异或 | 面向分组的通用传输/认证 |
密文反馈(CFB) | 一次处理s位,上一块密文作为算法输入,输出为伪随机数,再与明文异或作为下一单元的密文 | 面向数据流的通用传输/认证 |
输出反馈(OFB) | 与CFB类似 | 噪声信道上的数据流传输(如卫星通道) |
计数器(CTR) | 明文分组与经过加密的计数器相异或,对每个后续分组计数器递增 | 面向分组的通用传输/用于高速需求 |
7.7 用于面向分组的存储设备的XTS-AES模式
7.7.1 可调分组密码
加上了一个微调T,同一输入不同T 产生的输出也不同
7.7.2 存储加密的要求
加密存储的数据和加密传输的数据要求有一些不同,具体有:
- 密文可被随意获取
- 数据面版在存储介质上或者传输中不能改变
- 以定长分组单位访问,相互独立
- 加密以16字节为分组单位,分组相互独立
- 加密基于地址
- 加密解密设备构造相同
7.7.3 单分组的运算
保证位于不同位置上的相同数据单元加密为不同的密文数据单元
7.7.4 在扇区(每个数据单元)上的运算
扇区组织为128位的分组,且独立处理(参数没有链接,可以并行执行)
7.8 格式保持加密
FPE技术就是格式保持加密技术
7.8.1 研究动机
使加密算法的改进更加便利,适用范围更加广
7.8.2 设计FPE的难度
- 密文长度格式要和明文长度格式相同
- 适用于多种数据格式领域
- 能够处理变长的数据
- 安全性和AES相当
- 对于短明文数据,安全性不低
7.8.3 Feistel 结构的格式保留加密算法
Feistel 结构被用在了FPE中
Fk函数以位串为输入,输出为随机函数
所有基于Feistel 结构的FPE策略都将AES作为自己抓取函数来达到更好的安全性
基数、信息长度和位长度的关系
三种格式一致的加密方法,FF1,FF2,FF3,且都使用了Feistel结构
8 伪随机数的产生和流密码
8.1 随机数的产生原则
8.1.1 随机数的使用
- 密钥的分发和相互认证
- 会话密钥的产生
- RSA公钥加密算法中密钥的产生
- 用于对称流密码加密的位流的产生
随机数的要求:
- 随机性:分布均匀和独立性
- 不可预测性:不能从前一个随机数推到出后一个随机数
8.1.2 TRNG,PRNG和PRF
密码应用中大多使用算法来生成随机数,这些算法是确定的,所以产生的序列并非统计随机,但是也不必追求哲学上的完美性,能通过随机测试就好
真随机数发生器:输入源从计算机物理环境中抽取
伪随机数发生器:固定种子输入,用于产生不限长位流
伪随机函数(PRF):种子加上上下文的特定值,用于产生固定长度的伪随机串
8.1.3 对PRNG的要求
不知道种子的敌手不能决定伪随机串
对随机性、不可预测性以及种子的特性要求
1.随机性:PRNG确定性的位流要显示随机性
测试方面:1. 均匀性,2. 可伸缩性, 3. 一致性
2.不可预测性:前向/后向不可预测性
3.种子要求:事实上种子本身是随机数或伪随机数(通常是真随机数)
8.1.4 算法设计
以PRNG研究主题下,产生了大量的算法,分为
特意构造的算法
基于现有密码算法的算法,常用的有三种
- 对称分组密码
- 非对称密码
- Hash函数和消息认证码
8.2 伪随机数发生器
以下两个方法都是通过多层循环和迭代
8.2.1 线性同余发生器
8.2.2 BBS发生器
8.3 使用分组密码的随机数产生
首先安全性是有保证的
8.3.1 使用分组密码工作模式的PRNG
8.3.2 ANSI X9.17伪随机数发生器
使用3DES来加密,最强的伪随机数发生器之一
8.3.3 NIST CTR_DRBG
是定义于 NIST SP 800-90 中的基于CTR 工作模式的PRNG。熵源是物理的真随机数,也可能是其他源
四个参数:输出分组的铲长度,密钥的长度,种子的长度,补种间隔
8.4 流密码
典型的是每次加密一个字节的明文
8.5 RC4算法
是一种流密码,密钥长度可变,面向字节操作,以随机置换作为基础
8.5.1 生成S表
8.5.2 密钥流的产生
8.5.3 RC4算法的强度
目前还是没有攻击方法的
8.6 真随机数发生器
8.6.1 熵源
声音/图像输入
磁盘驱动
8.6.2 PRNG 和 TRNG的比较
前者是周期性的但是效率高,这意味着序列最终会复制它自己
后者需要很长的时间来生成数字
8.6.3 调整
真随机数发生器的输出应该有时会产生偏差
调整可以通过一种密码算法发打乱位,减少偏差增加熵
Hash函数:将任意球长度的位串映射位长度为n的串
操作系统通常会提供一个内嵌的机制来生成随机数:Linux利用4个熵源:鼠标和键盘的活动,磁盘的I/O操作以及特定的中断。从这些源来的位在缓冲池内组合,当需要随机位时,从中读取适量的位,传给SHA-1函数
Hash派生算法:输出可达Hash输出长度的的255倍
密码学性质强的Hash函数,如SHA系列,有非常好的扩散性
分组密码作为hash函数的一种代替,可以打乱TRNG位,相当于加密
8.6.4 随机测试
包括噪声源的随机测试和调节函数的随机测试
8.6.5 Intel数字随机数发生器DRNG
实现了和PRNG相当的位生成率