Pourquoi la fonction de hachage de Python produit des résultats variables entre les sessions
Dans Python 3.3 et au-delà, la fonction hash() intégrée génère des hachages distincts pour des chaînes identiques dans différentes sessions. Ce comportement découle d'un choix de conception visant à se protéger contre les entrées malveillantes exploitant les vulnérabilités de collision.
Pour empêcher les attaquants de surcharger l'application avec des clés en collision, Python utilise une graine aléatoire qui varie selon les sessions. Ce décalage garantit l'imprévisibilité, contrecarrant la capacité des attaquants à créer des collisions.
Les développeurs peuvent remplacer ce comportement par défaut en définissant la variable d'environnement PYTHONHASHSEED. Une valeur entière positive fixe définira une graine spécifique, tandis que définir la valeur sur 0 désactivera entièrement le décalage.
Python 2.7 et 3.2 n'activent pas cette fonctionnalité par défaut. Cependant, Python 3.3 l'intègre pour améliorer la sécurité.
Les implications de ce comportement de hachage variable s'étendent au-delà des filtres Bloom. Cela affecte l'ordre des éléments dans les ensembles, les dictionnaires (dans Python 3.5 et versions antérieures) et d'autres structures de mappage. Python ne fournit aucune garantie concernant cet ordre, qui peut varier en fonction de l'insertion, de la suppression et de la graine de hachage aléatoire.
Pour des implémentations de hachage stables, envisagez d'utiliser le module hashlib, qui fournit des fonctions de hachage cryptographique. Le projet pybloom s'appuie sur cette approche pour un hachage fiable.
Il convient de noter que le stockage du décalage de hachage n'est pas pratique en raison de sa structure complexe. Cependant, cette complexité supplémentaire empêche également les attaquants d'exploiter les attaques temporelles pour déterminer le décalage.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!