ホームページ > バックエンド開発 > PHPチュートリアル > ハッシュ機能を理解し、パスワードを安全に保つ

ハッシュ機能を理解し、パスワードを安全に保つ

Christopher Nolan
リリース: 2025-02-26 11:41:10
オリジナル
457 人が閲覧しました

Understanding Hash Functions and Keeping Passwords Safe

特にサーバーとデータベースの侵害のリスクを考えると、

ユーザーパスワードの保護が非常に重要です。この記事では、ハッシュの基礎と、Webアプリケーション内のパスワードを確保する上でのその役割について説明します。 迅速なPHPソリューションを求めている人にとっては、md5()関数は一般的なオプションではありませんが、一般的です。 md5()入力の長さに関係なく、一貫して固定長のハッシュを生成し、一方向の性質を強調します。

パスワードストレージのためにハッシュを使用して
$data = "Hello World";
$hash = md5($data);
echo $hash; // b10a8db164e0754105b7a99be72e3fe5
ログイン後にコピー
ログイン後にコピー

< ハッシュを使用した典型的なユーザー登録とログインプロセスは次のとおりです。

登録:

ユーザーは、パスワードを含む登録の詳細を提供します Webスクリプトは、このデータをデータベースに保存します 重要なことに、パスワードは

ストレージの前にハッシュされます。
  1. 元のパスワードが破棄されます。ハッシュのみが保持されます。
  2. ログイン:
  3. ユーザーはユーザー名/電子メールとパスワードを入力します。
スクリプトは、入力されたパスワードをハッシュします。

スクリプトは、データベースから保存されているハッシュされたパスワードを取得します。 比較が行われます。ハッシュが一致した場合にのみアクセスが許可されます。

  1. 元のパスワードは決して保存されず、データベース違反の場合に妥協を防ぐように見えます。ただし、これは単純化しすぎです。潜在的な脆弱性を調べてみましょう。
  2. セキュリティ上の課題<
  3. 1。ハッシュ衝突:
  4. 異なる入力が同じハッシュを生成すると衝突が発生します。確率はハッシュアルゴリズムに依存します。
  5. (32ビットのハッシュ)を使用した古いスクリプトは、可能な数の可能な出力が限られているため、衝突が発生する可能性があるため、特に脆弱です。 ブルートフォーススクリプトは、盗まれたものと同じ
ハッシュを生成する代替パスワードを生成できます。

2。レインボーテーブル:

衝突耐性アルゴリズムがあっても、一般的なパスワードのハッシュを含む事前に計算されたレインボーテーブルとバリエーションは大きな脅威をもたらします。 これらのテーブルは、盗まれたハッシュに対応するパスワードをすばやく表示できます。 3。 塩の緩和:

ハッシュ前にパスワードに「塩」(ランダムな文字列)を追加すると、虹のテーブル攻撃を防ぐのに役立ちます。 ただし、塩がユーザー全体で一貫して盗まれている場合、新しい虹のテーブルを生成し、この保護を無効にすることができます。

4。一意の塩:各ユーザーにAユニークなcrc32()塩(ユーザーIDまたはユーザーのデータに保存されたランダムに生成された文字列)を使用すると、セキュリティが大幅に強化され、効果的なレインボーテーブルを作成することは実用的ではありません。 🎜>

5。ハッシュ速度:高速ハッシュアルゴリズムは、攻撃者が多数のパスワードの組み合わせを試みるブルートフォース攻撃の影響を受けやすくなります。 8文字のパスワードでさえ、強力なハードウェアで比較的迅速にクラックすることができます。

ハッシュ速度の脆弱性の緩和:

より遅いハッシュアルゴリズムまたは調整可能な「コストパラメーター」(blowfishな​​ど)を使用すると、ブルートフォース攻撃に必要な時間が大幅に増加します。 PHPの

関数はブローフィッシュをサポートしているため、反復回数を制御できます。 crypt()

'$ 2a $ 10 $'パーツBlowfishアルゴリズムと10のコストパラメーター(2^10反復)を指定します。
$data = "Hello World";
$hash = md5($data);
echo $hash; // b10a8db164e0754105b7a99be72e3fe5
ログイン後にコピー
ログイン後にコピー

安全なパスワードハッシュクラス

このクラスには、議論されたベストプラクティスが組み込まれています:

(php 5.5)
function myhash($password, $unique_salt) {
    return crypt($password, 'a$' . $unique_salt);
}
ログイン後にコピー

を使用して PHPの組み込みpassword_hash()関数は、安全なパスワードハッシュを簡素化します。暗号化された塩を自動的に生成し、アルゴリズムのアップグレードを処理します。

結論password_hash()

class PassHash {
    private static $algo = 'a';
    private static $cost = '';

    public static function unique_salt() {
        return substr(sha1(mt_rand()), 0, 22);
    }

    public static function hash($password) {
        return crypt($password, self::$algo . self::$cost . '$' . self::unique_salt());
    }

    public static function check_password($hash, $password) {
        $full_salt = substr($hash, 0, 29);
        $new_hash = crypt($password, $full_salt);
        return ($hash == $new_hash);
    }
}
ログイン後にコピー
堅牢なハッシュテクニックと強力なパスワードポリシー(最小長、文字の多様性)を組み合わせることで、Webアプリケーションのパスワードセキュリティに対する包括的なアプローチが提供されます。 常にユーザーデータ保護を優先することを忘れないでください。

以上がハッシュ機能を理解し、パスワードを安全に保つの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート