🔐 Разница между PGP и GPG

1. Введение

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

Даже в этом случае часто существует уровень безопасности, хотя и внешний, помимо базовой реализации.

Фактически, основой электронных подписей и идентификации также является шифрование.

🔐 Каковы различные форматы сертификатов?

В этом руководстве мы рассмотрим стандарт OpenPGP (Open Pretty Good Privacy) как один из наиболее универсальных способов шифрования и GNU Privacy Guard (GnuPG, GPG) как одну из его основных реализаций.

Сначала мы рассмотрим стандарт OpenPGP.

После этого мы переходим к рассмотрению GPG.

Вначале мы рассмотрим ее основные возможности.

Далее мы рассмотрим несколько шагов по созданию ключей и шифрованию данных.

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

Он должен работать в большинстве POSIX-совместимых сред, если не указано иное.

2. Конфиденциальность с помощью OpenPGP

Стандарт OpenPGP является потомком и частичным преемником стандарта и инструментария PGP.

Одна из первоначальных реализаций PGP, также называемая PGP, полностью принадлежала корпорации PGP.

В настоящее время она принадлежит компании Symantec, которая, в свою очередь, является частью Broadcom.

Однако в настоящее время OpenPGP является международным стандартом, как это определено в последнем документе RFC 4880 – OpenPGP Message Format. Таким образом, все желающие могут использовать его, внедряя концепции и определения в свои разработки:

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

Кроме того, конечные пользователи используют стандарт через ряд программных продуктов, реализующих OpenPGP.

Несмотря на то, что основным вариантом использования OpenPGP является работа с электронной почтой, многие его реализации предоставляют и дополнительные возможности, что обусловлено универсальностью его функций:

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

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

Пользователям необходимо также применять передовые методы защиты данных и коммуникаций и тщательно хранить свои закрытые и секретные ключи.

В качестве примера рассмотрим одну из наиболее известных реализаций OpenPGP.

3. GNU Privacy Guard (GnuPG)

GnuPG (GNU Privacy Guard), чаще просто GPG, – это инструментарий, полностью реализующий и расширяющий стандарт OpenPGP.

В дополнение к стандартному и дополнительному набору функций OpenPGP, GPG предоставляет ряд усовершенствований:

  • универсальная система управления ключами
  • доступ ко многим каталогам открытых ключей
  • внешние приложения и библиотеки
  • поддержка расширений Secure/Multipurpose Internet Mail Extensions (S/MIME)
  • поддержка SSH
  • полностью перенесен на платформу Microsoft Windows под именем Gpg4win
  • поддержка хэша SHA-512 и алгоритмов сжатия ZLIB и BZIP2.

Разумеется, эти возможности зависят от версии GPG:

Основным инструментом GnuPG является gpg.

Он реализует и предоставляет все функции OpenPGP и не только.

Итак, кратко рассмотрим шаги по шифрованию данных с помощью ключа.

3.1. Генерация пары ключей

Начнем с генерации идентификатора или пары ключей:

 

gpg --full-generate-key
gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
(14) Existing key from card
Your selection?[/simtmerm]
Хотя для генерации ключей мы можем использовать более простую опцию -generate-key (-genkey), опция -full-generate-key (-full-gen-key) предоставляет все параметры конфигурации ключей:
тип
размер
срок действия
имя
адрес электронной почты
комментарий
пароль
Пройдя через мастер, мы можем настроить и защитить нашу новую идентификацию.
После этого у нас должна появиться новая пара закрытого и открытого ключей, а также так называемый сертификат отзыва.
В двух словах, сертификат отзыва используется для публичного объявления о том, что ключ больше не может считаться действительным.
3.2. Список ключей
Мы можем проверить текущие доступные ключи с помощью опции -list-public-keys (-list-keys, -k):
[simterm]$ gpg --list-public-keys
gpg: checking the trustdb
gpg: marginals needed: 0  completes needed: 0  trust model: pgp
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
/home/baeldung/.gnupg/pubring.kbx
------------------------
pub   rsa4096 2023-11-11 [SC]
10666006DEAD0A18B19BADBEEF006B0FC83BB041
uid           [ultimate] baeldung
sub   rsa4096 2023-11-11 [E][/simtmerm]
С другой стороны, закрытые или секретные ключи можно увидеть с помощью функции -list-secret-keys (-k):
[simterm]$ gpg --list-secret-keys
/home/baeldung/.gnupg/pubring.kbx
------------------------
sec   rsa4096 2023-11-11 [SC]
10666006DEAD0A18B19BADBEEF006B0FC83BB041
uid           [ultimate] baeldung
ssb   rsa4096 2023-11-11 [E]

Обе приведенные выше опции могут принимать аргумент в виде ключа или идентификатора пользователя.

Подключи связаны с основным ключом, но могут быть отозваны независимо от него.

3.3. Хранение ключей

В общем случае ключи хранятся в файле keyring, обычно по адресу $HOME/.gnupg.

🔐 Менеджеры паролей: Переход с LastPass на Bitwarden

Для экспорта ключей в отдельные файлы можно использовать только команду -export или добавить идентификаторы ключа или пользователя:

gpg --export [<KEYUSER1_ID> ... <KEYUSERn_ID>]

В то время как по умолчанию происходит экспорт в stdout, в опции -output (-o) можно указать файл, в который будет записана извлеченная информация.

После этого мы можем перенести этот файл на другую машину.

3.4. Шифрование файла или данных

После генерации ключей мы можем применить их к базовому потоку или файлу:

printf <DATA_TO_ENCRYPT< | gpg --encrypt
You did not specify a user ID. (you may use "-r")
Current recipients:
Enter the user ID.  End with an empty line:

Здесь мы передаем вывод printf в gpg для шифрования с помощью подкоманды -encrypt.

Точнее, входные данные поступают из stdin, а выходные – в stdout.

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

В качестве альтернативы мы можем включить это в команду с помощью опции -recipient (-r):

printf <DATA_TO_ENCRYPT< | gpg --encrypt --recipient <UID> --output <OUT_FILE_PATH>

Здесь мы также указали путь к файлу -output (-o).

Другим способом хранения данных является перенаправление вывода.

Наконец, мы также можем добавить путь к файлу для шифрования вместо использования труб:

gpg --encrypt --recipient <UID> <IN_FILE_PATH>

В результате мы получаем зашифрованный файл с расширением .gpg.

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

3.5. Защита паролем файла или данных

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

printf <DATA_TO_ENCRYPT< | gpg —symmetric

В этом случае мы снова шифруем stdin и выводим в stdout.

Также мы используем алгоритм по умолчанию.

Чтобы зашифровать файл и выбрать точный метод, мы указываем путь в командной строке вместе с опцией -cipheralgo с конкретным именем алгоритма, например aes256:

[sitmerm] $ gpg –symmetric –cipher-algo aes256 <IN_FILE_PATH> [/simterm]

Естественно, мы можем зашифровать и TAR-архив.

3.6. Расшифровка

Обратной операцией шифрования является дешифрование.

В gpg это делается с помощью подкоманды -decrypt (-d):

gpg --decrypt <IN_FILE_PATH>

Как и раньше, мы также можем использовать stdin:

printf <ENCRYPTED_DATA> | gpg --decrypt --output <OUT_FILE_PATH>

В этом случае мы также указываем выходной файл.

Важно отметить, что gpg автоматически определяет алгоритм шифрования, если он поддерживается.

3.7. gpg: проблема с агентом: Неправильный ioctl для устройства

Одной из распространенных ошибок при шифровании и дешифровании является gpg: problem with the agent: Inappropriate ioctl for device.

Обычно это связано с тем, что GPG не может определиться с правильными входным и выходным потоками:

echo 'Data' | gpg --symmetric
gpg: problem with the agent: Inappropriate ioctl for device
gpg: error creating passphrase: Operation cancelled
gpg: symmetric encryption of '[stdin]' failed: Operation cancelled

Чтобы обойти эту проблему, достаточно указать, что входные данные поступают с TTY, экспортировав управляющую переменную GPG_TTY:

export GPG_TTY=$(tty)

В частности, мы устанавливаем его значение на текущий TTY, возвращаемый командой tty.

4. Заключение

В этой статье мы рассказали об OpenPGP и GnuPG, их общих чертах и различиях.

В заключение отметим, что OpenPGP – это открытый стандарт, а GPG – конкретная реализация, построенная на его основе.

 



2023-11-23T16:50:10
Скрипты