Введение

Полная реализация стандартов OpenPGP и S/MIME

GNU Privacy Guard (GnuPG или GPG) — это бесплатная замена криптографическому программному пакету PGP от Symantec. Программное обеспечение соответствует RFC 4880, спецификации стандартов IETF для OpenPGP. Современные версии PGP совместимы с GnuPG и другими системами, соответствующими OpenPGP. Однако, по состоянию на апрель 2024 года, ожидается, что GnuPG перестанет соответствовать предстоящей редакции OpenPGP и, следовательно, другим реализациям, которые продолжат соответствовать ей. GnuPG является частью проекта GNU и получил значительное финансирование от правительства Германии в 1999 году.

Обзор

GnuPG — это программа для гибридного шифрования, поскольку она использует комбинацию традиционной симметричной криптографии для скорости и криптографии с открытым ключом для упрощения безопасного обмена ключами, как правило, с использованием открытого ключа получателя для шифрования сеансового ключа, который используется только один раз. Этот режим работы является частью стандарта OpenPGP и присутствовал в PGP с самой первой версии. Серия GnuPG 1.x использует встроенную криптографическую библиотеку, а серия GnuPG 2.x заменяет её на Libgcrypt. GnuPG шифрует сообщения с помощью асимметричных пар ключей, индивидуально генерируемых пользователями GnuPG. Полученные открытые ключи могут быть обменены с другими пользователями различными способами, например, через интернет-серверы ключей. Их всегда следует обменивать с осторожностью, чтобы предотвратить подмену личности путём искажения соответствия между открытым ключом и идентификационными данными "владельца". Также возможно добавить к сообщению криптографическую цифровую подпись, чтобы можно было проверить целостность сообщения и отправителя, если соответствующее используемое соответствие не было повреждено. GnuPG также поддерживает алгоритмы симметричного шифрования. По умолчанию, начиная с версии 2.1, GnuPG использует симметричный алгоритм AES, а в более ранних версиях использовался CAST5. GnuPG не использует запатентованное или иным образом ограниченное программное обеспечение или алгоритмы. Вместо этого GnuPG использует множество других, не запатентованных алгоритмов. Долгое время он не поддерживал алгоритм шифрования IDEA, используемый в PGP. Однако IDEA можно было использовать в GnuPG, загрузив для него плагин, но для некоторых применений в странах, где IDEA был запатентован, это могло потребовать лицензию. Начиная с версий 1.4.13 и 2.0.20, GnuPG поддерживает IDEA, поскольку последний патент на IDEA истек в 2012 году. Поддержка IDEA предназначена "для устранения всех вопросов от пользователей, пытающихся расшифровать старые данные или перенести ключи из PGP в GnuPG", и поэтому не рекомендуется для регулярного использования. Более поздние выпуски GnuPG 2.x ("современные" и устаревшая "стабильная" серии) предоставляют доступ к большинству криптографических функций и алгоритмов, предоставляемых Libgcrypt (его криптографической библиотекой), включая поддержку криптографии на эллиптических кривых (ECDH, ECDSA и EdDSA). Первая производственная версия 1.0.0 была выпущена 7 сентября 1999 года, почти через два года после первого релиза GnuPG (версия 0.0.0). 7 февраля 2014 года завершилась краудфандинговая кампания GnuPG, в результате которой было собрано 36 732 евро на новый веб-сайт и улучшение инфраструктуры.

Филиалы

С момента выпуска стабильной версии GnuPG 2.3, начиная с версии 2.3.3 в октябре 2021 года, активно поддерживаются три стабильные ветви GnuPG: "стабильная ветвь", которая в настоящее время (по состоянию на 2021 год) является ветвью 2.3. "LTS (долгосрочной поддержки) ветвь", которая в настоящее время (по состоянию на 2021 год) является ветвью 2.2 (которая ранее называлась "современной ветвью" по сравнению с ветвью 2.0). Старая "ветвь наследия" (ранее называемая "классической ветвью"), которая является и останется ветвью 1.4. До GnuPG 2.3 активно поддерживались две стабильные ветви GnuPG: "Modern" (2.2) с многочисленными новыми функциями, такими как криптография на эллиптических кривых, по сравнению с прежней "стабильной" ветвью (2.0), которую она заменила выпуском GnuPG 2.2.0 28 августа 2017 года. Первоначально выпущена 6 ноября 2014 года. "Классическая" (1.4) — очень старая, но всё ещё поддерживаемая автономная версия, наиболее подходящая для устаревших или встроенных платформ. Первоначально выпущена 16 декабря 2004 года. Различные версии GnuPG 2.x (например, из ветвей 2.2 и 2.0) нельзя устанавливать одновременно. Однако можно установить "классическую" версию GnuPG (т.е. из ветви 1.4) вместе с любой версией GnuPG 2.x. Эта ветвь достигла конца жизненного цикла 31 декабря 2017 года; её последняя версия — 2.0.31, выпущенная 29 декабря 2017 года. До выпуска GnuPG 2.0 все стабильные релизы создавались из одной ветви; то есть до 13 ноября 2006 года параллельно не поддерживалось несколько ветвей выпуска. Эти предыдущие последовательно сменявшие друг друга (до 1.4) ветви выпуска были: ветвь 1.2, первоначально выпущенная 22 сентября 2002 года, с 1.2.6 в качестве последней версии, выпущенной 26 октября 2004 года, и ветвь 1.0, первоначально выпущенная 7 сентября 1999 года. (Обратите внимание, что до выпуска GnuPG 2.3.0 ветви с нечётным номером второстепенного релиза (например, 2.1, 1.9, 1.3) были ветвями разработки, ведущими к стабильной ветви выпуска с номером версии на "+0.1" выше (например, 2.2, 2.0, 1.4); следовательно, ветви 2.2 и 2.1 относятся к "современной" серии, 2.0 и 1.9 — к "стабильной" серии, а ветви 1.4 и 1.3 — к "классической" серии. С выпуском GnuPG 2.3.0 эта номенклатура была изменена и теперь состоит из "стабильной" и "LTS" ветвей из "современной" серии, а также 1.4 как последней поддерживаемой "классической" ветви. Также обратите внимание, что чётные или нечётные номера второстепенных релизов больше не указывают на стабильную или разрабатываемую ветвь релиза.)

