パスワードハッシュにおけるbcrypt vs SHA-256

パスワードハッシュにbcryptがSHA-256より優れている理由を解説。ワークファクター、ソルト処理、GPU耐性、それぞれのアルゴリズムが適切な場面を学びます。

General

詳細な説明

bcryptとSHA-256は根本的に異なる目的を持ちます。SHA-256は速度のために設計された汎用暗号ハッシュ、bcryptは意図的に低速に設計されたパスワードハッシュ関数です。パスワード保存にSHA-256を使用するのは、ブルートフォース攻撃に対して脆弱なよくある間違いです。

速度:決定的な違い:

最新のGPU1台で約50億SHA-256ハッシュ/秒を計算できます。8文字の英数字パスワードの全組み合わせ(約2.8兆通り)を10分未満でテストできます。bcryptのワークファクター12では同じGPUで約4ハッシュ/秒です。同じパスワード空間のテストに22,000年以上かかります。bcryptはBlowfishベースの鍵スケジュールにより、GPU並列化に耐性のある逐次メモリアクセスパターンを要求することで遅延を実現します。

組み込みのソルト処理:

SHA-256では手動のソルト管理(ランダムソルトの生成、ハッシュとの保存、検証時の組み込み)が必要です。開発者はこれを誤りやすく、短いソルト、ソルトの再利用、省略などの問題が起こります。bcryptは出力文字列にソルトを直接埋め込みます(例:$2b$12$salt22charslong..hash31charslong.)。ソルト、ワークファクター、ハッシュがすべてエンコードされており、保存と検証が簡単です。

適応的コスト:

bcryptのワークファクターはハードウェアの向上に合わせて増加できます。各インクリメントで計算時間が倍増します。SHA-256には同等のメカニズムがなく、速度は固定です。SHA-256を反復する方法(PBKDF2-HMAC-SHA256)もありますが、bcryptのメモリ困難性は持ちません。

使い分け:

パスワードハッシュにはbcrypt(またはArgon2)を専用で使用してください。SHA-256はデータ整合性検証、デジタル署名、チェックサム、HMAC認証、その他のハッシュニーズに使用してください。両者は補完的なツールであり、競合するものではありません。

ユースケース

パスワードハッシュ戦略を選択する開発者は、保存された認証情報をブルートフォース攻撃から保護するために、生のSHA-256ではなくbcrypt(ワークファクター12以上)またはArgon2idを使用すべきです。

Try It — Hash Generator

フルツールを開く