Quand le CRC est-il plus approprié d'utiliser que le MD5/SHA1?

quand est-il approprié d'utiliser le CRC pour la détection des erreurs par rapport à des fonctions de hachage plus modernes telles que MD5 ou SHA1? Le premier est-il plus facile à mettre en œuvre sur le matériel intégré?

106
demandé sur Gili 2009-06-15 19:43:51

13 réponses

CRC fonctionne bien pour détecter les erreurs aléatoires dans les données qui pourraient se produire, par exemple, de l'interférence de réseau, bruit de ligne, distorsion, etc.

CRC est beaucoup moins complexe sur le plan informatique que MD5 ou SHA1. Utiliser une fonction de hachage comme MD5 est probablement exagéré pour la détection d'erreur aléatoire. Cependant, l'utilisation du CRC pour tout type de contrôle de sécurité serait beaucoup moins Sécuritaire qu'une fonction de hachage plus complexe telle que MD5.

et oui, le CRC est beaucoup plus facile pour mettre en œuvre sur le matériel embarqué, vous pouvez même obtenir différentes solutions packagées pour cela sur IC.

90
répondu defines 2012-04-07 23:05:00

CRC est conçu contre les changements involontaires dans les données. C'est-à-dire que c'est bon pour détecter les erreurs involontaires, mais sera inutile comme un moyen de s'assurer qu'une donnée n'a pas été traitée malicieusement.

Voir aussi this .

28
répondu Liran Orevi 2016-01-19 16:27:47

j'ai trouvé une étude qui montre comment inapproprié les hachures CRC sont pour les tables de hachage . Il explique également les caractéristiques réelles de l'algorithme. L'étude comprend également l'évaluation des autres algorithmes de hachage et est une bonne référence pour les garder.

La conclusion pertinente sur CRC pour le hachage:

CRC32 n'a jamais été conçu pour une utilisation de table de hachage. Il est vraiment pas de bonne raison de l'utiliser à cette fin, et je vous recommande d'éviter de le faire. Si vous décidez d'utiliser CRC32, il est essentiel que vous utilisiez les bits de hachage de la fin opposée à celle dans laquelle les octets clés sont introduits. Dans quel but cela dépend de la mise en œuvre spécifique de la CRC32. Ne traitez pas CRC32 comme une fonction de hachage "boîte noire" et ne l'utilisez pas comme une fonction de hachage à usage général. Assurez-vous de tester chaque application pour les qualités.

Mise à jour

il semble que le site soit en panne. Le Internet archive a une copie cependant.

17
répondu Andre Luus 2014-01-21 06:50:34

j'ai couru chaque ligne de ce code PHP dans 1.000.000 boucle. Les résultats sont dans les commentaires (#).

hash('crc32', 'The quick brown fox jumped over the lazy dog.');#  750ms   8 chars
hash('crc32b','The quick brown fox jumped over the lazy dog.');#  700ms   8 chars
hash('md5',   'The quick brown fox jumped over the lazy dog.');#  770ms  32 chars
hash('sha1',  'The quick brown fox jumped over the lazy dog.');#  880ms  40 chars
hash('sha256','The quick brown fox jumped over the lazy dog.');# 1490ms  64 chars
hash('sha384','The quick brown fox jumped over the lazy dog.');# 1830ms  96 chars
hash('sha512','The quick brown fox jumped over the lazy dog.');# 1870ms 128 chars

ma conclusion:

  • utilisez" crc32b "si vous avez besoin de http://en.wikipedia.org/wiki/Cyclic_redundancy_check et vous ne vous souciez pas de la sécurité.
  • utilisez" sha256 " (ou plus) lorsque vous avez besoin d'une couche de sécurité supplémentaire.

  • ne pas utiliser "md5" ou "sha1" parce qu'ils ont:

    1. quelques problèmes de sécurité quand vous vous souciez de la sécurité
    2. chaîne de hachage plus longue et sont plus lents que "crc32b" quand tout ce dont vous avez besoin est CRC
16
répondu Martin 2012-08-06 12:21:36

Pour le CRC de l'information sur la mise en œuvre, de la vitesse et de la fiabilité de voir Un guide indolore à l'erreur CRC algorithmes de détection de . Il y a tout sur CRCs.

