MD5消息摘要算法.docVIP

  • 13
  • 0
  • 约2.91千字
  • 约 6页
  • 2016-10-17 发布于重庆
  • 举报
MD5消息摘要算法

MD5消息摘要算法 简介: ?Merkle于1989年提出hash function模型 ?Ron Rivest于1990年提出MD4 ?1992年, Ron Rivestat 提出MD5(Message Digest)[RFC 1321] ?别名:压缩函数、杂凑函数、散列函数、报文摘要 ? 结构:MD5遵循安全hash码的一般结构 ?输入:任意长的消息 ?MD5把数据分成512-bit块 ?MD5的Hash值是128-bit ?在最近数年之前,MD5是最主要的Hash算法 ?现行美国标准SHA-1以MD5的前身MD4为基础 MD5算法步骤 算法结构(遵循一般结构) 图12.1 使用MD5产生报文摘要的主过程 算法框架 附加填充比特:对报文进行填充,使其长度(比特数)与448模512同余,即 长度≡448 mod 512 即填充长度为512的整数倍减去64。例如,报文是448 bit长,那么将填充512 bit形成960 bit的报文。 附加长度值:用64 bit表示的初始报文(填充前)的位长度附加在步骤1的结果后(低位字节优先)。若初始长度大于264,仅使用该长度的低64 bit。 初始化MD缓存:该缓存记为A、B、C、D各32 bit。其中 A=16 B=(89ABCDEF)16 C=(FEDCBA98)16 D=16 A、B、C、D称为链接变量,令初始值 IV=(A,B,C,D)16 主循环,共循环L次。每个循环有4轮迭代,每轮16步操作运算。每轮均以当前报文组和缓存ABCD为输入,然后更新缓存内容。 输出:所有L个512 bit的分组处理完成后,第L阶段产生的输出便是128 bit的报文摘要MD。 数学描述 或 CV0=IV CVq+1=SUM32(CVq,RFI[Yq,RFH[Yq,RFG[Yq,RFF[Yq,CVq]]]]) MD=CVL 其中 IV =缓存A、B、C、D的初值,在步骤(3)定义 Yq =第q个长度为512 bit的报文分组 L =报文的分组数(包括填充字段和长度字段) CVq =处理第q个报文分组时的连接变量 RFx =使用原始逻辑函数x的循环函数 MD =最终的报文摘要 SUM32 =对输入对中的每个字分别执行模232相加 单个循环 ?步骤4: CV0=IV, CV=HMD5(CV-1,Y) –(A0,B0,C0,D0)(A,B,C,D) –(A,B,C,D,T[1…16],X[0…15]) –(A,B,C,D,T[17…32],X[0…15]) –(A,B,C,D,T[33…48],X[0…15]) –(A,B,C,D,T[49…64],X[0…15]) –(A,B,C,D)(A+A0,B+B0,C+C0,D+D0) ?512-bit(X[…]为32-bit表示)在四轮中使用 ?每个轮包含16步,每步处理一个32-bit ?T[j]= [sin(j)]的整数部分, 1 j ≤ 64 MD5压缩函数 单步操作 每一轮包含对缓冲区ABCD的16步操作所组成的一个序列。 a←A,b←B,c←C, d←D a←b + (( a + g(b,c,d) + X[k] +T[i])s) a,b,c,d = g = F,G,H,I s = 32位字循环左移s位 X[k] = M[q16 + k] = q个512位数据块中的第k个32位字 T[i] = T中的第i个32位字; + = (轮)函数g 第1轮、F(b,c,d) (b∧c)∨(∧d) 第2轮、G(b,c,d) (b∧d)∨(c∧) 第3轮、H(b,c,d) b⊕c⊕d 第4轮、I(b,c,d) c⊕(b∨) X[k] = (=0,1,…,15) T[i] T[] =1≤≤64 其中:为弧度;sin(i)为正弦函数; 为下整数函数(即不大于x的最大的整数。 循环移位位数s 轮 数 第 1 步 第 2 步 第 3 步 第 4 步 第 5 步 第 6 步 第 7 步 第 8 步 第 9 步 第 10 步 第 11 步 第 12 步 第 13 步 第 14 步 第 15 步 第 16 步 1 7 12 22 17 7 12 22 17 7 12 22 17 7 12 22 17 2 5 9 14 20 5 9 14 20 5 9 14 20 5 9 14 20 3 4 11 16 23 4 11 16 23 4 11 16 23 4 11 16 23 4 6 10 15 21 6 10 15 21 6 10 15 21 6 10 15 21 详细操作 第1轮 ?For(k = 0; k 16

文档评论(0)

1亿VIP精品文档

相关文档