在Crypto2008上, Rivest提出了MD6算法,该算法的Block size为512 bytes(MD5的Block Size是512 bits), Chaining value长度为1024 bits, 算法增加了并行 机制,适合于多核CPU。 在安全性上,Rivest宣称该算法能够抵抗截至目前已知的所有的 攻击。
MD6相较MD5的优点如下.
1.Large input message block size
2.provably resistant to differential attacks
3.Alternative sequential mode
4.Key input K??of up to 512 bits?? K is input to every compression function
5.1024-bit intermediate (chaining) value root truncated to desired final length? Location (level,index) input to each node
6. Root bit ?(aka “z-bit” or “pumpkin bit”) input to each compression function
7. Operations on 64-bit words The following operations only: –XOR–AND–SHIFT by fixed amounts
MD6杂凑函数是Rivest等提出的SHA—3候选算法,目前被认为具有较高的安全性和性能。杂凑函数的设计包括压缩函数和工作模式。压缩函数是杂凑函数的核心,由步操作和消息扩展构成,不安全的压缩函数会导致不安全的杂凑函数。步操作通常可以分为非平衡Feistel和SPN两种结构,非平衡Feistel结构的优点是比较简单,通常只需要较少的指令即可实现,不足是扩散性较差。MD4族杂凑函数的步操作可以表示为一个四级或五级移位寄存器,只需要十条左右X86指令即可实现;而其每一步只升级内部链变量的1/4或1/5,导致扩散性下降。MD4族压缩函数的消息扩展通常采用置换或迭代计算的方式,其扩展过程是一维的,灵活性和扩散性受到限制,MD4、MD5、SHA—0、SHA—1消息扩展的扩散性不足也是它们受到攻击的原因。工作模式的设计对于提高杂凑函数的性能和安全性非常重要,随着硬件资源的进步,串行工作模式在效率方面受到限制,并行工作模式逐渐受到人们的重视。
二维消息扩展可以认为消息扩散不是在直线上,而是在平面中进行,消息扩展的灵活性和扩散性都获得提高。在不同的维度上可以使用不同的消息扩展方案,X—Hash的横向消息扩展采用置换的方式而纵向消息扩展采用迭代的方式,同时具有MD5高效和SHA—1扩散性好的的优点。
与MD工作模式相比,Par模式理论和实际上都具有线性加速比。与Tree模式相比,Par模式消息填充简单,计算单元间的同步控制少,只在计算最终杂凑值时才需要同步。当加速比同为L时,其所占用的临时存储空间为L乘以压缩值的大小,要小于Tree模式占用的临时存储空间。。X—Hash的非线性变换层的输入输出为8比特,扩散层的输入输出为32比特(MD4族杂凑函数步操作的输入至少为128比特,输出至少为32比特),因此步操作的非线性和扩散性可以量化分析。小部件还使得X—Hash在8位处理器上的性能优化更加容易。
基于基数列表的MD6 算法实现中存储器的消耗为log4 n . 树的每层由4 个模块组成,当树的该层填满时,将通过压缩这4 个模块来去除这一层,并将结果填充到下层次.这一版本并没有直接的并行性,实现的MD6 算法采用的是逐层压缩数据.开始阶段存储了整个消息,算法中的存储器使用代价为O( n). 使用了2 个数组:一个用于工作层,另一个用于工作层的下一层(由模块压缩结果填充) ,大小是前一数组的4 倍.当下层次填满时,它将变为工作层,将分配一个新的数组(大小是前一数组的4 倍)用于新工作层的下一层.
MD6 算法将长度小于2 64 比特的消息作为输入参量.输出结果为d(O <d :S; 512) 比特的摘要值. d 的默认值为256 ,但它可以变化.此外, MD6 算法的很多参量都有默认值,但也可以变化.密钥K 默认值为空(长度为0) .它作为哈希函数的输入密钥.层次L MD6 算法实质上是4 个子结点一组的Merkle 树.树的高度指定为L , 其默认值为64 (此时Merkle 树是一棵完整的树) .如果L 值为0 ,将按顺序压缩数据.如果L 值小于64 , MD6 将使用混合模式:首先基于Merkle 树,从层次O 到层次L , 随后,在每个层次内按顺序压缩数据.圈数r 默认r =40 + Ld/4 J 值,因此,当d 为默认值(I!P 512) 时, r = 104.其他参数压缩函数中使用的常量(像Q 或t;) 也可以改变.