一个例子,在x86 are Instruction Set to hardware acceleration AES中。但在x86中是否有任何加速SHA(SHA1 / 2/256/512)编码的指令,以及在x86上编码SHA的紧固库是什么?
答案 0 :(得分:15)
Intel has upcoming instructions用于加速计算SHA1 / 256哈希值。
您可以阅读有关它们的更多信息,如何检测您的CPU是否支持它们以及如何使用它们here。
(但不是SHA-512,您仍需要使用常规SIMD指令手动对其进行矢量化.AVX512应该对SHA-512(以及带有AVX512而不是SHA扩展的CPU上的SHA-1 / SHA-256)有所帮助,提供SIMD旋转以及移位,例如https://github.com/minio/sha256-simd)
希望英特尔Skylake microarchitecture拥有它们,但事实并非如此。 2016年的英特尔CPU是低功耗Goldmont,2017年则是Goldmont Plus。英特尔首款带有SHA扩展功能的主流CPU将为Cannon Lake。 Skylake / Kaby Lake / Coffee Lake没有。
AMD Ryzen(2017)有SHA扩展。C / C ++程序员可能最好使用OpenSSL,它将使用它可以快速散列的任何CPU功能。 (如果您的OpenSSL版本足够新,请在拥有它们的CPU上包含SHA扩展。)
答案 1 :(得分:7)
在x86中是否有任何加速SHA(SHA1 / 2/256/512)编码的指令?
2016年11月,答案终于是了。但它唯一的SHA-1和SHA-256(以及扩展名,SHA-224)。
Intel CPUs with SHA extensions最近上市了。看起来支持它的处理器是Goldmont microarchitecture:
我在亚马逊上查看了具有架构或处理器编号的机器,但我找不到任何可用的(尚未)。我相信 HP 宏碁有一台配备Pentium N4200的笔记本电脑预计将于2016年11月的 2016年12月上市,以满足测试需求。
有关为什么它只有SHA-1,SHA-224和SHA-256的一些技术细节,请参阅内核加密邮件列表中的crypto: arm64/sha256 - add support for SHA256 using NEON instructions。简而言之,在SHA-256之上,事情不容易并行化。
您可以在Noloader GitHub | SHA-Intrinsics找到Intel SHA内在函数和ARMv8 SHA内在函数的源代码。它们是C源文件,并为SHA-1,SHA-224和SHA-256提供压缩功能。基于内部的实现为SHA-1增加了大约3倍到4倍的吞吐量,对于SHA-224和SHA-256大约增加了6倍到12倍。
答案 2 :(得分:5)
2019更新:
OpenSSL确实使用硬件加速。
在Intel方面,{arch}的µarch具有(Atom系列),从Goldmont(台式机/移动设备,10nm)开始,其具有SHA-NI支持,Cannonlake服务器CPU和较旧的{{ 3}}。
2017年,AMD发布了他们的Cascade Lake µarch,因此,当前所有基于Zen的服务器和台式机CPU都完全支持它。
我的基准OpenSSL speed SHA256
显示,块大小为8KiB时,速度提高了550%。
对于加载到RAM的实际1GB和5GB文件,散列速度大约快3倍。
(基准为Ryzen 1700 @ 3.6 GHz,2933CL16 RAM; OpenSSL:1.0.1不支持vs 1.1.1带有支持)
do not support,第298页:EAX→EBX位29 == 1中的07h。
Zen,第1264ff页。
代码示例,SIMD比较:CPUID identification
答案 3 :(得分:0)
尝试一些开放源代码,例如OpenSSL 我个人使用了他们的MD5散列函数,而且效果非常好。 您可能还想查看hashlib2++。
据我所知,英特尔尚未为SHA-1或2制作专用指令集。它们可能在即将到来的架构中作为CodesInChaos在评论中指出。大多数散列算法的主要组成部分是XOR操作,它已经在指令集中。