web-dev-qa-db-ja.com

opensslの速度は、フグがmd5よりもはるかに速いことを示していますが、何が欠けていますか?

だから私はopenssl speed md5 && openssl speed blowfishとフグはmd5よりも高速に見えます。

これが結果です(Windowsで実行されたWSL)。

$ openssl speed md5 && openssl speed blowfish
Doing md5 for 3s on 16 size blocks: 11438181 md5's in 3.00s
Doing md5 for 3s on 64 size blocks: 8164424 md5's in 3.00s
Doing md5 for 3s on 256 size blocks: 4405667 md5's in 3.00s
Doing md5 for 3s on 1024 size blocks: 1547154 md5's in 3.00s
Doing md5 for 3s on 8192 size blocks: 212233 md5's in 2.95s
OpenSSL 1.0.1f 6 Jan 2014
built on: Mon Jan 30 20:38:38 UTC 2017
options:bn(64,64) rc4(16x,int) des(idx,cisc,16,int) aes(partial) blowfish(idx)
compiler: cc -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -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
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md5              61003.63k   174174.38k   375950.25k   528095.23k   589360.25k
###############################################################################
Doing blowfish cbc for 3s on 16 size blocks: ^T21511383 blowfish cbc's in 3.00s
Doing blowfish cbc for 3s on 64 size blocks5410400 blowfish cbc's in 2.84s
Doing blowfish cbc for 3s on 256 size blocks: 1438809 blowfish cbc's in 2.98s
Doing blowfish cbc for 3s on 1024 size blocks: 355336 blowfish cbc's in 2.97s
Doing blowfish cbc for 3s on 8192 size blocks: 42136 blowfish cbc's in 2.96s
OpenSSL 1.0.1f 6 Jan 2014
built on: Mon Jan 30 20:38:38 UTC 2017
options:bn(64,64) rc4(16x,int) des(idx,cisc,16,int) aes(partial) blowfish(idx)
compiler: cc -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -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
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
blowfish cbc    114727.38k   121924.51k   123602.38k   122513.15k   116614.23k

今、blowfishbcryptによって使用されていること、そしてbcryptが遅いアルゴリズムであることを知っています。

私はこれについていくつかの仮説を持っていますが、それらをチェックする方法はありません:

  • それはwindows subsystem on linux
  • これはbcryptのCOSTに関連していますか。たとえば、openssl speed blowfishは1のコスト(または同等のもの)で実行されます
  • これはblowfishbcryptblowfishと同じではありませんか

またはもちろん、他の何か。

まず、あなたはあなたの結果を誤解していると思います。たとえば、1024サイズのブロックを見ると、MD5は3秒で1,547,154を実行しているのに対し、Blowfishは355,336しか実行していないため、1回の操作でMD5の4倍以上の時間がかかります。

次に、bcryptはBlowfishキーのセットアップを構成可能な回数(通常は4,096回)繰り返します。テストをもう一度実行してみてください。ただし、MD5の1つの反復をBlowfishの4,096の反復と比較して、どちらが速いかを確認してください。つまり、bcryptセットアップのCOSTパラメータです。

9
Mike Scott

Bcryptはパスワードの保存に使用されるため、ブルートフォース推測攻撃を防ぐことが不可欠です。非常に高速なハッシュを1ラウンドしか使用しない場合、攻撃者はより多くの作業が必要な場合よりもはるかに速く推測することができます。

Bcryptの場合、非秘密コスト値は、使用される高価な暗号化のラウンド数を定義します。ユーザーがパスワードを知っている場合、これはまだ比較的高速です...

3
trognanders

bcryptblowfishは関連していますが、非常に異なります。

Blowfishは対称暗号化アルゴリズムです。ユーザー提供のパスワードを受け取り、キー拡張関数を適用し、この派生キーを使用して平文を暗号化します

一方、bcryptはパスワードハッシュ関数です。これは、同じキー拡張関数を複数回使用して、低速で不可逆的な方法でパスワードをハッシュするという意味で、blowfishに関連しています。

ご覧のとおり、これらは同じではありません。

Md5については、パスワードハッシュ関数ではありません。これは、一般的な目的ハッシュアルゴリズムです。それらはさまざまな目的を果たし、md5はFASTハッシュ関数になることを試みます。 md5から派生したパスワードハッシュ関数はmd5cryptで、これは古い* nix OSで使用され、以降のバージョンではbcrypt、shaXcryptなどに置き換えられました。

2
Mr. E