なぜ? SHA-256 パスワードの保存に適さない
ファイルのチェックサムとサーバー側のパスワードストレージは、異なる問題を解決します。 パスワードストレージは、各オフラインが高価な推測を行う必要があります。
Hashing は暗号化されていません: 対応する復号化操作はありません。 それにもかかわらず、データベースのリーク後、攻撃者はアプリケーションのログイン率制限を渡すことなく、盗まれたレコードとそれらを推測し比較することができます。
SHAの速度は欠点になります
SHA-256 整合性チェックや多くの暗号アプリケーションに便利です。その速度はパスワード保存のために望ましくないです。塩を追加するには SHA256(salt + password) 十分に高価な推測をしないでください。塩と計算コストは異なる目的のために役立ちます。
クレデンシャルフォーマットや通常のハッシュのループを発明しないでください。維持されたパスワード - hashing ライブラリを使用してください。
専用のパスワード-hashing関数を選択してください
OWASPは好みます Argon2id 新しいシステムでは、 scrypt を代替として利用できないとき。 PBKDF2 特定のコンプライアンス要件を満たします。Bcryptはレガシーシステムに関連したままですが、入力長さを含む制限があります。
作成および検証、塩生成およびパラメータストレージのライブラリ機能を使用します。 ターゲットサーバー上の現在のガイダンスと測定からコストパラメーターを選択します。 同時ログインとリソース制限のためのアカウント: 費用対給は、サービストバイアルの拒否をしてはならない。 オンラインレートの制限は必要です。
塩とコショウの理解
塩はランダムで、各レコードに固有のものです。それは秘密ではありません。アルゴリズムの識別子と検証パラメータを格納するだけでなく、ライブラリのエンコードされたレコード内で頻繁に保存します。
ピーマンは、パスワードデータベースの外に保持されたオプションの秘密です。いくつかの違反のシナリオで助けることができるが、回転とキー管理を複雑にします。それは塩や適切なハッシュ機能も置き換えません。
成功した検証後のアップグレードレコード
成功したログインで、古いレコードを最初に確認し、パラメータが古い場合は、送信されたパスワードを再ハッシュします。既存のハッシュから元のパスワードを回復してデータベース全体を移行することはできません。非アクティブアカウントは別々のリセットまたは移行ポリシーが必要です。Rehashingは以前のリークを行うことはありません。
デプロイ前に、パスワードの誤り、レガシーマイグレーション、長さ制限と読み込みをテストします。テストパスワードをログに記録したり、分析に送信しないでください。