web-dev-qa-db-fra.com

Quelle est la probabilité d'une collision avec MD5 par rapport à SHA256 (pour vérifier l'intégrité des fichiers)?

De nos jours, de nombreux sites proposent des hachages MD5 et SHA256 pour vérifier l'intégrité des fichiers ou archives téléchargés.

Je me demande dans quelle mesure l'utilisation des hachages SHA256 pour les contrôles d'intégrité est-elle plus sûre?

Remarque: Considérez le contenu du fichier comme une entrée aléatoire (pas d'attaques)

Remarque: semble être une question simple (et j'ai lu collisions sur wikipedia ), mais je n'ai pas trouvé de réponse sur ce site

7
Marcel

Je me demande à quel point l'utilisation des hachages SHA256 est plus sûre pour les contrôles d'intégrité?

Remarque: Considérez le contenu du fichier comme une entrée aléatoire (pas d'attaques)

Sur la base de votre note "pas d'attaques", il me semble que vous demandez:

"Quelle est la probabilité qu'un changement aléatoire (par exemple, un basculement de bits pendant le téléchargement) entraîne la création d'un fichier nouveau/différent avec le même somme de contrôle que le fichier d'origine?"

Dans le cas de MD5, cette probabilité est: 1/(2 ^ 128) = 2,94e-39 = 0,0000000000000000000000000000000000000000294

Pour le cas de SHA256, cette probabilité est: 1/(2 ^ 256) = 8.64e-78 = 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000864


Mise en garde importante: Dans le cas hypothétique mentionné ci-dessus de changements aléatoires, MD5 et SHA256 sont tous deux de bons choix. Cependant, dans la vraie vie, la fonction de hachage MD5 est désapprouvée car elle a été cassée (des collisions ont été trouvées). Donc, le vrai conseil est: utilisez SHA256 et non MD5 pour l'intégrité des fichiers.

8
hft

Il semble y avoir une certaine confusion quant aux capacités d'une attaque par collision.

Deux des propriétés qu'un hachage cryptographique doit avoir sont résistance à la collision et résistance à la pré-image .

Si un hachage est résistant aux collisions , cela signifie qu'un attaquant ne pourra pas trouver deux entrées qui aboutissent à la même sortie. Si un hachage est résistant à la pré-image , cela signifie qu'un attaquant ne pourra pas trouver une entrée qui a une sortie spécifique. MD5 est vulnérable aux collisions depuis longtemps, mais il est toujours résistant à la pré-image.


Qu'est-ce que cela signifie pour l'intégrité?

Si vous croyez que la partie qui a initialement haché les données pour vous fournir le contrôle d'intégrité n'est pas malveillante et n'a permis à personne de modifier les données à l'avance ( any une partie des données, même si 2 images, vidéos ou pdfs regardez identiques, ils peuvent être très différents), alors MD5 devrait être suffisant pour vérifier l'intégrité, et SHA-256 ne devrait pas offrir beaucoup plus de sécurité (sauf avenir) attaques sur la résistance à la pré-image de MD5).

Si un attaquant a pu apporter des modifications aux données (même des modifications apparemment bénignes), alors SHA-256 sera plus sécurisé, car avec MD5, l'attaquant aurait pu créer un fichier malveillant avec le même hachage.


Ces contrôles d'intégrité sont-ils utiles?

Dans de nombreux cas, pas vraiment. Si vous téléchargez le fichier via HTTPS à partir du même site Web fournissant la valeur de hachage, vous bénéficiez déjà des utilisations de MAC TLS pour la vérification de l'authenticité, donc un MitM ne pourra pas modifier le fichier en transit. Si quelqu'un est capable de modifier le fichier sur le site par malveillance, il peut également modifier le hachage.

Un cas où il le fait est logique de vérifier un hachage MD5 ou SHA-256 pour un fichier est si vous téléchargez le fichier à partir d'un miroir et vérifiez le hachage par rapport à celui fourni par le site de confiance d'origine.

13
AndrolGenhald

Il existe des vulnérabilités de collision MD5 et il est possible de générer intentionnellement 2 fichiers avec des sommes MD5 identiques.

Aucune collision SHA256 n'est connue, et à moins qu'il n'y ait une faiblesse sérieuse dans l'algorithme, il est extrêmement peu probable qu'on en trouve .

Pour vérifier qu'un fichier n'a pas été accidentellement corrompu, MD5 est probablement suffisant. S'il est possible qu'il ait été intentionnellement modifié, MD5 n'est pas sûr et vous devriez vous en tenir à SHA256.

3
Alexander O'Mara

MD5 crée un hachage 128 bits, tandis que SHA256 crée un hachage 256 bits.

On pourrait dire que le SHA256 est "deux fois plus sûr" que le MD5, mais le risque de collision aléatoire est vraiment négligeable dans les deux cas. Je dirais que MD5 offre une protection d'intégrité suffisante.

Il y a des attaques pour créer délibérément des collisions MD5, mais la probabilité de trouver une collision en cas d'accident est toujours déterminée par la taille du hachage, donc environ 2/2128.

Il n'y a actuellement pas deux fichiers distincts dans le monde qui ont le même hachage SHA256. Il existe des fichiers distincts qui ont le même hachage MD5, mais uniquement parce qu'ils ont été créés à dessein.

2
Sjoerd

De nos jours, MD5 et SHA256 résistent à une attaque de pré-image.

Cela signifie qu'il serait presque impossible pour quelqu'un de remplacer le fichier par un autre avec le même hachage {MD5 | SHA256}.

Cependant, vous devez noter

  • MD5 est une fonction de hachage cassée. Les attaques ne feront qu'augmenter (il y avait un attaque théorique il y a 10 ans avec une complexité de calcul de 2123,4 ), il y a peu de raisons de commencer à utiliser ce hachage sur un nouveau projet en 2019.
  • Il est mal vu d'utiliser MD5. Votre utilisation réelle de MD5 n'est peut-être pas exploitable, mais il vous semble mauvais d'utiliser ce hachage (uniquement) .
  • Vos entrées peuvent ne pas être aussi aléatoires que prévu. Les autorités de certification utilisaient MD5 pour les signatures de certificats, sur le contenu qu'elles ont créé, pensant qu'elles étaient sûres. Puis, en décembre 2008, une véritable preuve de concept de l'attaque a été publiée.
  • Vous pouvez toujours utiliser les deux Si vous ciblez des utilisateurs finaux, vous pouvez simplement fournir plusieurs hachages (MD5, SHA1, SHA256 ...) et déplacer la décision aux utilisateurs finaux.

Donc, si vous devez prendre une décision entre l'utilisation de MD5 et SHA256, optez pour SHA256 .

1
Ángel

Si vous excluez la malveillance ou tout autre comportement intentionnel/conscient de MD5, MD5 va vraiment bien.

Il y a bien sûr une chance de collision accidentelle de MD5 et SHA256 les chances du SHA256 sont beaucoup plus faibles. Cependant, pour un certain contexte: les chances d'une collision accidentelle sur MD5 sont bien plus faibles que les chances que le drapeau de contrôle soit accidentellement renversé par un rayon comique, pour faites en sorte que les hachages soient identiques quand ils n'étaient pas voir ici , avec quelques mises en garde.

Si vous êtes intéressé par des entrées non aléatoires (comme la malveillance), SHA256 pourrait être un meilleur choix, mais cela dépend de ce que vous pensez que l'attaquant pourrait contrôler.

Si vous souhaitez simplement vous assurer que le système est résistant aux accidents, il existe de meilleurs endroits pour passer votre temps que l'algorithme de hachage que vous utilisez.

1
drjpizzle