sauf si quelqu'un va essayer de modifier vos données de manière malveillante et cacher le changement CRC est suffisant. Il suffit d'utiliser un "bon" (standard) polinomial.

10
répondu Gerhard 2009-12-03 08:36:56

vous ne dites pas ce que vous essayez de protéger.

un CRC est souvent utilisé dans les systèmes intégrés comme une vérification contre la corruption accidentelle de données par opposition à la prévention de la modification malveillante du système. Des exemples d'endroits où un CRC peut être utile est de valider une image EPROM pendant l'initialisation du système pour se prémunir contre la corruption du firmware. Le bootloader système calculera le CRC pour le code d'application et comparera avec la valeur stockée avant de laisser le code s'exécuter. Cela protège contre la possibilité de corruption accidentelle de programme ou un téléchargement échoué.

un CRC peut également être utilisé de manière similaire pour protéger les données de configuration stockées dans FLASH ou EEPROM. Si le CRC est incorrect, alors les données peuvent être signalées comme invalides et un jeu de données par défaut ou de sauvegarde utilisé. Le CRC peut être invalide en raison d'une défaillance de l'appareil ou si l'Utilisateur a coupé l'alimentation pendant une mise à jour de la mémoire de données de configuration.

il y a eu des commentaires qu'un hachage fournit une plus grande probabilité de détecter la corruption qu'un CRC avec des erreurs de bits multiples. C'est vrai, et la décision d'utiliser ou non un CRC 16 ou 32 bits dépendra des conséquences de sécurité d'un bloc de données corrompu utilisé et si vous pouvez justifier la probabilité 1 sur 2^16 ou 2^32 qu'un bloc de données soit incorrectement déclaré valide.

de nombreux appareils ont un générateur CRC intégré pour les algorithmes standards. Le La série Msp430f5x du Texas a une implémentation matérielle de la norme CRC-CCITT.

7
répondu ʎəʞo uɐɪ 2009-06-16 12:16:39

CRC32 est plus rapide et le hachage est seulement 32bits de long.

utilisez-le quand vous voulez juste un checksum rapide et léger. Le CRC est utilisé dans ethernet.

si vous avez besoin de plus de fiabilité, il est préférable d'utiliser une fonction de hachage moderne.

6
répondu François 2009-06-15 15:51:23

n'utilisez CRC que si les ressources de calcul sont très serrées (c.-à-d. certains environnements embed) ou si vous avez besoin de stocker/transporter de nombreuses valeurs de sortie et l'espace/la bande passante est serrée (comme Les CRC sont habituellement 32-bit où une sortie MD5 est de 128-bit, SHA1 160 bit, et d'autres variantes de SHA jusqu'à 512 bit).

N'utilisez jamais CRC pour les contrôles de sécurité car un CRC est très facile à"simuler".

même pour la détection d'erreur accidentelle (plutôt que la détection de changement malveillant) mieux qu'une simple CONVENTION. En partie à cause de la façon simple dont un CRC est calculé (et en partie parce que les valeurs de CRC sont habituellement plus courtes que les sorties de hachage commun ont donc une gamme beaucoup plus petite de valeurs possibles) il est beaucoup plus probable que, dans une situation où il ya deux erreurs ou plus, une erreur masquera une autre de sorte que vous finissez avec le même CRC malgré deux erreurs.

en bref: sauf si vous avez la raison pas pour utiliser un algorithme de hachage décent, éviter simple CRCs.

5
répondu David Spillett 2009-06-15 16:48:22

CRC32 est beaucoup plus rapide et a parfois un support matériel (i.e. sur les processeurs Nehalem). Vraiment, la seule fois où vous l'utiliseriez c'est si vous interfacez avec le matériel, ou si vous êtes vraiment tight on performance

4
répondu Paul Betts 2009-06-15 15:47:07

