Цифровые подписи GPG (GNU Privacy Guard) применяются для верификации текстов, писем и других сообщений. Первоначальное название проекта — G10, в честь десятой статьи Конституции Германии (в РФ — 23 статья), гарантирующей тайну переписки и переговоров.
В частности, GPG используется для подписи коммитов в GitHub, чтобы убедиться, что работа отправлена именно доверенным автором.
Что такое GPG
Наиболее известная программа для шифрования и цифровых подписей сообщений и файлов была создана в 1991 году Филиппом Циммерманном в США и была названа PGP — Pretty Good Privacy. Программу начали активно использовать за рубежом, что было недопустимо законодательством США, запрещавшим экспорт криптографического ПО. Против автора начали расследование, однако он обошел ограничение, опубликовав код программы в книге издательства MIT Press — выпуск и экспорт книг защищен первой поправкой в Конституцию о свободе печати.
PGP получила широкое распространение, и для решения проблем с патентами в 1997 году компания PGP Inc. представила открытый стандарт OpenPGP, который получил open-source реализацию, названную GNU Privacy Guard (GnuPG или GPG). Ее выпустил немецкий разработчик Вернер Кох в 1999 году.
А теперь рассмотрим, как GPG используется для подтверждения авторства коммитов на GitHub, GitLab или других платформах.
Как настроить GPG-подпись коммитов
1. Устанавливаем GPG с официального сайта или через Brew
2. Открываем Terminal (на Windows — Git Bash) и генерируем ключ
gpg --full-generate-key
Из предложенных опций выбираем тип RSA and RSA, размер 4096 и срок действия.
При вводе email убедитесь, что он соотвествует адресу, используемому на GitHub.
3. Выводим список ключей и копируем ID фингерпринта приватного ключа
gpg --list-secret-keys --keyid-format LONG
4. Экспортируем ключ в формате ASCII по его ID
gpg --armor --export 3AA5C34371567BD2
5. Копируем ключ и добавляем его в настройках профиля на GitHub (или GitLab)
После этого можно подписывать коммиты при работе через терминал:
git commit -S -m your commit message
# Creates a signed commit
Флаг -S означает создание подписанного коммита. При этом может потребоваться ввод кодовой фразы, заданной при генерации GPG-ключа.
Настройка GitHub Desktop
Официальное приложение GitHub Desktop не поддерживает авторизацию коммитов, однако есть способы добавить такую возможность.
Просим git-клиент подписывать все коммиты и сообщаем ключ.
git config --global commit.gpgsign true
git config --global user.signingkey 3AA5C34371567BD2
Добавляем опцию no-tty в конфигурационный файл GPG и определяем расположение программы.
Для macOS:
echo no-tty >> ~/.gnupg/gpg.conf
git config --global gpg.program /usr/local/bin/gpg
Для Windows:
sed -i '/^no-tty/d' ~/.gnupg/gpg.conf
git config --global --unset gpg.program
Теперь все коммиты, отправленные через GitHub Desktop будут подписаны и верифицированы. При первом коммите потребуется ввести кодовую фразу от GPG-ключа.
При работе с GitLab инструкция отличается незначительно.