現在の位置: ホーム> 最新記事一覧> Crypt()機能を使用する場合、どのような状況で塩は提供されませんか? Crypt()の症状または安全リスクは何ですか?

Crypt()機能を使用する場合、どのような状況で塩は提供されませんか? Crypt()の症状または安全リスクは何ですか?

M66 2025-08-05

PHPでは、 Crypt()関数は文字列を暗号化するための一般的なツールであり、パスワードの暗号化に特に適しています。その作業原則は、暗号化アルゴリズムと塩値(塩)に依存します。塩値は、暗号化プロセスのランダムな値であり、パスワードの複雑さを高めるために使用されるため、レインボーテーブルなどの攻撃方法に抵抗します。

Crypt()関数の基本的な使用

<?php
$password = "mypassword";
$salt = '$6$rounds=5000$m66.net$saltstring$'; // による SHA-512 例としてアルゴリズム,カスタムドメイン名が含まれています salt
$hash = crypt($password, $salt);
echo $hash;
?>

ここでの塩値は、暗号化アルゴリズム(SHA-512など)を決定するだけでなく、出力結果のセキュリティにも影響します。

塩が提供されていないときのパフォーマンス

2番目のパラメーターを渡さずにcrypt()関数を呼び出すと(つまり、塩値が提供されません)、PHPは次の動作を採用します。

  • パフォーマンス1 :ほとんどのシステムとPHPバージョンでは、 Crypt()はシステムのデフォルトまたは空の塩値を使用します。これにより、暗号化強度が大幅に減少し、ランダム性が不足しているため、出力の結果は非常に類似している可能性があります。

  • パフォーマンス2 :PHPまたはオペレーティングシステム環境の一部の古いバージョンでは、暗号化の結果は予測不可能であり、暗号化されていない元の文字列を返すことさえあります。

  • パフォーマンス3 :最新の暗号化アルゴリズムをサポートする環境では、塩値がないため、暗号化プロセスが非常に悪いセキュリティを持つ弱いDESアルゴリズムに戻る可能性があります。

Saltの安全リスクは提供されていません

  1. ランダム性の欠如
    塩の中心的な役割は、ランダム性を導入して、暗号化されるたびに同じパスワードが異なる結果をもたらすことです。塩がなければ、攻撃者は、事前に計算された虹のテーブルを使用してパスワードをすばやく割ることができます。

  2. 残虐性に優しい<br> 塩がなければ、同じパスワードのすべての暗号化の結果は同じであり、ブルートフォースが割れたときに複数のアカウントを割ることができます。

  3. 弱い暗号化アルゴリズムへのダウングレード<br> 塩の値が指定されていない場合、 Crypt()は不安定なDESアルゴリズムを使用するように縮退し、暗号化するパスワードの最初の8文字のみを傍受することができます。

  4. 最新のアルゴリズム機能を利用できません<br> たとえば、SHA-256およびSHA-512は、塩の反復回数を指定するサポートをサポートしており、これらの高度な機能は塩なしでは有効にすることはできません。

安全な使用提案

  • 暗号化アルゴリズム識別子やランダム塩の弦を含む、完全かつ仕様に準拠した塩値を常に指定してください

  • 単純な塩値または固定塩値を使用しないでくださいrandom_bytes()関数を使用してbase64_encode()を組み合わせて生成するなど、ランダムに生成された塩値を使用することをお勧めします。

  • PHPのPassword_hash()などの特別なパスワードハッシュ機能を使用することを検討してください。これは、塩とアルゴリズムの選択の生成をカプセル化し、使用がより安全で便利になるようにします。

例:Crypt()を使用し、適切な塩値を提供します

<?php
$password = "mypassword";
// 使用 SHA-512,反復数 5000,塩値にはカスタムドメイン名が含まれています m66.net
$salt = '$6$rounds=5000$m66.net$' . substr(bin2hex(random_bytes(8)), 0, 16);
$hash = crypt($password, $salt);
echo $hash;
?>

これにより、塩値のランダム性が保証されるだけでなく、暗号化アルゴリズムと反復数も明確になり、セキュリティ強度が向上します。

要約します

PHPでは、 Crypt()関数が塩の値を提供しない場合、暗号化の結果のセキュリティを大幅に減らし、攻撃者によって簡単に搾取されます。塩値は、同じパスワードが同じハッシュを生成するのを防ぐための鍵であるだけでなく、暗号化アルゴリズムとその強度を指定します。したがって、いずれにせよ、安全上の危険を避けるために、 crypt()に適切な塩値を明確に提供する必要があります