---
title: "🔐 GnuPG"
date: 2023-04-05T12:05:35+03:00
draft: false
tags: [gpg, privacy, tips]
---

## GnuPG

GnuPG — полная и свободная реализация [OpenPGP](https://openpgp.org/about/) стандарта,
определенного в [RFC4880](https://tools.ietf.org/html/rfc4880) (также известного, как PGP).
GnuPG позволяет вам шифровать и подписывать данные и сообщения.
Он оснащен универсальной системой управления ключами,
а также модулями доступа для всех типов открытых ключей.
GnuPG, также известный как GPG,
это инструмент командной строки с возможностью легкой интеграции с другими приложениями.
Доступен богатый выбор пользовательских приложений и библиотек.
Также 2 версия GnuPG поддерживает S/MIME и Secure Shell (ssh).

## Расположение каталогов

`$GNUPGHOME` используется GnuPG для определения каталога,
в котором хранятся конфигурационные файлы.
По умолчанию `$GNUPGHOME` не назначена и вместо этого используется `$HOME`;
таким образом, вы найдете каталог `~/.gnupg` сразу после установки.

Чтобы изменить стандартное расположение, выполните `gpg --homedir путь/к/файлу`
или установите переменную окружения `GNUPGHOME`.

## Файлы конфигурации

Файлы конфигурации по умолчанию `~/.gnupg/gpg.conf`.
По умолчанию разрешения доступа каталога gnupg установлены в `700`,
а файлов, которые он содержит - `600`.
Только владелец каталога имеет разрешение на просмотр содержимого,
радактирование и доступ к файлам. В целях безопасности,
эти разрешения не должны быть изменены.
В случае, если этот каталог или любые файлы внутри не следуют данной мере безопасности,
вы получите предупреждение о наличии небезопасных файлов и разрешений домашнего каталога.

## Создание пары ключей

Чтобы создать пару ключей, необходимо ввести команду:
```sh
gpg --full-gen-key
```

ℹ️ Используйте опцию `--expert`, чтобы выбрать другие шифры,
такие как [ECC](https://en.wikipedia.org/wiki/Elliptic_curve_cryptography).

ℹ️ Более простая опция `--gen-key` использует параметры по умолчанию для шифра,
размера и срока действия ключа и запрашивает только имя и адрес электронной почты.

## Экспорт открытого ключа

Основное назначение GnuPG — обеспечение конфиденциальности обмена сообщениями
с помощью криптографии с открытым ключом.
С его помощью каждый пользователь распространяет открытый ключ своей связки ключей,
который может быть использован другими пользователями для шифрования сообщений пользователю.
Закрытый ключ всегда должен оставаться в тайне, иначе конфиденциальность будет нарушена.

Таким образом, чтобы другие могли отправлять вам зашифрованные сообщения,
им нужен ваш открытый ключ.

Чтобы сгенерировать ASCII-версию открытого ключа пользователя в файл `public.key`
(например, для отправки по электронной почте):

```sh
gpg --export --armor --output public.key user-id
```

### Импорт открытого ключа

Чтобы зашифровать сообщения другим людям, а также проверить их подписи,
вам нужен их открытый ключ. Чтобы импортировать открытый ключ из файла public.key в свой список открытых ключей, выполните команду:

```sh
gpg --import public.key
```

## Резервное копирование закрытого ключа

Чтобы создать резервную копию вашего закрытого ключа, выполните:

```sh
gpg --export-secret-keys --armor --output privkey.asc user-id
```

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

⚠️ **Важно:**
Пароль — обычно самое слабое звено в защите закрытого ключа.
Поместите закрытый ключ в безопасное место на другой системе или на другом устройстве,
например, в заблокированный контейнер или на зашифрованный диск.
Это единственное средство защиты, которое поможет
вам восстановить контроль над списком ваших ключей в случае,
например, поломки диска, кражи или ещё чего-нибудь похуже.
Этот способ резервного копирования ключей имеет некоторые ограничения по безопасности.
Более безопасный способ резервного копирования и импорта ключей с помощью gpg описан
[здесь](https://web.archive.org/web/20210803213236/https://habd.as/post/moving-gpg-keys-privately/).

## Импорт закрытого ключа из резервной копии:

```sh
gpg --import privkey.asc
```

ℹ️ Совет: [Paperkey](https://www.jabberwocky.com/software/paperkey/) позволяет экспортировать ключ в виде простого текста
или машиночитаемого штрих-кода, которые можно отпечатать на бумаге.

## Резервное копирование сертификата отзыва

Сертификаты отзыва автоматически генерируются для вновь создаваемых ключей.
По умолчанию они находятся в `~/.gnupg/openpgp-revocs.d/`.
Имя файла сертификата — это отпечаток ключа, который он отзывает.
Сертификаты отзыва также можно сгенерированы вручную с помощью следующей команды:

```sh
gpg --gen-revoke --armor --output revcert.asc user-id
```

Этот сертификат используется, чтобы выполнить отзыв ключа в случае,
если он оказался потерян или скомпрометирован.
Резервная копия будет полезна, если у вас больше нет доступа к закрытому ключу,
из-за чего вы не можете сгенерировать
новый сертификат отзыва с помощью приведённой выше команды.
Он достаточно короткий, чтобы его можно было распечатать и набрать от руки при необходимости.

⚠️ **Важно:** Любой человек, имеющий доступ к сертификату отзыва,
может публично отозвать ключ, и это действие нельзя отменить.
Защищайте свой сертификат отзыва так же, как вы защищаете свой закрытый ключ.
