SHA256とSHA512はどちらが速いか?

提供: セキュリティ
2017年8月12日 (土) 20:04時点におけるDaemon (トーク | 投稿記録)による版 (ページの作成:「SHA-2には、ハッシュ長の異なるハッシュ関数が規格化されています。 '''SHA256''' と '''SHA512''' では、どちらのスピードが速...」)

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索
スポンサーリンク

SHA-2には、ハッシュ長の異なるハッシュ関数が規格化されています。 SHA256SHA512 では、どちらのスピードが速いのかを比較します。

読み方

SHA-2
しゃ つー

概要

SHA-2には、 SHA256 や SHA512 といったハッシュ関数があります。ほかにもいくつかあります。

ここでは、SHA256とSHA512の速度を比較します。

OpenSSL のベンチマーク

OpenSSL コマンドには、speed オプションがあり、一定時間内にどれだけの暗号処理ができるかを測定できます。

OpenSSLコマンドで比較する

OpenSSL コマンドで、スピードを測ってみましょう。

$ openssl speed sha256 sha512
Doing sha256 for 3s on 16 size blocks: 10616942 sha256's in 3.00s
Doing sha256 for 3s on 64 size blocks: 6040191 sha256's in 3.00s
Doing sha256 for 3s on 256 size blocks: 2856380 sha256's in 3.00s
Doing sha256 for 3s on 1024 size blocks: 898690 sha256's in 3.00s
Doing sha256 for 3s on 8192 size blocks: 119033 sha256's in 3.00s
Doing sha512 for 3s on 16 size blocks: 7426619 sha512's in 3.00s
Doing sha512 for 3s on 64 size blocks: 7469050 sha512's in 2.99s
Doing sha512 for 3s on 256 size blocks: 3299616 sha512's in 3.00s
Doing sha512 for 3s on 1024 size blocks: 1211985 sha512's in 3.00s
Doing sha512 for 3s on 8192 size blocks: 174250 sha512's in 3.00s
OpenSSL 1.0.2g  1 Mar 2016
built on: reproducible build, date unspecified
options:bn(64,64) rc4(16x,int) des(idx,cisc,16,int) aes(partial) blowfish(idx)
compiler: cc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS
-D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -g -O2
-fstack-protector-strong -Wformat -Werror=format-security -Wdate-time
-D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack
-Wall -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT
-DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM
-DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM
-DGHASH_ASM -DECP_NISTZ256_ASM
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
sha256           56623.69k   128857.41k   243744.43k   306752.85k   325039.45k
sha512           39608.63k   159872.64k   281567.23k   413690.88k   475818.67k


1秒あたりに処理できるバイト数はこちら。k だと数字が大きくてわかりにくいので、m にしてみました。四捨五入とか気にせず、切り捨てしてます。

type             16    64     256    1024   8192 bytes
sha256           56m   128m   243m   306m   325m
sha512           39m   159m   281m   413m   475m

サイズが大きくなるほど、スループットもあがっていくように見えます。大きいサイズのほうが sha512 が有利なようです。

1回あたりに費やされる時間を計算した例です。 秒だと値が小さすぎてわかりにくいので、ms(ミリ秒)で表記しています。

SHA256とSHA512の比較
ブロックサイズ 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
SHA256 2.83 ms 4.97 ms 10.50 ms 33.38 ms 252.03 ms
SHA512 4.04 ms 4.02 ms 9.09 ms 24.75 ms 172.17 ms

サイズが小さい間は、SHA256 のほうが速いようですが、 256バイト以降は、SHA512 のほうが速くなっています。

復数プロセスで実行した場合

復数プロセスで実行して計算する方法もあります。

$ openssl speed sha1 sha256 sha512 -multi 56

結果だけとるとこのような感じです。

sha1           1699842.77k  4971949.78k 11732319.57k 17669305.34k 20474765.31k
sha256         1596971.09k  3604041.83k  6884032.63k  8792648.70k  9539130.71k
sha512         1108558.58k  4427662.44k  7705484.80k 11714017.28k 13803763.03k

関連項目




スポンサーリンク