【密码学】一文读懂Whirlpool

简介: 首先呢,祝大家今晚节日快乐,Whirlpool是由Vincent Rijmen(高级加密标准的联合创始人)和Paulo S.L.M.Barreto设计的,后者于2000年首次提出了它。

【密码学】一文读懂Whirlpool


MRUMEQ5BRB)OTI)`64B8XGX.jpgWhirlpool

首先呢,祝大家今晚节日快乐,Whirlpool是由Vincent Rijmen(高级加密标准的联合创始人)和Paulo S.L.M.Barreto设计的,后者于2000年首次提出了它。


算法结构

下面我们来看一下Whirlpool算法的结构,图片参考自(https://www2.seas.gwu.edu/~poorvi/Classes/CS381_2007/Whirlpool.pdf)当中的结构图。

6EIEMXHW6KN]X9BOAP{XJ}U.png

image.gif

消息填充

这一步和之前我们提到过的其他的哈希算法类似,我们需要把原始的消息内容填充到512的整数倍,这里至少要填充1个字节,也就是说,如果说原始的消息恰好是512的整数倍的话,那么我们需要额外多填充一个分块,也就是填充10...0这里填充长度为256bit。

长度填充

这里在结尾需要填充256bit的消息长度,从这里可以看出,whirlpool算法最大的处理消息的长度为 的消息。

初始化矩阵

对于这里的状态,采用了一个 的一个矩阵来处理消息,初始化的值为0。

消息处理

这里是整个哈希算法的核心,我们需要根据之前填充完成的数据,按照512bit一组进行分块,分块完成之后,根据每一块执行W算法进行处理,最终得到结果。


W函数

这个W函数,和我们之前所讲到过的AES算法有一些类似的地方,我们先来介绍W算法的具体过程,然后再来对比一下他和AES的异同。

(KT)HL408DP5U_YHQZLX2]T.png

轮密钥加

这里和AES实际上是基本一样的,同样的是在 上面的加法运算,只不过所选择的不可约多项式不同,不过这个不可约多项式对于加法运算是没有影响的,在乘法运算当中才会有差异。

字节替代

这里也是通过去查询SBOX来获取最终的值,不熟悉的读者可以自行回顾一下AES当中有关字节替代的计算方法。

列移位

这里为什么变成了列移位呢,因为这里最开始生成初始化矩阵的时候,我们用的是行矩阵,这里和AES有一些不同,在AES当中,我们初始化矩阵用的是列矩阵,从这个角度来说,这里实际上和AES的应该也不大。

行混淆

这一步是和AES加密算法相差比较大的一步,因为前面提到过,这里在有限域计算上面的不可约多项式改变了,因此呢对于乘法运算还是有蛮大的影响的,结果就是我们不能用之前AES当中的方法进行计算了,这里行混淆依然用的是一个矩阵的乘法,具体的变换矩阵如下:

image.png

这里采用的不可约多项式为 image.png


密钥扩展算法

这里的密钥扩展算法并不和AES一样,需要预计算出来,而是在算法的运行过程当中,利用上一步的输出作为新的密钥扩展的值,在最上面的图当中展示了这一步的过程。


总结

最后,今天521,我这里就不给出代码了,祝大家今天节日快乐,逃~~。

相关文章
|
存储 Rust 并行计算
【密码学】一文读懂XTS模式
这篇文章的灵感来源于我偶然翻到的一个某U盘有关磁盘加密的一个介绍(这一篇不是广告蛤), 然后发现这个模式我之前还真没遇到过,因此呢,就学习了一下,就出来了这一篇文章。
5266 0
【密码学】一文读懂XTS模式
|
Rust 算法 安全
【密码学】一文读懂MurMurHash2
上次我们聊过了一代的MurMurHash算法,是的,我又来水文章了,今天呢,接着来聊一下二代的MurMurHash算法,二代算法的整体结构实际上和一代算法差不太多,只是对于每一轮数据的处理过程当中的运算有一些差异,算法的来源依然是来自于Google官网给提供的源码,对着源码看的结构,对于这个算法呢,有两个版本,一个是32位的,一个是64位的,对于32位的算法和64位的算法,区别在于两个初始的魔数不同,整体运算过程还是十分相似的。
2224 0
【密码学】一文读懂MurMurHash2
|
Rust 算法 Go
【密码学】一文读懂MurMurHash3
本文应该是MurMurHash算法介绍的最后一篇,来一起看一下最新的MurMurHash算法的具体过程,对于最新的算法来说,整个流程和之前的其实也比较相似,这里从维基百科当中找到了伪代码,也就不贴出来Google官方给出的推荐代码了,先来看一下维基百科给出的伪代码,这里只有32位的伪代码。
2191 0
【密码学】一文读懂MurMurHash3
|
Rust 算法 网络安全
【密码学】一文读懂CMAC
介于上一篇文章比较水,然后这个和上一篇也比较相似,CMAC是为了解决DAA当中安全性不足的问题而出现的,这个算法一共有三个密钥,K, K1, K2, 其中K1和K2可以由K导出,接下来就来一起看一下CMAC的具体过程吧,这一篇文章其实也不长。
3786 0
【密码学】一文读懂CMAC
|
Web App开发 Rust 算法
【密码学】一文读懂ChaCha20
好久没写新的加密算法的原理了, 这次所选取的加密算法结构比较简单, 一起来看一下吧。
7809 0
【密码学】一文读懂ChaCha20
|
Rust 算法 数据安全/隐私保护
【密码学】一文读懂XTEA加密
本篇文章,我们来看一下上一次讲过的TEA加密算法的一个升级版XTEA, 相比于TEA, XTEA的安全性显然是更高的,其中的过程要比TEA稍微复杂一点点。
1285 0
【密码学】一文读懂XTEA加密
|
算法 安全 Go
【密码学】一文读懂HKDF
我这又来水一篇文章,来聊一下HKDF(基于HMAC的密钥导出函数)。密钥派生函数是密钥管理的组成部分,他的目标是通过一些初始的数据派生出来密码学安全的随机密钥。
3120 1
【密码学】一文读懂HKDF
|
存储 安全 算法
为什么人人都要懂点密码学
人类进入二十一世纪以来,随着计算机和移动设备的普及高速发展,我们的社会已经高度信息化,为了防止信息被窃取、修改,就需要对信息的存储、传递进行加密处理,而加密就需要使用到加密算法,解密需要使用密码才可以看到原文。
236 1
|
算法 搜索推荐 安全
【密码学】一文读懂CCM
本文简单介绍了CCM模式下的认证和加密机制,实际上这个是AES-CTR模式和CMAC的一个组合,如果理解了前面这两个,本文应该还是比较好理解的。
3417 0
【密码学】一文读懂CCM
|
Rust 算法 数据安全/隐私保护
【密码学】一文读懂XXTEA
本篇文章,我们接着来看TEA算法的升级版,这个实际上是XTEA算法的升级版,这也是TEA系列算法的最后一篇了,这个算法的祖孙三个就都结束了
【密码学】一文读懂XXTEA