Salut les Français !
Je bosse sur un projet dans le cadre duquel j’ai besoin de construire une table de correspondance entre des mots de passe et leurs hash cryptographiques.
Seulement voilà, l’algorithme de calcul de ces hash (argon2id) est spécifiquement construit pour être long et coûteux a calculer. Or moi j’ai besoin d’un gros volume de données aléatoires (+2Gib), et memes avec toute ma puissance dont je dispose a la maison, ça me prendrait des mois.
J’ai donc mis au point hashcrush, un “brûleur de CPU”, qui calcule ces précieux hash en utilisant toute la puissance disponible sur la machine qui l’exécute. Je l’ai testé sous Linux et OpenBSD.
Parce que je crois en l’'esprit communautaire et l’entraide dans la vie de tous les jours, je préfères demander de l’aide au sein des communautés auxquelles j’appartiens plutôt que d’engraisser les fournisseur de service (qui me louerait du CPU à foison pour le même résultat avec grand plaisir).
Donc si vous voulez bien me filer un coup de main, clonez le dépôt et mangez du hash ! Toutes les infos sont sur la page du projet.
Si vous avez des questions, n’hésitez pas à les poser ici.
Merci les copains :)
Edit: pour ceux que ça intéresse, on a atteint l’objectif. Ça nous aura prit 3 jours, contre 8 mois si j’avais fais ça tout seul !
Sans rentrer dans les détails, c’est pour un challenge de type CTF (donc à but purement récréatif).
Effectivement ça peut y ressembler, et t’as raison d’être méfiant.
Mais si vraiment c’était du brute force et que c’était illégal, je ne publierais pas ça en mon nom, publiquement sur le web :)
Ensuite, concrètement tu peux voir que les hash générés utilisent un “sel” généré aléatoirement pour chaque mot de passe: hashgen.go#L97 et hashdump#L4. Si vraiment c’était un brute-force sur une base existance, alors je devrais utiliser un sel pré-existant récupéré dans cette DB. La technique est décrite dans l’article d’OWASP sur le stockage des mot de passe, qui mentionne justement Argon2ID. Spécifiquement cette phrase:
an attacker has to crack hashes one at a time using the respective salt rather than calculating a hash once and comparing it against every stored hash.
Comme je le disais dans mon cas, les “salt” de chaque hash sont générés aléatoirement à la volée, et donc ne peuvent pas correspondre dump de données (ou alors ce serait pas de bol, avec 1 chance sur 2^128).
Dans mon cas, je m’en fiche car le but est justement de générer une “fausse” base de données, mais avec des résultats cohérents.
Si tu as d’autres questions, ou si je dois éclaircir certains points, n’hésites pas !
argon2id me fait penser à des bases de données sur disque luks. Ça me paraît shady ton truc.
Peux-tu entrer dans les détails, exactement ?
cf. ce commentaire.
Pour donner des détails sur le contexte, mon but est de générer une “fausse” base de données, mais avec des résultats cohérents (donc de vrais hash). Et j’ai besoin d’un gros volume de données pour rendre difficile l’utilisation d’outils standard type grep(1)
et forcer les joueurs à utiliser des méthodes plus efficaces de recherches de valeurs.
Super. Merci de la précision. Ça peut en effet être super intéressant, c’est le genre de choses qui pourraient aussi m’intéresser d’apprendre si j’avais le temps/les compétences.
Je vais essayer de faire tourner ton programme un peu les prochains jours. Comment poster les hashs ?
Tu peux les uploader ici: https://up.qw.is Tout est indiqué dans le README ;)
J’ai la flemme de faire ça manuellement, mais si tu crées une image docker avec un paramètre qui permet de le faire tourner sur une plage horaire spécifique je veux bien mettre ça sur mon serveur local pour quelques semaines