Saboter une table — la fonction qui disperse mal
Exercice · informatique (tronc commun des prépas scientifiques), chapitre 17 — Les dictionnaires dévoilés : le hachage
Énoncé
(a) À l'aide de la fonction artisanale somme des codes ASCII, générer clés distinctes qui produisent toutes une collision parfaite. Insérer ces clés dans la table, chronométrer recherches, et comparer ce temps avec les mêmes opérations utilisant la fonction standard de Python hash(). (b) Expliquer la dégradation de performance constatée et pourquoi la fonction-somme est défectueuse. (c) Faire le lien avec la randomisation de la fonction hash sous Python.
Corrigé
(a) Pour générer des collisions parfaites, on utilise des anagrammes de même longueur. Par exemple, les chaînes formées de lettres "a" et une lettre "b" placée à des positions différentes ("b" + "a"<em>199, "a" + "b" + "a"</em>198, etc.) possèdent toutes exactement le même code de hachage sous la fonction-somme. Toutes ces clés sont donc insérées dans l'alvéole 2 de notre table. La table dégénère en une simple liste de taille 200. Effectuer 1000 recherches nécessite de parcourir cette chaîne. On mesure alors un temps de recherche à fois plus lent qu'avec hash(), car cette dernière prend en compte la position des caractères et disperse donc correctement les anagrammes. (b) La fonction somme est commutative (), ce qui est un défaut majeur. Une bonne fonction de hachage doit être sensible à l'ordre des éléments, à la longueur et au contenu de la clé. (c) Si la fonction de hachage d'un système était entièrement prévisible, un pirate pourrait envoyer un grand nombre de clés en collision parfaite (par exemple via des requêtes HTTP POST) pour forcer le dictionnaire interne du serveur à travailler en , saturant ainsi le processeur (attaque par déni de service). En salant la graine du hachage de manière aléatoire à chaque lancement de programme, Python rend la découverte de collisions impossibles de l'extérieur.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.