Можно ли подделать историю git?

Можно ли подделать историю git?

Я думаю, например, о следующей информации:

  • Дата фиксации
  • Зафиксировать контент
  • Личность коммитера

Если да :

  • Есть ли способы аутентифицировать содержимое репозитория git или сделать его доступным для аутентификации?
  • Как узнать, была ли изменена история git?

Таким способом можно взломать Git, но это не очень просто. Поведение фиксации Git настроено так, чтобы этого не произошло.

Tim Biegeleisen 14.08.2018 13:38

Что кто-нибудь получит от этого?

Liam 14.08.2018 13:52

Можно подписывать коммиты с помощью gpg

Moti Korets 14.08.2018 13:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
293
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете относительно легко изменить детали фиксации: Как добавить измененный файл в более старую (не последнюю) фиксацию в Git

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

Are there ways to authenticate a git repo's content or make it authenticatable?

Вы можете подписывать коммиты с помощью GPG, но это только идентифицирует автора. Если у автора есть злой умысел, это подводит нас ко второму вопросу:

How to know if a git history was modified?

Это зависит от того, как вы определяете «модифицированный». Насколько мне известно, нет истории того, на что master указывал в прошлом, поэтому вы не можете легко отличить обычную ветвь от «модифицированной» истории. Возможно, вам удастся проверить rev-log на предмет чего-нибудь необычного.

История всех систем контроля версий (clearcase, subversion, CVS, git) может быть изменена, если у вас есть доступ к истории. При распространении Git у вас есть копия (то есть вилка) всей истории. Вы можете изменить историю (см. Ответ @mrks^1) только своей собственной вилки.

Если вы хотите вернуть свою копию, чтобы отправить изменения в другую вилку, с помощью --force вы можете, таким образом, перезаписать целевую историю:

  • только если у вас есть доступ на запись к целевой удаленной вилке
  • только если удаленная ветка не установлена ​​как только для чтения
  • любой существующий форк (кроме вашего текущего) заметит перезапись истории и спросит вас, что делать (например, объединить).

Обычно это делается в организациях, чтобы избежать перезаписи истории другими пользователями. И обычно только ветка, связанная с основным путем в истории производства (например, ветка = prod, production, master и т. д.). Это будет частью определения рабочего процесса.

Многие организации ^2, у которых есть зеркала github, имеют эту настройку, например, чтобы убедиться, что сам Github (намеренно или нет) перезаписывает историю.

Ответ принят как подходящий

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

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

Если вам нужна дополнительная безопасность, вы можете подписывать коммиты с помощью ключей PGP, используя git commit -S.

В чем разница между PGP и GPG?

evolutionxbox 14.08.2018 15:02

@evolutionxbox GPG - это, по сути, повторная реализация PGP GNU. Криптография совместима, но одна часть программного обеспечения является FOSS, а другая - проприетарной. GPG интегрирован в довольно много программного обеспечения GNU / Linux, такого как git, но его формат данных по-прежнему тот, который определил PGP.

cmaster - reinstate monica 14.08.2018 15:21

Другие вопросы по теме

Octave fminunc "зона доверия стала слишком маленькой"
Android DownloadManager Якорь доверия для пути сертификации не найден
Разрешить веб-приложениям использовать ваши ключи API криптовалюты, но не доверять им
Произвольно Не удалось установить доверительные отношения для безопасного канала SSL / TLS: удаленный сертификат недействителен в соответствии с процедурой проверки
Как клиент TLS обрабатывает две копии промежуточного сертификата
Использование набора данных Epinions с рекомендательной системой Moletrust
Безопасная веб-служба Java SOAP - доверие проверки подлинности Active Directory
Каковы наиболее распространенные, типичные вещи, которые нужно ИЗБЕГАТЬ кодирования в моем приложении ASP.NET, чтобы оно работало со средним доверием на общем хосте?
Являются ли доверительные отношения лесов Active Directory транзитивными?
Записывать файлы в App_Data при взломе среднего доверия?