ホームページ  >  記事  >  バックエンド開発  >  ユーザーのパスワードを安全に保存する方法

ユーザーのパスワードを安全に保存する方法

炎欲天舞
炎欲天舞オリジナル
2017-08-04 17:55:091513ブラウズ

1: 基本: Salt を使用したハッシュ

私たちは、悪意のある攻撃者がルックアップ テーブルとレインボー テーブルを使用して通常のハッシュ暗号化をいかに迅速に解読できるかをすでに知っています。また、ランダムにソルトされたハッシュを使用すると、この問題を解決できることも

学びました。しかし、どのような種類のソルトを使用し、パスワードにどのように

混ぜ込むのでしょうか?

ソルト値は、Cryptographically Secure Pseudo-Random

Number Generator (CSPRNG) を使用して生成する必要があります。 CSPRNG は、「C」言語の rand() 関数などの通常の擬似乱数ジェネレータとは大きく異なります。名前が示すように、CSPRNG は暗号的に安全になるように設計されており、非常にランダムで完全に予測不可能な乱数を提供します。ソルト値を予測可能にしたくないので、CSPRNG を使用する必要があります。

次の表に、現在の主流のプログラミング プラットフォームの CSPRNG メソッドを示します。

プラットフォームCSPRNGPHPmcrypt_create_iv、openssl_random_pseudo_bytesjava.security.SecureR andom System.Security。 Cryptography.RNGCryptoServiceProviderSecureRandomos.urandomMath::Random::SecureCryptGenRandom/dev/random または /dev/urandom から読み取ります各ユーザーのすべてのパスワードは一意のソルト値を使用する必要があります。ユーザーがアカウントを作成するか、パスワードを変更するたびに、パスワードには新しいランダムなソルト値が設定される必要があります。 ソルト値を再利用しないでください。また、ソルト値は、ハッシュ暗号化に使用するのに十分なソルト値が存在するように、十分な長さである必要があります。経験則として、salt
Java
Dot NET (C#、VB)
Ruby
Python
Perl
C/C++ (Windows API)
GNU/Linux または Unix 上の任意の言語


の値は少なくともハッシュ関数の出力と同じ長さである必要があります。このソルトは、パスワード ハッシュとともにユーザー アカウント テーブルに保存する必要があります。

パスワードを保存する手順:

CSPRNG を使用して、十分な長さのランダムなソルト値を生成します。

  1. パスワードにソルトを混ぜて、Argon2、bcrypt、scrypt、PBKDF2 などの標準のパスワード ハッシュ関数を使用して暗号化します。

  2. ソルト値と対応するハッシュ値を一緒にユーザーデータベースに保存します。

  3. パスワードを確認する手順:

ユーザーのソルト値と対応するハッシュ値をデータベースから取得します。

  1. ユーザーが入力したパスワードにソルト値を混合し、一般的なハッシュ関数を使用して暗号化します。

  2. 前のステップの結果を比較して、データベースに保存されているハッシュ値と同じかどうかを確認します。それらが同じであれば、パスワードは正しいです。それ以外の場合、パスワードは間違っています。

以上がユーザーのパスワードを安全に保存する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。