2

2010 年にリリースされて以来、私は jBCrypt バージョン 0.3 をそのまま使用しています。「log_rounds」の数を 10 に設定するデフォルトの getsalt() メソッドを使用しています。メソッド、この値はデフォルトとしてまだ適切ですか、それとももっと高い値を検討する必要があります。

javadoc からの情報...

String pw_hash = BCrypt_v03.hashpw(plain_password, BCrypt_v03.gensalt());
String strong_salt = BCrypt_v03.gensalt(10)
String stronger_salt = BCrypt_v03.gensalt(12)

作業量は指数関数的に (2**log_rounds) 増加するため、各増分は 2 倍の作業になります。デフォルトの log_rounds は 10 で、有効な範囲は 4 ~ 31 です。

4

1 に答える 1

5

さまざまなソルト 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 秒あたりのパスワード チェックの数になると思います。

于 2012-12-21T20:38:37.630 に答える