# GPG подпись

<!-- https://www.youtube.com/watch?v=2CwsoGw2coc -->
<!-- https://docs.github.com/en/authentication/managing-commit-signature-verification/generating-a-new-gpg-key -->

GPG ключи по сравнению с SSH ключами имеют более развитый функционал.
- настройка специализации ключа (шифрование, подпись, авторизация, создание подключей);
- отзыв ранее выпущенных ключей;
- настройка срока действия ключей с возможностью продления в будущем;
- привязка ключей к имени пользователя и почте;
- возможность загрузки публичных ключей на сервера ключей;

Под Windows утилита gpg идет вместе с git. Так что можно работать сразу после установки git.

Все свои файлы gpg хранит в `~/.gnupg/`

Полезные команды:
```
gpg -k --keyid-format=long                      # Посмотреть публичные ключи
gpg -K --keyid-format=long                      # Посмотреть приватные ключи
gpg --full-generate-key                         # Генерация пары ключей
gpg -a --export <key-id>                        # Экспорт публичного ключа
gpg -a --export-secret-keys <key-id>            # Экспорт секретного ключа
gpg --import <file>                             # Импорт ключа
gpg --delete-key <key-id>                       # Удаление публичного ключа
gpg --delete-secrete-key <key-id>               # Удаление секретного ключа
git config --global user.signingkey <key-id>
```

Обозначения типов ключей:
```
sec - secret primary key (секретный основной ключ)
pub - public primary key (публичный основной ключ)
ssb - secret sub-key (секретный сабключ)
sub - public sub-key (публичный сабключ)
```

## Генерация ключей

Создаем основной (primary) ключ:
```
gpg --full-generate-key
```

Будут показаны следующие варианты:
```
RSA and RSA       - создание основного и сабключа для шифрования
RSA (sign only)   - создание только основного ключа
```
Выбираем RSA (sign only). Этот ключ нужен для генерации других сабключей.

gpg –expert –edit-key

## Генерация сабключей


Для генерации сабключей заходим в консоль gpg:
```
gpg --edit-key [keyid]
> addkey
...
> save
```
`?` - список все комманд  
`addkey` - добавить новый сабключ  
`save` - не забываем сохранить результаты перед выходом


gpg -K --keyid-format=long

Показать ключ для копирования в репозиторий
gpg -a --export AEBB0598F42201E3

## Экспорт ключей

```
gpg -a --export-secret-key [keyid]              # Экспорт основного ключа
gpg -a --export-secret-subkeys [keyid]          # Экспорт сабключей
```

## Сохранение на аппаратный ключ
<!-- https://fido.ftsafe.com/openpgp/ -->

```
gpg --edit-key [keyid]
> keytocard
```

gpg --delete-secret-keys ARNik

## Настройка подписи коммитов в git

Подписать последний коммит
git commit --amend --no-edit -S

Также можно добавить соответствующий элиас в .ginconfig
sign = commit --amend --no-edit -S



















