Чтобы добавить к моему предыдущему ответу от 2012 года , теперь есть (февраль 2017 года, пять лет спустя) пример фактического столкновения SHA-1 с shattered.io , где вы можете создать два сталкивающихся PDF-файла: получить цифровую подпись SHA-1 в первом PDF-файле, которая также может использоваться как действительная подпись во втором PDF-файле.
См. Также " На пороге смерти в течение многих лет широко используемая функция SHA1 теперь мертва", и эта иллюстрация .
Обновление от 26 февраля: Линус подтвердил следующие пункты в посте Google+ :
(1) Прежде всего - небо не падает.Существует большая разница между использованием криптографического хэша для таких вещей, как подпись безопасности, и использованием его для генерации «идентификатора контента» для системы с адресным контентом, такой как git.
(2) Во-вторых, природа этого конкретногоАтака SHA1 означает, что на самом деле довольно легко противодействовать, и уже было опубликовано два набора исправлений для этого смягчения.
(3) И, наконец, на самом деле есть достаточно простой переход к другому хэшу, который выиграл 't разрушить мир - или даже старые git-репозитории.
Что касается этого перехода, см. Q1 2018 Git 2.16 , в котором добавлена структура, представляющая алгоритм хеширования.Реализация этого перехода началась.
Начиная с Git 2.19 (Q3 2018) , Git выбрал SHA-256 в качестве NewHash и находится в процессе интеграцииэто к коду (то есть SHA1 по-прежнему по умолчанию (Q2 2019, Git 2.21), но SHA2 будет преемником)
Оригинальный ответ (25 февраля) Но:
- Это позволяет подделывать большой двоичный объект, однако SHA-1 дерева все равно изменится, поскольку размер поддельного большого двоичного объекта может не совпадать с исходным: см. Как рассчитывается git-хэш? "; blob SHA1 вычисляется на основе содержимого и размера .
У него есть некоторая проблема для git-svn
, хотя .Или, скорее, с самой SVN , как видно здесь . - Как я уже упоминал в моем первоначальном ответе , стоимость такой попытки все ещена данный момент запредельно (6500 процессорных лет и 100 графических лет). См. также Валери Анита Аврора в разделе " Время жизни криптографических хеш-функций ".
- Как уже отмечалось ранее, это не о безопасности или доверии, а о целостности данных (дедупликация и обнаружение ошибок), которые могут быть легко обнаружены с помощью
git fsck
, а упоминается Линусом Торвальдсом сегодня.git fsck
будет предупреждать о коммит-сообщении с непрозрачными данными, скрытыми после NUL
(хотя NUL
не всегда присутствует в мошенническом файле ).
Не все включают transfer.fsck
, но GitHub делает: любой толчок будет прерван в случае уродливого объекта или неработающей ссылки.Хотя ... существует причина, по которой он не активирован по умолчанию . - PDF-файл может содержать произвольные двоичные данные, которые можно изменить для создания конфликтующего SHA-1, в отличие отподдельный исходный код.
Актуальная проблема при создании двух репозиториев Git с одинаковым хешем фиксированного заголовка и разным содержимым.И даже тогда атака остается запутанной . - Линус добавляет :
Весь пункт SCM заключается в том, что речь идет не об одноразовом событии, а о непрерывной истории,Это также в основном означает, что успешная атака должна работать со временем, а не быть обнаруживаемой.
Если вы можете одурачить SCM один раз, вставьте свой код, и он будет обнаружен на следующей неделе, вы на самом деле не сделали ничего полезного,Вы только сожгли себя.
Джои Хесс пробует эти PDF в репозиторий Git и он нашел :
Это включает в себя два файла с одинаковым SHA и размером, которые получаютразличные капли благодаря тому, как Git добавляет заголовок к
содержание.
joey@darkstar:~/tmp/supercollider>sha1sum bad.pdf good.pdf
d00bbe65d80f6d53d5c15da7c6b4f0a655c5a86a bad.pdf
d00bbe65d80f6d53d5c15da7c6b4f0a655c5a86a good.pdf
joey@darkstar:~/tmp/supercollider>git ls-tree HEAD
100644 blob ca44e9913faf08d625346205e228e2265dd12b65 bad.pdf
100644 blob 5f90b67523865ad5b1391cb4a1c010d541c816c1 good.pdf
Хотя при добавлении идентичных данных в эти конфликтующие файлы генерируется
других коллизий, предваряющих данных нет.
Таким образом, основной вектор атаки (подделка коммита) будет :
- Создать объект регулярной фиксации;
- использовать весь объект фиксации + NUL в качестве выбранного префикса, а
- используется атака столкновения с идентичным префиксом для создания сталкивающихся хороших / плохих объектов.
- ... и это бесполезно, потому что хорошие и плохие объекты коммитов по-прежнему указывают на одно и то же дерево!
Кроме того, вы уже можете обнаруживать криптоаналитические атаки на SHA-1, присутствующие в каждом файле, с помощью cr-marcstevens/sha1collisiondetection
Добавление аналогичной проверки в самом Git потребует некоторых вычислительных затрат .
Об изменении хэша, Комментарии Linux :
Размер хэша и выбор алгоритма хеширования являются независимыми вопросами.
Что вы, вероятно, сделаете, это переключитесь на 256-битный хеш, используйте это
внутренне и в собственной базе данных git, а затем только по умолчанию
show хеш в виде шестнадцатеричной строки из 40 символов (вроде как мы
уже сокращать вещи во многих ситуациях).
Таким образом, инструменты вокруг git даже не видят изменений, если не переданы в
какой-то особый аргумент "--full-hash
" (или "--abbrev=64
" или что-то еще -
по умолчанию мы сокращаемся до 40).
Тем не менее, план перехода (от SHA1 к другой хэш-функции) все еще будет сложным , но будет активно изучаться.
A convert-to-object_id
кампания в процессе :
Обновление от 20 марта: GitHub подробно описывает возможную атаку и ее защиту :
Именам SHA-1 можно присвоить доверие через различные механизмы. Например, Git позволяет криптографически подписывать коммит или тэг. При этом подписывается только сам объект фиксации или тега, который, в свою очередь, указывает на другие объекты, содержащие фактические данные файла, используя их имена SHA-1. Столкновение в этих объектах может привести к подписи, которая кажется действительной, но которая указывает на данные, отличные от предполагаемых подписывающим лицом. В такой атаке подписывающий видит только одну половину столкновения, а жертва видит вторую половину.
Защита:
Недавняя атака использует специальные методы для использования слабых мест в алгоритме SHA-1, которые обнаруживают столкновение за гораздо меньшее время. Эти методы оставляют шаблон в байтах, который может быть обнаружен при вычислении SHA-1 любой половины пары столкновения.
GitHub.com теперь выполняет это обнаружение для каждого вычисляемого им SHA-1 и прерывает операцию, если есть доказательства того, что объект является половиной конфликтующей пары. Это мешает злоумышленникам использовать GitHub, чтобы убедить проект принять «невинную» половину их коллизии, а также не позволяет им размещать вредоносную половину.
См. "sha1collisiondetection
" Марк Стивенс
Опять же, с Q1 2018 Git 2.16 с добавлением структуры, представляющей алгоритм хеширования, началась реализация перехода к новому хешу.
Как упоминалось выше, новый поддерживаемый хэш будет SHA-256 .