Оригинальный автор(ы) | Вернер Кох | ||||
---|---|---|---|---|---|
Разработчик(и) | Проект GNU | ||||
Первоначальный выпуск | 7 сентября 1999 г ( 1999-09-07 ) | ||||
Стабильный релиз(ы) | |||||
| |||||
Предварительный просмотр релиза(ов) | |||||
2.5.2 [3] / 6 декабря 2024 г. | |||||
Репозиторий | dev.gnupg.org/source/gnupg/ | ||||
Написано в | С | ||||
Операционная система | Microsoft Windows , macOS , RISC-ОС , Android , Linux | ||||
Тип | OpenPGP | ||||
Лицензия | 2007: GPL-3.0 или более поздняя версия [a] 1997: GPL-2.0 или более поздняя версия [b] | ||||
Веб-сайт | gnupg.org |
GNU Privacy Guard ( GnuPG или GPG ) — это свободное программное обеспечение , заменяющее криптографический программный пакет PGP от Symantec . Программное обеспечение соответствует устаревшему [4] RFC 4880, спецификации IETF standards-track OpenPGP . Современные версии PGP совместимы с GnuPG и другими системами, совместимыми с OpenPGP v4. [5]
В ноябре 2023 года были представлены два проекта, направленные на обновление спецификации OpenPGP v4 2007 года (RFC4880), что в конечном итоге привело к появлению стандарта RFC 9580 в июле 2024 года. Предложение разработчиков GnuPG, которое называется LibrePGP, не было принято рабочей группой OpenPGP, и будущие версии GnuPG не будут поддерживать текущую версию OpenPGP. [6]
GnuPG является частью проекта GNU и получил крупное финансирование от правительства Германии в 1999 году. [7]
GnuPG — это гибридная программа шифрования, поскольку она использует комбинацию обычной симметричной криптографии для скорости и криптографии с открытым ключом для простоты безопасного обмена ключами, обычно с использованием открытого ключа получателя для шифрования сеансового ключа , который используется только один раз. Этот режим работы является частью стандарта OpenPGP и был частью PGP с его первой версии.
Серия GnuPG 1.x использует интегрированную криптографическую библиотеку, тогда как серия GnuPG 2.x заменяет ее на Libgcrypt .
GnuPG шифрует сообщения с помощью асимметричных пар ключей , индивидуально сгенерированных пользователями GnuPG. Полученные открытые ключи могут быть обменены с другими пользователями различными способами, например, через серверы ключей в Интернете . Их всегда следует обменивать осторожно, чтобы предотвратить подмену личности путем повреждения соответствий открытый ключ ↔ «владелец». Также можно добавить криптографическую цифровую подпись к сообщению, чтобы можно было проверить целостность сообщения и отправителя, если конкретное соответствие, на которое полагаются, не было повреждено.
GnuPG также поддерживает симметричные алгоритмы шифрования . По умолчанию GnuPG использует симметричный алгоритм AES с версии 2.1, [8] В более ранних версиях использовался CAST5 . GnuPG не использует запатентованное или иным образом ограниченное программное обеспечение или алгоритмы. Вместо этого GnuPG использует множество других, не запатентованных алгоритмов. [9] Долгое время он не поддерживал алгоритм шифрования IDEA , используемый в PGP. Фактически, было возможно использовать IDEA в GnuPG, загрузив плагин для него, однако для некоторых видов использования в странах, в которых IDEA был запатентован, это может потребовать лицензии. Начиная с версий 1.4.13 и 2.0.20, GnuPG поддерживает IDEA, поскольку последний патент IDEA истек в 2012 году. Поддержка IDEA предназначена «для того, чтобы избавить от всех вопросов людей, пытающихся либо расшифровать старые данные, либо перенести ключи из PGP в GnuPG», [10] и, следовательно, не рекомендуется для регулярного использования.
Более поздние выпуски GnuPG 2.x («современная» и ныне устаревшая «стабильная» серии) предоставляют большинство криптографических функций и алгоритмов, предоставляемых Libgcrypt (ее криптографической библиотекой), включая поддержку криптографии на эллиптических кривых (ECDH, ECDSA и EdDSA) [11] в «современной» серии (т. е. начиная с GnuPG 2.1).
Начиная с версий 2.3 или 2.2, GnuPG поддерживает следующие алгоритмы:
GnuPG изначально был разработан Вернером Кохом . [12] [13] Первая промышленная версия, версия 1.0.0, была выпущена 7 сентября 1999 года, почти через два года после первого выпуска GnuPG (версия 0.0.0). [14] [12] Федеральное министерство экономики и технологий Германии профинансировало документацию и портирование на Microsoft Windows в 2000 году. [13]
GnuPG — это система, соответствующая стандарту OpenPGP, поэтому история OpenPGP имеет важное значение; она была разработана для взаимодействия с PGP , программой шифрования электронной почты, изначально спроектированной и разработанной Филом Циммерманном . [15] [16]
7 февраля 2014 года завершился краудфандинговый проект GnuPG, в ходе которого было собрано 36 732 евро на новый веб-сайт и улучшение инфраструктуры. [17]
С момента выпуска стабильной версии GnuPG 2.3, начиная с версии 2.3.3 в октябре 2021 года, активно поддерживаются три стабильные ветки GnuPG: [18]
До GnuPG 2.3 активно поддерживались две стабильные ветки GnuPG:
Различные версии GnuPG 2.x (например, из веток 2.2 и 2.0) не могут быть установлены одновременно. Однако, можно установить "классическую" версию GnuPG (например, из ветки 1.4) вместе с любой версией GnuPG 2.x. [11]
До выпуска GnuPG 2.2 («современный»), ныне устаревшая «стабильная» ветка (2.0) была рекомендована для общего использования, первоначально выпущенная 13 ноября 2006 года. [21] Эта ветка достигла конца своего жизненного цикла 31 декабря 2017 года; [22] Ее последняя версия — 2.0.31, выпущенная 29 декабря 2017 года. [23]
До выпуска GnuPG 2.0 все стабильные релизы исходили из одной ветки; т. е. до 13 ноября 2006 года не поддерживалось параллельно ни одной ветви релиза. Этими бывшими, последовательно следующими (до 1.4) ветками релиза были:
(Обратите внимание, что до выпуска 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 через пакеты установщика [27] для macOS . GPG Suite [27] устанавливает все связанные приложения OpenPGP (GPG Keychain), плагины ( GPG Mail ) и зависимости (MacGPG), а также службы GPG (интеграция в меню служб macOS) для использования шифрования на основе GnuPG.
Приложения для обмена мгновенными сообщениями, такие как Psi и Fire, могут автоматически защищать сообщения, если установлен и настроен GnuPG. Веб-приложение, такое как Horde, также использует его. Кроссплатформенное расширение Enigmail обеспечивает поддержку GnuPG для Mozilla Thunderbird и SeaMonkey . Аналогично, Enigform обеспечивает поддержку GnuPG для Mozilla Firefox . FireGPG был прекращен 7 июня 2010 года. [28]
В 2005 году g10 Code GmbH и Intevation GmbH выпустили Gpg4win — программный пакет, включающий GnuPG для Windows, GNU Privacy Assistant и подключаемые модули GnuPG для Windows Explorer и Outlook . Эти инструменты упакованы в стандартный установщик Windows, что упрощает установку и использование GnuPG в системах Windows. [29]
Стандарт OpenPGP определяет несколько методов цифровой подписи сообщений. В 2003 году из-за ошибки в изменении GnuPG, призванном сделать один из этих методов более эффективным, была введена уязвимость безопасности. [30] Она затронула только один метод цифровой подписи сообщений, только для некоторых выпусков GnuPG (с 1.0.2 по 1.2.3), и на серверах ключей было указано менее 1000 таких ключей. [31] Большинство людей не использовали этот метод, и в любом случае им не рекомендовалось это делать, поэтому причиненный ущерб (если таковой имелся, поскольку ни о каком публичном сообщении не сообщалось) был, по-видимому, минимальным. Поддержка этого метода была удалена из версий GnuPG, выпущенных после этого открытия (1.2.4 и более поздние).
В начале 2006 года были обнаружены еще две уязвимости: первая заключалась в том, что скриптовое использование GnuPG для проверки подписи могло приводить к ложным срабатываниям , [32] вторая заключалась в том, что не-MIME-сообщения были уязвимы для внедрения данных, которые, хотя и не были покрыты цифровой подписью, были бы указаны как часть подписанного сообщения. [33] В обоих случаях обновленные версии GnuPG были доступны на момент объявления.
В июне 2017 года уязвимость (CVE-2017-7526) была обнаружена в Libgcrypt Бернстайном, Брайтнером и другими: библиотека, используемая GnuPG, которая позволяла полностью восстановить ключ для RSA-1024 и около 1/8 ключей RSA-2048. Эта атака по побочному каналу использует тот факт, что Libgcrypt использовал метод скользящих окон для возведения в степень, что приводит к утечке битов экспоненты и полному восстановлению ключа. [34] [35] Опять же, обновленная версия GnuPG была доступна во время анонса.
В октябре 2017 года была объявлена уязвимость ROCA , которая влияет на ключи RSA, сгенерированные токенами YubiKey 4, которые часто используются с PGP/GPG. Многие опубликованные ключи PGP оказались уязвимыми. [36]
Примерно в июне 2018 года были анонсированы атаки SigSpoof . Они позволяли злоумышленнику убедительно подделывать цифровые подписи. [37] [38]
В январе 2021 года был выпущен Libgcrypt 1.9.0, в котором была обнаружена серьезная ошибка, которую было легко эксплуатировать. Исправление было выпущено 10 дней спустя в Libgcrypt 1.9.1. [39]