md6是一种算法。继
MD5被攻破后,在Crypto2008上, Rivest提出了
MD6算法,该算法的Block size为512 bytes(MD5的Block Size是512 bits), Chaining value长度为1024 bits, 算法增加了并行 机制,适合于
多核CPU。
在
Crypto2008上,Rivest提出的MD6算法。他本人称该算法能够抵抗截止至2020年已知的所有攻击。
相较于
MD5,加密结构虽更为完善,但其在
SHA3竞赛的第一轮竞赛中,有证明的版本速度太慢,而效率高的版本并不能给出类似的证明,MD6因此淘汰,故大概率无法投入广泛使用。
相较
MD5,其安全性大大改进,可算做能完全代替MD5的散列验证算法.
MD6杂凑函数被认为具有较高的安全性和性能。杂凑函数的设计包括压缩函数和工作模式。压缩函数是杂凑函数的核心,由步操作和消息扩展构成,不安全的压缩函数会导致不安全的杂凑函数。步操作通常可以分为非平衡Feistel和SPN两种结构,非平衡Feistel结构的优点是比较简单,通常只需要较少的指令即可实现,不足是扩散性较差。
MD4族杂凑函数的步操作可以表示为一个四级或五级
移位寄存器,只需要十条左右
x86指令即可实现;而其每一步只升级内部链变量的1/4或1/5,导致扩散性下降。
MD4族压缩函数的消息扩展通常采用置换或迭代计算的方式,其扩展过程是一维的,灵活性和扩散性受到限制,
MD4、
MD5、
SHA、
SHA-1消息扩展的扩散性不足也是它们受到攻击的原因。工作模式的设计对于提高杂凑函数的性能和安全性非常重要,随着硬件资源的进步,串行工作模式在效率方面受到限制,并行工作模式逐渐受到人们的重视。
二维消息扩展可以认为消息扩散不是在直线上,而是在平面中进行,消息扩展的灵活性和扩散性都获得提高。在不同的维度上可以使用不同的消息扩展方案,
Hash的横向消息扩展采用置换的方式而纵向消息扩展采用迭代的方式,同时具有MD5高效和
SHA-1扩散性好的的优点。
与MD工作模式相比,Par模式理论和实际上都具有线性加速比。与Tree模式相比,Par模式消息填充简单,计算单元间的同步控制少,只在计算最终杂凑值时才需要同步。当加速比同为L时,其所占用的临时存储空间为L乘以压缩值的大小,要小于Tree模式占用的临时存储空间。。
Hash的非线性变换层的输入输出为8bit,扩散层的输入输出为32bit(
MD4族杂凑函数步操作的输入至少为128bit,输出至少为32bit),因此步操作的非线性和扩散性可以量化分析。小部件还使得
Hash在8位处理器上的性能优化更加容易。
基于基数列表的MD6 算法实现中存储器的消耗为log4 n . 树的每层由4 个模块组成,当树的该层填满时,将通过压缩这4 个模块来去除这一层,并将结果填充到下层次.这一版本并没有直接的并行性,实现的MD6 算法采用的是逐层压缩数据.开始阶段存储了整个消息,算法中的存储器使用代价为O( n). 使用了2 个数组:一个用于工作层,另一个用于工作层的下一层(由模块压缩结果填充) ,大小是前一数组的4 倍.当下层次填满时,它将变为工作层,将分配一个新的数组(大小是前一数组的4倍)用于新工作层的下一层
MD6 算法将长度小于2^64bit的消息作为输入参量.输出结果为d bit(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/4J值,因此,当d为默认值(I!P 512) 时, r=104.其他参数压缩函数中使用的常量(像Q 或t;) 也可以改变.