bcrypt - 暗号化全般

暗号化全般 | IT用語集

bcryptとは

bcryptは、1999年にNiels ProvosとDavid Mazièresによって設計されたパスワードハッシュ関数です。Blowfish暗号を基盤とし、意図的に計算コストを高くすることで、ブルートフォース攻撃やレインボーテーブル攻撃に対して強い耐性を持ちます。

bcryptの最大の特徴はコスト係数(work factor)で、ハードウェアの性能向上に合わせて計算コストを調整できます。現在でも広く使用されており、Ruby on Rails、Django、Node.jsなど多くのフレームワークで標準的に採用されています。

bcryptの特徴

  • 自動的なソルト生成:ハッシュにソルトが含まれる
  • 調整可能なコスト係数:2^n回の反復(nがコスト係数)
  • 固定長出力:60文字のハッシュ文字列
  • GPU攻撃への耐性:メモリアクセスパターンがGPU最適化を困難に

AIエンジニアとしての実体験

AIエンジニアとして、ユーザー認証システムを構築する際、bcryptは必須の選択肢です。以下は各言語での実装例:

Python

import bcrypt

# パスワードのハッシュ化
password = b"my_secure_password"
salt = bcrypt.gensalt(rounds=12)  # コスト係数12
hashed = bcrypt.hashpw(password, salt)

# パスワードの検証
if bcrypt.checkpw(password, hashed):
    print("認証成功")

Node.js

const bcrypt = require('bcrypt');
const saltRounds = 12;

// ハッシュ化
const hash = await bcrypt.hash('my_password', saltRounds);

// 検証
const match = await bcrypt.compare('my_password', hash);

コスト係数の選び方

コスト係数おおよその処理時間推奨用途
10〜100ms開発・テスト環境
12〜300ms✅ 一般的な本番環境
14〜1秒高セキュリティ要件

最新動向(2026年)

Argon2との比較

2015年のPassword Hashing Competitionで優勝したArgon2は、bcryptの後継として推奨されています。しかし、bcryptは依然として安全であり、既存システムで広く使用されています。

推奨事項

  • 新規システム:Argon2idを推奨
  • 既存システム:bcryptは引き続き安全、コスト係数を定期的に見直し

トラブル事例と対策

⚠️ 72バイト制限

症状:bcryptは入力を72バイトで切り捨てる

対策:長いパスワードはSHA-256でプリハッシュしてからbcryptに渡す。

⚠️ 低すぎるコスト係数

症状:古いシステムでコスト係数が低いまま

対策:ユーザーのログイン時にハッシュを再計算して更新。

権威あるリソース

関連用語

📝 関連ブログ記事

【2026年最新】OpenSSLの深刻な問題とは?

認証システム構築のご相談