さまざまなソルト log_rounds の下で checkPw() のパフォーマンスをチェックするための小さなテスト クラスを作成しました。
public void testCheckPerformance() {
int MULT = 1;
for( int i = 4; i < 31; i++) {
String salt = BCrypt_v03.gensalt(i);
String hashpw = BCrypt_v03.hashpw("my pwd", salt);
long startTs = System.currentTimeMillis();
for( int mult = 0; mult < MULT; mult++) {
assertTrue(BCrypt_v03.checkpw("my pwd", hashpw));
}
long endTs = System.currentTimeMillis();
System.out.println(""+i+": " + ((endTs-startTs)/MULT));
}
}
私のPCは8コアi7 2.8GHzです。結果は次のとおりです。
log-rounds: time in millis.
4: 3
5: 3
6: 6
7: 11
8: 22
9: 46
10: 92
11: 188
12: 349
13: 780
14: 1449
15: 2785
16: 5676
17: 11247
18: 22264
19: 45170
デフォルトの log_rounds=10 を使用すると、単一のスレッドが 0.1 秒でログインをチェックできることを意味します。これにより、1 つのサーバーが実行できる 1 秒あたりのログイン チェックの数が制限される可能性があります。
したがって、問題は、パスワード チェックごとに費やす準備ができている時間と、対処するためにシステムのサイズを設定したい 1 秒あたりのパスワード チェックの数になると思います。