GnuPG — шифрование данных и цифровые подписи

11. 04. 2016

GnuPG — свободно распространяемая программа позволяющая шифровать данные и создавать цифровые подписи, совместима с другими OpenPGP-совместимыми системами. Работает на самых популярных ОС семейства Windiws, GNU/Linux, BSD и Mac OS X.

Настройка GnuPG:

GnuPG - шифрование данныхПо умолчанию настройки хранятся в домашнем каталоге ~/.gnupg. Изменить каталог можно используя переменную $GNUPGHOME. Для этого нужно добавить в файл начальной инициализации следующею строку:

export GNUPGHOME="/путь/до/каталога"

Либо можно изменить путь к каталогу при помощи --homedir:

$ gpg --homedir /путь/до/каталога

Шаблон хранится тут: — /usr/share/gnupg/gpg-conf.skel/

Чтобы создать опции по умолчанию для новых пользователей, поместите файл с опциями в /etc/skel/.gnupg. При создании пользователя файлы настроек будут взяты отсюда (/etc/skel/.gnupg). Если есть необходимость задать (создать файл) опции существующим пользователям можно использовать скрипт addgnupghome.

$ addgnupghome user

Данная команда создаст каталог home/user/.gnupg и скопирует туда файлы из /etc/skel/.gnupg. Если у пользователя есть данный каталог с фалами, будет пропущен.

Создание ключа:

Свежая версия GnuPG по умолчанию использует SHA256 и AES, этого более чем достаточно для большинстве случаев. Изменить алгоритм можно в файле ~/.gnupg/gpg.conf.

Для генерации личного ключа, набираем следующие:

$ gpg --full-gen-key

Далее вам необходимо ответить на несколько вопросов:

  1.  - выбираем пару RSA-ключей (по умолчанию)  для подписывания и шифрования данных.
  2.  - размер ключа от 1024 до 4096, по умолчанию 2048.
  3.  - срок действие ключа, хорошей практикой является ограничить строк действия ключа на один год, тем более всегда можно продлить срок действия имеющегося ключа.
  4.  - вводим: Ваше имя, e-mail, комментарий.
  5.  - предоставляется возможность отредактировать данные. Если все правильно, вводим «o».
  6.  - задаем пароль.

После окончания ввода данных, программа просит имитировать деятельность (entropy) для генерации ключа, т.е. двигать мышкой, печатать текст и т.п.

Управление ключами:

Управлять ключами можно командой:

$ gpg --edit-key <user-id>

где user-id это идентификатор, также можно использовать имя или e-mail адрес. После программа попросит ввести key (номер ключа), затем дату оканчания expire (гггг-мм-дд), сохранить save и выйти quit.

Другие редактируемые параметры:

  • passwd — ввести новый пароль
  • clean — очистить неиспользуемые идентификаторы (отозваны или срок действия истек)
  • revkey — отозвать ключ
  • addkey — создать подключ к текущему ключу
  • expire — отредактировать дату окончания действия ключа
  • adduid — добавть e-mail
  • primary — установить приоритетный e-mail

Показать открытый ключ в формате ASCII-совместимом:

$ gpg --armor --output public.key --export <user-id>

Зарегистрировать ключ на сервере ключей PGP, для получения вашего открытого ключа другими пользователями без необходимости связывается с вами:

$ gpg --keyserver pgp.mit.edu --send-keys <user-id>

Подписать и зашифровать файл для пользователя nameUser:

$ gpg se -r nameUser you-file

Создать текстовый файл со встроенной подписью:

$ gpg --clearsign you-file

Экспорт:

Если есть необходимость использовать один и тот же ключ на разных устройствах, нужно вырезать мастер-ключ и оставить подключ.

Выберем подключ для экспорта:

$ gpg -K

Экспортируем выбранный подключ :

$ gpg -a --export-secret-subkeys [subkey id]! > /tmp/subkey.gpg

Обратите внимание на восклицательный знак (!), без этого знака экспортируются подключи.

Хорошей практикой будет изменить пароль:

$ gpg --homedir /tmp/gpg --import /tmp/subkey.gpg
$ gpg --homedir /tmp/gpg --edit-key <user-id>
> passwd
> save
$ gpg --homedir /tmp/gpg -a --export-secret-subkeys [subkey id]! > /tmp/subkey.altpass.gpg

Скорее всего, вы получите предупреждение 0 «недоступности мастер-ключа» и о том, что пароль не был изменен. Игнорируйте это, пароль подключа  изменен.

Импорт:

Импорт открытых ключей в список открытых ключей:

$ gpg --import public.key

Импорт закрытых ключей в список закрытых ключей:

$ gpg --import private.key

Импорт ключа с сервера ключей:

$ gpg --keyserver pgp.mit.edu --recv-keys <user-id>

Если не указать «--keyserver» то будет использован сервер по умолчанию.

Ротация:

За некоторое время, до окончания действия ключа, нужно создать новый (если  у вас нет желания продлевать срок действия старого ключа)

Создаем новый подключ:

$ gpg --edit-key <user-id>
> addkey

Отвечаем на вопросы (см. выше).

Сохраняем:

> save

Обновляем ключ на сервере:

$ gpg  --keyserver pgp.mit.edu --send-keys <user-id>

Отзыв просроченных подключей является плохой практикой.

Отображение:

Просмотреть список открытых ключей:

$ gpg --list-keys

Просмотреть список закрытых ключей:

$ gpg --list-secret-keys

Шифрование / дешифрование:

GnuPG может шифровать за раз только один файл, но если есть необходимость, можно заархивировать несколько файлов и зашифровать архив.

Шифруем файл:

$ gpg --encrypt -o secret.tar.gpg secret.tar
  • -u <i><user-id></i> или --local-user <i><user-id> </i>используется для выбора конкретного ключа, если вы используете несколько.
  • -r <i><user-id></i> (или --recipient <i><user-id></i>) используется, чтобы указать для кого зашифровать файл.

Дешифруем файл:

$ gpg --decrypt secret.tar.gpg

После вводим пароль.

Шифрование пароля:

Если вам нужно зашифровать пароль, необходимо создать новый файл в который вписываем наш пароль и в конце файла оставить пустую строку!

Выполняем:

$ gpg -e -a -r <user-id> fail_password
  • -e — режим шифрования.
  • -a — для вывода в ASCII-совместимом формате.
  • -r — идентификатор ключа.

После выполнения команды в текущем каталоге будет создан новый файл fail_password.asc.