Платформы

Хотя основная программа GnuPG имеет интерфейс командной строки, существует множество графических оболочек, предоставляющих ей графический пользовательский интерфейс. Например, поддержка шифрования GnuPG интегрирована в KMail и Evolution – графические почтовые клиенты, используемые в KDE и GNOME, самых популярных рабочих средах Linux. Также существуют отдельные графические оболочки для GnuPG, такие как Seahorse для GNOME и KGPG и Kleopatra для KDE. GPGTools предоставляет ряд оболочек для интеграции шифрования и управления ключами в операционные системы, а также для установки GnuPG с помощью установочных пакетов для macOS. GPG Suite устанавливает все связанные приложения OpenPGP (GPG Keychain), плагины (GPG Mail) и зависимости (MacGPG), а также GPG Services (интеграция в меню «Службы» macOS) для использования шифрования на основе GnuPG. Приложения для обмена мгновенными сообщениями, такие как Psi и Fire, могут автоматически обеспечивать безопасность сообщений при установке и настройке GnuPG. Веб-приложения, такие как Horde, также используют его. Кроссплатформенное расширение Enigmail обеспечивает поддержку GnuPG для Mozilla Thunderbird и SeaMonkey. Аналогично, Enigform предоставляет поддержку GnuPG для Mozilla Firefox. Разработка FireGPG была прекращена 7 июня 2010 года. В 2005 году компании g10 Code GmbH и Intevation GmbH выпустили Gpg4win – пакет программного обеспечения, включающий GnuPG для Windows, GNU Privacy Assistant и плагины GnuPG для Windows Explorer и Outlook. Эти инструменты поставляются в стандартном установщике Windows, что упрощает установку и использование GnuPG в системах Windows.

Уязвимости

Стандарт OpenPGP определяет несколько методов цифровой подписи сообщений. В 2003 году из-за ошибки в изменении GnuPG, направленном на повышение эффективности одного из этих методов, была обнаружена уязвимость в системе безопасности. Она затронула только один метод цифровой подписи сообщений, и только в некоторых версиях GnuPG (1.0.2 – 1.2.3). На серверах ключей было зарегистрировано менее 1000 таких ключей. Большинство пользователей не использовали этот метод, и его использование не рекомендовалось, поэтому ущерб, причиненный (если таковой был, поскольку о нем не сообщалось публично), вероятно, был незначительным. Поддержка этого метода была удалена из версий GnuPG, выпущенных после обнаружения уязвимости (1.2.4 и более поздние). В начале 2006 года были выявлены две дополнительные уязвимости: первая – скриптовое использование GnuPG для проверки подписи могло приводить к ложноположительным результатам, вторая – не-MIME сообщения были уязвимы для внедрения данных, которые, хотя и не покрывались цифровой подписью, могли отображаться как часть подписанного сообщения. В обоих случаях обновленные версии GnuPG были выпущены одновременно с объявлением об уязвимостях. В июне 2017 года Бернштейн, Брейтнер и другие обнаружили уязвимость (CVE 2017 7526) в Libgcrypt – библиотеке, используемой GnuPG, которая позволяла полностью восстановить ключ для RSA 1024 и более чем 1/8 ключей RSA 2048. Эта атака по побочному каналу использует тот факт, что Libgcrypt использовал метод скользящего окна для возведения в степень, что приводило к утечке битов экспоненты и, как следствие, к полному восстановлению ключа. Обновленная версия GnuPG была выпущена одновременно с объявлением об уязвимости. В октябре 2017 года была объявлена уязвимость ROCA, затрагивающая ключи RSA, сгенерированные токенами YubiKey 4, которые часто используются с PGP/GPG. Было обнаружено, что многие опубликованные ключи PGP уязвимы. Около июня 2018 года были объявлены атаки SigSpoof, позволяющие злоумышленнику убедительно подделывать цифровые подписи. В январе 2021 года был выпущен Libgcrypt 1.9.0, в котором была обнаружена серьезная, легко эксплуатируемая ошибка. Исправление было выпущено через 10 дней в Libgcrypt 1.9.1.