このツールについて
bcrypt はあえて遅く設計されたパスワードハッシュ関数で、それこそが望ましい性質です——総当たり推測を高コストにします。コスト係数により、ハードウェアが速くなるにつれてその遅さを引き上げられます。「ハッシュ生成」タブでパスワードを bcrypt ハッシュに変換してテスト用データベースに投入し、「検証」タブで既存のハッシュにパスワードが一致するか確認します。
bcryptjs ライブラリを使ってブラウザ内で動作するため、パスワードがサーバーに送られることはありません。bcrypt はパスワードの保存用であり、元に戻せる暗号化ではない点に注意してください。
よくある質問
パスワードに SHA-256 ではなく bcrypt を使うのはなぜですか?
SHA-256 は高速です。ファイルの整合性チェックには最適ですが、パスワードには不向きです。攻撃者は 1 秒間に数十億回の試行が可能だからです。bcrypt は意図的に低速で、ハッシュごとにランダムなソルトを含むため、総当たり攻撃や事前計算されたレインボーテーブル攻撃を非現実的にします。
「コスト」の数値は何を意味しますか?
コストは 2 のべき乗の作業係数です。+1 ごとにハッシュ計算の時間がおおよそ倍になります。コスト 10(デフォルト)は数十ミリ秒程度、コスト 14〜15 は数秒かかることもあります。ボトルネックにならない範囲で、サーバーがログインごとに許容できる最も高いコストを選んでください。
私のパスワードはサーバーに送信されますか?
いいえ。ハッシュ化と検証はすべてブラウザ内で実行され、利用可能な場合は Web Worker 内で行われるため、コスト 15 のハッシュ計算でもタブがフリーズすることはありません。ここで入力した内容が送信されたり、どこかに保存されたりすることはありません。
同じパスワードなのに bcrypt ハッシュが毎回違うのはなぜですか?
bcrypt はハッシュ化のたびに新しいランダムなソルトを生成し、そのソルトは出力文字列自体に埋め込まれます($2b$10$<ソルト><ハッシュ>)。これは想定どおりの動作で、まさにこれが同一パスワードから同一ハッシュが生成されるのを防いでいます。
検証が「一致しません」ではなく「無効なハッシュ形式」で失敗したのはなぜですか?
有効な bcrypt ハッシュは常に $2a/b/x/y$<コスト>$<53文字> というパターンに一致します。貼り付けた内容が一致しない場合(切り詰められている、アルゴリズムが違う、余分な空白があるなど)、それはパスワードの誤りとは別の問題なので、別途報告されます。