MD5ハッシュの計算は、「標準」のラップトップx86ハードウェアのSHA-1またはSHA-2よりもCPU負荷が少ないですか?特定のチップに固有ではなく、一般的な情報に興味があります。
更新: 私の場合、ファイルのハッシュを計算することに興味があります。ファイルサイズが重要な場合は、300Kと仮定します。
MD5ハッシュの計算は、「標準」のラップトップx86ハードウェアのSHA-1またはSHA-2よりもCPU負荷が少ないですか?特定のチップに固有ではなく、一般的な情報に興味があります。
更新: 私の場合、ファイルのハッシュを計算することに興味があります。ファイルサイズが重要な場合は、300Kと仮定します。
回答:
はい、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を除く)は含まれていませんが、私はそれに取り組んでいます。
私の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
本当の答えは:それは異なり
考慮すべき要素がいくつかありますが、最も明白なのは、これらのアルゴリズムを実行している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よりも速くなっている理由について確かな答えを提供できる専門家がいると思います。
openssl speed
は、これが最初で最も意味のあるベンチマークです。
MD5もSSE2の使用からメリットを得ています。BarsWFをチェックして、メリットがないことを教えてください。必要なのは、少しのアセンブラーの知識であり、独自のMD5 SSE2ルーチンを作成できます。ただし、大量のスループットの場合、使用されるSIMD命令と互換性を持つように入力データを再配置するのに費やされる時間とは対照的に、ハッシュ中の速度のトレードオフがあります。
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