Чтобы добавить к моему предыдущему ответу от 2012 г., сейчас (февраль 2017 г., пять лет спустя) пример действительного Конфликт SHA-1 с shattered.io, где вы можете создать два конфликтующих файла PDF: то есть получить цифровую подпись SHA-1 для первого файла PDF, которую также можно использовать в качестве действительной подписи для второго файла PDF.
См. также "На пороге смерти в течение многих лет широко используемая функция SHA1 теперь мертва "и эту иллюстрацию.
Обновление от 26 февраля: Линус подтвердил следующие моменты в своем сообщении в Google+:
(1) Во-первых, небо не падает. Существует большая разница между использованием криптографического хеша для таких вещей, как подпись безопасности, и его использованием для генерации «идентификатора содержимого» для адресуемой по содержимому системы, такой как git.
(2) Во-вторых, характер этой конкретной атаки SHA1 означает, что ее на самом деле довольно легко нейтрализовать, и для этого уже были опубликованы два набора патчей.
(3) И, наконец, есть достаточно простой переход к другому хешу, который не сломает мир - или даже к старым репозиториям git.
Относительно этого перехода см. Q1 2018 Git 2.16, в котором добавлена структура, представляющая алгоритм хеширования. Реализация этого перехода началась.
Начиная с Git 2.19 (3 квартал 2018 г.), Git выбрал SHA-256 как NewHash и в процессе интеграции в код (это означает, что SHA1 по-прежнему используется по умолчанию (2 квартал 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 с одним и тем же хешем фиксации заголовка и разным содержимым. И даже тогда атака остается запутанной.
- Линус добавляет:
# P9 #
Джои Хесс пробует эти 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
< / strong>
Добавление аналогичной проверки в самом Git потребует некоторых вычислений.
При изменении хеша Linux комментарии:
Размер хеша и выбор алгоритма хеширования являются независимыми вопросами.
Что вы, вероятно, сделали бы, так это переключились на 256-битный хеш, использовали его для внутренних целей и в собственной базе данных git, а затем по умолчанию только < em> показать хеш в виде 40-символьной шестнадцатеричной строки (вроде того, как мы уже сокращаем вещи во многих ситуациях).
В этом случае инструменты git даже не видят изменения, если они не переданы каким-то специальным Аргумент «--full-hash
» (или «--abbrev=64
» или что-то еще - по умолчанию мы сокращаем до 40).
Тем не менее, план перехода (от SHA1 к другой хэш-функции) все равно будет сложным , но активно изучается.
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.
person
VonC
schedule
25.02.2017
git
не только проверяет наличие сговора SHA-1? Все проблемы решатся. - person Prihex   schedule 22.07.2020