密码学与网络安全 - 7 分组加密的工作模式 & 8 伪随机数的产生和流密码

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 存储加密的要求

加密存储的数据和加密传输的数据要求有一些不同,具体有:

  1. 密文可被随意获取
  2. 数据面版在存储介质上或者传输中不能改变
  3. 以定长分组单位访问,相互独立
  4. 加密以16字节为分组单位,分组相互独立
  5. 加密基于地址
  6. 加密解密设备构造相同

7.7.3 单分组的运算

保证位于不同位置上的相同数据单元加密为不同的密文数据单元

7.7.4 在扇区(每个数据单元)上的运算

扇区组织为128位的分组,且独立处理(参数没有链接,可以并行执行)

7.8 格式保持加密

FPE技术就是格式保持加密技术

7.8.1 研究动机

使加密算法的改进更加便利,适用范围更加广

7.8.2 设计FPE的难度

  1. 密文长度格式要和明文长度格式相同
  2. 适用于多种数据格式领域
  3. 能够处理变长的数据
  4. 安全性和AES相当
  5. 对于短明文数据,安全性不低

7.8.3 Feistel 结构的格式保留加密算法

Feistel 结构被用在了FPE中

Fk函数以位串为输入,输出为随机函数

所有基于Feistel 结构的FPE策略都将AES作为自己抓取函数来达到更好的安全性

基数、信息长度和位长度的关系

三种格式一致的加密方法,FF1,FF2,FF3,且都使用了Feistel结构

8 伪随机数的产生和流密码

8.1 随机数的产生原则

8.1.1 随机数的使用

  1. 密钥的分发和相互认证
  2. 会话密钥的产生
  3. RSA公钥加密算法中密钥的产生
  4. 用于对称流密码加密的位流的产生

随机数的要求:

  1. 随机性:分布均匀和独立性
  2. 不可预测性:不能从前一个随机数推到出后一个随机数

8.1.2 TRNG,PRNG和PRF

密码应用中大多使用算法来生成随机数,这些算法是确定的,所以产生的序列并非统计随机,但是也不必追求哲学上的完美性,能通过随机测试就好

真随机数发生器:输入源从计算机物理环境中抽取

伪随机数发生器:固定种子输入,用于产生不限长位流

伪随机函数(PRF):种子加上上下文的特定值,用于产生固定长度的伪随机串

8.1.3 对PRNG的要求

不知道种子的敌手不能决定伪随机串

对随机性、不可预测性以及种子的特性要求

1.随机性:PRNG确定性的位流要显示随机性

测试方面:1. 均匀性,2. 可伸缩性, 3. 一致性

2.不可预测性:前向/后向不可预测性

3.种子要求:事实上种子本身是随机数或伪随机数(通常是真随机数)

8.1.4 算法设计

以PRNG研究主题下,产生了大量的算法,分为

特意构造的算法

基于现有密码算法的算法,常用的有三种

  1. 对称分组密码
  2. 非对称密码
  3. 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相当的位生成率

猜你喜欢

转载自blog.csdn.net/weixin_51487151/article/details/124731196