bcrypt ハッシュ生成 — bcrypt でパスワードをハッシュ化・検証
選んだコストで bcrypt によるパスワードのハッシュを作成し、パスワードと bcrypt ハッシュの照合、ハッシュの各部分の意味の確認ができます。
bcrypt ハッシュを生成
パスワードとハッシュを照合
| バージョン | $2b$ | 2b — 255 バイトを超えるパスワードに関する 2014 年の OpenBSD の修正版。現在の bcrypt(C/Python/Node)のデフォルト。 |
|---|---|---|
| コスト | 10 | 2^10 = 1,024 回の鍵拡張ラウンド |
| ソルト | O.0JDwgDTALNNPsTWXP1YO | 22 文字 = 128 ビットの乱数(bcrypt 独自の Base64) |
| ハッシュ | 2o9FuEFCZZMBsOKg910t7.RrUqVQsmW | 31 文字 = 192 ビット出力のうち 184 ビット |
パスワードは bcryptjs を使ってブラウザ内でハッシュ化・照合されます。送信、保存、記録されることは一切ありません。それでも、本番環境で使用中のパスワードをどの Web ページにも貼り付けないようにしてください。 すべての無料ツールを見る.
不具合や改善できそうな点を見つけましたか?いただいたメッセージはすべて読み、すぐに対応します。
この bcrypt ハッシュ生成ツールは、4〜15 のコスト係数で bcrypt によるパスワードのハッシュを作成し、既存の bcrypt ハッシュとパスワードを照合し、ハッシュをバージョン、コスト、ソルト、ダイジェストに分解します。テストユーザーの初期データ作成、移行作業中にデータベースのハッシュが既知のパスワードと一致するかの確認、$2b$12$ が実際に何を意味するのかの理解に役立ちます。ハッシュ化は、Node.js、PHP、Python、Ruby、Go で使われる bcrypt ライブラリと互換性のある JavaScript 実装 bcryptjs により、ブラウザ内で実行されます。複数のテストアカウントを作るときは、一括モードで最大 50 件のパスワードのリストを一度にハッシュ化できます。
bcrypt は意図的に遅く作られており、コストを 1 上げるごとに時間が 2 倍になります。このツールは処理中に進捗を表示し、他のコスト係数ならこの端末でどれくらいかかるかを見積もるので、サーバーに採用する値を選ぶ前にトレードオフを確認できます。あらゆるオンラインツールに当てはまる注意点を 1 つ。管理下にない Web ページに、実際に使っている本番のパスワードを貼り付けないでください。このツールはテスト用の値とハッシュの理解のために使ってください。
使い方
- パスワードを入力し、コスト係数を選びます。ログインシステムでは 10〜12 が一般的です。
- 「ハッシュを生成」を押します。処理中は進捗バーが表示され、コスト 14 や 15 では数秒かかることがあります。
- 60 文字のハッシュをコピーします。ソルトがランダムなので、もう一度生成すると別のハッシュになりますが、どちらも照合に成功します。
- ハッシュを確認するには、照合セクションにハッシュと確認したいパスワードを貼り付けて「照合」を押します。
- ハッシュの構造の表を見ると、そのハッシュが使っているバージョンとコストがわかります。
よくある質問
複数のパスワードをまとめて bcrypt でハッシュ化できますか?
はい。「パスワードのリスト(一括)」に切り替え、1 行に 1 つずつ最大 50 件のパスワードを貼り付けて(スペースも文字として扱われ、空行はスキップされます)「ハッシュ化」を押します。選んだコストで、それぞれ独自のランダムなソルトを使って 1 つずつ順にハッシュ化され、処理中もページは固まりません。ハッシュはリストと同じ順番でコピーでき、平文のパスワードを含めるかどうかを選んで CSV でダウンロードすることもできます。上限があるのは bcrypt が意図的に遅いためで、コスト 12 で 50 件のハッシュ化でもそれなりに時間がかかります。
bcrypt のコスト係数はいくつにすべきですか?
本番サーバーで 1 回のハッシュ化が許容できる遅延(通常は 100 ミリ秒〜1 秒)に収まる、最も高いコストを選んでください。現在のサーバーハードウェアでは、たいてい 10〜12 です。OWASP の Password Storage Cheat Sheet では、ワークファクターの最小値を 10 としています。ノートパソコンではなく実際のサーバーで計測し、コストが高いとログインのエンドポイントがリクエストで過負荷になりやすくなる点も忘れないでください。
同じパスワードなのに bcrypt ハッシュが毎回違うのはなぜですか?
各ハッシュには新しいランダムな 128 ビットのソルトが含まれ、ハッシュ自体に格納されています(コストの後の 22 文字)。これは意図的なもので、同じパスワードを使う 2 人のユーザーでもハッシュは異なり、事前計算したテーブルは役に立ちません。パスワードを確認するとき、bcrypt は保存されたハッシュからソルトとコストを読み取り、それを使って入力されたパスワードをハッシュ化し直して比較します。
bcrypt ハッシュは復号できますか?
いいえ。bcrypt は一方向ハッシュであり、暗号化ではありません。bcrypt ハッシュからパスワードを取り出す唯一の方法は、候補を推測して 1 つずつハッシュ化することで、コスト係数によって推測のたびに大きな手間がかかります。それこそが目的です。弱いパスワードは推測される可能性がありますが、1 回の試行にナノ秒ではなく実際の CPU 時間がかかります。
$2a$、$2b$、$2y$ の違いは何ですか?
アルゴリズムの実装の改訂を示しています。$2a$ は長く使われてきたバージョンです。$2b$ は 255 バイトを超えるパスワードの扱いを修正するために 2014 年に OpenBSD が導入しました。$2y$ は、2011 年に符号拡張のバグを修正した後に PHP が生成したハッシュを示すマーカーです。現在のライブラリで作成したハッシュであれば照合の方法は同じで、ほとんどのライブラリは 3 つすべてを受け付けます。
bcrypt にパスワードの最大長はありますか?
はい。bcrypt はパスワードの最初の 72 バイトだけを使い、残りは無視します。数えるのは UTF-8 のバイト数なので、アクセント付きの文字や絵文字を含むパスワードは、少ない文字数で上限に達します。このツールは 72 バイトを超えると警告します。より長いパスフレーズを受け付ける必要があるなら、長さを制限するか、このような制限のない Argon2id を使ってください。
bcrypt と Argon2、どちらを使うべきですか?
新しいシステムには、OWASP はまず Argon2id を推奨しています。メモリハードなので、GPU による攻撃のコストが高くなるためです。bcrypt もどこでもサポートされている堅実な選択肢であり、すでにコスト 10 以上で bcrypt を使っているシステムを急いで変える必要はありません。何より重要なのは、ただの SHA-256 や MD5 ではなく、こうした低速でソルト付きのアルゴリズムのどれかを使っていることです。
bcrypt ハッシュの構造
$2b$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW のような bcrypt ハッシュは常に 60 文字で、照合に必要な情報をすべて含んでいます。
• $2b$:アルゴリズムのバージョン。
• 12$:コスト係数。鍵のセットアップを 2^12 = 4,096 回実行します。
• R9h/cIPz0gi.URNNX3kh2O:128 ビットのランダムなソルトをエンコードした 22 文字。
• PST9/PgBkqquzi.Ss7KIUgO2t0jWMUW:結果の 184 ビットをエンコードした 31 文字。
エンコードには標準の Base64 とは異なる bcrypt 独自の Base64 アルファベット(./A–Z a–z 0–9)を使っているため、通常の Base64 デコーダーでは各部分をデコードできません。
高速なハッシュがパスワードに向かない理由
SHA-256 のような汎用ハッシュは高速になるよう設計されており、最新の GPU は 1 秒間に何十億回も計算します。SHA-256 のパスワードハッシュのデータベースが漏えいすると、よくあるパスワードと短いパスワードの大半は数時間で破られます。ソルトを加えれば事前計算テーブルは防げますが、推測の速度は落ちません。
bcrypt は、ハッシュ 1 回ごとに意図的に大きな手間をかけ、その手間を調整可能にすることでこれを解決します。コスト 12 では、一般的なサーバーの 1 コアで 1 回のハッシュ化に 4 分の 1 秒程度かかり、同じコアで SHA-256 を 1 回計算するより約 100 万倍長くかかります。さらに bcrypt のメモリアクセスのパターンは、GPU での実行効率も悪くします。ハードウェアが速くなればコストを上げればよく、既存のハッシュは各ユーザーが次にログインしたときにアップグレードできます。
ハッシュ化は防御の 1 層にすぎません。ログイン試行の回数を制限し、NIST SP 800-63B の推奨どおり新しいパスワードを漏えい済みパスワードのリストと照合し、二要素認証を提供して、パスワードを推測されただけでは突破されないようにしましょう。
関連する無料ツール
- パスワード生成 — 強力なランダムパスワード、覚えやすいパスフレーズ、PIN を生成します。すべてブラウザ内で動作し、何も送信・保存されません。
- ハッシュ生成 — テキストやファイルを MD5、SHA-1、SHA-256、SHA-384、SHA-512、CRC32 でハッシュ化し、チェックサムを検証したり HMAC を計算したりできます。ファイルは端末の外に出ません。
- TOTP ジェネレーター — Base32 のシークレットからカウントダウン付きで 2FA コードをリアルタイムに生成し、認証アプリ用の otpauth:// QR コードの作成や、既存の URI の読み取りができます。
- JWT デコーダー — JWT のヘッダーとペイロードをデコードし、有効期限をわかりやすく表示し、HS・RS・PS・ES の署名を検証したり、新しいトークンに署名したりできます。何もブラウザの外に出ません。