Прозрачное шифрование файлов в git при помощи git-crypt
Git-crypt позволяет прозрачно шифровать и расшифровывать файлы в репозитории git. Файлы, которые вы хотите защитить, шифруются при коммите и дешифруются при извлечении. Git-crypt позволяет свободно делиться репозиторием, содержащим как публичный, так и приватный контент.
Git-crypt обеспечивает плавное ухудшение работы, поэтому разработчики без секретного ключа всё ещё могут клонировать и коммитить в репозиторий с зашифрованными файлами. Это позволяет хранить секретные материалы (например, ключи или пароли) в одном репозитории с кодом, не требуя блокировки всего репозитория.
Авторство: git-crypt был написан Эндрю Айером (Andrew Ayer, agwa@andrewayer.name).
Для получения дополнительной информации см. https://www.agwa.name/projects/git-crypt.
Сборка git-crypt: см. файл INSTALL.md.
Использование git-crypt:
Настройте репозиторий для использования git-crypt:
Укажите файлы для шифрования, создав файл .gitattributes:
Как и файл .gitignore, он может соответствовать шаблонам и должен быть добавлен в репозиторий. Подробнее о .gitattributes см. ниже. Убедитесь, что вы случайно не зашифровали сам файл .gitattributes (или другие файлы git, такие как .gitignore или .gitmodules). Убедитесь, что ваши правила .gitattributes установлены до добавления конфиденциальных файлов, иначе эти файлы не будут зашифрованы!
USER_ID может быть идентификатором ключа, полным отпечатком пальца, адресом электронной почты или чем-либо ещё, что однозначно идентифицирует открытый ключ в GPG (см. «HOW TO SPECIFY A USER ID» на странице руководства gpg). Обратите внимание: git-crypt add-gpg-user добавит и зафиксирует файл ключа GPG-шифрования в каталоге .git-crypt в корне вашего репозитория.
Или с помощью симметричного ключа:
Это всё, что вам нужно сделать — после настройки git-crypt (с помощью git-crypt init или git-crypt unlock) вы можете использовать git как обычно — шифрование и дешифровка происходят прозрачно.
Текущий статус:
Последняя версия git-crypt — 0.6.0 (NEWS.md), выпущенная 26 ноября 2017 года. git-crypt стремится быть надёжным и свободным от ошибок, то есть он не должен давать сбой, работать неправильно или раскрывать ваши конфиденциальные данные. Однако он ещё не достиг зрелости, то есть пока не так хорошо документирован, функционален или прост в использовании, как должен быть. Кроме того, до версии 1.0 могут быть внесены изменения, несовместимые с предыдущими версиями.
Безопасность:
git-crypt более безопасен, чем другие системы прозрачного шифрования git. git-crypt шифрует файлы с использованием AES-256 в режиме CTR с синтетическим IV, полученным из HMAC SHA-1 файла. Этот режим работы доказуемо семантически безопасен при детерминированной атаке с выбранным открытым текстом. Это означает, что хотя шифрование является детерминированным (что необходимо, чтобы git мог различать, когда файл изменился), оно не раскрывает никакой информации, кроме того, идентичны ли два файла или нет. Другие предложения по прозрачному шифрованию git используют ECB или CBC с фиксированным IV. Эти системы не являются семантически безопасными и раскрывают информацию.
Ограничения:
git-crypt опирается на фильтры git, которые не были разработаны с учётом шифрования. Поэтому git-crypt не лучший инструмент для шифрования большинства или всех файлов в репозитории. Там, где git-crypt действительно сияет, это когда большая часть вашего репозитория является публичной, но у вас есть несколько файлов (возможно, закрытые ключи с именем *.key или файл с учётными данными API), которые вам нужно зашифровать. Рассмотрим использование системы вроде git-remote-gcrypt. (Примечание: не делается никаких заявлений о безопасности git-remote-gcrypt).
Git-crypt не шифрует имена файлов, сообщения коммитов, цели символических ссылок, gitlinks или другие метаданные.
Git-crypt не скрывает, когда файл изменяется или нет, длину файла или тот факт, что два файла идентичны (см. раздел «Безопасность» выше).
Git-крипт не поддерживает отзыв доступа к зашифрованному репозиторию, который был предоставлен ранее. Это относится как к многопользовательскому режиму GPG (нет команды del-gpg-user для дополнения add-gpg-user), так и к симметричному ключевому режиму (нет поддержки для смены ключа). Это связано с тем, что это сложная проблема в контексте исторических данных. Например, даже если ключ был изменён в какой-то момент истории, пользователь, имеющий предыдущий ключ, всё ещё может получить доступ к предыдущей истории репозитория. Эта проблема более подробно обсуждается на https://github.com/AGWA/git-crypt/issues/47.
Файлы, зашифрованные с помощью git-crypt, не поддаются сжатию. Даже малейшее изменение в зашифрованном файле требует от git сохранения всего изменённого файла, а не только дельты.
Хотя git-crypt защищает содержимое отдельных файлов с помощью SHA-1 HMAC, git-crypt нельзя использовать безопасно, если весь репозиторий не защищён от несанкционированного доступа (злоумышленник, который может изменить ваш репозиторий, может изменить файл .gitattributes, чтобы отключить шифрование). При необходимости используйте функции git, такие как подписанные теги, вместо того чтобы полагаться исключительно на git-crypt для обеспечения целостности.
Файлы, зашифрованные с помощью git-crypt, нельзя исправить с помощью git-apply, если сам патч не зашифрован. Чтобы создать зашифрованный патч, используйте git diff --no-textconv --binary
. В качестве альтернативы вы можете применить текстовый патч вне git с помощью команды patch.
Git-crypt ненадёжно работает с некоторыми сторонними графическими интерфейсами git, такими как Atlassian SourceTree и GitHub для Mac. Файлы могут оставаться незашифрованными.
Файл .gitattributes описан в справочной странице gitattributes(5). Формат файла шаблонов такой же, как и у файла .gitignore, описанного в справочной странице gitignore(5), за исключением того, что указание просто каталога (например, /dir/
) не достаточно для шифрования всех файлов под ним.
Также обратите внимание, что шаблон dir/*
не соответствует файлам в подкаталогах dir/. Чтобы зашифровать всё поддерево dir/, используйте dir/**
:
dir/** filter=git-crypt diff=git-crypt
Файл .gitattributes не должен быть зашифрован, поэтому убедитесь, что подстановочные знаки случайно не соответствуют ему. При необходимости вы можете исключить .gitattributes из шифрования следующим образом:
.gitattributes !filter !diff
Чтобы быть в курсе разработки git-crypt и вносить свой вклад, рассмотрите возможность подписки на один или оба наших списка рассылки:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )