在安全散列标准SHA-3的选拔中涌现了很多优秀的哈希算法,包括Blake、Grostl、Keccak等。下面我们要了解的就是入选SHA-3最后一轮竞争的JH算法。

JH算法简介

Hash函数的设计通常采用迭代结构,其迭代函数的设计又借鉴了很多分组密码的思想。JH算法采用了新的压缩函数结构,其核心压缩函数就是一个分组密码,该分组密码的设计与美国高级加密标准AES类似,通过固定密钥对消息加密,并将部分消息反馈以达到消息压缩的目的。

JH算法

JH算法过程

JH算法主要由数据填充、数据分块、设置哈希初值、计算哈希终值、获取信息摘要等5个步骤构成:

  1. 将长度为L的消息M进行数据填充,得到的数据长度为512bit的倍数。
  2. 把消息M分割为N个512bit的数据M(i)作为压缩函数F8的输入。
  3. 进行哈希初值H(0)的设置,它是由初始化值H(-1)及消息M(0)通过压缩函数F8计算得出的。
  4. 通过压缩函数F8计算得出哈希终值H(N),其中,压缩函数F8的另一个输入为哈希值H(i),它是指第i个512bit的消息M(i)通过压缩函数F8计算出的哈希值。
  5. 通过截取哈希终值H(N)的高n位获取消息摘要。

JH算法

JH算法的优缺点

由于JH算法采用了“宽轨迹策略”来设计分组密码,所以它的安全性比较优秀,能够抵抗已知的攻击。另外,JH算法采用了明显的扩散层,使得比特追踪法很难适用于这类Hash函数的安全性分析。并且JH算法支持224bit、256bit、384bit和512bit四种长度的散列。

但JH算法在硬件实现中存在不足,在一些资源占用少、功耗要求低的应用中很难做到低功耗运行,算法的吞吐率较低。

免责声明:素材源于网络,如有侵权,请联系删稿。