web-dev-qa-db-fra.com

MD5 vs CRC32: Lequel est le mieux pour un usage courant?

Récemment, j'ai lu quelque part que, bien que CRC32 et MD5 soient suffisamment uniformes et stables, CRC32 est plus efficace que MD5. MD5 semble être un algorithme de hachage très utilisé, mais si CRC32 est plus rapide/plus efficace en mémoire, pourquoi ne pas l'utiliser?

24
bytefire

MD5 est un algorithmeone-way-hash.Les algorithmes one-way-hashsont souvent utilisés en cryptographie car ils ont la propriété (par conception) qu'il est difficile de trouver l'entrée qui produit une valeur de hachage spécifique. Spécifiquement, il est difficile de créer deux entrées différentes qui donnent le même hash à sens unique. Celles-ci sont souvent utilisées pour montrer qu’une quantité de données n’a pas été modifiée intentionnellement depuis la production du code de hachage. Comme le MD5 est un algorithmeone-way-hash, l’accent est mis sur la sécurité avant la vitesse. Malheureusement, MD5 est maintenant considéré comme non sécurisé.

CRC32 est conçu pour détecter les modifications accidentelles des données et est couramment utilisé dans les réseaux et les périphériques de stockage. Cet algorithme n'a pas pour but de protéger contre les modifications intentionnelles, mais plutôt de détecter les accidents tels que les erreurs de réseau et les erreurs d'écriture sur le disque, etc. L'accent est mis sur la vitesse plutôt que sur la sécurité.

40
Ebbe M. Pedersen

De article de Wikipedia sur MD5 (texte souligné par moi):

MD5 est une fonction de hachage cryptographique largement utilisée

Maintenant CRC32 :

Le CRC est un code de détection d'erreur

Donc, comme vous pouvez le constater, CRC32 n’est pas un algorithme de hachage}. Cela signifie que vous ne devriez pas l'utiliser pour le hachage, car il n'a pas été conçu pour cela.

Et je pense qu'il n'est pas très logique de parler d'utilisation commune, car des algorithmes similaires sont utilisés à des fins différentes, chacune avec des exigences très différentes. Il n'y a pas d'algorithme unique qui convient le mieux à une utilisation courante, vous devez plutôt choisir l'algorithme le mieux adapté à votre utilisation spécifique.

17
svick

Une grande différence entre CRC32 et MD5 réside dans le fait qu’il est généralement facile de choisir une somme de contrôle CRC32, puis de générer un message haché pour cette somme de contrôle, même si des contraintes lui sont imposées, alors que MD5 est spécifiquement conçu pour effectuer ce tri. difficile (bien qu’il montre son âge - c’est maintenant possible dans certaines situations).

Si vous vous trouvez dans une situation où il est possible qu'un adversaire décide de s'asseoir et de créer un chargement de messages avec des hachages CRC32 spécifiés, de reproduire d'autres messages ou tout simplement de faire en sorte que la table de hachage fonctionne très mal valeur, alors MD5 serait une meilleure option. (Encore mieux, à mon humble avis, ce serait HMAC-MD5 avec une valeur de clé unique pour le module l’utilisant et inconnue en dehors de celui-ci).

4
mcdowella

Les CRC sont utilisés pour se prémunir contre les erreurs aléatoires, par exemple lors de la transmission de données.

Les fonctions de hachage cryptographique sont conçues pour empêcher les adversaires intelligents de forger le message, bien que MD5 ait été cassé à cet égard.

3
starblue

Cela dépend de vos objectifs. Voici quelques exemples de ce qui peut être fait avec CRC32 par rapport à MD5:

Détecter les fichiers en double

Si vous voulez vérifier si deux fichiers sont identiques, le hachage CRC32 est la solution car il est plus rapide que MD5. Mais soyez prudent: le CRC ne vous indique de manière fiable que si les fichiers binaires sont différents; elle ne vous dit pas si elles sont identiques. Si vous obtenez des hachages différents pour deux fichiers, ils ne peuvent pas être le même fichier, vous pouvez donc les rejeter car ils sont dupliqués très rapidement.

Quels que soient vos clés, le hachage CRC32 sera l’une des 2 ^ 32 valeurs différentes. En supposant des échantillons de fichiers aléatoires, la probabilité de collision entre les hachages de deux fichiers donnés est de 1/2 ^ 32. La probabilité de collision entre l’un des fichiers N donnés est de (N - 1)/2 ^ 32.

Détection de logiciels malveillants

