第三章-数据的完整性保护
(6) D=(D+g(A,B,C)+ m[5] +5a827999) << 5 ; (7) C=(C+g(D,A,B)+ m[9] +5a827999) << 9 ; (8) B=(B+g(C,D,A)+ m[13] +5a827999)<< 13 ; (9) A=(A+g(B,C,D)+ m[2] +5a827999) << 3 ; (10) D=(D+g(A,B,C)+ m[6] +5a827999) << 5 ; (11) C=(C+g(D,A,B)+ m[10] +5a827999)<< 9; (12) B=(B+g(C,D,A)+ m[14] +5a827999)<< 13 ; (13) A=(A+g(B,C,D)+ m[3] +5a827999)<< 3 ; (14) D=(D+g(A,B,C)+ m[7] +5a827999) << 5; (15) C=(C+g(D,A,B)+ m[11] +5a827999)<< 9; (16) B=(B+g(C,D,A)+ m[15] +5a827999)<< 13 ;
(2) for i=0 to N/16 -1 do;
(3) for j=0 to 15 do m[j]=M[16i+j]
(4) 将四个寄存器A、B、C、D的值存储到另外 四个寄存器AA,BB,CC,DD之中,AA=A;BB=B; CC=C;DD=D
(5) 执行第一轮;
(6) 执行第二轮;
(7) 执行第三轮;
一个弱碰撞自由的Hash函数与一个强碰撞自由 的Hash函数的前三个条件(1)-(3)完全一样,不同 的只是第(4)个条件。在一个弱碰撞自由的Hash函 数中。
(5) 给定h的描述和一个随机选择的消息M1,找另 一个消息M2,M2≠M1,使得h(M1)=h(M2)是计 算上不可行的。
二、消息摘录技术的应用
初始信息(x) 100……0
初始信息的 比特数(l)
即使原来的信息已是512比特的倍数,也要进行填充。
三、直接构造法
现在我们从M开始构造一个128比特长的消息 摘录,其构造过程如下: (1) 给四个寄存器A、B、C、D赋初始值(用十六进 制表示):
A=67452301 B=efcdab89 C=98badcfe D=10325476
MD4中的三个轮是不同的。
1、第一轮
第一轮使用一个如下定义的函数f(x,y,z)= (x∧y)∨(x∧z)
( 1) for k=0 to 3 do;
(2) A =(A+f(B,C,D))+ m[4k] <<3 (3) D =(D+f(A,B,C))+ m[4k+1] << 7 (4) C =(C+f(D,A,B)) + m[4k+2] <<11 ( 5 ) B =(B+f(C,D,A)) + m[4k+3] << 15
将F′与收到的附 件F进行比较
如 果 F′=F 则 认 为 消 息 是 完整的,否则不是完整的
2、使用MD进行双向鉴别
A rA
MD(KAB│rA)
B
MD(KAB│rA)
rB
基于的双向MD鉴别机制
3.1.1、 MD4
一、概 述
MD4的设计是面向32比特字的,更适合于32位 计算机,效率比MD2高。
二、MD4信息填充
给定一个X,将X进行填充,使其成为一个512比特的倍数 串M=M[0]M[1]……M[N-1] ,这里每个M[i] (0 ≤i ≤N-1) 是长为 32比特的串,N≡0(mod16)(即N是16的倍数。)我们将每个 M[i]称为一个字(32位),由X产生M的算法如下:
⑴ d=447-(│x│mod512) (当d<0时,按模512处理) ⑵ l表示x的长度,即│x│。│l│=64(即用64比特表示x 的长度) ⑶ M=x‖1‖0d‖l
第三章 数据的完整性保护
3、1消息摘录技术
一、基本原理
消息摘录(message digests):是单向的散列函数 (即Hash函数),它以变长的消息为输入,把其压缩 成一个定长的值输出。若输入的信息被改变了,则输 出的定长值(摘录)也会相应改变。
根据Hash函数(即消息摘录函数)的安全水平, 人们将Hash函数分成两大类:一类是强碰撞自由的 Hash函数(strong collision-free hash function);另一 类是弱碰撞自由的Hash函数(weak collision-free hash functions).
(8) A=A+AA ;B=B+BB; C=C+CC; D=D+DD
[X]—取整
x
—二进制求补;
x∧y—x与y按位逻辑“与(and)” ;
x∨y—x与y按位逻辑“或(or)” ; x y— x与y按位逻辑“异或(xor)” ;
x+y—二进制加运算(即整数模232加法运算);
x<<y—x循环左移y个位置(0≤y≤31)。
一个强碰撞自由的Hash函数是满足下 列条件的一个函数h:
(1) h的输入可以是任意长度的任何消息 或文件M;
(2) h输出的长度是固定的(该长度必须足 够长,以抵抗所谓的生日攻击,根据今天的计算 技术和能力,至少应为128比特长);
(3) 给定h和m,计算 h(M)是容易的;
(4) 给定h的描述,找 两 个不同的消息(信息) M1 和 M2,使得 h(M1)=h(M2)是计算上不可行 的。 (如果这两个消息M1,M2,M1≠M2,使得 h (M1)=h(M2),则称这两个消息是碰撞消息或称 这两个消息碰撞。)
MD4计算出的消息摘录长度为128比特,用4个字 表示,分别记为A,B,C,D,在计算开始时被分别 初始化为常数。输入信息被分成512比特的等长块,逐 块 处 理 。 每 块 包 含 16 个 字 , 分 别 记 为 m0 , m1,……m15。
每块的处理分三遍扫描,每遍对A,B,C,D使 用不同的扰乱函数。在处理前需将当前的消息摘录备 份,在处理后将这个备份加到新产生的消息摘录上, 并将其作为下一块处理时消息摘录的当前值。最后一 块信息处理之后的消息摘录当前值,即为最终的消息 摘录值。
1、 用于计算消息完整码
发送者
接收者
消息
传输的消息
消息Biblioteka 产生附件消息 附件 产生附件
所期望的附件
附件
实际受到的附件
比较
如果两者 一样,则 认为消息 是完整的
一般的封装机制
发方A
消息m 密匙K AB
MD(m|K AB)
消息m 附件F
传输的消息
消息m 附件F
收方B
消息m
重新根据m, 由m|K AB计算附件F
2、第二轮
第二轮使用一个如下定义的函数: g(x,y,z)=(x∧y)∨(x∧z)∨(y∧z) 取常数C2=[2 ]=5a827999H
注意:在第二轮中m[i]不是顺序处理的。
1) A=(A+g(B,C,D)+ m[0] +5a827999)<< 3 ; 2) D=(D+g(A,B,C)+ m[4] +5a827999)<< 5 ; 3) C= (C+g(D,A,B)+ m[8] +5a827999) << 9 ; 4) B= (B+g(C,D,A)+ m[12] +5a827999)<< 13 ; 5) A= (A+g(B,C,D)+ m[1] +5a827999) << 3 ;