Python のハッシュ関数がセッション間で異なる結果を生成する理由
Python 3.3 以降では、組み込みの hash() 関数が個別のハッシュを生成します異なるセッション内の同一の文字列の場合。この動作は、衝突の脆弱性を悪用した悪意のある入力から保護するための設計上の選択に由来しています。
攻撃者が衝突するキーでアプリケーションに過負荷をかけるのを防ぐために、Python はセッション間で異なるランダム シードを利用します。このオフセットにより、予測不可能性が確保され、攻撃者が衝突を引き起こす能力が阻止されます。
開発者は、PYTHONHASHSEED 環境変数を設定することで、このデフォルトの動作をオーバーライドできます。固定の正の整数値は特定のシードを設定しますが、値を 0 に設定するとオフセットが完全に無効になります。
Python 2.7 および 3.2 は、デフォルトではこの機能を有効にしません。ただし、Python 3.3 以降では、セキュリティを強化するためにこれが組み込まれています。
この変数ハッシュの動作の影響は、ブルーム フィルターを超えて広がります。これは、セット、辞書 (Python 3.5 以前)、およびその他のマッピング構造内の要素の順序に影響します。 Python では、この順序に関する保証はありません。挿入、削除、ランダムなハッシュ シードによって異なる可能性があります。
安定したハッシュの実装には、暗号化ハッシュ関数を提供する hashlib モジュールの使用を検討してください。 pybloom プロジェクトは、信頼性の高いハッシュのためにこのアプローチに依存しています。
ハッシュ オフセットの保存は、構造が複雑であるため非現実的であることに注意してください。ただし、この複雑さの追加により、攻撃者がオフセットを決定するためにタイミング攻撃を悪用することも妨げられます。
以上がPython の「hash()」関数がセッション間で異なる結果を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。