7
votes

Trouver $ Secret en $ A == MD5 ($ b. $ Secret)

Une fonction est:

$a == md5($b . $secret);
  • Vous pouvez choisir $ A et $ B li>
  • vous ne savez pas $ secret li>
  • Vous obtenez la valeur de la fonction pour le $ A et B $ vous choisissez comme vrai ou faux. Li> ul>

    Y a-t-il une meilleure attaque que la force brute pour trouver le $ Secret en général? Y a-t-il une meilleure attaque que la force brute pour trouver le $ Secret Secret à l'aide de Fonction MD5 de PHP ? P>

    De ce que j'ai trouvé sur le Web, je pense qu'il n'y a pas, bien que MD5 soit obsolète pour d'autres cas d'utilisation. Donc, juste pour être sûr ... p>

    genre Cordialement P> P>


0 commentaires

3 Réponses :


1
votes

Téléchargez une table arc-en-ciel / un mot de passe de mot de passe célèbre! :)


4 commentaires

C'est à peu près la seule option en plus d'attaques de force brute. Il convient de considérer que les hayes MD5 peuvent être calculées assez rapidement de nos jours, et comme de telles attaques de force brute ne doivent pas être sous-estimées. Bcrypt ou Blowfish semblent être les algorithmes recommandés par des experts cryptographiques / sécurité réels (car ils sont à la fois cryptographiquement plus en sécurité et peuvent être ralentis par une quantité arbitraire).


La table arc-en-ciel ne fonctionnera pas, à cause du sel (à moins que la longueur du sel + la longueur du mot de passe est inférieure à 8, ce qui est très peu probable). Vous auriez besoin de la force brute, ce qui prendrait beaucoup de temps.


Mais si vous avez la chance assez pour obtenir le même sel :)


J'aurais dû signaler, que vous n'êtes que vrais ou faux. Donc, les tables arc-en-ciel ne fonctionneront pas. Des listes de mots de passe célèbres pourraient Aide, cependant.



3
votes

C'est une question intéressante, car dans les scénarios typiques de la sécurité informatique, vous ne pouvez pas choisir $ a et $ B comme attaquant. Si vous êtes capable de saisir un mot de passe haché, par exemple, $ a et $ B sont déjà définis et que vous devez travailler avec cela. Dans ce cas, vous ne pouvez utiliser que la force brute ou une table arc-en-ciel si l'une avec le sel $ B est disponible.

Dans votre exemple d'autre part, vous êtes libre de choisir les deux valeurs. Vous pouvez prendre un secret arbitraire, par exemple Test et choisissez les valeurs de $ A et $ b en conséquence. Je choisis $ B pour être une chaîne vide et calculez $ A avec $ a = md5 ($ secret) , ce qui donne lieu dans 098F6BCD4621D373Cade4E832627B4F6 .

J'ai choisi $ a = "098f6bcd4621d373cade4f6" et $ b = "" et vous demandez si $ == "test" . Vous dites vrai et je dis un problème résolu.

Cela nous conduit enfin à la vraie réponse. Les deux conditions données

  • Vous pouvez choisir $ A et $ B
  • vous ne savez pas $ secret

    Ne travaillez pas ensemble. Dans mon exemple, j'ai défini $ secret moi-même. J'ai violé la deuxième condition. D'autre part, je ne peux pas choisir $ A et $ B arbitrairement sans les dériver de $ secret , car ils n'ont peut-être pas une solution. < / p>

    Si nous supposons qu'il y a au moins une solution pour toutes les paires possibles de $ A et $ b (peut-être qu'il y a une preuve pour cela, je ne sais pas ), et vous les choisissez de manière à ce que vous ne connaissez vraiment pas $ secret , je voudrais toujours définir $ b = "" , pour rendre l'attaque aussi facile aussi possible. Les tables arc-en-ciel sont vos amis dans ce cas.


0 commentaires

4
votes

