機能
bcrypt は、わざと遅くなるよう設計されたパスワードハッシュ関数です。MD5 や SHA-256 は 1 秒間に数十億回計算できますが、bcrypt には調整可能なコストがあり、データベースを盗んだ攻撃者が 1 回推測するたびに大きな計算量を強います。Argon2 や scrypt と並んで、今でもパスワード保存に最もよく使われる方式の一つです。
このツールでできることは 2 つです:
- ハッシュ化:選んだコストとバージョンのプレフィックスで、パスワードを bcrypt ハッシュにします。
- 照合:データベースやフレームワークのシードファイルにあるような既存の bcrypt ハッシュと、パスワードが一致するか確認します。
使い方
- パスワードを入力するか、サンプルをクリックします。
- ハッシュ化モードではコストとバージョンを選びます。ハッシュはすぐに表示され、新しいソルトで別のハッシュを作れます。
- 照合モードでは照合する bcrypt ハッシュを貼り付けます。パスワードが一致するかどうかが表示されます。
bcrypt ハッシュの読み方
$2b$10$./3kakECWB0QfIgYzIqciuv449HNnwGbgExtJQQwQ1MofonthOdoK のようなハッシュは 4 つの部分からなります:バージョン 2b、コスト 10(2¹⁰ ラウンドの鍵セットアップ)、22 文字のソルト、31 文字のチェックサムです。後でパスワードを照合するのに必要な情報はすべてこの 1 つの文字列に含まれるので、保存するのはハッシュだけで済みます。
知っておきたい制限
bcrypt はパスワードの先頭 72 バイトしか読みません。それより長いパスワードや、非 ASCII 文字(UTF-8 では 1 文字 2〜4 バイト)を多く含むパスワードは黙って切り詰められます。その場合はツールが警告します。非常に長いパスフレーズを受け付けたい場合は、事前にハッシュするか Argon2id を検討してください。
よくある質問
› 同じパスワードでも毎回違うハッシュになるのはなぜですか?
ハッシュごとに新しい 16 バイトのランダムなソルトを使い、そのソルトはハッシュ自体に含まれます。同じパスワードが同じハッシュにならないための意図的な仕組みです。パスワードを確かめるときはハッシュ文字列を比べず、「照合」を使ってください。
› コストはいくつにすべきですか?
ログインごとにサーバーが許容できる最大のコストを選びます。現在は 10〜12 が一般的です。1 増えるごとに処理量は 2 倍になります。本番のハードウェアで計測し、1 回あたり 100〜300 ms 程度を目安にするのが一般的です。
› $2a$、$2b$、$2y$ の違いは何ですか?
アルゴリズムは同じです。$2b$ は OpenBSD の現行プレフィックス、$2y$ は PHP の password_hash が出力するもの、$2a$ は古いものです。ほとんどのライブラリは 3 つとも受け付けるので、システムが求めるものを選んでください。
› パスワードはどこかに送信されますか?
いいえ。ハッシュ化も照合もブラウザ内で行われます。パスワードと照合するハッシュはこのページのメモリ上にだけあり、保存も共有リンクへの追加もされません。