Si la sécurité est un problème, comme le téléchargement d'un fichier et l'analyse du hachage de la source pour vérifier s'il est valide, le CRC est une mauvaise option. En effet, les attaquants créent des programmes malveillants dotés du même hachage CRC. Dans ce cas, MD5 est plus sécurisé - CRC n’a pas été conçu pour la sécurité. Deux binaires différents sont plus susceptibles d'avoir un hachage MD5 différent d'un hachage CRC. 

Sécuriser les mots de passe pour l'authentification de l'utilisateur

Le cryptage synchrone (unidirectionnel) est généralement plus facile, plus rapide et plus sûr que le cryptage asynchrone (bidirectionnel). Il s'agit donc d'une méthode courante pour stocker les mots de passe. Fondamentalement, le mot de passe sera combiné avec d'autres données (sels), et parfois le nom d'utilisateur, puis le hachage sera effectué sur toutes ces données combinées. Les sels aléatoires réduisent considérablement les chances que deux mots de passe soient identiques. Par défaut, le même mot de passe aura le même hachage pour la plupart des algorithmes, vous devez donc ajouter votre propre caractère aléatoire. Bien sûr, le sel doit être sauvegardé à l'extérieur.

À quoi sert un mot de passe que vous ne pouvez pas voir? Vous n'avez pas besoin de le voir pour vérifier le compte d'un utilisateur. Vous ne prenez que les informations qu’ils vous communiquent lorsqu’ils se connectent. Vous utilisez leur nom d’utilisateur pour obtenir leur sel. Vous combinez ensuite ce sel avec les informations d'identification de l'utilisateur (mot de passe et éventuellement nom d'utilisateur) pour obtenir un nouveau hachage. Si cela correspond à celui de la base de données, alors leur connexion est réussie. Puisque vous stockez ces mots de passe, ils doivent être TRÈS sécurisés. Je n'ai pas mentionné les vecteurs d'initialisation, le hachage itératif, la théorie du hasard, etc.

Les hachages cryptographiques sont plus coûteux à calculer qu'un CRC. En outre, de meilleurs hachages comme sha256 sont plus sûrs, mais plus lents à hacher. Incidemment, sha512 est plus rapide que sha256.

3
Victor Stoddard

Vous devez utiliser MD5, qui est long de 128 bits . CRC32 n’est que de 32 bits et son but est de détecter les erreurs afin de ne pas hacher les choses . Si vous n’avez besoin que d’une fonction de hachage 32 bits, vous pouvez choisir les 32 bits qui sont retournés. par MD5 les LSB/MSB/que ce soit.

3
0x90

La principale raison pour laquelle CRC32 (ou CRC8 ou CRC16) est utilisé à quelque fin que ce soit est qu’il peut être implémenté à moindre coût dans le matériel comme moyen de détecter la corruption "aléatoire" de données. Même dans les implémentations logicielles, il peut s'avérer utile comme moyen de détecter une corruption aléatoire des données provenant de causes matérielles (telles qu'une ligne de communication bruyante ou un support flash non fiable). Il n’est pas inviolable et ne convient généralement pas non plus pour vérifier si deux fichiers arbitraires sont vraisemblablement identiques: si chaque bloc de données du fichier est immédiatement suivi d’un CRC32 de ce bloc (certains formats de données le font), Le bloc aura le même effet sur le CRC du fichier global qu'un bloc de tous les octets nuls, quels que soient les données stockées dans ce bloc.

Si l’on a les moyens de calculer rapidement un CRC32, il peut être utile, associé à d’autres méthodes de somme de contrôle ou de hachage, si différents fichiers ayant des CRC identiques seraient susceptibles de différer dans l’un des autres et inversement, les autres méthodes de total de contrôle ou de hachage seront probablement plus faciles à calculer en fonction du degré de protection qu'elles fournissent.

3
supercat

Le commun d'un homme est rare chez un autre. Commun varie selon le domaine dans lequel vous travaillez.

Si vous effectuez des transmissions très rapides ou travaillez avec des codes de hachage pour de petits articles, les CRC sont meilleurs car ils sont beaucoup plus rapides et les chances d'obtenir le même CRC 16 ou 32 bits pour des données erronées sont minces.

S'il s'agit de mégaoctets de données, par exemple, d'un iso linux, vous risquez de perdre quelques mégaoctets et de vous retrouver avec le même CRC. Pas si probable avec MD5. Pour cette raison, MD5 est normalement utilisé pour des transferts énormes. C'est plus lent mais plus fiable.

Donc, fondamentalement, si vous voulez faire une énorme transmission et vérifier à la fin si vous avez le bon résultat, utilisez MD5. Si vous souhaitez émettre par petits morceaux, utilisez CRC.

0
cup