web-dev-qa-db-ja.com

MD5ハッシュの計算は、SHAファミリー関数よりもCPUに負荷がかかりませんか?

MD5ハッシュの計算は、「標準」ラップトップx86ハードウェア上のSHA-1またはSHA-2よりもCPUの負荷が少ないですか?特定のチップに固有ではなく、一般的な情報に興味があります。

PDATE:私の場合、ファイルのハッシュを計算することに興味があります。ファイルサイズが重要な場合は、300Kと仮定しましょう。

104
Mick

はい、MD5はCPUにそれほど負荷をかけません。 Intel x86(Core2 Quad Q6600、2.4 GHz、1つのコアを使用)で、32ビットモードでこれを取得します。

MD5       411
SHA-1     218
SHA-256   118
SHA-512    46

そして、これは64ビットモードで:

MD5       407
SHA-1     312
SHA-256   148
SHA-512   189

「長い」メッセージの場合、数値は1秒あたりのメガバイト数です(これは、8 kBを超えるメッセージに対して取得されるものです)。これは、C(およびJava)のハッシュ関数実装のライブラリである sphlib を使用しています。すべての実装は同じ著者(私)からのものであり、最適化に匹敵する努力をして作られました。したがって、速度の違いは、機能に本当に固有のものと見なすことができます。

比較のポイントとして、最近のハードディスクは約100 MB /秒で実行され、USBを介したものはすべて60 MB /秒未満になると考えてください。ここではSHA-256が「遅い」ように見えますが、ほとんどの目的には十分高速です。

OpenSSL にはSHA-512の32ビット実装が含まれていることに注意してください。OpenSSL実装はアセンブリおよびSSE2レジスタを使用します。これはプレーンCでは実行できません。SHA-512は、これら4つの中でSSE2実装の恩恵を受ける唯一の機能です。

Edit:on このページ で、多くのハッシュ関数の速度に関するレポートを見つけることができます(「Telechargez maintenant 「リンク」。レポートはフランス語ですが、ほとんどが表と数字でいっぱいで、数字は国際的です。実装されたハッシュ関数にはSHA-3候補(SHABALを除く)は含まれていませんが、現在取り組んでいます。

114
Thomas Pornin

2012年のMacBook Air(Intel Core i5-3427U、2x 1.8 GHz、2.8 GHz Turbo)では、SHA-1はMD5よりわずかに高速です(OpenSSLを64ビットモードで使用):

$ openssl speed md5 sha1
OpenSSL 0.9.8r 8 Feb 2011
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md5              30055.02k    94158.96k   219602.97k   329008.21k   384150.47k
sha1             31261.12k    95676.48k   224357.36k   332756.21k   396864.62k

更新: OS X 10.9で10か月後、同じマシンでSHA-1が遅くなりました:

$ openssl speed md5 sha1
OpenSSL 0.9.8y 5 Feb 2013
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md5              36277.35k   106558.04k   234680.17k   334469.33k   381756.70k
sha1             35453.52k    99530.85k   206635.24k   281695.48k   313881.86k

2回目の更新: OS X 10.10では、SHA-1の速度は10.8レベルに戻りました。

$ openssl speed md5 sha1
OpenSSL 0.9.8zc 15 Oct 2014
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md5              35391.50k   104905.27k   229872.93k   330506.91k   382791.75k
sha1             38054.09k   110332.44k   238198.72k   340007.12k   387137.77k

回目の更新: LibreSSLを使用したOS X 10.14は、はるかに高速です(同じマシンでも)。 SHA-1が引き続き上位に表示されます。

$ openssl speed md5 sha1
LibreSSL 2.6.5
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md5              43128.00k   131797.91k   304661.16k   453120.00k   526789.29k
sha1             55598.35k   157916.03k   343214.08k   489092.34k   570668.37k
42
nwellnhof

本当の答えは:それは依存する

考慮すべき要素がいくつかありますが、最も明白なのは、これらのアルゴリズムを実行しているCPUとアルゴリズムの実装です。

たとえば、私と私の友人は両方ともまったく同じopensslバージョンを実行しており、Intel Core i7 cpusが異なると結果が少し異なります。

Intel(R)Core(TM)i7-2600 CPU @ 3.40GHzで動作する私のテスト

The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md5              64257.97k   187370.26k   406435.07k   576544.43k   649827.67k
sha1             73225.75k   202701.20k   432679.68k   601140.57k   679900.50k

そして彼のIntel(R)Core(TM)i7 CPU 920 @ 2.67GHz

The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md5              51859.12k   156255.78k   350252.00k   513141.73k   590701.52k
sha1             56492.56k   156300.76k   328688.76k   452450.92k   508625.68k

私たちは両方とも、ArchLinux公式パッケージからOpenSSL 1.0.1j 2014年10月15日のまったく同じバイナリを実行しています。

これについての私の意見は、sha1のセキュリティが強化されたため、CPU設計者はsha1の速度を改善する可能性が高く、md5sumよりも多くのプログラマがアルゴリズムの最適化に取り組んでいると考えています。

Md5はsha1よりも有利ではないと思われるため、いつか使用されなくなると思います。また、実際のファイルでいくつかのケースをテストしましたが、結果は常に両方のケースで同じでした(ディスクI/Oによって制限される可能性が高い)。

4.6GBの大きなファイルのmd5sumは、同じファイルのsha1sumとまったく同じ時間を要しました。多くの小さなファイル(同じディレクトリ内の488)でも同じです。私はテストを数十回実行しましたが、それらは常に同じ結果を得ていました。

-

これをさらに調査することは非常に興味深いでしょう。新しいプロセッサでsha1がmd5より高速になっている理由に対する確かな答えを提供できる専門家が何人かいると思います。

10
Johnride

MD5はSSE2の使用からも恩恵を受けます。BarsWFをチェックして、そうではないと教えてください。必要なのは、わずかなアセンブラー知識であり、独自のMD5 SSE2ルーチンを作成できます。ただし、大量のスループットの場合、使用されるSIMD命令と互換性があるように入力データを再配置するのにかかる時間とは対照的に、ハッシュ中の速度のトレードオフがあります。

1
Bob the Builder

sha1sumはmd5sumよりPower9でかなり高速です

$ uname -mov
#1 SMP Mon May 13 12:16:08 EDT 2019 ppc64le GNU/Linux

$ cat /proc/cpuinfo
processor       : 0
cpu             : POWER9, altivec supported
clock           : 2166.000000MHz
revision        : 2.2 (pvr 004e 1202)

$ ls -l linux-master.tar
-rw-rw-r-- 1 x x 829685760 Jan 29 14:30 linux-master.tar

$ time sha1sum linux-master.tar
10fbf911e254c4fe8e5eb2e605c6c02d29a88563  linux-master.tar

real    0m1.685s
user    0m1.528s
sys     0m0.156s

$ time md5sum linux-master.tar
d476375abacda064ae437a683c537ec4  linux-master.tar

real    0m2.942s
user    0m2.806s
sys     0m0.136s

$ time sum linux-master.tar
36928 810240

real    0m2.186s
user    0m1.917s
sys     0m0.268s
0
B Abali