Git 2.29

Опубликовано August@Karro - вт, 10/20/2020 - 17:16

Для обеспечения целостности истории и устойчивости к изменениям "задним числом" используются неявное хеширование всей предыдущей истории в каждом коммите, также возможно удостоверение цифровыми подписями разработчиков отдельных тегов и коммитов. По сравнению с прошлым выпуском в новую версию принято 627 изменений, подготовленных при участии 89 разработчиков, из которых 24 впервые приняли участие в разработке.

Включена экспериментальная возможность использования алгоритма хэширования SHA-256 вместо скомпрометированного SHA-1 при записи объектов в репозиторий. Хэш формируется на основе содержимого каждого объекта в Git и является его уникальным идентификатором. Любое изменение данных или заголовков объекта приводит к изменению его идентификатора. Возникновения коллизий в алгоритме хэшировния теоретически допускает формирование двух разных наборов данных, имеющих один результирующий хэш. При активности в пять миллионов коммитов в секунду вероятность возникновения естественной коллизии оценивается в 50% за 7 млрд лет.

К сожалению алгоритм SHA-1 оказался не стойким к искусственному формированию коллизий, но совершение реальных атак по подмене объектов в Git через манипуляцию коллизиями SHA-1 маловероятно, так как для подмены отдельного объекта необходимо, чтобы подменяемый объект уже содержал шаблон коллизии, т.е. произвольный блок подменить не получится. Теоретически возможна лишь замена уже ранее добавленного атакующим блока, но она требует чтобы в изначально принятом в репозиторий вредоносном блоке присутствовал достаточно большой кусок бинарных данных, вызывающих коллизию, что при работе с кодом не останется незамеченным. Кроме того, каждый объект в Git содержит не только данные, но и служебный заголовок, содержимое которого не подконтрольно атакующему, но который участвует при вычислении проверочного хэша, что нарушает условия возникновения коллизии.

Так как каждая коллизия требует огромных ресурсов для вычисления, уже вычисленные шаблоны, приводящие к коллизиям, известны и ранее в git была добавлена проверка на попытки их использования в объектах. Теперь Git переходит на новый уровень защиты и намерен заменить алгоритм хэширования на более надёжный, что требует изменения формата объектов. Изначально планировалось использовать алгоритм SHA3-256, но в конечном счёте разработчики остановились на SHA2-256, так как SHA2 уже применяется в Git для цифровых подписей. Логика выбора в том, при использовании SHA-256 и SHA3-256 в коде Git, компрометация любого из них приведёт к проблемам с безопасностью, поэтому лучше зависеть от одного алгоритма, а не от двух. Кроме того, SHA-256 широко распространён и поддерживается во всех криптографических библиотеках, а также демонстрирует очень хорошую производительность. 


 

Последние материалы