Est-ce en utilisant 2 différentes fonctions de hachage une bonne façon de vérifier l'intégrité des fichiers?

StackOverflow https://stackoverflow.com/questions/537989

  •  22-08-2019
  •  | 
  •  

Question

J'ai un site Web où les utilisateurs peuvent télécharger leurs fichiers; ceux-ci sont stockés sur le serveur et les métadonnées enregistrées dans une base de données. Je mise en œuvre des contrôles d'intégrité simples, à savoir « est le contenu de ce fichier maintenant octet par octet identique quand il a été chargé? »

Un exemple: pour un contenu de userfile.jpg, hachage MD5 est 39f9031a154dc7ba105eb4f76f1a0fd4 et hachage SHA-1 est 878d8d667721e356bf6646bd2ec21fff50cdd4a9. Si ce change de contenu de fichier, mais a le même hachage MD5 avant et après, est-il probable que le hachage SHA-1 restera également le même (Avec hash, parfois, vous pouvez obtenir une collision de hachage? - cela pourrait se produire avec deux algorithmes de hachage différents à la fois?)

Ou est calcul deux hash différentes pour un fichier inutile (et je devrais essayer un autre mécanisme de vérification de l'intégrité)?


Edit: Je ne suis pas vraiment inquiet de la corruption accidentelle, mais je suis censé empêcher les utilisateurs de modifier le fichier inaperçu ( anniversaire attaque et les amis).

Je vais probablement aller avec un hachage, SHA-512 - les contrôles ne se produisent pas que, souvent, d'être un goulot d'étranglement de performance et de toute façon, « Comme Bruce Schneier dit, il y a assez rapide, les systèmes d'insécurité déjà là-bas -. @ MichaelGG dans les commentaires ».

Était-ce utile?

La solution

MD5 est probablement sûr pour ce que vous faites, mais il n'y a aucune raison de continuer à utiliser un hachage avec des défauts connus. En fait, il n'y a aucune raison que vous ne devriez pas être usign SHA256 ou SHA512, à moins que vous avez un important goulot d'étranglement connu.

Edit: Pour clarifier, il n'y a aucune raison d'utiliser deux algorithmes; il suffit d'utiliser un qui correspond à ce que vous avez besoin. Si vous êtes inquiet au sujet des gens qui font des collisions MD5 sur vous (comme, est-ce une menace pour la sécurité?), Utilisez alors un algorithme qui est pas aussi faible, comme SHA256.

Edit 2: Pour faire face à un malentendu apparemment encore commun: Trouver une collision au hasard sur un hachage n'est pas 1/2 ^ n probabilité. Il est plus proche de 1/2 ^ (n / 2). Ainsi, un hachage de 128 bits peut probablement être entré en collision avec 2 ^ 64 tentatives. Voir attaque d'anniversaire pour plus de détails.

Autres conseils

Vérification du hachage MD5 par lui-même est suffisante pour la plupart des cas. Bien que si vous devez, il n'y a pas de mal à vérifier l'SHA1 en plus. Gardez à l'esprit la possibilité d'attraper quelque chose que vous manqueriez avec juste la vérification MD5 est extrêmement faible.

Notez que en termes d'évolutivité, le contrôle supplémentaire ajoute une charge inutile sur votre serveur.

Pour l'intégrité des fichiers (par exemple la corruption accidentelle / aléatoire), un hachage devrait suffire. 128 bits = 2 -128 probabilité d'une erreur non détectée, ce qui est à toutes fins pratiques assez petits.

Pour l'intégrité des fichiers cryptographique (par exemple l'assurance que quelqu'un n'a pas substitué malicieusement un autre fichier), je pense que vous parlez d'une approche courroie et bretelles.

MD5 est considéré comme « faible » dans le sens où il est possible de construire deux documents avec le même hachage avec une quantité beaucoup plus faible de temps CPU nécessaire qu'il prendrait pour une recherche de force brute ( « résistance à la collision » de MD5 A été brisé).

Mais ce n'est pas (pour autant que je sache) « faible » du point de vue, si vous avez un document arbitraire X, quelqu'un d'autre peut créer un document Y avec le même hachage avec un temps beaucoup plus facile qu'une force brute recherche (MD5 a encore « résistance préimage »). (La distinction est comme la différence entre aller à une fête et trouver deux personnes ayant le même anniversaire, par rapport à trouver une autre personne avec le même anniversaire que le vôtre.)

