bcryptプレイグラウンド
コスト4〜16でbcryptハッシュを生成。22文字の独自ソルトも指定でき、ハッシュをバージョン・コスト・ソルト・ハッシュに分解して表示し、照合もできます。
72 バイト中 0 バイト使用
2^コスト = 1,024 ラウンド
空欄ならランダムなソルトを使います。
bcrypt(Provos & Mazières, 1999)は適応型ハッシュで、コストを 1 上げるごとに処理量が 2 倍になります。サーバーでのログインが約 250 ms 以内に収まる最大のコスト(10 以上)を選んでください。出力は $2b$ プレフィックスを使います。$2a$ や $2y$ のハッシュも同じように検証できます。
パスワードをハッシュと照合
すべてブラウザ内で実行されます。データがアップロードされることはありません。
bcryptプレイグラウンドとは?
bcryptを試せるツールです。コスト係数を選び、特定のソルトを入力するかランダムなものを使うと、得られたハッシュがバージョン、コスト、ソルト、ハッシュに分割され、所要時間も表示されます。照合機能は、$2a$、$2b$、$2y$のハッシュに対してパスワードを確認します。
bcryptプレイグラウンドの使い方
- パスワードを入力します。ヒントには、bcryptの72バイトのうち何バイトが使われているかが表示されます。
- コスト係数(4〜16)を設定し、必要なら22文字のソルトも指定します。
- ハッシュ化をクリックして、エンコード済みハッシュ、その各部分、所要時間を確認します。
- 照合パネルにbcryptハッシュを貼り付けて、パスワードをテストします。
例
Password password, cost 4, salt abcdefghijklmnopqrstuu
$2b$04$abcdefghijklmnopqrstuughE8Ev8uGFaUgY2cNEySvxngrb/Jzdm
同じパスワードとソルトでの pyca/bcrypt の出力と一致します。
bcryptプレイグラウンドを使うべき場面
既知のソルトでbcryptハッシュを再現したり、所要時間を測ってコスト係数を決めたり、デバッグ中にデータベースのハッシュを照合したりするときに使います。新しい設計にはArgon2idを推奨します。
bcryptプレイグラウンドの仕組み
bcrypt(Provos & Mazières、1999年)は、負荷の高いEksBlowfishの鍵設定を2^cost回実行し、その後「OrpheanBeholderScryDoubt」を64回暗号化します。16バイトのソルトと23バイトの結果は、bcrypt独自のBase64アルファベット(./A–Za–z0–9)で書き出されます。計算にはhash-wasm(WebAssembly)を使います。bcryptは72バイト目以降をすべて無視するため、72 UTF-8バイトを超えるパスワードは拒否されます。
一般的な使用例
- 各コスト係数にかかる時間の測定
- 固定ソルトでのテストベクターの再現
- PHPの$2y$ハッシュが照合できるかの確認
- bcryptハッシュの構造の説明
よくある質問
どのコスト係数を使うべきですか?
OWASPでは10以上です。サーバーでのハッシュ化が約250ミリ秒以内に収まる最大の値を選んでください。1増えるごとに時間は2倍になります。
$2a$、$2b$、$2y$の違いは何ですか?
古い実装のバグ修正を示す識別子です。72バイトまでのパスワードでは同じハッシュになり、3つともここで照合できます。
長いパスワードが拒否されるのはなぜですか?
bcryptは最初の72バイトしか使いません。黙って切り詰めると異なるパスワードが衝突してしまうため、ツールは代わりに拒否します。