§

Bcrypt 生成器

§

Bcrypt ハッシュを生成

10 (1,024 rounds)

Bcryptは1999年にProvos氏とMazières氏によって発表されて以来、米国のWeb開発におけるパスワードハッシュ化のデファクトスタンダードとなっています。NIST SP 800-63Bはパスワード保存にメモリハードハッシュを推奨し、OWASPはbcryptをArgon2idと並ぶ推奨オプションとして挙げています。Railsはhas_secure_passwordでbcryptを同梱し、Djangoはプラガブルバックエンドとしてサポート、Node.js開発者はbcryptjsを利用しています。コスト係数は単一ハッシュにかかる時間を制御します——コストが2倍になると作業量も2倍になります。多くのアプリはコスト10(1,024ラウンド)をベースラインとし、金融系や管理系システムは12(4,096ラウンド)を使用することが多いです。このツールはブラウザ内でJavaScriptを使用して完全に実行されるため、パスワードがデバイスから送信されることはありません。

bcrypt とは?

Bcryptは、Niels Provos氏とDavid Mazières氏によって設計されたパスワードハッシュ化関数で、Blowfish暗号に基づいています。MD5やSHA-256のような高速ダイジェストとは異なり、bcryptは意図的に低速で計算コストが高くなるように設計されています——これにより、盗まれたパスワードハッシュへのブルートフォース攻撃が非現実的になります。Bcryptはパスワードごとに自動的にランダムなソルトを生成するため、同じパスワードでも異なるハッシュが生成されます。

bcrypt の仕組み

Bcryptアルゴリズムは完全にブラウザ内で実行されます。以下が段階的なプロセスです:

  1. パスワードがUTF-8バイトとしてエンコードされ、bcryptの鍵スケジュールに入力されます。鍵スケジュールはパスワードとソルトを使用してBlowfish暗号の4,184バイトのP配列とSボックスを初期化します。
  2. ランダムな128ビットのソルトが生成されます。ソルトは鍵スケジュールに混入されるため、一意のソルトごとに同じパスワードでも完全に異なるハッシュが生成されます。
  3. 鍵スケジュールは2^costラウンド(例:コスト10の場合は2^10 = 1,024回の反復)実行されます。各反復でソルトとP配列エントリが再暗号化され、コストが増加するにつれて計算が比例して遅くなります。
  4. 最終出力は60文字の文字列で、形式は $2b$<cost>$<salt><hash> です。costはゼロ埋め(例:10)、saltは22文字のBase64、hashは31文字のBase64です。
  5. 検証時は、候補パスワードと保存されたハッシュから抽出したソルトを使用して、同じアルゴリズムが再度実行されます。派生したハッシュが保存されたハッシュと一致すれば、パスワードは正しいです。

どのコスト係数を使うべきですか?

コスト係数は反復回数の対数です——コスト10は2^10 = 1,024ラウンド、コスト12は4,096ラウンドを意味します。セキュリティ要件とハードウェアに基づいて選択してください:

  • コスト4-6(16-64ラウンド)——開発とテストのみ。本番環境では速すぎて保護が不十分です。
  • コスト8(256ラウンド)——重要でないアプリケーションの最低限。現代のハードウェアで約6ms。
  • コスト10(1,024ラウンド)——現在推奨されるベースライン。約25ms。ほとんどのWebアプリケーションに適しています。
  • コスト12(4,096ラウンド)——管理ポータル、金融システム、高セキュリティアプリに推奨。約100ms。
  • コスト14(16,384ラウンド)——高セキュリティ。約400ms。マスターパスワード、暗号化キー、またはログイン遅延が許容される場合に使用。

このbcrypt生成器を使う理由

  • プライバシー保護——すべてのパスワードはブラウザ内でローカルにハッシュ化され、データがデバイスから送信されることはありません。
  • デュアルモード——ページを切り替えることなく、新しいハッシュの生成と既存ハッシュの検証を並行して行えます。
  • 調整可能なコスト係数——作業係数を4(高速)から15(非常に低速)まで調整し、アプリケーションのセキュリティ要件に合わせられます。
  • 標準準拠——生成されるハッシュは標準の $2b$ 形式で、主要な言語とフレームワークすべてと互換性があります。

bcrypt の一般的な用途

Bcryptは業界全体でパスワードの保存と検証に広く使用されています:

  • Webアプリケーションのユーザー認証——ユーザーパスワードのハッシュをデータベースに保存し、平文パスワードが保存されることがないようにします。
  • APIキーのハッシュ化——APIシークレットを保存前にハッシュ化することで、データベース侵害が有効な認証情報を漏洩することを防ぎます。
  • 移行監査——古いシステムからのレガシーパスワードハッシュが、認証層のアップグレード後もユーザーを認証できることを確認します。

bcrypt ハッシュの例

コスト係数10でパスワード hunter2 をハッシュ化すると、$2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy のような文字列が生成されます。形式の内訳は:$2b$(アルゴリズムバージョン)、10(コスト係数)、$、続いて22文字のソルトと31文字のハッシュ(すべてBase64エンコード)です。同じパスワードでもランダムなソルトのため、実行のたびに異なるハッシュが生成されます。

このbcrypt生成器は、純粋なJavaScript実装を使用してブラウザ内で完全に実行されます。保存前にパスワードをハッシュ化し、既存のハッシュを検証し、コスト係数を調整してセキュリティ要件に合わせる——すべてサーバーに1バイトも送信することなく行えます。