使用RISC-V Zk扩展和自定义指令优化SH512算法 提升加密运算性能

2024年02月08日 19:15    发布者:云台


加密哈希函数在计算机安全中起着至关重要的作用,它提供了敏感数据的单向转换。许多信息安全应用程序都得益于使用哈希函数,特别是数字签名、消息身份验证码和其他形式的身份验证。哈希函数(如SHA512、SHA256、MD5等)的计算是发挥定制计算优势的潜在舞台。这是源于RISC-V指令集的灵活性以及经由Zk的扩展指令得到加强,结合自定义指令中合并固有顺序位操作的能力,有助于显著提高产品性能。
SHA512哈希函数 SHA512属于USNS设计的“SHA-2”系列。符合FIPS标准,并已通过CMVP得到验证。 以下为SHA512算法的示意框图。由于它使用1024位的数据块进行操作,因此输入信息被格式化并用虚拟位填充。然后,通过80个“循环”的链依次处理每个1024位块。每个“循环”在很大程度上依赖于对输入数据块、初始化向量和一组“循环常数”的加法和循环位移位:


每个80个“循环”序列的输出是一个512位的哈希值,作为下一个输入数据块的初始化向量,或者作为最后一个数据块处理后的最终结果。 到目前为止,SHA-512仍然是许多安全协议的主力,包括TLS和SSL、PGP、SSH、S/MIME和IPsec。从算法上说,它本质上是顺序的:每个阶段都需要前一阶段的结果准备就绪,从而防止并行计算。
RISC-V Zk扩展指令应用于标量加密 RISC-V的指令集架构(ISA)是模块化设计,允许添加各种特定于应用程序的扩展。标量加密扩展(2022年2月)包含' Zk ' -针对AES, SM3(4), SHA256和SHA512算法的指令子集。 此外,根据RISC-V标准,针对CPU核的性能、内存占用或功耗的某些要求,允许在基准指令集和正式批准的可选扩展之上添加特定于应用程序的自定义指令。在本研究中,我们展示了在运行SHA512时,用Codasip Studio工具实现的高级综合和可重定向LLVM编译器对优化嵌入式内核性能的提升。
Codasip Studio, CodAL, Zk及实现方式针对SHA512哈希算法,RISC-V Zk扩展了以下6条指令的子集。整个子集已经实现并包含在Codasip L31 IP核的指令集中。除此之外,还考虑了两个自定义指令“sha512_ch”和“sha512_maj”。它们负责3个输入操作数之间的某些位操作,在SHA512“循环”中会经常遇到。
https://qnimg.meijiedaka.com/20240208105534_818041707360934.png
Codasip L31 RISC-V CPU IP核、Zk子集和自定义指令已经用CodAL(一种用于处理器描述的高级语言)进行了描述。与其他HDL不同,CodAL中的指令以一种紧凑而独特的方式进行描述,使得LLVM编译器和Codasip高级综合工具都可以调用指令语义。一旦完成了自定义指令的CodAL描述,Codasip Studio可以自动生成可综合的RTL和SDK,其中包含编译器、调试器、指令精确和周期精确的模拟器以及可识别新指令的分析器。下面是使用CodAL的自定义“sha512_ch”指令的示例实现:
https://qnimg.meijiedaka.com/20240208105619_971141707360979.png
指令体包含3个部分:汇编、二进制和语义。前两个定义指令语法,并将操作数、操作码和立即数映射到指令二进制。语义包含一系列描述指令行为的类c语句。在上述示例中,从寄存器文件中读出3个操作数,按照一定的位操作模式计算结果,然后将其写入目标寄存器。 由于语义模式简单,这两个自定义指令都由编译器解析并在高优化级别(-O2+)下自动使用:
https://qnimg.meijiedaka.com/20240208105704_288811707361024.png
已批准的Zk扩展的指令具有更复杂的语义,它们可由生成的内部函数直接从软件中调用。整个2条自定义指令集和SHA512的Zk子集只需要150行CodAL代码。这种紧凑的描述与自动生成的SDK一起显著缩短了产品的设计周期和上市时间。
PPA效果: 显著提升SHA512性能RISC-V Zk子集和自定义指令所带来的SHA512性能提升,我们在RISC-V Crypto Github存储库中包含的SHA512基准上进行了评估。该基准测试使用了3种不同的SDK进行编译:1.标准指令集(RV32IMCB)的参考SDK2.标准指令集 + 批准的SHA512的Zk子集3.标准指令集 + SH512 Zk子集 + 自定义指令 使用生成的周期精确的评测器对所获得的可执行文件进行评测,获得处理器在每个软件例程中花费的时钟周期的详细信息以及PPA数据。
https://qnimg.meijiedaka.com/20240208110043_965931707361243.png
上图显示,单使用Zk指令子集减少了约1.89倍的时钟周期数和约9.7%的代码量,显著提高了SHA512性能,硅面积仅增加0.8%。 在Zk之上增加自定义指令带来了进一步的加速,将性能提高到2倍以上,将代码量减少了10.2%,总面积仅增加了约为初始L31面积的1.6%。可以认为这是一个合理的代价,实现了两倍的性能提升。
结论 当涉及到特定的应用程序时,通用CPU IP核通常不可能是最理想的解决方案。有时,即使是一个看似简单的指令也会大大改变游戏规则。芯片设计人员应该善于利用这些优势来设计出差异化的产品。由Codasip Studio提供的定制计算方案有助于利用RISC-V指令集的灵活性,通过紧凑的基于CodAL的处理器描述,帮助芯片设计人员大大缩减设计时间,同时也为芯片使用者提供丰富的可自动生成的软件套件。
目前RISC-V已经有一组丰富的获批准的扩展指令,也许您尚无法在现成的RISC-V CPU IP核中获取相关方案。但是,经由Codasip提供的技术,芯片设计人员可以便捷地集成这些指令并进一步发展。本研究演示了8个自定义指令的实现:6个来自已批准的Zk子集,2个基于特定算法需求。这直接将SHA512哈希计算的性能提高了两倍,代码量减少了10%以上。值得关注的是,CPU IP核定制计算及软硬件协同设计的应用领域,除了SHA512和加密算法可以因此受益外,在其他特定应用计算领域也同样发展空间巨大。