Почему Git использует криптографическую хэш-функцию?



Почему Git использует SHA-1, криптографическая хэш-функция, а не более быстрая некриптографическая хэш-функция?



вопрос:



вопрос переполнения стека почему Git использует SHA-1 в качестве номера версии? спрашивает, почему Git использует SHA-1 в отличие от последовательных чисел для коммитов.

494   1  

1 ответ:

TLDR;


вы можете увидеть, что от сам Линус Торвальдс, когда он представил Git Google еще в 2007 году:
(акцент мой)

мы проверяем контрольные суммы, которые считаются криптографически безопасными. Никто не смог сломаться Ша-1, но суть в том, что SHA-1, насколько это касается git, даже не является функцией безопасности. Это чисто проверка согласованности.
Части безопасности находятся в другом месте. Многие люди предполагают, что поскольку git использует SHA-1, а SHA-1 используется для криптографически безопасных вещей, они думают, что это огромная функция безопасности. Это не имеет никакого отношения к безопасности, это просто лучший хэш, который вы можете получить.

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

внутренне это означает, что с точки зрения реализации мы можем доверять тому, что хэш настолько хорош, что мы можем использовать алгоритмы хэширования и знать, что нет плохих случаев.

Так что есть некоторые причины, чтобы любить криптографическую сторону тоже, но это действительно о способности доверять своим данным.
Я Гарантирую Вам, что если вы поместите свои данные в git, вы можете доверять тому факту, что пять лет спустя, после того, как он будет преобразован с вашего жесткого диска на DVD в любую новую технологию, и вы скопировали его вместе,пять лет спустя вы можете проверить, что данные, которые вы получаете обратно, - это те же самые данные, которые вы ввели. И это то, что вы действительно должны искать в системе управления исходным кодом.


Обновление Декабря. 2017 с Git 2.16 (Q1 2018): эта попытка поддержать альтернативный SHA продолжается: см."почему Git не использует более современный SHA?".


Я упомянул в "как git будет обрабатывать столкновение SHA-1 на blob?" что вы может инженер фиксации с конкретным SHA1 префикс (все еще чрезвычайно дорогостоящее усилие).
Но суть остается, как Эрик Синк упоминает в "Git: Криптографические Хэши" (контроль версий на примере (2011) книга:

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

труднее найти хорошая криптографическая хэш - с низкой скоростью столкновения, если вы не считаете исследования, как" находка по последнему слову техники Не-криптографические хеш-функции с помощью генетического программирования".

вы также можете прочитать "рассмотрим применение алгоритма не криптографический хэш для ускорения майнинга", который упоминает, например," xxhash", чрезвычайно быстрый некриптографический алгоритм хэширования, работающий на скоростях, близких к пределам ОЗУ.


дискуссии вокруг изменения хэша в Git не новы:

(Линус Торвальдс)

не оставшиеся кода Mozilla, но эй, я начал с него. Оглядываясь назад, я, вероятно, должен был начать с кода asm PPC, который уже сделал блокировку здраво, но это "20/20 задним числом".

плюс Эй, код mozilla был ужасной кучей грязи, поэтому я был так убежден, что могу улучшайте вещи. Так что это своего рода источник для него, даже если это больше о мотивационной стороне, чем любой фактический остаток код ;)

и вы должны быть осторожны о как измерить фактический прирост оптимизации

(Линус Торвальдс)

Я в значительной степени могу гарантировать вам, что он улучшает вещи только потому, что он заставляет gcc генерировать код дерьма, который затем скрывает некоторые из P4 проблемы.

(Иоанна Тапселл - johnflux)

инженерные затраты на модернизацию git от SHA-1 до нового алгоритма намного выше. Я не уверен, как это можно сделать хорошо.

прежде всего, нам, вероятно, нужно развернуть версию git (давайте назовем это версией 2 для этого разговора), которая позволяет иметь слот для нового хэш-значения, даже если он не читает или не использует это пространство-он просто использует хэш-значение SHA-1, которое находится в другом слоте.

таким образом, как только мы в конце концов разверните еще более новую версию git, назовем ее версией 3, которая производит хэши SHA-3 в дополнение к хэшам SHA-1, Люди, использующие версию 2 git, смогут продолжать взаимодействовать.
(Хотя, за это Обсуждение, они могут быть уязвимы, и люди, которые полагаются на их SHA-1-только патчи могут быть уязвимы.)

короче говоря, переход к любой хэш не так просто.


обновление февраль 2017: Да, теоретически можно вычислить столкновение SHA1: shattered.io

Как влияет GIT?

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

но:

эта атака потребовала более 9,223,372,036,854,775,808 вычислений SHA1. Этот взял эквивалентную вычислительную мощность как 6500 лет однопроцессорных вычислений и 110 лет однопроцессорных вычислений.

Так что давайте пока не паниковать.
Смотрите больше на "как Git будет обрабатывать столкновение SHA-1 на blob?".

Comments

    Ничего не найдено.