Я читал о том, что Git использует дайджест SHA-1 в качестве идентификатора ревизии. Почему не используется более современная версия SHA?
git
cryptography
sha
qazwsx
источник
источник
Ответы:
Декабрь 2017: Будет. И Git 2.16 (Q1 2018) - первая версия, которая иллюстрирует и реализует это намерение.
Примечание: см. Git 2.19 ниже: это будет SHA-256 .
Git 2.16 предложит инфраструктуру для определения того, какая хэш-функция используется в Git, и начнет работу по ее проникновению в различные пути кода.
См. Коммит c250e02 (28 ноября 2017 г.) Рамси Джонса (``) .
См. Commit eb0ccfd , commit 78a6766 , commit f50e766 , commit abade65 (12 ноября 2017 г.), автор brian m. Карлсон (
bk2204
) .(Объединено Junio C Hamano -
gitster
- в коммите 721cc43 , 13 декабря 2017 г.)Обновление августа 2018 г. для Git 2.19 (3 квартал 2018 г.) Git, похоже, выбирает SHA-256 в качестве NewHash.
См. Коммит 0ed8d8d (4 августа 2018 г.) Джонатана Нидера (
artagnon
) .См. Коммит 13f5e09 (25 июля 2018 г.), сделанный var Arnfjör Bjarmason (
avar
) .(Объединено Junio C Hamano -
gitster
- в коммите 34f2297 , 20 августа 2018 г.)Вы можете увидеть этот переход на SHA 256 в Git 2.20 (4 квартал 2018 г.):
См совершают 0d7c419 , совершает dda6346 , совершает eccb5a5 , совершает 93eb00f , совершает d8a3a69 , совершают fbd0e37 , совершает f690b6b , совершает 49d1660 , совершает 268babd , совершает fa13080 , совершает 7b5e614 , совершают 58ce21b , совершает 2f0c9e9 , совершает 825544a (15 октября 2018) по Брайан м . Карлсон (
bk2204
) .См. Commit 6afedba (15 октября 2018 г.) Седера Габора (
szeder
) .(ОбъединеноJunio C Hamano -
gitster
- в коммите d829d49 , 30 октября 2018 г.)GIT_SHA1_HEXSZ
далее удаляется / заменяется на Git 2.22 (второй квартал 2019 г.) и фиксируется d4e568b .Этот переход продолжается с Git 2.21 (первый квартал 2019 г.), который добавляет хеш sha-256 и вставляет его в код, позволяя создавать Git с «NewHash».
См совершают 4b4e291 , совершают 27dc04c , совершают 13eeedb , совершают c166599 , совершают 37649b7 , совершают a2ce0a7 , совершают 50c817e , совершают 9a3a0ff , совершают 0dab712 , совершают 47edb64 (14 Nov 2018), а также совершать 2f90b9d , совершают 1ccf07c (22 октября 2018) по Брайан м . Карлсон (
bk2204
) .(Объединено Junio C Hamano -
gitster
- в коммите 33e4ae9 , 29 января 2019 г.)Обновление продолжается с Git 2.24 (4 квартал 2019 г.)
См совершать aaa95df , совершать be8e172 , совершает 3f34d70 , совершает fc06be3 , совершает 69fa337 , совершает 3a4d7aa , совершает e0cb7cd , совершает 8d4d86b , совершают f6ca67d , совершают dd336a5 , совершает 894c0f6 , совершает 4439c7a , совершает 95518fa , совершает e84f357 , совершает fe9fec4 , совершает 976ff7e , совершить 703d2d4 , фиксация 9d958cc , фиксация 7962e04 , комиссия за фиксацию 4930(18 августа 2019 г.) Брайан М. Карлсон (
bk2204
) .(Объединено Junio C Hamano -
gitster
- в коммите 676278f , 11 октября 2019 г.)С Git 2.26 (Q1 2020) тестовые сценарии готовы к тому дню, когда имена объектов будут использовать SHA-256.
См совершать 277eb5a , совершать 44b6c05 , совершают 7a868c5 , совершают 1b8f39f , совершают a8c17e3 , совершают 8320722 , совершают 74ad99b , совершают ba1be1a , совершают cba472d , совершают 82d5aeb , совершают 3c5e65c , совершают 235d3cd , совершают 1d86c8f , совершают 525a7f1 , совершают 7a1bcb2 , совершают cb78f4f , совершить 717c939 , фиксация 08a9dd8 , фиксация 215b60b , фиксация 194264c(21 декабря 2019 г.) Брайан М. Карлсон (
bk2204
) .(Объединено Junio C Hamano -
gitster
- в фиксации f52ab33 , 5 февраля 2020 г.)Пример:
Итак, вместо использования:
Тесты используют
И
OID_REGEX
исходит из фиксации bdee9cd (13 мая 2018 г.), созданной brian m. Карлсон (bk2204
) .(Объединено Junio C Hamano -
gitster
- в фиксации 9472b13 , 30 мая 2018 г., Git v2.18.0-rc0)И еще для тестов:
См совершать f303765 , совершать edf0424 , совершают 5db24dc , совершают d341e08 , совершают 88ed241 , совершают 48c10cc , совершают f7ae8e6 , совершают e70649b , совершают a30f93b , совершают a79eec2 , совершают 796d138 , совершают 417e45e , совершают dfa5f53 , совершают f743e8f , совершают 72f936b , совершают 5df0f11 , совершить 07877f3 , совершить 6025e89 , совершить 7b1a182 , совершить 94db7e3 ,commit db12505 (7 февраля 2020 г.) автор: brian m. Карлсон (
bk2204
) .(Объединено Junio C Hamano -
gitster
- в коммите 5af345a , 17 февраля 2020 г.)Некоторым кодовым путям был предоставлен экземпляр репозитория в качестве параметра для работы в репозитории, но
the_repository
экземпляр передавался его вызывающим объектам, что было (несколько) очищено с помощью Git 2.26 (первый квартал 2020 г.).См. Commit b98d188 , commit 2dcde20 , commit 7ad5c44 , commit c8123e7 , commit 5ec9b8a , commit a651946 , commit eb999b3 (30 Jan 2020) by Matheus Tavares (
matheustavares
) .(Объединено Junio C Hamano -
gitster
- в коммите 78e67cd , 14 февраля 2020 г.)По материалам:
источник
git rev-parse
теперь можно распечатать, какой хеш будет использоваться: stackoverflow.com/a/58862319/6309 . И пустое дерево имеет новый идентификатор SHA2: stackoverflow.com/a/9766506/6309ОБНОВЛЕНИЕ : вышеуказанный вопрос и этот ответ относятся к 2015 году. С тех пор Google объявил о первом конфликте SHA-1: https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html
Очевидно, я могу только догадываться со стороны, глядя на то, почему Git продолжает использовать SHA-1, но это может быть одной из причин:
unsigned char[20]
буферы повсюду ;-), намного проще запрограммировать криптографическую гибкость в начале, чем модернизировать ее позже.Некоторые ссылки:
Мое личное мнение таково, что, хотя практические атаки, вероятно, когда-то отключены, и даже когда они действительно происходят, люди, вероятно, сначала будут смягчать их с помощью других средств, кроме изменения самого алгоритма хеширования, что, если вы действительно заботитесь о безопасности, вы должны ошибаться на стороне осторожности при выборе алгоритмов и постоянного пересмотра в сторону повышения ваших сильных сторон безопасности, потому что возможности злоумышленников также идут только в одном направлении, поэтому было бы неразумно использовать Git в качестве образца для подражания, особенно в качестве его цели в использование SHA-1 не претендует на криптографическую безопасность.
источник
Это обсуждение срочности перехода от SHA1 к Mercurial, но это также относится и к Git: https://www.mercurial-scm.org/wiki/mpm/SHA1
Вкратце: если вы сегодня не очень прилежны, у вас гораздо более серьезные уязвимости, чем у sha1. Но, несмотря на это, Mercurial начал работу более 10 лет назад, чтобы подготовиться к переходу с sha1.
Если git не перейдет с sha1 раньше, чем это сделает Mercurial, вы всегда можете добавить еще один уровень безопасности, сохранив локальное зеркало Mercurial с помощью hg-git .
источник
Сейчас есть план перехода на более сильный хэш, поэтому похоже, что в будущем он будет использовать более современный хеш, чем SHA-1. Из текущего плана перехода :
источник