完全無料

Bcrypt パスワードを ハッシュ化

ブラウザで安全なBcryptパスワードハッシュを即座に生成。コストファクターを選択し、クライアントサイドでハッシュ化 — 完全プライベートかつ無料。

このツールについて

bcrypt は、1999 年に Niels Provos と David Mazières によって設計された、Blowfish 暗号から派生したパスワード ハッシュ関数です。 SHA-256 のような汎用ハッシュ関数とは異なり、bcrypt は意図的に遅く、コスト パラメーターを介して構成的に遅くなります。これはまさにパスワード ハッシュに必要な特性です。より高速なハッシュ関数により、攻撃者は 1 秒あたりにより多くの候補を総当たり攻撃できるようになります。遅いものはそれらを制限します。

また、bcrypt はパスワードごとのソルトを自動的に組み込み、事前計算されたレインボー テーブルに基づく攻撃のクラス全体を排除します。ソルトとコストのパラメータは bcrypt 出力の一部として保存されるため、検証には保存されたハッシュと候補パスワードのみが必要となり、個別のソルト管理は必要ありません。この遅さ、ソルト、自己完結型形式の組み合わせにより、bcrypt が 20 年間デフォルトのパスワード ハッシュとなり、今日でも有力な選択肢となっています。

現代的な代替手段が存在します。 Argon2 は 2015 年のパスワード ハッシュ コンペティションで優勝しており、時間耐久性に加えてメモリ耐久性も備えています。 scrypt も同様のプロパティを提供します。新しいデザインの場合は、Argon2id を選択することをお勧めします。 bcrypt は依然として許容されており、特に Argon2 が利用できない環境では広く導入されています。

bcrypt でパスワードをハッシュする理由

パスワードを平文で保存することは違法行為です。 SHA-256 のような高速ハッシュで保存することはほとんど改善されません。最新の GPU は 1 秒あたり数十億の SHA-256 ハッシュを計算するため、一般的なパスワードに対するブルート フォース攻撃が数時間で実行可能になります。 bcrypt の意図的な遅さは経済性を変化させます。コスト係数 12 では、攻撃者は候補パスワードごとに約 250 ミリ秒を費やし、重要なパスワードに対する総当たり攻撃は非現実的になります。

bcrypt のパスワードごとの自動ソルトも、レインボー テーブル攻撃を無効にします。同じパスワードを持つ 2 人のユーザーは、ソルトが異なるため、異なる bcrypt ハッシュを生成します。パスワード データベースを侵害しても、攻撃者は一般的なパスワードや事前計算されたテーブルのヒットをすぐに特定できません。

使い方

パスワードを入力し、コストを選択し、ハッシュを取得します。

  1. パスワードを入力してください: ハッシュするパスワードを入力します。このツールは完全にブラウザ内で実行されます。パスワードはどこにも送信されません。
  2. コスト要素を選択してください: デフォルトは 10 で、最新のハードウェアでは約 100 ミリ秒のハッシュ時間が発生します。新しいアプリケーションには 12 が推奨されます (250 ミリ秒)。値を大きくすると、検証が遅くなりますが、セキュリティが強化されます。
  3. 生成する: ハッシュは、ランダムな 16 バイトのソルトを生成し、bcrypt キーの導出を実行し、標準の $2b$ 形式でハッシュを生成します。
  4. ハッシュを使用する: 完全な出力 ($2b$cost$saltAndHash) をパスワード データベースに保存します。検証では、同じライブラリを使用して、保存されているハッシュと候補を比較します。

一般的な使用例

技術的な詳細

bcrypt は、修正された Blowfish 暗号の鍵セットアップ フェーズを使用し、2^ コスト回繰り返します。コスト係数は対数的です。コスト 12 はコスト 11 の 2 倍、コスト 10 の 4 倍遅くなります。この対数スケーリングにより、管理者はシステムを再設計することなく、ハードウェアの改善に応じてコストを徐々に増加させることができます。

出力形式は $version$cost$saltAndHash です。saltAndHash はカスタム アルファベットで Base64 エンコードされています。通常、バージョンは $2b$ (ラップアラウンド バグが修正された最新のバージョン) または $2y$ (PHP 固有、同等) です。ソルトは 16 バイトです。ハッシュは 24 バイトです。これらは一緒に、custom-base64 の 53 文字にエンコードされます。

最大入力長は 72 バイトです (Blowfish キーの長さ制限)。長いパスワードは黙って切り捨てられますが、これは bcrypt の長年の癖です。ベスト プラクティスは、パスワードの長さを 72 バイトに制限するか、bcrypt の前に SHA-256 で事前ハッシュして長さを正規化することです。

ベストプラクティス

よくある質問

生成された出力をカスタマイズできますか?
はい。このツールには、特定のニーズに合わせて出力を調整するためのさまざまなカスタマイズ オプションが用意されています。生成する前に設定を調整するか、別のオプションを使用して再生成します。
生成されたコンテンツは無料で使用できますか?
はい。このツールで生成したものはすべて、制限や帰属要件なしで、個人、教育、商業目的で使用できます。
これにはアカウントが必要ですか?
いいえ。このツールはサインアップ、電子メール、登録を必要とせずにすぐに使用できます。ページを開いて生成を開始するだけです。
私の入力データは非公開に保たれますか?
はい。すべての処理はブラウザ内で行われます。入力データと生成された出力が外部サーバーに送信されることはありません。
自分で塩を加えたほうがいいですか?
いいえ、bcrypt はランダムなソルトを自動的に生成して保存します。独自の塩を追加する必要はありませんが、微妙なバグを引き起こす可能性があります。ライブラリのデフォルトのソルト生成を使用します。
パスワードはサーバーに送信されますか?
いいえ、bcrypt ハッシュはブラウザ内で行われます。パスワードがデバイスから離れることはありません。
$2a$、$2b$、$2y$ のバリエーションがあるのはなぜですか?
$2a$ がオリジナルです。 $2b$ は、2014 年に発見されたラップアラウンド バグを修正します。$2y$ は PHP 固有であり、機能的には $2b$ と同等です。新しいシステムでは 20 億ドルのハッシュが生成されるはずです。
高コストのハッシュを低コストにダウングレードできますか?
いいえ。ハッシュには出力の一部としてコストが含まれており、検証には同じコストが必要です。コストを変更するには、次回のログイン成功時に再ハッシュします。