Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/04/2015, à 19:24

pingouinux

[Information] Python 3.4.0 : built-in function hash

Bonjour,

Je me suis aperçu que le comportement de la fonction hash n'est pas reproductible dans la version 3.4.0 de python : les résultats changent à chaque lancement de l'interpréteur.

Les résultats sont cohérents entre eux dans les versions 2.7.3, 2.7.6 et 3.2.3 de python.

Pour tester, il suffit de lancer plusieurs fois cette commande :

python3 -c "print(hash('0'))"

Hors ligne

#2 Le 21/04/2015, à 09:05

grim7reaper

Re : [Information] Python 3.4.0 : built-in function hash

Salut,

C’est tout à fait normal, je te rassure. Depuis Python 3.3, la hash randomization est activé par défaut.

https://docs.python.org/3/whatsnew/3.3.html a écrit :

Security improvements:

    Hash randomization is switched on by default.

Tu peux la désactiver (ou l'activer pour les versions précédentes) via la variable d’environnement PYTHONHASHSEED.

Exemple :

% PYTHONHASHSEED=$(date +%s) python3 -c "print(hash('0'))"

Pourquoi cette randomization ?

Comme la release note l‘indique, c’est pour des raisons de sécurité. C‘est lié à un type d’attaque bien particulier (hash flooding), qui existe au moins depuis 2003.
Son principe est simple et consiste à générer artificiellement des collisions dans les tables de hachage pour les ralentir (jusqu‘a obtenir un déni de service dans le cas d’une application Web).
Ça avait été discuté ici (si l‘anglais ne te dérange pas, il y a la présentation faite par l’auteur ici, ou une autre des auteurs de SipHash).

En conséquence, la plupart des langages affectés ont remplacé leur fonction de hash par SipHash (comme Perl et Python par exemple) et ont ajouté de la randomization.

Hors ligne

#3 Le 21/04/2015, à 10:09

pingouinux

Re : [Information] Python 3.4.0 : built-in function hash

Merci grim7reaper pour ces explications très claires et ces liens instructifs.

Hors ligne