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


115

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

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


それはあなたの質問への答えではありませんが、Skeinの支持者はその速度を提唱しました、そしてそれは確かに現時点で寿命末期のMD5よりも弱いわけではありません。ハッシュしなければならないメッセージが非常に短い場合、速度は暗号化ハッシュ関数にとって不利になる可能性があります(特に、ラップトップでの実行速度ではなく、他の誰かがそれを実装できる速度)。schneier.com/skein1.2.pdf
Pascal Cuoq

4
@Pascal:Skeinは、特に32ビットプラットフォームでは、SHA-3候補の中で最速ではありません。64ビットx86では、Skeinは約300 MB /秒(Skein-512はSkein-256よりもいくらか高速です)を達成します。これはSHA-1に匹敵しますが、32ビットモードではパフォーマンスが60 MB /未満に低下しますs、SHA-256より2倍遅い。一方、別のSHA-3候補であるSHABALは、32ビットプラットフォームと64ビットプラットフォームの両方でSHA-1と同様のパフォーマンスを提供します。
トーマス・ポルノ

回答:


123

はい、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には、私のコードよりもかなり高速な32ビットのSHA-512の実装が含まれていることに注意してください(ただし、64ビットのSHA-512ほど高速ではありません)。プレーンCで実行されます。SHA-512は、SSE2実装から恩恵を受けるこれら4つの中で唯一の機能です。

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


2
あなたのベンチマークは役に立たないと思います。同等だが不完全な最適化に基づく2つのアルゴリズムの速度比較は重要ではありません。実際には、独自の実装をロールバックするのではなく、完全に最適化された実装を使用します。それらの結果は比較すべきものです。
Edward Brey

10
@EdwardBrey実際、これらは完全に最適化されるのにかなり近いです。実際、彼のmd5実装はOpenSSLが提供するものよりもはるかに速く機能するため、すべての実装が「現実の世界」で最適化されるわけではありません。また、これらは完全ではありませんが(あなたはそれについては正しいです)、私はそれらがこの特定の質問に対する完全な回答として役立ちます。
Gaspa79 2016年

50

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

$ 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

アップデート: 10か月後のOS X 10.9では、同じマシンで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

3番目の更新: 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

2
奇妙なことに、私の空気はあなたのものと同じで、私は反対のベンチマーク結果を得ました。8192バイト:md5 305549.52k; sha1 204668.57k
カルロス

3
同じマシンで昨年とは異なる結果が得られます:md5 381756.70k、sha1 313881.86k。10.9(OpenSSL 0.9.8y)へのアップグレードが原因かもしれません。
nwellnhof 2014年

6
それは素晴らしい答えです。それはあなたが気にかけていることを示しています。共有するためのおかげで男
Mをで

13

本当の答えは:それは異なり

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

たとえば、私と私の友人はどちらもまったく同じopensslバージョンを実行しており、インテルCore i7 CPUが異なるとわずかに異なる結果が得られます。

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

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

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

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

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

-

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


6
SSDを購入する(またはMcAfeeを削除する)必要があります:)
Maarten Bodewes 14年

1
@owlsteadいまいましい私がこれを試したとき、m'y Linuxボックスの「スローモード」をオフにすることを忘れていた。
Johnride、2014年

4
@Johnride、ファイルからベンチマークしないでください。メモリ内のデータから実行するか、同じ値を再ハッシュするだけです。
ロビノ2017年

1
@Robinoが行うことopenssl speedは、これが最初で最も意味のあるベンチマークです。
ジョンライド2017年

1

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


3
一見すると、SSE2を使用して1つの MD5スレッドを高速化するのか、それともいくつかの並列MD5スレッドをペアにするのかは明確ではありません。後者はもちろん、ほとんどのアルゴリズムにとって簡単ですが、通常必要なのは単一のデータストリームであるので、SSE2の利点としては考慮されません。
lapo

0

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.