Une fonction est:
$a == md5($b . $secret);
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>
3 Réponses :
Téléchargez une table arc-en-ciel / un mot de passe de mot de passe célèbre! :) p>
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 B> Aide, cependant.
C'est une question intéressante, car dans les scénarios typiques de la sécurité informatique, vous ne pouvez pas choisir Dans votre exemple d'autre part, vous êtes libre de choisir les deux valeurs. Vous pouvez prendre un secret arbitraire, par exemple J'ai choisi Cela nous conduit enfin à la vraie réponse. Les deux conditions données p>
Ne travaillez pas ensemble. Dans mon exemple, j'ai défini Si nous supposons qu'il y a au moins une solution pour toutes les paires possibles de $ a code> et
$ B code> comme attaquant. Si vous êtes capable de saisir un mot de passe haché, par exemple,
$ a code> et
$ B code> 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 code> est disponible. P>
Test code> et choisissez les valeurs de
$ A code> et
$ b code> en conséquence. Je choisis $ B pour être une chaîne
vide code> et calculez
$ A code> avec
$ a = md5 ($ secret) code>, ce qui donne lieu dans
098F6BCD4621D373Cade4E832627B4F6 CODE>. P>
$ a = "098f6bcd4621d373cade4f6" code> et
$ b = "" code> et vous demandez si
$ == "test" code>. Vous dites vrai et je dis un problème résolu. P>
$ secret code> moi-même. J'ai violé la deuxième condition. D'autre part, je ne peux pas choisir
$ A code> et
$ B code> arbitrairement sans les dériver de
$ secret code>, car ils n'ont peut-être pas une solution. < / p>
$ A code> et
$ b code> (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 code>, je voudrais toujours définir
$ b = "" code>, pour rendre l'attaque aussi facile aussi possible. Les tables arc-en-ciel sont vos amis dans ce cas. P>
Si MD5 se comporte comme un oracle aléatoire (c'est un gros "si" ", voir ci-dessous), puis la recherche exhaustive sur a aléatoire oracle est un objet mythique qui peut être considéré comme une boîte noire déterministe: Vous savez rien em> 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. P >
MD5, cependant, est pas em> un oracle aléatoire. Par exemple, nous pouvons construire des collisions pour MD5 beaucoup plus rapidement que la résistance théorique 2 64 sup> 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é On peut aussi souligner que $ secret code> est la meilleure attaque possible - et, plus important encore, chaque" suppose " "Sur la valeur de
$ secret code> 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 code>" ou "
false code>" 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 code>", sauf s'il frappe la sortie MD5 correcte, soit hors chance (probabilité 2 -128 sup>, qui est vraiment darn Petit), ou parce qu'il devinait correctement la valeur du
$ secret code> à 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 . P>
SHA256 ($ a) code>, on peut calculer
sha256 ($ a. $ b) code> sans savoir
$ A code>, pour des valeurs presque arbitraires de
$ B code>). 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. P>
md5 ($ b. $ secret) code> 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) code>, 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
$ B code>, avec
$ secret code> 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) code>, seulement que l'utilisation de MD5 et em> la construction faite maison Mac drapeaux rouges, qui dégradent le niveau de confiance qui peut être transmis à un tel système. P>