Dlaczego Git używa SHA-1 , kryptograficznej funkcji skrótu, zamiast szybszej niekryptograficznej funkcji skrótu?
Powiązane pytanie:
Pytanie o przepełnienie stosu Dlaczego Git używa SHA-1 jako numerów wersji? pyta, dlaczego Git używa SHA-1 w przeciwieństwie do kolejnych liczb dla zatwierdzeń.
git
hash-function
Prakseolityczny
źródło
źródło
Odpowiedzi:
TLDR;
Możesz to sprawdzić od samego Linusa Torvaldsa, gdy przedstawiał Gita Google w 2007 roku :
(moje wyróżnienie)
Aktualizacja z grudnia 2017 r. Za pomocą Git 2.16 (I kw. 2018 r.): Trwają prace nad obsługą alternatywnego SHA: zobacz „ Dlaczego Git nie używa nowocześniejszego SHA? ”.
Wspomniałem w „ Jak git poradzi sobie z kolizją SHA-1 na obiekcie blob? ”, Że można zaprojektować zatwierdzenie z określonym prefiksem SHA1 (wciąż jest to niezwykle kosztowne przedsięwzięcie).
Ale sprawa pozostaje, jak wspomina Eric Sink w książce „ Git: Cryptographic Hashes ” ( Kontrola wersji według przykładu (2011) :
Trudniej jest znaleźć dobry niekryptograficzny hash z niskim współczynnikiem kolizji, chyba że weźmiesz pod uwagę badania typu „ Znajdowanie najnowocześniejszych niekryptograficznych skrótów za pomocą programowania genetycznego ”.
Możesz również przeczytać artykuł „ Rozważ użycie niekryptograficznego algorytmu mieszającego w celu przyspieszenia mieszania ”, w którym wspomniano na przykład „ xxhash ”, niezwykle szybki niekryptograficzny algorytm Hash, działający z prędkością bliską limitom pamięci RAM.
Dyskusje na temat zmiany hasha w Git nie są nowe:
(Linus Torvalds)
Musisz też uważać, jak mierzyć rzeczywisty zysk optymalizacji
(Linus Torvalds)
(na przykład na SHA-3, ale dotyczyłoby to każdego innego skrótu):
(John Tapsell -
johnflux
)Krótko mówiąc, przejście na dowolny skrót nie jest łatwe.
Aktualizacja luty 2017: tak, teoretycznie możliwe jest obliczenie kolidującego SHA1: shattered.io
Ale:
Więc nie panikujmy jeszcze.
Więcej informacji znajdziesz w artykule „ Jak Git poradziłby sobie z kolizją SHA-1 na obiekcie blob? ”.
źródło