1: 基本: Salt を使用したハッシュ
私たちは、悪意のある攻撃者がルックアップ テーブルとレインボー テーブルを使用して通常のハッシュ暗号化をいかに速く破ることができるかをすでに知っています。また、ランダムにソルトされたハッシュを使用すると、この問題を解決できることも
学びました。しかし、どのような種類のソルトを使用し、パスワードにどのように
混ぜ込むのでしょうか?
ソルト値は、Cryptographically Secure Pseudo-Random
Number Generator (CSPRNG) を使用して生成する必要があります。 CSPRNG は、「C」言語の rand() 関数などの通常の擬似乱数ジェネレーターとは大きく異なります。名前が示すように、CSPRNG は暗号的に安全になるように設計されており、非常にランダムで完全に予測不可能な乱数を提供します。ソルト値を予測可能にしたくないので、CSPRNG を使用する必要があります。
次の表に、現在の主流のプログラミング プラットフォームの CSPRNG メソッドを示します。
プラットフォームJava | |
Dot NET (C#、VB) | |
Ruby | |
Python | |
Perl | |
C/C++ (Windows API) | |
GNU/Linux または Unix 上の任意の言語 | |
| 各ユーザーのすべてのパスワードは一意のソルト値を使用する必要があります。ユーザーがアカウントを作成するか、パスワードを変更するたびに、パスワードには新しいランダムなソルト値が設定される必要があります。
の値は少なくともハッシュ関数の出力と同じ長さである必要があります。このソルトは、パスワード ハッシュとともにユーザー アカウント テーブルに保存する必要があります。
パスワードを保存する手順:
CSPRNG を使用して、十分な長さのランダムなソルト値を生成します。
パスワードにソルトを混ぜて、Argon2、bcrypt、scrypt、PBKDF2 などの標準のパスワード ハッシュ関数を使用して暗号化します。
ソルト値と対応するハッシュ値を一緒にユーザーデータベースに保存します。
ユーザーのソルト値と対応するハッシュ値をデータベースから取得します。
ユーザーが入力したパスワードにソルト値を混合し、一般的なハッシュ関数を使用して暗号化します。
前のステップの結果を比較して、データベースに保存されているハッシュ値と同じかどうかを確認します。それらが同じであれば、パスワードは正しいです。それ以外の場合、パスワードは間違っています。
以上がパスワードを安全に保管するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。