Python の「hash()」関数がセッション間で異なる結果を生成するのはなぜですか?

Linda Hamilton
リリース: 2024-11-03 19:25:29
オリジナル
357 人が閲覧しました

Why Does Python's `hash()` Function Produce Different Results Between Sessions?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!