常用的哈希函数有MD5、HAVAL-128、SHA系列等。安全散列算法(Secure Hash Algorithm,SHA)由NIST研发设计,最初在1993年作为联邦信息处理标准(FIPS 180)发布,随后1995年发布了修订版(FIPS 180-1 [3] ),称为SHA-1算法。SHA-1算法的散列值长度为160位。2002年,NIST再次更新修订版(FIPS 180-2 [4] ),称为SHA-2算法。SHA-2函数家族一共有四种函数,分别为SHA-224、SHA-256、SHA-384和SHA-512,相较于SHA-1、SHA-2,输出的哈希值长度更长,安全性更高。2004年以来,MD5、HAVAL-128、MD4、RIPEMD、SHA-1算法相继受到了我国王小云教授的有效攻击 [5-8] 。这些算法的安全性被严重动摇。由于SHA-2在设计时采用与SHA-1相似的结构,因此也存在安全隐患。2007年,NIST面向全球发起了新哈希标准的竞赛活动 [9] ,经过三轮的评选,Keccak算法从最初被提交的64个算法中脱颖而出,成为新一代的哈希函数标准,并被命名为SHA-3 [10-11] 。2014年,NIST发布了FIPS 202的草案,并被最终批准。
在SHA-3标准化期间,各类候选算法及其实现性能的差异成为国内外学者研究的热点。2011年,Ekawat Homsirikamol等人研究了SHA-3候选算法的硬件实现,以及不同的优化方式对各个方案的优化效果 [12] 。同年,清华大学的梁晗分别以速度优先和面积优先两种方式对三种SHA-3候选算法BLAKE、Keccak、Skein设计了硬件实现方案:在速度优先的方案中,Keccak算法的吞吐量可达11.23Gbps;在面积优先的方案中,Keccak算法仅花费了293个Slice的资源开销 [13] 。2012年,西安电子科技大学的丁冬平研究了五种SHA-3候选算法BLAKE、Grøstl、JH、Skein、Keccak的硬件实现,其中Keccak算法在Xilinx Virtex-ⅡPro FPGA上的吞吐量可达8.57Gbps [14] 。
SHA-3标准化之后,研究方向大致分为三点:更高的速度和吞吐量;更低的硬件资源开销,以及吞吐量和资源开销的平衡。
在以更高的速度和吞吐量为目标的实现方案中,通常采取的是展开、流水线和架构创新的策略。2014年,George S.Athanasiou设计了一种可以支持所有SHA-3模式的结构,并通过插入流水线的方式,在Virtex-5、Virtex-6、Virtex-7上分别达到了389MHz、387MHz、434MHz的最高频率和18.7Gbps、19.1Gbps、20.8Gbps的吞吐量 [15] 。2015年,Lenos Ioannou运用二次展开和两级流水线组合方法在Virtex-6上达到了18.77Gbps的吞吐量 [16] 。同年,Harris E.Michail运用四次展开和四级流水线的组合方法在Virtex-6上达到了37.63Gbps的吞吐量 [17] 。2016年,Fatma Kahri等人通过在迭代运算中插入流水线的方法,在Virtex-6上达到了394MHz的最高频率 [18] 。2017年,Hassen MESTIRI等人同样通过在迭代运算中插入一级流水线的方法,在Virtex-6上达到了12.68Gbps的吞吐量 [19] 。同年,清华大学的Xufan Wu运用三次展开的方法,在65nm工艺下SHA3-256达到了61.8Gbps的吞吐量 [20] 。2019年,Soufiane El Moumni等人在Virtex-5和Virtex-6上对比所有的展开情况,包含二级、三级、四级、六级、八级和十二级展开结构,就单纯的展开优化而言,在十二级展开结构下,Virtex-5和Virtex-6的吞吐量能分别达到23.98Gbps和33.35Gbps [21] 。同年,Pranav Gangwar等人提出了一种架构,并通过减少关键路径中的控制信号数量和优化生成存储地址的计数器,达到了14.04Gbps的吞吐量 [22] 。
在以更低的硬件资源开销为目标的实现方案中,通常采取的是对算法模型结构进行优化的策略。2014年,Alia Arshad等人提出了一种紧凑结构,通过将算法的关键步骤重组和合并,在Virtex-5上实现的SHA3-512仅需240个Slice [23] 。2017年,Magnus Sundal等人比较了流水线和折叠结构对SHA-3实现性能的影响,其中折叠结构在Virtex-4上实现仅需476个Slice [24] 。2019年,Bernhard Jungk等人对SHA-3算法的三维模型中的切片结构进行了优化,在Virtex-5上实现最低仅需87个Slice [25] 。同年,Victor Arribas对SHA-3算法的三维模型中的“行”结构进行了优化,在Virtex-6上实现仅需49个Slice [26] 。
在以吞吐量和资源开销的平衡为目标的实现方案中,采用的是多种优化方式组合的策略。2018年,Ming Ming Wong采用两级展开、两级流水线、两级子流水线和简化轮函数的方式,在Virtex-6上达到了11.47Mbps/Slice的硬件效率 [27] 。