196 votes

Hash collision dans git

Ce serait effectivement se produire si j'avais un hash collision lors de l'utilisation de git?

E. g. J'arrive à commettre deux fichiers avec la même somme de contrôle sha1, serait-git-il un avis ou corrompre les fichiers?

Pourrait git être améliorée à vivre avec ça, ou devrais-je changer pour un nouvel algorithme de hachage?

(Merci de ne pas dévier de cette question par discuter de la façon peu de chances qu'est - Grâce)

122voto

Un hachage SHA-1 est un hex 40 chaîne de caractères... c'est 4 bits par caractères times 40... 160 bits. Maintenant, nous savons de 10 bits est d'environ 1000 (1024 pour être exact), ce qui signifie qu'il y a 1 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 différents hachages SHA-1... 10^48.

Qu'est-ce équivalent? Bien que la Lune est composée de 10^47 atomes. Donc, si nous avons 10 Lunes... et de vous choisir au hasard un atome sur une de ces lunes... et puis aller de l'avant et de choisir de façon aléatoire un atome encore sur eux... alors la probabilité que vous allez choisir le même atome à deux reprises, est la probabilité que deux git s'engage aura le même hachage SHA-1.

67voto

kgz Points 3370

Si deux fichiers ont le même hash somme dans git, il permettrait de traiter ces fichiers sont identiques. Dans l'absolue cas peu probable où cela se produit, vous pouvez toujours revenir à la commettre, et de changer quelque chose dans le fichier, de façon à ne pas entrer en collision ...plus

Voir: http://kerneltrap.org/mailarchive/git/2006/8/28/211065

25voto

Steve Points 151

Ce n'est pas vraiment possible de répondre à cette question avec le droit ", mais" sans expliquer pourquoi il n'est pas un problème. Il n'est pas possible de le faire sans vraiment avoir une bonne prise sur ce qu'est un hachage est vraiment. C'est plus compliqué que le simple cas, vous pourriez avoir été exposé à un tig.

Il y a un contresens fondamental de la théorie de l'information ici. Si vous réduisez une grande quantité d'informations dans un plus petit montant en jetant une certaine quantité (ie. une table de hachage) il y aura une chance de collision directement liée à la longueur des données. La plus courte des données, le MOINS il sera. Maintenant, la grande majorité des collisions sera incompréhensible, les rendant ainsi beaucoup plus de chances de se produire (vous ne serait jamais vérifier dans le charabia...même une image binaire est un peu structuré). En fin de compte, les chances sont minces. Pour répondre à votre question, oui, git va les traiter comme de la même, la modification de l'algorithme de hachage ne va pas aider, il va prendre un "deuxième chèque" d'une certaine sorte, mais en fin de compte, vous avez besoin de plus de "vérification supplémentaire de données", comme la longueur des données pour être sûr à 100%...garder à l'esprit que vous serait 99.99999....pour un certain nombre de chiffres.... sûr qu'avec une simple case comme vous décrivez. SHA-x sont des hachages cryptographiques, ce qui signifie que est généralement pas difficile de créer intentionnellement de deux ensembles de données sources qui sont à la fois TRÈS SEMBLABLES les uns aux autres, et ont le même hash. Un peu de changement dans les données devraient créer plus d'un (de préférence autant que possible) les bits de changement dans la valeur de hachage de sortie, ce qui signifie aussi qu'il est très difficile (mais pas impossible) à partir de la valeur de hachage de l'ensemble des collisions, et donc de sortir le message original à partir de cet ensemble de collisions tous, mais quelques-être du charabia, et de celles qui ne le sont pas, il ya toujours un grand nombre de passer au crible si la longueur du message est d'une durée significative. L'inconvénient d'une crypto de hachage, c'est qu'ils sont lents à calculer...en général.

Alors, qu'est-ce que tout cela signifie alors pour Git? Pas grand-chose. Les valeurs de hachage se fait donc rarement (par rapport à tout le reste) que leur calcul de la pénalité est faible dans l'ensemble des opérations. Les chances de tomber sur une paire de collisions est donc faible, ce n'est pas une chance réaliste de se produire et ne pas être détectés immédiatement (ie. votre code serait le plus susceptible d'arrêter brusquement de la construction), permettant à l'utilisateur de résoudre le problème (sauvegarder une révision, et d'apporter une modification à nouveau, et vous aurez presque certainement obtenir un hachage différent à cause du changement d'heure, qui alimente aussi le hachage dans git). Il n'y a plus de chances pour qu'il soit un réel problème pour vous si vous stockez des fichiers binaires arbitrairement dans git, ce qui n'est pas vraiment ce que c'est l'utilisation principale du modèle est. Si vous voulez le faire...vous êtes probablement mieux d'utiliser une base de données traditionnelle.

Il n'est pas mal de penser à ce sujet - c'est une bonne question que beaucoup de gens il suffit de passer "donc peu probable que cela ne vaut pas la peine de penser à" - mais c'est vraiment un peu plus compliqué que cela. Si c'est le cas, il devrait être très facilement détectables, ce ne sera pas un silencieux de la corruption dans un flux normal.

9voto

Roberto Bonvallet Points 6336

Pourrait git être améliorée à vivre avec ça, ou devrais-je changer pour un nouvel algorithme de hachage?

Les Collisions sont possibles pour n'importe quel algorithme de hachage, de sorte qu'un changement de la fonction de hachage n'empêche toutefois pas le problème, c'est juste qu'il est moins susceptible de se produire. Donc, vous devriez choisir ensuite une très bonne fonction de hachage (SHA-1 est déjà le cas, mais vous avez demandé à ne pas être dit :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X