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. Генерация пары ключей
Начнем с генерации идентификатора или пары ключей:
Обе приведенные выше опции могут принимать аргумент в виде ключа или идентификатора пользователя.
Подключи связаны с основным ключом, но могут быть отозваны независимо от него.
3.3. Хранение ключей
В общем случае ключи хранятся в файле keyring, обычно по адресу $HOME/.gnupg.
🔐 Менеджеры паролей: Переход с LastPass на Bitwarden
Для экспорта ключей в отдельные файлы можно использовать только команду -export или добавить идентификаторы ключа или пользователя:
В то время как по умолчанию происходит экспорт в stdout, в опции -output (-o) можно указать файл, в который будет записана извлеченная информация.
После этого мы можем перенести этот файл на другую машину.
3.4. Шифрование файла или данных
После генерации ключей мы можем применить их к базовому потоку или файлу:
Здесь мы передаем вывод printf в gpg для шифрования с помощью подкоманды -encrypt.
Точнее, входные данные поступают из stdin, а выходные – в stdout.
В любом случае в подсказке запрашивается UID получателя сообщения, чтобы при шифровании можно было использовать правильный ключ.
В качестве альтернативы мы можем включить это в команду с помощью опции -recipient (-r):
Здесь мы также указали путь к файлу -output (-o).
Другим способом хранения данных является перенаправление вывода.
Наконец, мы также можем добавить путь к файлу для шифрования вместо использования труб:
В результате мы получаем зашифрованный файл с расширением .gpg.
Очень важно, что мы можем использовать такой инструмент, как tar, для упаковки целых каталогов для шифрования с помощью gpg.
3.5. Защита паролем файла или данных
В качестве альтернативы мы можем вообще отказаться от получателя и ключей, шифруя только парольной фразой:
В этом случае мы снова шифруем stdin и выводим в stdout.
Также мы используем алгоритм по умолчанию.
Чтобы зашифровать файл и выбрать точный метод, мы указываем путь в командной строке вместе с опцией -cipheralgo с конкретным именем алгоритма, например aes256:
gpg –symmetric –cipher-algo aes256 <IN_FILE_PATH> [/simterm]
Естественно, мы можем зашифровать и TAR-архив.
3.6. Расшифровка
Обратной операцией шифрования является дешифрование.
В gpg это делается с помощью подкоманды -decrypt (-d):
Как и раньше, мы также можем использовать stdin:
В этом случае мы также указываем выходной файл.
Важно отметить, что gpg автоматически определяет алгоритм шифрования, если он поддерживается.
3.7. gpg: проблема с агентом: Неправильный ioctl для устройства
Одной из распространенных ошибок при шифровании и дешифровании является gpg: problem with the agent: Inappropriate ioctl for device.
Обычно это связано с тем, что GPG не может определиться с правильными входным и выходным потоками:
Чтобы обойти эту проблему, достаточно указать, что входные данные поступают с TTY, экспортировав управляющую переменную GPG_TTY:
В частности, мы устанавливаем его значение на текущий TTY, возвращаемый командой tty.
4. Заключение
В этой статье мы рассказали об OpenPGP и GnuPG, их общих чертах и различиях.
В заключение отметим, что OpenPGP – это открытый стандарт, а GPG – конкретная реализация, построенная на его основе.