【びーくりぷと】

bcrypt とは?

💡 パスワードを「わざと遅く」ハッシュする
📌 このページのポイント
bcrypt によるパスワードハッシュ化 パスワード "myPass123" ソルト(Salt) ランダム文字列 bcrypt コスト: 10〜12 (意図的に遅い) ハッシュ値 $2b$10$ N9qo8uLOickgx2ZM RqjY3Yo5T/Z... ソルトの役割 同じパスワードでも 毎回違うハッシュに → レインボーテーブル対策 コストファクター 計算を意図的に重くする → ブルートフォース 攻撃を困難にする 一方向性 ハッシュから元の パスワードは復元不可 → 安全に保存できる
bcryptによるパスワードのハッシュ化フロー
ひよこ ひよこ

なぜSHA-256じゃダメなの?

ペンギン先生 ペンギン先生

SHA-256は高速に計算できるように設計されている。GPUで毎秒数十億回ハッシュ計算が可能だから、総当たり攻撃が現実的になる。bcryptはコストファクターで計算を「わざと遅く」する。1回の計算に100msかかる設定なら、GPUでも毎秒数千回しか試行できない。パスワードを破るのに数千年かかるようになるんだよ

ひよこ ひよこ

Argon2との違いは?

ペンギン先生 ペンギン先生

Argon2は2015年のPassword Hashing Competitionで優勝した新しいアルゴリズム。bcryptはCPUのみを消費するが、Argon2はメモリも大量に消費する設計で、GPU攻撃への耐性がさらに高い。新規プロジェクトならArgon2idが推奨だけど、bcryptも十分安全で実績が豊富だよ

ひよこ ひよこ

コストファクターってどう設定する?

ペンギン先生 ペンギン先生

ハッシュ計算に100ms〜250msかかるコストに設定するのが目安。bcryptのコストファクターは2のべき乗で、10なら1024ラウンド、12なら4096ラウンド。サーバーの性能向上に合わせてコストを上げていく必要がある。2024年現在ではコスト12〜14が推奨範囲だよ

ひよこ ひよこ

実装時の注意点は?

ペンギン先生 ペンギン先生

パスワードの最大長制限(bcryptは72バイトまで)に注意。長いパスワードは事前にSHA-256でハッシュしてからbcryptに渡す方法もある。コスト値の定期見直しも重要。比較は専用関数(bcrypt.compare等)で行い、タイミング攻撃を防ぐ。ライブラリ任せが最も安全だよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「bcrypt」って出てきたら「パスワード保存専用の安全なハッシュ関数」と思えればだいたいOK!
📖 おまけ:英語の意味
「bcrypt」 = Blowfish crypt
💬 Blowfish暗号のcrypt(暗号化)。1999年にOpenBSD用に開発されたよ
← 用語集にもどる