Warum verwendet Git SHA-1 , eine kryptografische Hash-Funktion, anstelle einer schnelleren nicht-kryptografischen Hash-Funktion?
Verwandte Frage:
Frage zum Stapelüberlauf Warum verwendet Git SHA-1 als Versionsnummer? fragt, warum Git SHA-1 im Gegensatz zu fortlaufenden Nummern für Commits verwendet.
git
hash-function
Praxeolitisch
quelle
quelle
Antworten:
TLDR;
Sie können dies von Linus Torvalds selbst überprüfen , als er Git 2007 Google vorstellte :
(Hervorhebung von mir)
Update Dezember 2017 mit Git 2.16 (Q1 2018): Diese Bemühungen zur Unterstützung eines alternativen SHA sind im Gange: Siehe " Warum verwendet Git kein moderneres SHA? ".
Ich erwähnte in " Wie würde Git mit einer SHA-1-Kollision auf einem Blob umgehen? ", Dass Sie ein Commit mit einem bestimmten SHA1- Präfix erstellen könnten (immer noch ein äußerst kostspieliges Unterfangen). Aber der Punkt bleibt, wie Eric Sink in " Git: Cryptographic Hashes " ( Version Control by Example (2011)) erwähnt :
Es ist schwieriger, einen guten nicht-kryptografischen Hash mit niedriger Kollisionsrate zu finden, es sei denn, Sie ziehen Untersuchungen wie " Finden nicht-kryptografischer Hashes auf dem neuesten Stand der Technik mit genetischer Programmierung " in Betracht .
Sie können auch " Erwägen Sie die Verwendung eines nicht kryptografischen Hash-Algorithmus zur Beschleunigung des Hashs " lesen , in dem beispielsweise " xxhash " erwähnt wird, ein extrem schneller nicht kryptografischer Hash-Algorithmus, der mit Geschwindigkeiten nahe der RAM-Grenzen arbeitet.
Diskussionen über das Ändern des Hash in Git sind nicht neu:
(Linus Torvalds)
Und Sie müssen vorsichtig sein, wie Sie den tatsächlichen Optimierungsgewinn messen
(Linus Torvalds)
(zum Beispiel für SHA-3, aber das würde für jeden anderen Hash gelten):
(John Tapsell -
johnflux
)Kurz gesagt, das Wechseln zu einem Hash ist nicht einfach.
Update Februar 2017: Ja, es ist theoretisch möglich, eine kollidierende SHA1 zu berechnen: shattered.io
Aber:
Also lasst uns noch nicht in Panik geraten.
Weitere Informationen finden Sie unter " Wie würde Git mit einer SHA-1-Kollision auf einem Blob umgehen? ".
quelle