Même si MD5 est rompu à cet égard, il est peu probable que quelqu'un peut venir avec un algorithme pour créer des documents pour correspondre à un hachage MD5 arbitraire et un hachage arbritrary SHA1.

Cela semble un peu comme la tension entre les deux maximes « ne mettez pas tous vos œufs dans le même panier » vs « mettre tous ses œufs dans le même panier, et regarder le panier ». Ou comme dépenser de l'argent sur deux serrures à pêne dormant contre une serrure à pêne dormant qui est deux fois plus efficace et coûte deux fois plus. Idéalement, il serait préférable de passer du temps CPU calcul un hachage sécurisé 256 bits au lieu de deux moins sécurisées hash 128 bits en utilisant des algorithmes différents. (Oui je sais SHA1 est 160bit, c'est juste une illustration) Vous avez plus de chances d'obtenir de meilleures performances ainsi un niveau de sécurité souhaité - c'est, si ISN de hachage 256 bits « t cassé. Si elle est cassée, vous pouvez être mieux avec l'approche à deux algorithme juste pour couvrir vos paris.

Mais encore une fois si cela est juste l'intégrité pour protéger contre les erreurs, un hachage MD5 est très bien.

edit: citer certaines sources utiles: 1 2 3 , "MD5 aujourd'hui considéré comme nocif" , RFC4270 , dernière mise à jour sur la concurrence SHA-3 NIST et "le SHA-3 Zoo ".

En général, si les hash MD5 ne correspondent pas, le SHA1 (ou tout autre hachage similaire) ne correspondent pas non plus. Je ne vais pas dire qu'il n'y a pas des cas possibles où il ne pouvait pas arriver (parce que nous savons tous qu'il ya des collisions dans les deux algorithmes), mais je dirais que cela se produira probablement jamais dans votre situation.

Mes pensées sont que la fourniture d'un hachage est probablement suffisante; plus d'un hachage devient difficile à vérifier (avoir à vérifier un est assez mauvais, selon les services disponibles pour la plate-forme) , et je doute sérieusement que vous allez voir une telle corruption étonnante d'un fichier comme conduire à une collision parfaite.

Remarque: Ignorer les choses au sujet de la vérification étant une douleur; lors de la relecture de la question, je révisais - je pris le sens original à la vérification de hachage pour les utilisateurs de télécharger le fichier. Si, bien sûr, que est ce que signifiait, alors ce que je dis est toujours valable, je pense.

Parce que les deux hachages sont calculés différemment, deux fichiers avec le même hachage MD5 ne sont pas plus susceptibles d'avoir le même hachage SHA-1 de deux fichiers aléatoires. Si votre risque de collision au hasard soit avec hachage est (ordre de grandeur) 2 ^ 128, vos chances de collision au hasard dans les deux seront 2 ^ 256.

En effet, vous allez de très faible à très, très faible.

Il est le equivilent d'aller de 128 bits pour le cryptage 256 bits afin d'éviter d'avoir quelqu'un au hasard deviner votre clé de 128 bits.

Comme une estimation approximative, la chance pour un MD5 faux positif est 1 / (2 ^ 128), le hasard pour un SHA-1 faux positif est 1 / (2 ^ 160), de sorte que la chance pour un faux positif pour les deux algorithmes est compris entre 1 / (2 ^ 128) et 1 / (2 ^ 288), mais vous pouvez être sûr qu'il est proche de 1 / (2 ^ 288) que les deux algorithmes ont été rigoureusement testés statistiquement.

Au moins, lorsque vous utilisez deux hash différents, vous êtes très bien protégés contre les attaques intentionnelles à l'un des algorithmes.

EDIT: Après quelques recherches, je suis tombé sur cette Wikipedia Remarque attaques d'anniversaire MD5 peut être fait en moins de 1 minute, il semble donc préférable d'utiliser un algorithme différent MD5 avec SHA-1 ici. attaques d'anniversaire pour SHA-1 prise 2 ^ 69 opérations au moment .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top