2010-5-14 1
第四章 分组密码
一、分组密码概述
二、分组密码运行模式
三,DES
四,AES
五、分组密码的分析
2010-5-14 2
二、分组码的运行模式
2010-5-14 3
主要工作模式
即使有了安全的分组密码算法, 也需要采
用适当的工作模式来隐蔽明文的统计特性, 数
据的格式等, 以提高整体的安全性, 降低删除,
重放, 插入和伪造成功的机会 。
? 电子码本 (ECB)
? 密码反馈链接 (CBC)
? 密码反馈 (CFB)
? 输出反馈 (OFB) 。
2010-5-14 4
电码本 ECB模式
? 直接利用加密算法分别对分组数据组加密 。
? 在给定的密钥下同一明文组总产生同样的
密文组 。 这会暴露明文数据的格式和统计
特征 。
明文数据都有固定的格式, 需要以协议的形式定
义, 重要的数据常常在同一位置上出现, 使密码
分析者可以对其进行统计分析, 重传和代换攻击 。
2010-5-14 5
电码本 ECB模式
x y
k
DES y x
k
DES-1
2010-5-14 6
密码分组链接 CBC模式
? 每个明文组 xi加密之前,先与反馈至输入
端的前一组密文 yi-1按位模 2求和后,再送
至加密算法加密
? 各密文组 yi不仅与当前明文组 xi有关,而
且通过反馈作用还与以前的明文组 x1,
x2,…,xi-1,有关
2010-5-14 7
密码分组链接 CBC模式
? 初始矢量 IV(Initial Vector),第一组明文
xi加密时尚无反馈密文, 为此需要在寄存
器中预先置入一个 。 收发双方必须选用同
一 IV。
? 实际上,IV的完整性要比其保密性更为重
要。在 CBC模式下,最好是每发一个消息,
都改变 IV,比如将其值加一。
2010-5-14 8
密码分组链接 CBC模式
CBC模式
xi yi
k
DES yi x’
k
DES-1+ +
64 bit存储 64 bit存储
y i-1
2010-5-14 9
填充 (Padding)
给定加密消息的长度是随机的, 按 64 bit分组时,
最后一组消息长度可能不足 64 bit。 可以填充一
些数字, 通常用最后 1字节作为填充指示符
( PI) 。 它所表示的十进制数字就是填充占有
的字节数 。 数据尾部, 填充字符和填充指示符
一起作为一组进行加密 。
数据 填 充 PI
2010-5-14 10
CBC的错误传播
1,明文有一组中有错, 会使以后的密文组都受影响,
但经解密后的恢复结果, 除原有误的一组外, 其
后各组明文都正确地恢复 。
2.若在传送过程中, 某组密文组 yi出错时, 则该组
恢复的明文 x’i和下一组恢复数据 x’i+1出错 。 再后
面的组将不会受 yi中错误比特的影响 。
2010-5-14 11
k-比特密码反馈 CFB模式
? 若待加密消息必须按字符 (如电传电报 )或按比特处
理时, 可采用 CFB模式 。
? CFB实际上是将加密算法 DES作为一个密钥流产
生器, 当 k= 1时就退化为前面讨论的流密码了 。
? CFB与 CBC的区别是反馈的密文长度为 k,且不是
直接与明文相加, 而是反馈至密钥产生器 。
2010-5-14 12
k-比特密码反馈 CFB模式
CFB模式
+ +xi xiyi yi
k kXi 64bit Xi 64bit
Yi 64bit Yi 64bit
DES DES-1
选最左边
k 位
选最左边
k 位
k bit k bit
yi-L yi-2 yi-1
2010-5-14 13
k-比特密码反馈 CFB模式
? CFB的优点
? 它特别适于用户数据格式的需要 。
? 能隐蔽明文数据图样, 也能检测出对手对于密
文的篡改 。
? CFB的缺点
? 对信道错误较敏感, 且会造成错误传播 。
? CFB也需要一个初始矢量, 并要和密钥同时进
行更换 。
2010-5-14 14
输出反馈 OFB模式
? 将分组密码算法作为一个密钥流产生器, 其输出的 k-
bit密钥直接反馈至分组密码的输入端, 同时这 k-bit
密钥和输入的 k-bit明文段进行对应位模 2相加 。
? 克服了 CBC和 CFB的错误传播所带来的问题 。
? 对于密文被篡改难以进行检测
? 不具有自同步能力, 要求系统要保持严格的同步
2010-5-14 15
输出反馈 OFB模式
OFB模式
+x
i yi
k 64bit
64bit
DES
选最左边
k 位
ki
64 bit 寄存器
k bit k bit +
xiyi
k 64bit
64bit
DES-1
选最左边
k 位 k bit
64 bit 寄存器
k bitki
2010-5-14 16
OCB模式
2010-5-14 17
OCB模式
? function ocb-aes-encrypt(K,M,Nonce)
? begin
? Offset = AES(K,Nonce xor L)
? Checksum = 0
? for i = 1 to m-1 do begin
? Offset = Offset xor L(ntz(i))
? Checksum = Checksum xor M[i]
? C[i] = Offset xor AES(K,M[i] xor Offset)
? end
? Offset = Offset xor L(ntz(m))
? Pad = AES (K,len(M[m]) xor L(-1) xor Offset)
? C[m] = M[m] xor (the first |M[m]| bits of Pad)
? Checksum = Checksum xor Pad xor C[m]0*
? FullTag = AES(K,Checksum xor Offset)
? Tag = a prefix of FullTag (of the desired length)
? return C[1]..,C[m-1] C[m] Tag
? end
L = AES(K,0),
L(0) = L
for i>0,L(i)= L(i-1)<<1 if
the first bit of L(i-1) is 0
L(i)=(L(i-1)<<1) xor
0x000000000000000000
00000000000087
otherwise.
L(-1)=L>>1 if the last bit
of L is 0,
L(-1)=L>>1 xor
0x800000000000000000
00000000000043
otherwise,
2010-5-14 18
比较和选用
? ECB模式, 简单, 高速, 但最弱, 易受重发攻击,
一般不推荐 。
? CBC适用于文件加密, 但较 ECB慢 。 安全性加强 。
当有少量错误时, 也不会造成同步错误 。
? OFB和 CFB较 CBC慢许多 。 每次迭代只有少数 bit
完成加密 。 若可以容忍少量错误扩展, 则可换来
恢复同步能力, 此时用 CFB。 在字符为单元的流
密码中多选 CFB模式 。
? OFB用于高速同步系统, 不容忍差错传播 。