SHA512Managed
和SHA256Managed
类。代码类似于此处发布的代码,但我指的是考虑到缓存的测试(从第二次读取文件开始,似乎已完全缓存了文件)。我已经对它进行了多次测试,并获得了相同的结果。我的问题是:这是否合乎逻辑?
#1 楼
这不一定是意外的。 32位平台与64位平台以及散列的数据量可能会产生重大影响。$ uname -m
x86_64
$ openssl speed sha256 sha512
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
sha256 29685.74k 79537.52k 148376.58k 186700.77k 196588.36k
sha512 23606.96k 96415.90k 173050.74k 253669.59k 291315.50
在我的64位计算机上,SHA-512一次哈希超过16个字节的数据时,击败了SHA-256。通常,一次散列的数据越多,性能的提升就越大。 SHA-512(具有不同的初始值),但将输出截断为256位。这是一个更好的选择(由于IV不同),而不是在需要更高吞吐量但仅限于256位输出的情况下自己将SHA-512的输出截断为256位。另外,如果您确实需要更高的吞吐量,则BLAKE2b是一种出色的加密哈希,它非常快,并且本机支持任意大小的输出(1至64字节之间)。
#2 楼
SHA-512的弹药比SHA-256多25%。在64位处理器上,每轮执行相同数量的操作,但是每轮可以处理两倍的数据,因为指令处理64位字而不是32位字。因此,2 / 1.25 = 1.6,这是在最佳条件下SHA-512可以达到的速度。在Intel Ivy Bridge处理器上,长消息SHA-512的速度快1.54倍,在AMD桩驱动器上,长消息的速度快1.48倍。慢1.25倍,因为仅执行一次哈希迭代。还有各种交叉点,其中一个散列将需要处理额外的迭代,而另一个则不需要,但是这些数字是平均值,实际性能图将在迭代增量点处步进。#3 楼
基准测试我还希望在这里看到一些实际的测量结果,所以希望您会喜欢它;)
Intel Core i7-7700HQ(第七代= Kaby Lake); RAM(DDR4)
硬件/操作系统配置:
系统:Linux Mint 19.3“ Tricia”-Cinnamon(64位);已安装
intel-microcode
软件包以及最新的UEFI / BIOS补丁1.8.0。处理器:Intel®Core™i7-7700HQ(方舟英特尔),PassMark,2.80GHz-3.80GHz,4核,8个线程,笔记本电脑
内存:32GiB DDR4 2400MHz(双通道)
CPU标志(
grep flags /proc/cpuinfo
):fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear flush_l1d
方法:
从重新启动笔记本电脑开始。
为了进行速度测量,使用了
pv
实用程序(手册页):pv --average-rate BigFile16GiBinRAM | sha512sum --binary # [ 336MiB/s]
pv --average-rate BigFile16GiBinRAM | sha256sum --binary # [ 203MiB/s]
BigFile16GiBinRAM
带有/dev/urandom
生成的文件。当然,所有不必要的服务和程序都在测试时停止,例如防病毒解决方案,浏览器等,这是唯一的当时运行的实际上是台式机环境,但是我有一个借口-我只有15.6英寸的UltraHD显示屏,在普通终端中无法读取,对此感到抱歉。
文件位于RAM中(
tmpfs
)。我对每个测试进行了3次测试,结果均为+/-1。
测试结果:
SHA-512的速度为336MiB / s〜快约65%!
SHA-256的速度为203MiB / s 。
Intel Core i7-4700HQ(第4代= Haswell); SSD(SATA)
硬件/操作系统配置:
系统:Linux Mint 18.2 Cinnamon 64位;已安装
intel-microcode
软件包以及最新的UEFI / BIOS补丁。处理器:Intel®Core™i7-4700HQ(方舟英特尔),PassMark,2.40GHz-3.40GHz,4核,8线程,笔记本电脑<内存:16GiB DDR3 1600MHz(双通道)
CPU标志(
grep flags /proc/cpuinfo
):fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm epb tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm ida arat pln pts
方法:
从重新启动笔记本电脑开始。
为了进行速度测量,使用了
pv
实用程序(手册页):pv --average-rate BigFile103GiB | sha512sum --binary
pv --average-rate BigFile103GiB | sha256sum --binary
BigFile103GiB
是一个包含实际数据的虚拟磁盘(VirtualBox)。当然,虚拟机在测试时没有运行,并且所有不必要的服务和程序都在测试时停止。
文件位于2.5英寸SATAIII SSD驱动器上。
我每次运行3次结果相同+/- 1。
SHA-256的速度为183MiB / s。
Intel Xeon E3-1225 v3(第4代= Haswell); RAM(DDR3)
硬件/操作系统配置:
系统:GNU / Linux Debian 9 64位;已安装
intel-microcode
软件包以及最新的UEFI / BIOS补丁。处理器:英特尔®至强®E3-1225 v3(方舟英特尔),PassMark,3.20GHz-3.60GHz,4核,4线程,服务器
内存:32GiB DDR3 1600MHz(双通道)UDIMM ECC
CPU标志(q 4312079q):
fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm epb tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm ida arat pln pts
方法:
从重新启动服务器开始。
为进行速度测量,使用了
grep flags /proc/cpuinfo
实用程序(手册页):pv --average-rate BigFile24GiBinRAM | sha512sum --binary
pv --average-rate BigFile24GiBinRAM | sha256sum --binary
pv
带有BigFile24GiBinRAM
生成的文件。服务和程序在测试时停止。文件位于RAM(
/dev/urandom
)中。我每次测试都运行了3次,结果相同+/-1。
测试结果:
SHA-512的速度为315MiB / s约快53%!
SHA-256的速度为206MiB / s。
评论
$ \ begingroup $
请注意,继Skylake(包括Kaby Lake)(继Haswell之后)的继任者Goldmond具有SHA扩展,这些扩展提供了加快SHA-1和SHA-256而不是SHA-512的指令。当然,如果使用了说明,这可能再次将优势转到SHA-256。 AMD Ryzen也支持这些说明。
$ \ endgroup $
–马腾·博德威斯♦
19 Mar 17 '19在20:58
$ \ begingroup $
@MaartenBodewes谢谢您的信息!
$ \ endgroup $
–LinuxSecurityFreak
19 Mar 18 '19在2:52
#4 楼
SHA-512(和SHA-384)在64位平台上通常更快,而SHA-256在32位平台上通常更快。评论
$ \ begingroup $
谢谢。但是SHA512的计算量是否更大? (这就是为什么我感到惊讶的原因。)
$ \ endgroup $
– ispiro
2015年6月16日20:29
$ \ begingroup $
@ispiro SHA512可以进行更多计算。这就是为什么您只看到50%的改善。如果计算量相同,您将看到将近100%的改善。
$ \ endgroup $
–卡巴斯德
15年6月17日在10:46
$ \ begingroup $
这个答案可能需要一些解释和参考。
$ \ endgroup $
–•uriousdannii
15年6月18日在4:49
$ \ begingroup $
我必须同意@curiousdannii指出的内容:目前,这看起来更像是评论而不是答案。添加一些有关“为什么”和“在什么条件下”平台位大小能够影响SHA2速度的信息将是一个不错的开始(如果需要示例,请查看@ richie-frame的答案)…解释事物通常不同于评论。
$ \ endgroup $
– e-sushi
2015年6月19日在2:42
#5 楼
在某些系统上,例如运行64位openSUSE Linux的AMD Athlon 3000G,sha256的运行速度提高了3倍:The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
sha256 189198.58k 512668.07k 1043590.40k 1429210.79k 1641379.16k 1680277.50k
sha512 48800.73k 191544.23k 343078.23k 515876.82k 611980.63k 620609.54k
评论
$ \ begingroup $
谢谢。但是SHA512的计算量是否更大? (这就是为什么我感到惊讶的原因。)
$ \ endgroup $
– ispiro
15年6月16日在20:28
$ \ begingroup $
SHA-256一次执行超过512位(其块大小)的64轮压缩功能。另一方面,SHA-512执行80轮压缩功能,但一次超过1024位。因此,是的,SHA-512可以在一次调用中执行更多的计算,但是一次可以处理大量数据。
$ \ endgroup $
–斯蒂芬·托瑟
15年6月16日在20:38
$ \ begingroup $
@StephenTouset关于SHA-512 / 256存在的提示将是一个很好的补充。
$ \ endgroup $
–马腾·博德威斯♦
15年6月16日在20:44
$ \ begingroup $
交叉点应为56个字节,因为SHA256会在该点跳至2个块,每个块64个字节。 SHA256可能会以120字节的速度再次领先,因为SHA256分为3个块和SHA512包括2个块(每个128字节)。
$ \ endgroup $
– CodesInChaos
15年6月16日在20:49
$ \ begingroup $
好吧,我也忘记了SHA-256的三个块与SHA-512的两个块。我们仅得出结论,对于小型输入,如果您纯粹是为了提高速度,则可能需要测试哪种输入速度更快。
$ \ endgroup $
–马腾·博德威斯♦
2015年6月16日在21:07