2011-02-27 2 views
-1

J'ai fait un sujet à propos de la fonction de hachage python intégrée: Old python hashing done left to right - why is it bad? La rubrique précédente expliquait pourquoi il était mauvais pour le cryptage, car nous avons une application appelée Gruyère qui est remplie de failles de sécurité, et il utilise le hash() pour chiffrer les cookies.Exploitation de la fonction de hachage en python

# global cookie_secret; only use positive hash values 
h_data = str(hash(cookie_secret + c_data) & 0x7FFFFFF) 

c_data est un nom d'utilisateur; cookie_secret est sel (par défaut)

J'ai implémenté une méthode de cryptage plus sécurisée utilisant le hachage md5 avec du sel, mais un exercice consiste à battre cet ancien cryptage et je n'arrive toujours pas à comprendre comment :-(I ' J'ai lu le code string_hash de python sourcecode mais il n'est pas documenté et je ne peux pas le comprendre

EDIT: L'idée est d'écrire un programme qui peut créer un cookie valide tout utilisateur valide, donc je pense que je dois trouver cookie_secret en quelque sorte

+0

@caf déjà répondu à cette question précédente. –

+0

duplication possible de [Vieux hachage python fait de gauche à droite - pourquoi est-il mauvais?] (Http://stackoverflow.com/questions/5128990/old-python-hashing-done-left-to-right-why-is- it-bad) –

Répondre

0

Zack a déjà trouvé la réponse à votre dernière question: il est facile de trouver une collision

Disons que vous enregistrez hash("pwd") dans la base de données (que vous faites réellement quelque chose de différent n'a pas d'importance. Maintenant, si vous entrez "pwd" dans le site, vous pouvez entrer. Mais comment est-ce vérifié? Encore une fois, le hachage de "pwd" est un jeton, et comparé à la valeur dans la base de données. Mais qu'en est-il s'il y a une deuxième chaîne, par exemple "hello" et hash("hello") == hash("pwd")? Ensuite, vous pouvez également utiliser "hello" comme mot de passe. Donc, pour battre le cryptage, vous n'avez pas besoin de trouver "pwd", vous avez juste besoin de n'importe quelle chaîne qui a la même valeur de hachage. Vous pouvez simplement rechercher une telle force brute de chaîne (et je suppose que vous pouvez faire quelques optimisations basées sur la connaissance de la source de hash)

+0

Cela décrit simplement comment vous utilisez les collisions en général, mais pas comment vous exploitez les caractéristiques de cette fonction de hachage particulière. – delnan

+0

L'idée est d'écrire un programme qui peut créer un cookie valide tout utilisateur valide, donc je pense que j'ai besoin de trouver cookie_secret en quelque sorte? – KaiserJohaan

+0

Je n'ai pas étudié la fonction de hachage en détail, mais si vous obtenez par exemple le hachage de "a__" "b__" "c__" puis "__a" "__b" "__c" il semble très possible de chercher une collision . Je ne peux pas vous aider avec les détails cependant. Bonne chance! – markijbema

Questions connexes