bcryptとは何か?意図的に低速なパスワードハッシュ
bcryptは意図的に低速かつ調整可能に作られたパスワードハッシュ関数であり、ハードウェアが高速になっても総当たりによる推測が高コストであり続けるようにします。
bcryptは最も広く使われているパスワードハッシュ関数の1つです。汎用ハッシュとは異なり、低速に設計されており、work factorを使ってその低速性を時とともに引き上げることができます。組み込みのsaltingと調整可能なコストにより、bcryptはパスワード保存のための堅実で実戦で鍛えられた選択肢となっており、だからこそ数え切れないほどのアプリケーションに登場します。
bcryptが異なる理由
SHA-256のような汎用ハッシュは高速で、これはchecksumには最適ですが、パスワードには最悪です。攻撃者が毎秒数十億回推測できるからです。bcryptは意図的に低速であり、その総当たりの速度を防御側にとってはるかに扱いやすいものに変えます。
work factor
- コストパラメータがbcryptの実行ラウンド数を設定します。
- 各増分でハッシュ1回あたりの時間がおよそ2倍になります。
- ハードウェアが高速化するにつれて、何年もかけて引き上げます。
組み込みのsalting
bcryptは出力の一部としてsaltを生成して保存するため、同一のパスワードであっても各パスワードハッシュは一意になります。これはレインボーテーブルが役に立たず、開発者がsaltを個別に管理する必要がないことを意味します。
bcryptと新しい選択肢の比較
bcryptは実績があり、広くサポートされています。Argon2のような新しい関数はmemory-hardnessを加え、専用ハードウェアを使う攻撃に抵抗します。bcryptは依然として強力な選択肢です。最大の耐性が必要な新規システムでは、Argon2がしばしば好まれます。
CI/CDにおけるbcrypt
あなたのアプリがbcryptを使うなら、CIの依存関係スキャンでライブラリが最新であり、コストファクターが妥当であることを確認すべきです。設定を誤ったコスト(低すぎる)はセキュリティを静かに弱めるため、テストで確認し、deployの前にレビューする価値があります。
どこに位置づけられるか
bcryptはアプリケーションのデータベースにおける保存時のパスワードを保護します。これはpipelineがサービスに認証する方法とは無関係であり、そちらはtokenとOIDCを使います。2つのメンタルモデルを分けて考えてください。人間のパスワードにはbcrypt、マシンのアクセスにはtokenです。
重要なポイント
- bcryptは組み込みのsaltingを備えた、意図的に低速で調整可能なパスワードハッシュです。
- そのwork factorは、高速化するハードウェアに追随するため時とともに引き上げられます。
- 保存されたパスワードを保護するものであり、マシントークン認証とは無関係です。