aboutsummaryrefslogtreecommitdiff
path: root/content/posts/2022-06-10-hash-speeds.md
blob: a2f7771dc507bfd11cd22c9747d6895014a185ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
---
slug: hash-speeds
title: "OpenSSL Hash Benchmarks"
date: "2022-06-10T20:13:36-04:00"
---

I compiled [OpenSSL][] 3.0.3 and then benchmarked the following
cryptographic hash functions:

* [MD5 (broken, don't use!)][md5]
* [SHA-1 (broken, don't use!)][sha1]
* [SHA-256][sha2]
* [SHA-512][sha2]
* [BLAKE2s][blake2]
* [BLAKE2b][blake2]
* [SHA3-256][sha3]
* [SHA3-512][sha3]

**Note:** [MD5][md5] and [SHA-1][sha1] are included for reference, but
both are broken and should not be used.

Test systems:

* [Lenovo Thinkpad X1 Carbon (9th Gen)][laptop]: [i7-1185G7][] CPU
  with [accelerated SHA-1 and SHA-256 instructions][intel-sha].
* [Raspberry Pi 4B][rpi]: [Cortex-A72][] CPU, which does *not* support
  the [ARMv8 crypto extensions][arm-crypto].

Detailed results, build scripts, and documentation are available in the
[companion GitHub repository][repo].

## Thinkpad X1 Carbon Results

{{< figure
  src="/files/posts/hash-speeds/flex-0.svg"
  class=image
  caption="Lenovo Thinkpad X1 Carbon (9th Gen) results."
>}}

Notes:

* The [accelerated SHA-1 and SHA-256 instructions][intel-sha] are
  clearly visible in the results.
* [BLAKE2b][blake2] does quite well, considering.

## Raspberry Pi 4B Results

{{< figure
  src="/files/posts/hash-speeds/cherry-0.svg"
  class=image
  caption="Raspberry Pi 4B results."
>}}

Notes:

* [BLAKE2b][blake2] is clearly the fastest on the [Cortex-A72][].
* [BLAKE2b][blake2] is faster than [BLAKE2s][blake2] because the former
  is optimized for 32-bit CPUs, and the latter is optimized for 64-bit
  CPUs.
* [SHA512][sha2] is faster than [SHA256][sha2] because it has a
  slight edge on 64-bit systems.

[repo]: https://github.com/pablotron/hash-speeds
  "GitHub repository."
[openssl]: https://www.openssl.org/
  "Cryptography and TLS toolkit."
[md5]: https://en.wikipedia.org/wiki/MD5
  "MD5 cryptographic hash function (broken, don't use)."
[sha1]: https://en.wikipedia.org/wiki/SHA-1
  "SHA-1 cryptographic hash function (broken, don't use)."
[sha2]: https://en.wikipedia.org/wiki/SHA-2
  "SHA-2 cryptographic hash function family."
[blake2]: https://en.wikipedia.org/wiki/BLAKE_(hash_function)#BLAKE2
  "BLAKE2 cryptographic hash function family."
[sha3]: https://en.wikipedia.org/wiki/SHA-3
  "SHA-3 cryptographic hash function family."
[laptop]: https://en.wikipedia.org/wiki/ThinkPad_X1_series#X1_Carbon_(9th_Gen)
  "Lenovo Thinkpad X1 Carbon (9th Gen)"
[rpi]: https://en.wikipedia.org/wiki/Raspberry_Pi
  "Raspberry Pi 4B"
[intel-sha]: https://en.wikipedia.org/wiki/Intel_SHA_extensions
  "Intel SHA extensions"
[i7-1185G7]: https://ark.intel.com/content/www/us/en/ark/products/208664/intel-core-i71185g7-processor-12m-cache-up-to-4-80-ghz-with-ipu.html
  "Intel i7-1185G7"
[cortex-a72]: https://en.wikipedia.org/wiki/ARM_Cortex-A72
  "ARM Cortex-A72"
[arm-crypto]: https://en.wikichip.org/wiki/arm/armv8#Crypto_Extension
  "ARMv8 crypto extensions"