第三章 分组密码
第三章 分组密码
作用
-
伪随机数生成器
-
流密码
-
消息认证码(MAC)和杂凑函数
-
消息认证技术、数据完整性机制、实体认证协议以及单钥数字签字体制的核心组成部分。
评判指标
- 安全性
- 运行速度
- 存储量(程序的长度、数据分组长度、高速缓存大小)
- 实现平台(硬、软件、芯片)
- 运行模式
当加密前后文本长度有变化,分为数据扩展、数据压缩的分组密码
!安全性设计原则
混淆原则
混淆原则就是将密文、明文、密钥三者之间的统计关系和代数关系变得尽可能复杂,使得敌手即使获得了密文和明文,也无法求出密钥的任何 信息;即使获得了密文和明文的统计规律,也无法求出明文
扩散原则
将明文的统计规律和结构规律散射到相当长的一段统计中去。也就是说让明文中的每一位影响密文中的尽可能多的位,或者说让密文中的每一位都受到明文中的尽可能多位的影响。
分组密码算法应满足的要求
- 分组长度n要足够大:
- 防止明文穷举攻击法奏效。
- 密钥量要足够大:
- 尽可能消除弱密钥并使所有密钥同等地好,以防止密钥穷举攻击奏效。
- 由密钥确定置换的算法要足够复杂:
- 充分实现明文与密钥的扩散和混淆,没有简单的关系可循,要能抗击各种已知的攻击。
- 加密和解密运算简单:
- 易于软件和硬件高速实现。
- 数据扩展:
- 一般无数据扩展,在采用同态置换和随机化加密技术时可引入数据扩展。
- 差错传播尽可能地小。
- 一个密文分组的错误尽可能少的影响其他密文分组的解密
!分组密码的工作模式
1.电码本(ECB)模式
2.密码分组链接(CBC)模式
3.密码反馈(CFB)模式
4.输出反馈(OFB)模式
- 计数器模式
电码本(ECB)模式
密钥相同,相同明文分组对应相同密文分组
密码分组链接(CBC)模式
先将明文分组与上一次的密文块进行按比特异或,然后再进行加密处理
明文块的统计特性得到了隐蔽、具有有限的(两步)错误传播特性、密文出现丢块和错块不影响后续密文块的解密,若从第t块起密文块正确,则第t+1个明文块就能正确求出
应用:利用CBC模式实现报文的完整性认证——认证码
密码反馈CFB(Cipher Feedback)模式
若待加密消息需按字符、字节或比特处理时,可采用CFB模式。
错误的传播:一个或多个比特错误出现在任一个r比特的密文组中会影响这个组和后继n/rl个密文组的解密。
错误恢复:CFB和CBC相似,也是自同步的,但它需有[n/r个密文组才能还原。
输出反馈OFB(Output Feedback)模式
输出反馈模式OFB模式在结构上类似于CFB模式,但其反馈的内容是DES的输出而不是密文
特点:
密钥流是独立于明文的、可以出错恢复,但丢失bit过后无法恢复了
计数器模式
利用固定密钥k对自然数序列1,2,3,…,n, …加密,将得到的密文分组序列看作密钥流序列,按加法密码的方式与明文分组逐位异或的一种方式
利用这种方式可以产生伪随机数序列,其伪随机特性远比计算机产生的随机数的性质好
分组密码设计的两种主要结构类型:SP网络和Feistel结构
SP网络( 代换-置换 Substitution-Permutation )
如果明文和密文的分组长都为n比特,则明文的每一个分组都有2n个可能的取值。不同可逆变换的个数有2n!个
密码设计中需要先定义代换集S,而后还需定义解密变换集,即逆代换网络S^-1
Feistel网络
其思想实际上是Shannon提出的利用乘积密码实现混淆和扩散思想的具体应用。
Feistel密码解密的正确性的证明
就是证明上面的这个式子
以加密和解密时的式子相等,依次证明:
容易证明这种对应关系在16轮中每轮都成立。一般地,加密过程的第i轮有:
即:解密过程是加密过程的逆序
DES算法
研发目的:要求信息作业标准化
DES是第一代公开的、完全说明细节的商业级现代算法,并被世界公认,后面跟不上时代了,遂退役
概述
- 分组长度为64 bits
- 密钥长度为64 bits,有8 bits奇偶校验,有效密钥长度为56 bits。
- 算法主要包括:初始置换IP、16轮迭代的乘积变换、逆初始置换IP^-1以及16个子密钥产生器。
填充(Padding)
给定加密消息的长度是随机的,按64 bit分组时,最后一组消息长度可能不足64 bit。可以填充一些数字,通常用最后8bit来表示填充占有的字节数
DES的安全性
较为一致的看法是DES的密钥短了些。IBM最初向NBS提交的建议方案采用112 bits密钥,但公布的DES标准采用64 bits密钥。有人认为NSA故意限制DES的密钥长度。
序号、值为20的数-----值还是20,序号变化了
初始置换IP 逆初始置换IP^-1
DES的轮函数及密钥编排
虚线处详解
选择扩展运算E
原本是4列,但两边各加1列,然后每一行向前、向后拓展
S盒(选择压缩运算S)
6bit --- 4bit
S盒例题:
比如输入的6比特是101100,那我们将最高位和最低为比特拿出来构成一个数,这个数就是S盒的行号,而中间4个比特构成S盒的列号,在这里列号是2,行号是6,其输出就是第2行第6列的数2,转换为四位二进制数就是0010,注意这里的行列号都是由零开始的。
DES密钥
双重DES
使用多个密钥利用DES对明文进行多次加密。
使用多重DES可以增加密钥量,从而大大提高抵抗穷举密钥搜索攻击的能力
中间相遇攻击可以破解双重DES:
一边对头部加密,一边对尾部解密,套出相匹配的值,若两者结果相等就成了,则找到目标密钥k1k2(将所有的k1k2的可能值放进去一个个试)
3DES
称其为加密-解密-加密方案,简记为EDE(encrypt-decrypt-encrypt)。
此方案仍有足够的安全性
AES算法简介
AES指的是Advanced Encryption Standard即高级加密标准。因为DES不行了淘汰了,AES闪亮登场
- Rijndael没有采用Feistel结构
- AES明文分组固定为128比特。
- 密钥长度可变,可独立指定为128、192、256比特。
- 状态:算法中间的结果也需要分组,称之为状态
- 种子密钥:以字节为元素的矩阵阵列描述,阵列为4行,列数Nk为密钥长度除32