Почему Git использует SHA-1 , криптографическую хеш-функцию, вместо более быстрой некриптографической хеш-функции?
Связанный вопрос:
Вопрос о переполнении стека Почему Git использует SHA-1 в качестве номеров версий? спрашивает, почему Git использует SHA-1 вместо последовательных чисел для коммитов.
git
hash-function
Праксеолитический
источник
источник
Ответы:
TL; DR;
Вы можете проверить это у самого Линуса Торвальдса, когда он представил Git Google в 2007 году :
(выделено мной)
Обновление декабрь 2017 г. с Git 2.16 (1 квартал 2018 г.): эта попытка поддержки альтернативного SHA уже ведется: см. « Почему Git не использует более современный SHA? ».
Я упоминал в « Как git обработает коллизию SHA-1 на большом двоичном объекте? », Что вы можете спроектировать фиксацию с определенным префиксом SHA1 (все еще очень затратное мероприятие).
Но суть остается неизменной, как упоминает Эрик Синк в книге « Git: Cryptographic Hashes » ( Контроль версий на примерах (2011)) :
Труднее найти хороший некриптографический хэш с низким уровнем коллизий, если вы не рассматриваете такие исследования, как « Поиск современных некриптографических хешей с помощью генетического программирования ».
Вы также можете прочитать « Рассмотрите возможность использования некриптографического алгоритма хеширования для ускорения хеширования », в котором упоминается, например, « xxhash », чрезвычайно быстрый некриптографический алгоритм хеширования , работающий на скоростях, близких к пределам ОЗУ.
Обсуждения изменения хэша в Git не новы:
(Линус Торвальдс)
И вы должны быть осторожны с тем, как измерить фактический выигрыш от оптимизации.
(Линус Торвальдс)
(например, на SHA-3, но это применимо к любому другому хешу):
(Джон Тэпселл -
johnflux
)Короче, переключиться на любой хэш непросто.
Обновление от февраля 2017 года: да, теоретически возможно вычислить конфликтующий SHA1: shattered.io
Но:
Так что давайте пока не паникуем.
Подробнее см. « Как Git обработает столкновение SHA-1 с BLOB-объектом? ».
источник