Czytałem o tym, że Git używa skrótu SHA-1 jako identyfikatora zmiany. Dlaczego nie używa nowocześniejszej wersji SHA?
git
cryptography
sha
qazwsx
źródło
źródło
Odpowiedzi:
Grudzień 2017: Będzie. Git 2.16 (Q1 2018) jest pierwszą wersją, która ilustruje i realizuje ten zamiar.
Uwaga: zobacz Git 2.19 poniżej: będzie to SHA-256 .
Git 2.16 zaproponuje infrastrukturę do zdefiniowania funkcji skrótu używanej w Gicie i podejmie próbę zbadania tego w różnych ścieżkach kodowych.
Zobacz commit c250e02 (28 listopada 2017) autorstwa Ramsay Jones (``) .
Zobacz: commit eb0ccfd , commit 78a6766 , commit f50e766 , commit abade65 (12 listopada 2017) autor: brian m. carlson (
bk2204
) .(Scalone przez Junio C Hamano -
gitster
- w zatwierdzeniu 721cc43 , 13 grudnia 2017 r.)Aktualizacja z sierpnia 2018 r. Dla Git 2.19 (III kw. 2018 r.) Wydaje się, że Git wybiera SHA-256 jako NewHash.
Zobacz commit 0ed8d8d (4 sierpnia 2018) autorstwa Jonathana Niedera (
artagnon
) .Zobacz zatwierdzenie 13f5e09 (25 lipca 2018) autorstwa Ævara Arnfjörð Bjarmasona (
avar
) .(Scalone przez Junio C Hamano -
gitster
- w zobowiązaniu 34f2297 , 20 sierpnia 2018 r.)Możesz zobaczyć, jak postępuje przejście na SHA 256 w Git 2.20 (Q4 2018):
Patrz popełnienia 0d7c419 , popełnienia dda6346 , popełnienia eccb5a5 , popełnienia 93eb00f , popełnienia d8a3a69 , popełnienia fbd0e37 , popełnienia f690b6b , popełnienia 49d1660 , popełnienia 268babd , popełnienia fa13080 , popełnienia 7b5e614 , popełnienia 58ce21b , popełnienia 2f0c9e9 , popełnienia 825544a (15 października 2018) przez brian m . carlson (
bk2204
) .Zobacz commit 6afedba (15 października 2018) autorstwa SZEDER Gábor (
szeder
) .(Scalone przezJunio C Hamano -
gitster
- in commit d829d49 , 30 października 2018)GIT_SHA1_HEXSZ
jest dalej usuwany / zastępowany przez Git 2.22 (Q2 2019) i zatwierdzony d4e568b .To przejście jest kontynuowane w Git 2.21 (Q1 2019), który dodaje hash sha-256 i podłącza go do kodu, aby umożliwić budowanie Gita za pomocą „NewHash”.
Zobacz popełnić 4b4e291 , popełnić 27dc04c , popełnić 13eeedb , popełnić c166599 , popełnić 37649b7 , popełnić a2ce0a7 , popełnić 50c817e , popełnić 9a3a0ff , popełnić 0dab712 , popełnić 47edb64 (14 lis 2018) i popełnić 2f90b9d , popełnić 1ccf07c (22 października 2018) przez brian m . carlson (
bk2204
) .(Scalone przez Junio C Hamano -
gitster
- w zatwierdzeniu 33e4ae9 , 29 stycznia 2019 r.)Aktualizacja jest kontynuowana w Git 2.24 (Q4 2019)
Zobacz zatwierdzenie aaa95df , zatwierdzenie be8e172 , zatwierdzenie 3f34d70 , zatwierdzenie fc06be3 , zatwierdzenie 69fa337 , zatwierdzenie 3a4d7aa , zatwierdzenie e0cb7cd , zatwierdzenie 8d4d86b , zatwierdzenie f6ca67d , zatwierdzenie dd336a5 , zatwierdzenie 894c0f6 , zatwierdzenie 3a4d7aa , zatwierdzenie e0cb7cd , zatwierdzenie 8d4d86b , zatwierdzenie f6ca67d , zatwierdzenie dd336a5 , zatwierdzenie 894c0f6 , zatwierdzenie 4439c7a , zatwierdzenie , zatwierdzenie e0cb7cd , zatwierdzenie 8d4d86b , zatwierdzenie f6ca67d , zatwierdzenie dd336a5 , zatwierdzenie 894c0f6 , zatwierdzenie 4439c7a , zatwierdzenie , zatwierdzenie 703d2d4 , zatwierdzenie 9d958cc , zatwierdzenie 7962e04 , zatwierdzenie opłaty4930(18 sierpnia 2019) autor: brian M. carlson (
bk2204
) .(Scalone przez Junio C Hamano -
gitster
- w zatwierdzeniu 676278f , 11 października 2019 r.)W Git 2.26 (Q1 2020) skrypty testowe są gotowe na dzień, w którym nazwy obiektów będą używać SHA-256.
Zobacz zatwierdzenie 277eb5a , zatwierdzenie 44b6c05 , zatwierdzenie 7a868c5 , zatwierdzenie 1b8f39f , zatwierdzenie a8c17e3 , zatwierdzenie 8320722 , zatwierdzenie 74ad99b , zatwierdzenie ba1be1a , zatwierdzenie cba472d , zatwierdzenie 82d5aeb , zatwierdzenie 3c5e65c , zatwierdzenie a8c17e3 , zatwierdzenie 8320722 , zatwierdzenie 74ad99b , zatwierdzenie ba1be1a , zatwierdzenie cba472d , zatwierdzenie 82d5aeb , zatwierdzenie 3c5e65c , zatwierdzenie 235d3cd , zatwierdzenie 1d86fa8f , zatwierdzenie , zatwierdzenie 717c939 , zatwierdzenie 08a9dd8 , zatwierdzenie 215b60b , zatwierdzenie 194264c(21 grudnia 2019) autorstwa brian M. carlson (
bk2204
) .(Scalone przez Junio C Hamano -
gitster
- w zatwierdzeniu f52ab33 , 05 lutego 2020 r.)Przykład:
Więc zamiast używać:
Testy używają
I
OID_REGEX
pochodzi z commit bdee9cd (13 maja 2018) przez brian m. carlson (bk2204
) .(Scalony przez Junio C Hamano -
gitster
- w zatwierdzeniu 9472b13 , 30 maja 2018 r., Git v2.18.0-rc0)I jeszcze do testów:
Zobacz zatwierdzenie f303765 , zatwierdzenie edf0424 , zatwierdzenie 5db24dc , zatwierdzenie d341e08 , zatwierdzenie 88ed241 , zatwierdzenie 48c10cc , zatwierdzenie f7ae8e6 , zatwierdzenie e70649b , zatwierdzenie a30f93b , zatwierdzenie a79eec2 , zatwierdzenie 796d138 , zatwierdzenie 417e45e , zatwierdzenie 48c10cc , zatwierdzenie f7ae8e6 , zatwierdzenie e70649b , zatwierdzenie a30f93b , zatwierdzenie a79eec2 , zatwierdzenie 796d138 , zatwierdzenie 417e45e , zatwierdzenie dfa5f53 , zatwierdzenie, 7243edf9f 07877f3 , zatwierdzenie 6025e89 , zatwierdzenie 7b1a182 , zatwierdzenie 94db7e3 ,commit db12505 (07 lutego 2020) przez brian
bk2204
M. carlson ( ) .(Scalony przez Junio C Hamano -
gitster
- w zobowiązaniu 5af345a , 17 lutego 2020 r.)Niektóre ścieżki kodowe otrzymały instancję repozytorium jako parametr do pracy w repozytorium, ale przekazały
the_repository
instancję do jej wywołań, które zostały (nieco) oczyszczone za pomocą Git 2.26 (Q1 2020).Zobacz commit b98d188 , commit 2dcde20 , commit 7ad5c44 , commit c8123e7 , commit 5ec9b8a , commit a651946 , commit eb999b3 (30 stycznia 2020) autorstwa Matheus Tavares (
matheustavares
) .(Scalone przez Junio C Hamano -
gitster
- w zatwierdzeniu 78e67cd , 14 lutego 2020 r.)Oparte na:
źródło
git rev-parse
może teraz wydrukować, jaki hash będzie używany: stackoverflow.com/a/58862319/6309 . A puste drzewo ma nowy identyfikator SHA2: stackoverflow.com/a/9766506/6309AKTUALIZACJA : Powyższe pytanie i ta odpowiedź pochodzą z 2015 roku. Od tego czasu Google ogłosił pierwszą kolizję SHA-1: https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html
Oczywiście mogę tylko spekulować z zewnątrz, patrząc na to, dlaczego Git nadal używa SHA-1, ale może to być jeden z powodów:
unsigned char[20]
bufory w każdym miejscu ;-), o wiele łatwiej jest zaprogramować zwinność kryptograficzną na początku, niż później.Niektóre linki:
Moim osobistym zdaniem jest to, że chociaż praktyczne ataki są prawdopodobnie trochę wolne, a nawet jeśli już się pojawią, ludzie prawdopodobnie początkowo złagodzą je środkami innymi niż zmiana samego algorytmu skrótu, że jeśli dbasz o bezpieczeństwo, powinieneś się mylić po stronie ostrożności przy wyborze algorytmów i ciągłego ulepszania swoich mocnych stron bezpieczeństwa, ponieważ możliwości atakujących również idą tylko w jednym kierunku, więc nierozsądne byłoby przyjmowanie Gita jako wzoru do naśladowania, zwłaszcza jako jego celu w używanie SHA-1 nie jest rzekomo zabezpieczeniem kryptograficznym.
źródło
To jest dyskusja na temat pilności migracji z SHA1 dla Mercurial, ale dotyczy to również Git: https://www.mercurial-scm.org/wiki/mpm/SHA1
Krótko mówiąc: jeśli nie jesteś dzisiaj wyjątkowo pracowity, masz znacznie gorsze luki w zabezpieczeniach niż sha1. Mimo to Mercurial rozpoczął ponad 10 lat temu przygotowania do migracji z sha1.
Jeśli git nie migruje z sha1 przed Mercurialem, zawsze możesz dodać kolejny poziom bezpieczeństwa, utrzymując lokalny serwer lustrzany Mercurial z hg-git .
źródło
Obecnie istnieje plan przejścia na silniejszy hash, więc wygląda na to, że w przyszłości będzie używany nowocześniejszy hash niż SHA-1. Z obecnego planu przejścia :
źródło