Pourquoi Git utilise -t-il SHA-1 , une fonction de hachage cryptographique, au lieu d'une fonction de hachage non cryptographique plus rapide?
Question connexe:
Question Stack Overflow Pourquoi Git utilise SHA-1 comme numéros de version? demande pourquoi Git utilise SHA-1 par opposition aux nombres séquentiels pour les commits.
git
hash-function
Praxéolitique
la source
la source
Réponses:
TLDR;
Vous pouvez le vérifier auprès de Linus Torvalds lui-même, lorsqu'il a présenté Git à Google en 2007 :
(c'est moi qui souligne)
Mise à jour de décembre 2017 avec Git 2.16 (Q1 2018): cet effort de prise en charge d'un SHA alternatif est en cours: voir " Pourquoi Git n'utilise-t-il pas un SHA plus moderne? ".
J'ai mentionné dans " Comment git gérerait une collision SHA-1 sur un objet blob? " Que vous pouviez créer un commit avec un préfixe SHA1 particulier (encore une entreprise extrêmement coûteuse).
Mais le point demeure, comme le mentionne Eric Sink dans le livre " Git: Cryptographic Hashes " ( Version Control by Example (2011) :
Il est plus difficile de trouver un bon hachage non cryptographique avec un faible taux de collision, à moins que vous ne preniez en compte des recherches comme « Trouver des hachages non cryptographiques de pointe avec la programmation génétique ».
Vous pouvez également lire " Envisagez d'utiliser un algorithme de hachage non cryptographique pour accélérer le hachage ", qui mentionne par exemple " xxhash ", un algorithme de hachage non cryptographique extrêmement rapide, fonctionnant à des vitesses proches des limites de la RAM.
Les discussions sur la modification du hachage dans Git ne sont pas nouvelles:
(Linus Torvalds)
Et vous devez faire attention à la façon de mesurer le gain d'optimisation réel
(Linus Torvalds)
(par exemple en SHA-3, mais cela s'appliquerait à tout autre hachage):
(John Tapsell -
johnflux
)En bref, passer à n'importe quel hachage n'est pas facile.
Mise à jour février 2017: oui, il est en théorie possible de calculer un SHA1 en collision: shattered.io
Mais:
Alors ne paniquons pas pour l'instant.
Pour en savoir plus, consultez " Comment Git gérerait une collision SHA-1 sur un objet blob? ".
la source