je suis tombé sur une utilisation du CRC récemment qui était intelligent. L'auteur du jdupe outil d'identification et de suppression de la duplication de fichiers (le même auteur de l'outil populaire exif jhead) l'utilise lors du premier passage à travers les fichiers. Un CRC est calculé sur la première 32K de chaque fichier pour marquer les fichiers qui semblent être les mêmes, aussi les fichiers doivent avoir la même taille. Ces fichiers sont ajoutés à une liste de fichiers sur lequel faire une comparaison binaire. Il accélère la vérification des fichiers multimédia volumineux.

4
répondu John Wright 2010-12-09 02:43:16

tout dépend de vos exigences et de vos attentes.

voici de brèves différences rapides entre ces fonction de hachage algorithmes:

CRC (CRC-8/16/32/64)

  • est pas un algorithme de hachage cryptographique (c'est à l'aide d'une fonction linéaire basée sur des contrôles de redondance cyclique)
  • peut produire soit 9, 17, 33 ou 65 bits
  • pas destiné à être utilisé pour les fins de depuis en fait pas de chiffrement des garanties,
  • Impropre à l'utilisation dans les signatures numériques, car il est facilement réversible 2006 ,
  • ne doit pas être utilisé à des fins de cryptage,
  • différentes chaînes peuvent générer la collision,
  • inventé en 1961 et utilisé dans Ethernet et de nombreuses autres normes,

MD5

  • est un algorithme de hachage cryptographique,
  • produisant une valeur de hachage de 128 bits (16 octets) (nombres hexadécimaux à 32 chiffres)
  • c'est un hachage cryptographique, mais est considéré comme obsolète si vous vous inquiétez au sujet de la sécurité,
  • il y a des chaînes connues qui ont le même hachage MD5 valeur
  • peut être utilisé à des fins de cryptage,

SHA-1

  • est un algorithme de hachage cryptographique,
  • produit une valeur de hachage de 160 bits (20 octets) connue comme un condensé de messages
  • c'est un hachage cryptographique et depuis 2005, il n'est plus considéré comme sûr,
  • peut être utilisé à des fins de cryptage,
  • un exemple de collision sha1 a été trouvé
  • publiée pour la première fois en 1993 (sous SHA-0), puis en 1995 sous SHA-1,
  • series: SHA-0, SHA-1, SHA - 2, SHA - 3,

    en résumé, L'utilisation de SHA-1 n'est plus considérée comme sûre contre les adversaires bien financés, parce qu'en 2005, les cryptanalyseurs ont trouvé des attaques sur SHA-1 qui suggère qu'il peut ne pas être assez sûr pour une utilisation continue schneier . Le NIST des États-Unis recommande aux organismes fédéraux de cesser D'utiliser SHA1-1 pour les applications exigeant une résistance aux collisions et d'utiliser SHA-2 après 2010 NIST .

par conséquent, si vous êtes à la recherche d'une solution simple et rapide pour vérifier l'intégrité d'un fichier (contre la corruption), ou à des fins de mise en cache simple en termes de performance, vous pouvez considérer CRC-32, pour le hachage, vous pouvez envisager D'utiliser MD5, mais si vous développez une application professionnelle (qui devrait être sécurisée et cohérente), pour éviter toute probabilité de collision - utiliser SHA-2 et au-dessus (comme SHA-3).

Performance

un simple test de référence en PHP:

# Testing static text.

$ time php -r 'for ($i=0;$i<1000000;$i++) crc32("foo");'
real    0m0.845s
user    0m0.830s
sys     0m0.008s

$ time php -r 'for ($i=0;$i<1000000;$i++) md5("foo");'
real    0m1.103s
user    0m1.089s
sys     0m0.009s

$ time php -r 'for ($i=0;$i<1000000;$i++) sha1("foo");'
real    0m1.132s
user    0m1.116s
sys   0m0.010s

# Testing random number. 

$ time php -r 'for ($i=0;$i<1000000;$i++) crc32(rand(0,$i));'
real    0m1.754s
user    0m1.735s
sys     0m0.012s\

$ time php -r 'for ($i=0;$i<1000000;$i++) md5(rand(0,$i));'
real    0m2.065s
user    0m2.042s
sys     0m0.015s

$ time php -r 'for ($i=0;$i<1000000;$i++) sha1(rand(0,$i));'
real    0m2.050s
user    0m2.021s
sys     0m0.015s

Related:

4
répondu kenorb 2017-05-23 12:26:10

Permet de commencer avec les bases.

en cryptographie, un algorithme de hachage convertit beaucoup de bits en moins de bits par une opération de digestion. Les hachages sont utilisés pour confirmer l'intégrité des messages et des fichiers.

tous les algorithmes de hachage génèrent des collisions. une collision se produit lorsque plusieurs combinaisons à plusieurs bits produisent la même sortie à moins de bits. La robustesse Cryptographique d'un algorithme de hachage est définie par l'incapacité pour un individu de déterminer ce que la sortie va être pour une entrée donnée, parce que s'ils le pouvaient ils pouvaient construire un fichier avec un hachage qui correspond à un fichier légitime et compromettre l'hypothèse de l'intégrité du système. La différence entre CRC32 et MD5 est que MD5 génère un plus gros hachage qui est plus difficile à prédire.

quand vous voulez mettre en œuvre l'intégrité du message - ce qui signifie que le message n'a pas été altéré en transit - l'incapacité de prédire les collisions est un propriété importante. Un hash 32-bit peut décrire 4 milliards de messages différents ou des fichiers utilisant 4 milliards de différents hash uniques. Si vous avez 4 milliards et 1 fichiers, vous êtes garanti d'avoir 1 collision. 1 TB Bitspace a la possibilité de milliards de Collisions. Si je suis un attaquant et que je peux prédire ce que ce hash 32 bits va être, je peux construire un fichier infecté qui entre en collision avec le fichier cible; qui a le même hash.

de plus si je fais une transmission de 10mbps, alors la possibilité qu'un paquet soit corrompu juste à droite pour contourner crc32 et continuer le long de la destination et exécuter est très faible. Disons qu'à 10mbps je reçois 10 erreurs\second . Si je passe à 1gbps, maintenant je reçois 1.000 erreurs par seconde . Si je ram jusqu'à 1 exabit par seconde, alors j'ai un taux d'erreur de 1.000.000.000 d'erreurs par seconde . Disons que nous avons un taux de collission de 1\1.000.000 erreurs de transmission, ce qui signifie 1 sur un million d'erreurs de transmission résulte dans les données corrompues passer à travers non détecté. À 10 Mbit / s, je recevais des données d'erreur envoyées toutes les 100 000 secondes ou environ une fois par jour. À 1 Gbps, ça arrive toutes les 5 minutes. À 1 exabit par seconde, on parle plusieurs fois par seconde.

si vous ouvrez wireshark, vous verrez que votre en-tête ethernet typique a un CRC32, votre en-tête IP a un CRC32, et votre en-tête TCP a un CRC32, et c'est en plus de ce que les protocoles de couches supérieures peuvent faire; par exemple IPSEC pourrait utiliser MD5 ou SHA pour la vérification de l'intégrité en plus de ce qui précède. Il y a plusieurs niveaux d'erreurs de vérification dans les communications réseau typiques, et elles continuent de faire des erreurs de temps en temps à des vitesses inférieures à 10mbps.

contrôle de redondance cyclique (CRC) a plusieurs versions communes et plusieurs peu commune, mais est généralement conçu pour dire juste lorsqu'un message ou un fichier a été endommagé pendant le transit (retournement de plusieurs bits). CRC32 par lui-même n'est pas un très bon protocole de vérification d'erreur par les normes d'aujourd'hui dans les grands environnements d'entreprise scalaire en raison du taux de collision; les utilisateurs moyens disque dur peut avoir plus de 100k fichiers, et des fichiers-actions sur une entreprise peut avoir des dizaines de millions. Le rapport entre l'espace de hachage et le nombre de fichiers est tout simplement trop faible. Le CRC32 est peu coûteux à mettre en œuvre sur le plan informatique alors que le MD5 ne l'est pas.

MD5 a été conçu pour arrêter l'utilisation intentionnelle de collissions pour faire paraître un fichier malveillant. C'est considéré comme non sûr parce que l'espace hashspace a été suffisamment mappé pour permettre à certaines attaques de se produire, et certaines collissions sont préditables. SHA1 et SHA2 sont les nouveaux enfants du quartier.

pour la vérification de fichiers, Md5 commence à être utilisé par beaucoup de vendeurs parce que vous pouvez faire des fichiers multi-gigaoctets ou multi-octets rapidement avec elle et empiler que ontop de l'utilisation de L'OS général et le soutien de CRC32. Ne soyez pas surpris si dans la prochaine décennie, les systèmes de fichiers commencent à utiliser MD5 pour la vérification des erreurs.

3
répondu bobinator 2013-11-09 10:08:45
Le code

est plus simple et plus rapide.

pour quoi faire?

1
répondu Macarse 2009-06-15 15:47:51