だから私は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
今、blowfish
がbcrypt
によって使用されていること、そしてbcrypt
が遅いアルゴリズムであることを知っています。
私はこれについていくつかの仮説を持っていますが、それらをチェックする方法はありません:
windows subsystem on linux
?bcrypt
のCOSTに関連していますか。たとえば、openssl speed blowfish
は1のコスト(または同等のもの)で実行されますblowfish
とbcrypt
のblowfish
と同じではありませんかまたはもちろん、他の何か。
まず、あなたはあなたの結果を誤解していると思います。たとえば、1024サイズのブロックを見ると、MD5は3秒で1,547,154を実行しているのに対し、Blowfishは355,336しか実行していないため、1回の操作でMD5の4倍以上の時間がかかります。
次に、bcryptはBlowfishキーのセットアップを構成可能な回数(通常は4,096回)繰り返します。テストをもう一度実行してみてください。ただし、MD5の1つの反復をBlowfishの4,096の反復と比較して、どちらが速いかを確認してください。つまり、bcryptセットアップのCOSTパラメータです。
Bcryptはパスワードの保存に使用されるため、ブルートフォース推測攻撃を防ぐことが不可欠です。非常に高速なハッシュを1ラウンドしか使用しない場合、攻撃者はより多くの作業が必要な場合よりもはるかに速く推測することができます。
Bcryptの場合、非秘密コスト値は、使用される高価な暗号化のラウンド数を定義します。ユーザーがパスワードを知っている場合、これはまだ比較的高速です...
bcrypt
とblowfish
は関連していますが、非常に異なります。
Blowfishは対称暗号化アルゴリズムです。ユーザー提供のパスワードを受け取り、キー拡張関数を適用し、この派生キーを使用して平文を暗号化します
一方、bcryptはパスワードハッシュ関数です。これは、同じキー拡張関数を複数回使用して、低速で不可逆的な方法でパスワードをハッシュするという意味で、blowfishに関連しています。
ご覧のとおり、これらは同じではありません。
Md5については、パスワードハッシュ関数ではありません。これは、一般的な目的ハッシュアルゴリズムです。それらはさまざまな目的を果たし、md5はFASTハッシュ関数になることを試みます。 md5から派生したパスワードハッシュ関数はmd5cryptで、これは古い* nix OSで使用され、以降のバージョンではbcrypt、shaXcryptなどに置き換えられました。