C++ x86中是否有加速SHA(SHA1/2/256/512)编码的指令?

C++ x86中是否有加速SHA(SHA1/2/256/512)编码的指令?,c++,c,cryptography,x86,sha,C++,C,Cryptography,X86,Sha,例如,在。但是x86中是否有任何加速SHA(SHA1/2/256/512)编码的指令,以及在x86上编码SHA的快捷库是什么?尝试一些开源的方法,例如 我个人使用过他们的MD5散列函数,这些函数工作得很好。 您可能还想看看 据我所知,英特尔还没有为SHA-1或SHA-2制作专用指令集。正如CodesInChaos在评论中指出的那样,它们可能会出现在即将到来的体系结构中。大多数散列算法的主要组成部分是已经在指令集中的异或运算。用于加速SHA1/256散列的计算 您可以阅读更多关于它们的信息,了解

例如,在。但是x86中是否有任何加速SHA(SHA1/2/256/512)编码的指令,以及在x86上编码SHA的快捷库是什么?

尝试一些开源的方法,例如 我个人使用过他们的MD5散列函数,这些函数工作得很好。 您可能还想看看

据我所知,英特尔还没有为SHA-1或SHA-2制作专用指令集。正如CodesInChaos在评论中指出的那样,它们可能会出现在即将到来的体系结构中。大多数散列算法的主要组成部分是已经在指令集中的异或运算。

用于加速SHA1/256散列的计算

您可以阅读更多关于它们的信息,了解如何检测CPU是否支持它们以及如何使用它们

(但不是SHA-512,您仍然需要使用常规SIMD指令手动将其矢量化。AVX512对于SHA-512(以及使用AVX512但不使用SHA扩展的CPU上的SHA-1/SHA-256)应该有帮助,例如,提供SIMD旋转和移位)

人们希望英特尔公司能拥有它们,但事实并非如此。2016年,英特尔CPU的功耗较低,2017年是Goldmont Plus。英特尔的第一个带有SHA扩展的主流CPU将是。天湖/卡比湖/咖啡湖不需要

AMD Ryzen(2017)拥有SHA扩展

C/C++程序员最好使用它,它可以使用任何CPU特性来快速散列。(如果您的OpenSSL版本足够新,则包括拥有它们的CPU上的SHA扩展。)

x86中是否有加速SHA(SHA1/2/256/512)编码的指令

2016年11月,答案终于是肯定的。但它只有SHA-1和SHA-256(延伸到SHA-224)

最近上市。它看起来像是支持它的处理器:

  • 奔腾J4205(台式机)
  • 奔腾N4200(移动)
  • 赛扬J3455(台式机)
  • 赛扬J3355(台式机)
  • 赛扬N3450(手机)
  • 赛扬N3350(移动式)
我在Amazon上查找了具有这种体系结构或处理器编号的机器,但没有找到任何可用的。我相信惠普宏碁有一台配备奔腾N4200的笔记本电脑,预计将于2016年11月至12月上市,以满足测试需求

有关为什么只有SHA-1、SHA-224和SHA-256的一些技术细节,请参阅内核加密邮件列表。简单的回答是,在SHA-256之上,事情不容易并行化



您可以在上找到英特尔SHA内部函数和ARMv8 SHA内部函数的源代码。它们是C源文件,为SHA-1、SHA-224和SHA-256提供压缩功能。基于内部的实现将SHA-1的吞吐量提高约3倍至4倍,将SHA-224和SHA-256的吞吐量提高约6倍至12倍。

2019更新:

存在时使用H/W加速度

在英特尔方面,µarch拥有(Atom系列)和(台式机/移动设备,10nm)之后的产品,包括SHA-NI支持、服务器CPU和旧版it。是的,由于存在并行的CPU/µ拱线,因此支持在时间轴上是非线性的

2017年,AMD发布了他们的µarch,因此当前所有基于Zen的服务器和桌面CPU都完全支持它


我的
OpenSSL速度SHA256
基准测试显示,块大小为8KiB时,速度提高了550%

对于加载到RAM的真正1GB和5GB文件,散列速度大约快3倍

(在Ryzen 1700@3.6 GHz、2933CL16 RAM上进行基准测试;OpenSSL:1.0.1无支持与1.1.1有支持)


用于与其他哈希函数进行比较的绝对值:

sha1   (1.55GHz):  721,1 MiB/s
sha256 (1.55GHz):  668.8 MiB/s
sha1   (3.8GHz) : 1977,9 MiB/s
sha256 (3.8GHz) : 1857,7 MiB/s
直到有办法在上面添加表


,第298页:EAX中的07h→ EBX位29==1

,第1264ff页

他对指令延迟/µops等进行基准测试(目前有Zen、Goldmont、Goldmont Plus)


代码示例,SIMD比较:

请阅读投票关闭此功能的人肯定是搞错了?在即将到来的体系结构中会有这样的指令。使SHA变慢是一项功能,这样很难破解。“不可避免地,我们会得到更多的比特数。”HansPassant这是一个非常不知情的评论,对于安全哈希算法来说,速度慢肯定不是一个好特性。选择SHA-3的原因当然是安全性和速度(以及最终与SHA-2在架构上的差异),但其输出位数将与SHA-2完全相同。对于某些使用安全散列的算法,比如PBKDF,它可以用于密钥增强。这些库是否比Intel引入的实现更快?alexbuisson给出的链接:我个人没有使用过intel的。让我看看我能找到什么。但请注意,这些指令正在添加到Skylake微体系结构中,该微体系结构预计要到2015年或2016年才会发布。现在SHA-1正在逐步淘汰()英特尔的新指令有点毫无意义……SHA-1仍然被永久地烘焙到Git版本控制之类的系统中SHA-1仍然是引导过程的一部分(在安全引导过程中,Windows中的许多文件仅使用SHA-1签名和检查Authenticode,而不是SHA-256)。随着最新版本的Windows 10(包括Insider和企业版)的加速,这仍然是事实。它可能会提高引导速度。此外,TPM 2.0目前不支持SHA-3用于UEFI引导。TPM 1.2不支持SHA-2(与UEFI安全引导的新要求不兼容),它只能对TCL度量日志使用SHA-1(但仍在聚合容器中使用,然后必须使用SHA-2)。我在该链接中查找SHA-512的讨论,但对“512”的文本搜索没有找到任何内容。你在谈论这篇文章的哪一部分?并且是您可以使用软件和普通标量或SIMD整数指令执行的操作(即大部分或全部p