2015-09-16 5 views
10

Pozwolę sobie to zaznaczyć, stwierdzając, że zdaję sobie sprawę z wyjątkowo niewielkich szans na to, że tak się stanie. Wiem, że produkcja byłaby mniej lub bardziej niemożliwa i nie jest prawdopodobne, aby wydarzyło się "na wolności". To jest po prostu pytanie "co-jeśli" na temat wewnętrznych elementów Git.Co by się stało, gdyby dwa komunikaty Git miały ten sam skrót SHA-1?

Oto moje pytanie: co by się stało, gdyby dwa skróty zatwierdzone przez Git były identyczne? Na początek:

  • Czy zatwierdzenie się powiedzie?
  • Czy później można to sprawdzić jako odłączoną głowicę?
  • Czy kolejne zatwierdzenie byłoby możliwe?
+1

Jest tu dyskusja, ale nie sądzę, że naprawdę dobrze jest odpowiedzieć na pytanie: http://stackoverflow.com/questions/10434326/hash-collision-in-git – mipadi

+0

Tak naprawdę to widziałem, ale wydaje się, że dyskutuje on raczej o hasach plików niż o hasłach. – Ben

+1

Tak, większość odpowiedzi dotyczyła tej części hashowania w Git. Istnieje jednak link do dyskusji na liście dyskusyjnej Git: http://thread.gmane.org/gmane.comp.version-control.git/26106/focus=26170 – mipadi

Odpowiedz

3

Moja stara odpowiedź "How would git handle a SHA-1 collision on a blob?" nadal będzie obowiązywać, nawet w przypadku zatwierdzenia, a nie blobu.
Jako że torek wymienia in the comments, git uważa wszystko za "obiekty", każde z własnym SHA1.

https://git-scm.com/book/en/v2/book/10-git-internals/images/data-model-4.png

(Obraz z Git Internals - Git References rozdziale ProGit Book v2)

Choć popełnić nie może odnieść sukces (istnieje kilka kontroli w git-commit-tree.c), trzeba także wziąć pod uwagę przypadek, w którym dwa commit z tą samą SHA1 (i jakoś inną treścią) są tworzone w repozytoriach A i B ... a repo A pobiera repozytorium B!
Commit 8685da4 (March 2007, git 1.5.1) zajął się tym, a pobranie nie powiedzie się.
Commit 0e8189e (Oct. 2008, git 1.6.1) wspomina, że ​​z index V2:

szanse na odniesienie SHA1 do ulegną uszkodzeniu, więc faktycznie odpowiada SHA1 innego obiektu o tej samej wielkości (sklepy nagłówka delta oczekiwana wielkość obiekt podstawowy do zastosowania) są praktycznie zerowe.

Wciąż implementuje kontrolę CRC obiektu spakowanego podczas rozpakowywania obiektów.

Powiązane problemy