高い = 遅い + 安全。コスト 12 は一般的なノート PC で約 4ms かかります。10-12 が本番環境で一般的な範囲です。
100% ブラウザ内で動作 - パスワードとハッシュがデバイスの外に出ることはありません。
I am storing user passwords for a web app with at most 10 000 users. Compare bcrypt (cost 12), scrypt, and Argon2id for this workload: resistance to GPU cracking, memory requirements, DoS risk on the login endpoint, and the parameters you would actually deploy. Give a concrete recommendation and the exact parameter values.
機能の説明
Bcrypt
HashHashA one-way function that maps data of any size to a fixed-length digest. Same input, same digest; any change, different digest; not reversible.
& Verify は、パスワード保存のために作られたアルゴリズムである bcrypt でパスワードをハッシュし、既存の bcrypt ハッシュとの照合を行います。ハッシュ化では毎回新しい 16 バイトのランダムソルトを生成し、EksBlowfish の鍵スケジュールを2^cost 回実行します。そのため、1 推測あたりのコストを正確に制御できます。検証は、そのハッシュ自身のソルトとコストでダイジェストを再計算し、一致するかどうかを告げます。$2a$、$2b$、$2y$ のハッシュを受け付けるため、Node、Go、Python、PHP、Java、PostgreSQL の pgcrypto、そしてすべての OpenBSD 系実装が生成したハッシュを扱えます。
すべてはブラウザー内で、外部暗号ライブラリなしのスクラッチ実装 Blowfish で動作します。入力したパスワードも貼り付けたハッシュも、デバイスの外に出ることはありません。
使い方
- 上部の
HashHashA one-way function that maps data of any size to a fixed-length digest. Same input, same digest; any change, different digest; not reversible.
/ Verify トグルでモードを選びます。 HashHashA one-way function that maps data of any size to a fixed-length digest. Same input, same digest; any change, different digest; not reversible.
: パスワードを入力し(目のアイコンで表示できます)、cost factor スライダーを動かします(4〜16、デフォルト 12)。高いほど遅く、より安全です。HashHashA one-way function that maps data of any size to a fixed-length digest. Same input, same digest; any change, different digest; not reversible.
password を押すと、$2b$ハッシュがコピーボタンと所要時間のバッジ付きで表示されます。- Verify: bcrypt ハッシュを貼り付け、照合するパスワードを入力します。ツールはハッシュをライブにデコードし、バージョン、コスト、ソルトを表示します。Verify password を押すと、緑の Match ✓ または赤の No match ✗ バッジが返ります。
- どちらのモードでも Sample を使えばサンプル入力を読み込めます(verify のサンプルは実際に一致するペアです)。
例
コスト 12 でパスワードをハッシュ
Password: HashHashA one-way function that maps data of any size to a fixed-length digest. Same input, same digest; any change, different digest; not reversible.correct horse battery staple →
$2b$12$9IZSN8TXXnSIx4aI0Cd2DetqQ/3FT9d6KJ9fl96SnULIK5x5q/moq
実行するたびに異なるハッシュが生成されます。ソルトは毎回新しくランダム生成されるためです。そのすべてが同じパスワードでの検証を通ります。
ハッシュを検証
$2a$04$RPx7yiCLNb09VKAUBVNsnOVNzB1Zp/hE1qbDvGUs1aehNX5hE15su にパスワード password → Match ✓。バッジはバージョン $2a$、コスト 4、ソルト RPx7yiCLNb09VKAUBVNsnO とデコードします。
ハッシュ形式の読み方
$2b$12$ + 22 文字のソルト + 31 文字のダイジェスト = 合計 60 文字。12 がコストで、2¹² = 4,096 回の EksBlowfish ラウンドが鍵スケジュール構築のために実行されました。
補足事項
- パスワードに平文 SHA-256 でなく bcrypt を使う理由: SHA-256 は高速です。それこそ望まない性質です。モダンな GPU は毎秒数十億回の SHA-256 を計算できますが、bcrypt ハッシュは毎秒数万回がやっとです。bcrypt のコストファクターは 2^cost 回の逐次的な鍵スケジュールラウンドを強制し、そのソルトがレインボーテーブルとアカウント横断の再利用を無効化するためです。同じ理由で、bcrypt は MD5 と SHA-1 も完全に上回ります。両者は衝突について破られており、計算コストも安すぎます。
- コストはダイアルであり、定数ではありません。 ユーザーとハードウェアが許容する最も遅いコストを選んでください。ログインサーバーで 1 ハッシュあたりおよそ 250ms〜1s が目安です。現在ならコスト 10〜12 に相当し、ハードウェアの高速化に合わせて数年ごとに引き上げます。検証はハッシュ化と同じコストを支払うため、極端に高いコストは自分のログインも遅くし、ログインエンドポイントのサービス拒否(DoS)のレバーになり得ます。
- 72 バイトの上限: bcrypt はパスワードの先頭 72 バイトまでしか読まず、このツールもその規則に正確に従います。長いパスフレーズをサポートしなければならない場合、モダンな助言は SHA-256 で事前ハッシュすることです。ただし慎重に(生の長さを先に
HMACHMACA construction that combines a hash function with a secret key to prove a message is intact and came from someone holding the key.
しないと、SHA-256 のヌルバイト曖昧性を引き継ぎます)。 - 自分で比較を発明しないでください。 このツールがそうするように、必ず定数時間比較で検証します。ハッシュに対する文字列等値比較は、タイミング情報を漏らします。
- 選べる場合の代替: Argon2id(メモリーハード、Password
HashingHashingA one-way function that maps data of any size to a fixed-length digest. Same input, same digest; any change, different digest; not reversible.
Competition の勝者)と scrypt は GPU / ASIC 攻撃者に対してより強力です。bcrypt は実戦で鍛えられ、どこでもサポートされるベースラインであり続けます。 - 関連ツール: Password Strength Analyser、Password Generator、HMAC Generator。