bcrypt ハッシュ・検証
暗号bcrypt(適応型 cost)でパスワードをハッシュ、または平文が既存の $2a$ / $2b$ ハッシュに一致するか検証。cost 調整・所要時間校正付き、すべてブラウザ内で完結。
リモート URL の取得は行いません。JSON を直接貼り付けてください。
⚠ cost が高いほど遅く安全
このページの内容
bcrypt とは?#
bcrypt は、意図的に遅くなるよう専用に作られたパスワードハッシュ関数です。SHA-256 のような高速なハッシュが毎秒何メガバイトも処理するよう設計されているのに対し、bcrypt は 1 回の推測ごとに実際の時間がかかるよう設計されています——だからこそ、パスワードハッシュのデータベースを盗んだ攻撃者は、安価に何十億もの推測を試みられません。これが「ユーザーのパスワードをどう保存すべきか」への標準的な答えです: 平文の SHA-256 ではなく、bcrypt でハッシュしてください。
bcrypt をその仕事に適したものにする点が 2 つあります。第一に、作業を指数関数的にスケールする調整可能な cost 因子があります——cost を 1 上げるとハッシュあたりの時間がほぼ倍になるため、ノブを回してハードウェアの進化に追いかけられます。第二に、すべてのハッシュにランダムなソルトを焼き込むため、同じパスワードでも完全に異なる値にハッシュされ、あるデータベース向けに作られた事前計算テーブルは別のデータベースには無効です。ソルトも cost も出力文字列の中に運ばれるため、検証に必要なのはパスワードとハッシュだけです。
このページは両方の操作を行います: パスワードから bcrypt 文字列をハッシュし、既存のハッシュに対してパスワードを検証します。ページの応答性を保つため、cost 12 以上のハッシュは Web Worker にオフロードされ、重い計算がインターフェースをフリーズさせることはありません。
使い方#
- モードを選びます: ハッシュ(パスワードから bcrypt 文字列を生成)または検証(既存のハッシュに対してパスワードをチェック)。
- パスワードを入力します。入力中に表示するには目のアイコンをクリックします。既定でマスクされています。絵文字や非ラテン文字を含む UTF-8 を受け付けます。
- ハッシュモードでは、cost スライダー(4〜14、既定 12)を設定します。高いほど遅く、より強力になります。cost が顕著な時間を要する水準に達すると警告が出ます。
- 検証モードでは、現れたフィールドに既存ハッシュを貼り付けます。cost はハッシュ自身から自動的に読まれます——あなたが設定する必要はありません。
- 主ボタンをクリックします。ハッシュモードでは出力が bcrypt 文字列、検証モードでは明確な一致 / 不一致の判定に、自分のハードウェアでの cost を判断するのに役立つ経過時間表示が加わります。
主な特徴#
- 4〜14 の調整可能な cost。 既定の 12 は現代の推奨値です。各段階でほぼ作業量が倍になるため、長年にわたり高速化するハードウェアに追従できます。
- 高 cost でワーカーオフロード。 cost 12 以上は Web Worker で走り、ページは応答性を保ちます。ワーカーがブロックされていれば、同じ結果でメインスレッドに透過的にフォールバックします。
- ソルト内蔵。 すべてのハッシュは新鮮なランダムソルトを出力にエンコードして受け取るため、同じパスワードが同じ文字列に 2 度ハッシュされることはありません。
- 自動 cost で検証。 cost 因子は貼り付けたハッシュから解析されるため、パスワードがハッシュされた方法と検査される方法の間に不一致はありません。
- ゼロアップロード。 ハッシュと検証はローカルで行われます。パスワードがページから外に出ることはありません。
実例#
下は、このページ自身で生成した hunter2 の cost 12 の実際のハッシュです。ソルトは新鮮にランダムなため、hunter2 を再びハッシュすれば異なる文字列になります——しかしこれは本物で検証可能です: 検証モードに貼り付け、hunter2 と入力すれば、判定は「✓ 一致」になります。
$2b$12$DG/IWIDBmJlywamLdGno2.guEH5lGnQ1OTULdIGN8BH1vqiLIGzjy
フィールドごとに読み解きます:
$2b$— bcrypt のバリアント(bcryptjs は$2b$を出力し、検証は$2a$、$2x$、$2y$も受け付けます)。12— cost 因子。2^12回の鍵拡張ラウンドを意味します。- 続く 22 文字 — ランダムソルト。
- 最後の 31 文字 — 派生ハッシュ。
検証に切り替え、上のハッシュを既存ハッシュフィールドに落とし、hunter2 と入力すると判定は一致です。代わりに Hunter2 と入力すれば不一致——bcrypt は大文字小文字を区別し、1 文字違えるだけで結果が反転します。併記の経過時間は、あなたのマシンで cost 12 の検証 1 回にかかる実際のコストです。
よくある質問#
どの cost を選ぶべきですか?#
今日の新しいシステムには 12 が堅実な既定値です——典型的なハードウェアで概ね数百ミリ秒かかり、実際のログインには無痛ですが、一括推測には痛烈です。ログインが少し遅れることを許容できる価値の高いターゲットには、13 や 14 に上げてください。鍵となる規則は、ハードウェアの進化に応じて長年にわたり上方に再調整することです。bcrypt の cost は指数関数的にスケールするため、1 上げるごとにほぼ時間が倍になります。
同じパスワードを 2 回ハッシュすると結果が違うのはなぜですか?#
bcrypt が毎回新鮮なランダムソルトを生成し、出力に埋め込むためです。2 つのハッシュは似ても似つかないものに見えますが、どちらも同じパスワードに対して検証できます。それがソルトの要点です——攻撃者が繰り返されるパスワードを認識したり、事前計算テーブルを再利用したりするのを止めます。
他で生成されたハッシュを検証できますか?#
はい。整形式の bcrypt 文字列($2a$、$2b$、$2x$、$2y$)であれば可能です。検証モードの既存ハッシュフィールドに貼り付けてください。ツールはハッシュ自身から cost とソルトを読み取ります。Node の bcrypt、PHP の password_hash、Python の passlib から書き出したハッシュはすべてここで機能します。
パスワードには SHA-256 より bcrypt の方が良いですか?#
ログインパスワードの保存には、明確にはいです。SHA-256 は高速であり、それこそが保存されたパスワードハッシュとして間違った性質です: ハッシュを持つ攻撃者は GPU で毎秒何十億もの推測を試みられます。bcrypt は意図的に遅く、ソルトされており、それこそがパスワード保存が求めるものです。完全性と署名には SHA-256 を使い、人間のパスワードには bcrypt(あるいはその親戚の Argon2 / scrypt)を使ってください。