Si MD5 se comporte comme un oracle aléatoire (c'est un gros "si" ", voir ci-dessous), puis la recherche exhaustive sur $ secret est la meilleure attaque possible - et, plus important encore, chaque" suppose " "Sur la valeur de $ secret doit utiliser une requête sur la fonction (puisque vous utilisez php, je suppose que la fonction est implémentée dans un serveur Web, et chaque" requête "nécessite de parler à ce serveur) . Ce dernier est impliqué par le manque d'informations renvoyées à l'attaquant: l'attaquant n'obtient rien sauf un seul bit (le " true " ou " false " résultat) . En particulier, il ne reçoit pas la sortie MD5 elle-même. L'attaquant obtiendra un long flux de résultats uninformatif " faux ", sauf s'il frappe la sortie MD5 correcte, soit hors chance (probabilité 2 -128 , qui est vraiment darn Petit), ou parce qu'il devinait correctement la valeur du $ secret à l'avance. Il convient de noter que cela empêche l'attaquant d'utiliser de nombreuses techniques de partage des coûts, y compris des tables précomptes, notamment la surextudiée Tables arc-en-ciel .

a aléatoire oracle est un objet mythique qui peut être considéré comme une boîte noire déterministe: Vous savez rien sur la sortie que vous recevrez d'une entrée donnée, sauf que la boîte renvoie toujours le même résultat pour une entrée donnée. Un modèle est le suivant: La boîte contient un gnome, des dés et un grand livre. Le gnome utilise les dés pour choisir au hasard la sortie. Il utilise également le livre pour garder une trace des réponses qu'il a déjà envoyées, de manière à être cohérente, c'est-à-dire que si l'entrée est identique à une entrée soumise précédemment, le GNOME retournera la même sortie que auparavant au lieu de lancer des dés.

MD5, cependant, est pas un oracle aléatoire. Par exemple, nous pouvons construire des collisions pour MD5 beaucoup plus rapidement que la résistance théorique 2 64 pour une fonction avec une sortie 128 bits. Notez également que être une bonne fonction de hachage (résistant à la collision et ainsi de suite) n'exige pas absolument «aléatoire oractérique». Par exemple, SHA-256 est considéré comme une fonction de hachage sécurisée, alors qu'elle reste souffre de la soi-disant "attaque d'extension de longueur" (donné SHA256 ($ a) , on peut calculer sha256 ($ a. $ b) sans savoir $ A , pour des valeurs presque arbitraires de $ B ). Les garanties d'un oracle aléatoire ne tiennent donc pas avec MD5 (ou, à ce sujet, SHA-256). Cela ne signifie pas que les attaques plus rapides sont connues! Seulement que vous êtes seul ici.

On peut aussi souligner que md5 ($ b. $ secret) est une sorte de "hachage clé", c'est-à-dire un MAC (code d'authentification du message). Construire un Mac sur une fonction de hachage n'est pas facile, précisément à cause de choses comme l'attaque de prolongation de longueur ( MD5 ($ secret. $ B) , par exemple, serait un très mauvais Mac). Une manière robuste de construire un MAC sur une fonction de hachage a été conçue; il s'appelle HMAC et implique deux invocations de la fonction de hachage sous-jacente (mais l'une d'entre elles est sur une petite entrée, donc c'est efficace néanmoins). Sécurité de HMAC, plus précisément de la manière dont le HMAC peut être considéré comme se comporter comme un oracle aléatoire, peut être "éprouvé", c'est-à-dire réduit à certaines propriétés internes de la fonction de hachage qui sont crues vraies dans le cas de SHA-256 (voir Nouvelles preuves pour NMAC et HMAC: Sécurité sans résistance à la collision par Mihir Bellare pour les détails de Gory). En utilisant HMAC / SHA-256 sur $ B , avec $ secret comme clé, vous bénéficiez de ces résultats de sécurité et votre construction serait plus robuste de manière convaincante. Encore une fois, je ne prétends pas qu'il y a une attaque connue sur md5 ($ b. $ Secret) , seulement que l'utilisation de MD5 et la construction faite maison Mac drapeaux rouges, qui dégradent le niveau de confiance qui peut être transmis à un tel système.


0 commentaires