BCrypt を利用することは「パスワードを“攻撃者が高速に推測できない形”で保存するための強力なユーティリティです」
業務システムでは、ユーザーのパスワードを安全に扱うことが必須です。 そのために使われる代表的な方式が BCrypt です。 BCrypt は PBKDF2 と同じく「安全なパスワードハッシュ方式」ですが、 GPU による高速総当たり攻撃に強い という特徴があります。
初心者の方にも分かりやすいように、 BCrypt の仕組み、実務で使えるコード例、テンプレート、そして深掘りポイントまでを 連続した流れで丁寧に解説します。
BCrypt の基本は「計算を重くし、メモリも使わせることで攻撃を遅らせる」ことです
BCrypt が解決したい問題
攻撃者は GPU や専用ハードウェアを使って、 1 秒間に何億回もパスワードを試すことができます。
そのため、SHA256 や SHA512 のような高速ハッシュは危険です。
BCrypt は次のような特徴を持ちます。
- 計算を重くする(コスト値)
- メモリを多く使わせる(メモリハード)
- ソルトを自動生成する
- パスワード専用に設計されている
これにより、攻撃者がパスワードを推測するのが極端に難しくなります。
BCrypt の仕組みを初心者向けにかみ砕く
① ソルトを自動生成する
BCrypt は内部で必ずランダムソルトを生成します。 そのため、同じパスワードでも毎回違うハッシュ値になります。
② コスト値(work factor)で計算量を調整できる
BCrypt の特徴は「計算量を簡単に調整できる」ことです。
例:
- コスト 10 → やや重い
- コスト 12 → 実務でよく使われる
- コスト 14 → かなり重い(高セキュリティ環境向け)
コスト値を上げると、攻撃者の総当たり攻撃が極端に遅くなります。
③ メモリハードで GPU 攻撃に強い
BCrypt は内部で Blowfish 暗号を使い、 メモリを多く使わせる設計になっています。
GPU はメモリが少ないため、 BCrypt の計算が苦手です。
C# で BCrypt を利用する(実務向けテンプレート)
.NET では標準で BCrypt が使えないため、外部ライブラリを利用します
最も有名なのは BCrypt.Net-Next です。
BCrypt を使ったハッシュユーティリティ
using BCrypt.Net;
public static class BcryptUtility
{
// パスワードをハッシュ化
public static string HashPassword(string password, int workFactor = 12)
{
return BCrypt.Net.BCrypt.HashPassword(password, workFactor);
}
// パスワードを検証
public static bool VerifyPassword(string password, string hash)
{
return BCrypt.Net.BCrypt.Verify(password, hash);
}
}
C#BCrypt を使ったパスワード保存の流れ
登録時(Sign Up)
- ユーザーがパスワードを入力
- BCrypt がソルトを自動生成
- BCrypt がハッシュ化
- ハッシュ値だけをデータベースに保存
BCrypt はソルトを内部に埋め込むため、 ソルトを別途保存する必要はありません。
ログイン時(Sign In)
- ユーザーがパスワードを入力
- データベースのハッシュ値を取得
- BCrypt が内部のソルトを使って再計算
- 一致すればログイン成功
BCrypt を使うときの「絶対にやってはいけないこと」
- パスワードを平文で保存する
- SHA256 など高速ハッシュを使う
- ソルトを自分で生成して埋め込む(BCrypt が自動でやる)
- コスト値を低くする(10 以下は危険)
- ハッシュ値をログに出す
これらはすべて攻撃者に突破されます。
BCrypt を使うときの「実務的ベストプラクティス」
- コスト値は 12〜14 が推奨
- ハッシュ値はそのまま Base64 で保存する
- パスワードは絶対に復号しない(ハッシュは不可逆)
- ログイン試行回数の制限(レートリミット)と併用する
- パスワードポリシー(長さ・複雑性)も併用する
PBKDF2 と BCrypt の違いを簡単にまとめる
| 項目 | PBKDF2 | BCrypt |
|---|---|---|
| 設計思想 | 標準仕様 | パスワード専用 |
| GPU攻撃耐性 | やや弱い | 強い |
| メモリ使用 | 少ない | 多い(攻撃者に不利) |
| .NETでの利用 | 標準で使える | 外部ライブラリが必要 |
| 調整項目 | iteration | cost |
どちらも安全ですが、 Webサービスや高セキュリティ環境では BCrypt がよく使われます。
まとめ:BCrypt は「GPU攻撃に強いパスワード専用ハッシュ方式」です
BCrypt の本質は次の 3 つです。
- ソルトを自動生成する
- コスト値で計算量を調整できる
- メモリハードで総当たり攻撃に強い
これらを組み合わせることで、 攻撃者がパスワードを推測するのを極端に難しくします。
多くの読者のみなさんが業務システムを開発する際、 BCrypt を正しく使うだけでセキュリティレベルが大幅に向上し、 ユーザーの秘密を安全に守ることができます。

