Что такое pgp ключ
Что такое pgp ключ
Мы живем во времена, где приватность это премиум признак. Кажется, что с каждым годом заголовков об очередной бреши в системах безопасности становится все больше и больше.
Соответственно многие из нас задаются вопросом, что же нам нужно для того, чтобы защитить себя? Заморозить кредитку? Использовать разные пароли для каждого нового интернет магазина, банковского аккаунта или просто логина?
А что же тогда по поводу зашифровки писем?
Ставки становятся выше, когда что-то наподобии PGP становится необходимым, чтобы защитить одну личность во время обмена важной информации.
Но что это такое? Для чего это используется и почему люди вообще это взяли на вооружение? Давайте разберемся.
Что такое PGP?
PGP расшифровывается как “Pretty Good Privacy”. Это тип зашифровки писем, который должен защищать их от прочтения кем-либо, кроме намеренного получателя. PGP используется как для зашифровки, так и для дешифровки писем, а так же как инструмент для подтверждения отправителя и контента как такогого.
Как работает PGP?
PGP основано на так называемой публичной системе ключей, в которой получатель имеет публично известный ключ – по-факту очень длинное число, которое отправитель использует для зашифровки писем, которые они получают. Чтобы расшифровать такие письма, получатель должен иметь свой собственный приватный ключ, ссылающийся на публичный. Только получатель знает приватный ключ, который хранит приватность сообщения.
Для примера, давайте представим, что кто-то хочет приватно отправить намёк журналисту. Журналист может иметь публичный ключ, который отправитель использовал для зашифровки и безопасной отправки письма ему. После того как письмо зашифруют, оно станет криптограммой, которая является текстом, которому требуется расшифровка.
После того, как криптограмма получена, журналист воспользуется своим личным, частным ключом для её расшифровки.
Есть два типа зашифровки: симметричная и асимметричная.
В симметричном шифровании, нет как такого публичного ключа. Есть только один приватный ключ используемый для расшифровки и дешифровки. Многие рассматривают подобный тип шифрования, как вполне рисковый, потому что любой кто расшифрует один ключ может прочитать, что было в зашифрованном сообщении. Это как-будто бы кто-то нашел бы ваш пароль, только ставки гораздо выше и тут гораздо сложнее сменить «пароль».
Асимметричное шифрование это то, о чем мы говорили ранее в этом посту. Есть два ключа, публичный и приватный, которые разнятся, но со связанными значениями.
Как получить PGP ключ?
PGP шифрование доступно на разных типах софта. Есть много всего доступного, но один из самых упоминаемых вариантов это GNU Privacy Guard (GPG), бесплатный криптографический софт, который может управлять ключами и зашифровывать файлы и письма.
После того, как вы определитесь с софтом, вам понадобится сгенерировать новый PGP сертификат — совершенно новый публичный ключ с дополнительной информацией для подтверждения, такой как имя и адрес электронной почты, чтобы подтвердить получение окончания ключа.
Если вы создали публичный ключ и хотите поделиться им с другими, то у вас есть несколько директорий из которых выбрать. MIT Key Server и PGP Global Directory, для примера, позволяют людям найти ваш ключ без обращения к вам, что важно для тех, кто пытается поддерживать высокий уровень приватности.
Небольшое предостережение — вы возможно не сможете удалить ваш публичный ключ из этих директорий.
Как мне зашифровать сообщение в PGP?
Чтобы отправить зашифрованное сообщение, вам понадобится скачать софт, который позволит вам отправлять зашифрованные сообщения. CPG это как вариант, но есть ещё один — Enigmail который является аддоном для почтового клиента Thunderbird.
В GPG вы можете создавать зашифрованные письма внутри софта с различными вариантами шифровки. PGP это один пример и активируется он с «security method indicator» в программе.
Почему PGP используется?
Хоть PGP и широко применяется для шифрования писем, рост популярности и разговоры о криптовалюте могли бы объяснить, почему его стоит использовать в необычном формате.
Некоторые платформы для торговли используют PGP, чтобы помочь защитить аккаунты пользователей. Например Kraken. PGP широко используется для защиты важной информации, включающюю в себя фанансовые транзакции, особенно те, которые только появляются и само собой он используется для предотвращения кражы криптовалюты.
Во многих случаях, PGP может рассматриваться как интернсивная версия того, что делаем для защиты нашей информации, такой как финансовые данные и записи показателей здоровья.
Но тем не менее, этот уровнь шифрования становится особенно важным, когда защита личных данных становится частью важных транзакций.
Что такое PGP?
С момента ее появления в 1991 году было создано множество версий PGP-софта. В 1997 году Фил Циммерман сделал предложение создать Internet Engineering Task Force (IETF), общепринятый стандарт для PGP с открытым исходным кодом. Предложение было принято и привело к созданию OpenPGP протокола, который определяет стандартные форматы шифрования для ключей и сообщений.
Хотя изначально PGP использовалась только для защиты электронной почты и ее вложений в настоящее время она применяется более обширно, включая цифровые подписи, полное шифрование диска и защиту сети.
Изначально PGP принадлежала компании PGP Inc, которая впоследствии была приобретена Network Associates Inc. В 2010 году Symantec Corp. выкупили PGP за 300 миллионов долларов и теперь этот термин является товарным знаком, используемым для их продуктов совместимых с OpenPGP.
Как это работает?
Затем сеансовый ключ (1) шифруется с использованием асимметричного шифрования: предполагаемый получатель (Боб) предоставляет свой открытый ключ (2) отправителю сообщения (Алиса), чтобы она могла зашифровать сеансовый ключ. Этот шаг позволяет Алисе безопасно делиться ключом с Бобом через интернет, независимо от уровня безопасности.
Асимметричное шифрование сеансового ключа обычно выполняется с использованием алгоритма RSA. Многие другие системы шифрования используют его включая протокол защиты транспортного уровня (TLS), который обеспечивает безопасность большей части интернета.
Как только шифротекст сообщения и зашифрованный сеансовый ключ были получены, Боб может использовать свой приватный ключ (3) для расшифровки сеансового ключа, который затем используется для дешифрования зашифрованного текста.
Помимо основного процесса шифрования и дешифрования, PGP также поддерживает цифровые подписи, которые выполняют как минимум три функции:
Аутентификация: Боб может проверить, что отправителем сообщения была Алиса;
Целостность: Боб может быть уверен, что сообщение имеет первозданный вид;
Безотказность: после того, как сообщение подписано цифровой подписью, Алиса не сможет утверждать, что не отправляла его.
Варианты применения
Одним из наиболее распространенных способов использования PGP является защита электронной почты. Письмо защищенное с помощью PGP превращается в строку символов, которую невозможно прочитать (зашифрованный текст) и расшифровать можно только с помощью соответствующего ключа. Для обеспечения безопасности сообщений защитный механизм практически тот же самый, также есть еще и программные приложения, которые позволяют реализовывать PGP поверх других, эффективно интегрируя систему шифрования к необеспеченным безопасностью службам обмена сообщениями.
Хоть PGP в основном и предназначена для защиты интернет-коммуникации, она также может использоваться для шифрования отдельных устройств. В таком случае программа может применяться к разделам диска на ПК или к мобильному устройству. Шифруя жесткий диск пользователь должен будет указывать пароль при каждой загрузке системы.
Преимущества и недостатки
Протокол OpenPGP позволил создать стандартизированную конкурентную среду и теперь PGP решения предлагаются несколькими компаниями и организациями. Тем не менее, все программы с PGP которые соответствуют стандартам OpenPGP совместимы друг с другом. Это означает, что файлы и ключи созданные в одной программе могут без проблем быть использованы в другой.
Что касается недостатков, системы PGP не так просты в использовании и понимании, особенно для пользователей со слабыми техническими навыками. Кроме того большая длина открытых ключей многими считается неудобной.
В 2018 году Electronic Frontier Foundation (EFF) опубликовала крупную уязвимость под названием EFAIL. Эта проблема позволяет хакерам использовать активный HTML-контент в зашифрованных электронных письмах для получения доступа к расшифрованной версии сообщений.
Однако некоторые проблемы описанные в EFAIL уже были известны сообществу пользователей PGP с конца 1990-х годов и по факту, уязвимость заключалась в различных реализациях со стороны почтовых клиентов, а не самого PGP. Таким образом, несмотря на тревожные и вводящие в заблуждение заголовки, PGP все еще обладает высоким уровнем безопасности.
Заключение
С момента создания в 1991 году, PGP был важным инструментом для защиты данных и в настоящее время используется в большинстве приложений, обеспечивая конфиденциальность, безопасность и аутентификацию для систем связи и поставщиков цифровых услуг.
Не смотря на то что в 2018 году выявление EFAIL вызвало серьезные опасения по поводу жизнеспособности протокола, основная технология по-прежнему считается надежной и криптографически обоснованной. Стоит отметить, что разные реализации PGP могут иметь различные уровни безопасности.
Защита целостности кода с помощью PGP. Часть 1. Базовые концепции и инструменты
Если вы пишете код, который попадает в общедоступные репозитории, вам может пригодиться PGP. В этой серии статей, перевод первой из которых мы публикуем сегодня, будут рассмотрены вопросы использования PGP для обеспечения целостности кода программного обеспечения. Эти материалы, в основном, нацелены на разработчиков свободного ПО, хотя изложенные здесь принципы применимы в любых ситуациях, когда разработка ведётся силами распределённых команд программистов.
Здесь будут раскрыты следующие темы:
О структуре материалов
Каждый раздел этой серии материалов разбит на две части:
Особенности контрольного списка
Элементы в каждом из контрольных списков включают в себя сведения об уровне приоритетности того или иного пункта. Надеемся, это поможет вам в ходе принятия решений по использованию предлагаемых рекомендаций.
Базовые концепции и инструменты PGP
▍Контрольный список
Вот темы, в которых нужно ориентироваться после успешного освоения материала этого раздела:
▍Пояснения
Сообщество открытого ПО уже давно полагается на PGP для обеспечения аутентичности и целостности разрабатываемых программных продуктов. Вы можете об этом не знать, но работаете ли вы в среде Linux, Mac или Windows, вы уже пользовались PGP для того, чтобы обеспечить целостность вашего вычислительного окружения.
Наша цель заключается в том, чтобы помочь вам контролировать происхождение кода, попадающего в ваш проект, и отслеживать его целостность с помощью PGP. Сделать это можно, следуя рекомендациям по работе с PGP и усвоив основные правила безопасности.
▍Обзор работы PGP
Вам не нужно знать все подробности о том, как работает PGP. Для успешного использования этой технологии достаточно понимания её базовых концепций. В PGP используются криптография с открытым ключом. С помощью криптографических методов, например, обычный текст может быть преобразован в текст зашифрованный. Этот процесс требует наличия двух разных ключей:
▍Шифрование
Для шифрования PGP использует открытый ключ того, для кого предназначен зашифрованный материал. В ходе шифрования создаётся сообщение, которое можно расшифровать только используя соответствующий закрытый ключ, принадлежащий получателю сообщения.
Процесс шифрования выглядит так:
▍Подписывание
Для подписывания данных открытые и закрытые ключи PGP используются обратным способом:
▍Совместное использование шифрования и подписывания
Часто зашифрованные сообщения ещё и подписывают с использованием собственного PGP-ключа отправителя данных. Подобный подход следует использовать всегда, когда осуществляется обмен зашифрованными сообщениями, так как шифрование без аутентификации не имеет особого смысла (пожалуй, анонимность в подобных вещах нужна лишь секретным агентам и тем, кто делает общественным достоянием некую закрытую информацию).
▍Идентификационные данные ключа
С каждым PGP-ключом должны быть ассоциированы идентификационные данные владельца ключа. Обычно это — полное имя человека и адрес электронной почты в следующем формате:
Иногда идентификационные данные так же содержат комментарии, приводимые в скобках и предназначенные для того, чтобы сообщить конечному пользователю подробности о конкретном ключе:
Так как люди, владельцы ключей, могут играть множество профессиональных и персональных ролей, в одном и том же ключе могут присутствовать несколько наборов идентификационных данных:
Когда используются множество наборов идентификационных данных, один из них помечается как основной, для упрощения поиска ключа.
▍Достоверность ключа
Для того чтобы иметь возможность использовать чей-нибудь открытый ключ для шифрования или верификации, вам нужно убедиться в том, что он действительно принадлежит этому человеку (Alice в данном случае), а не мошеннику (пусть мошенника зовут Eve). В PGP это называется достоверностью ключа:
▍Сеть доверия и механизм «доверие при первом использовании»
PGP включает в себя механизм делегирования доверия, известный как сеть доверия (Web of Trust, WOT). В своей основе — это попытка заменить необходимость в централизованных службах сертификации вроде тех, что используются в HTTPS/TLS. При таком подходе пользователь самостоятельно принимает решения о том, кому можно доверять.
К сожалению, очень немногие понимают, как работает сеть доверия, и ещё меньше людей заботится об этой технологии. И хотя сети доверия остаются важным аспектом спецификации OpenPGP, существующие версии GnuPG (2.2 и выше) реализовали альтернативный подход, представленный механизмом «доверие при первом использовании» (Trust on First Use, TOFU).
TOFU можно сравнить с SSH. Когда вы, используя SSH, в первый раз подключаетесь к удалённой системе, ваша система запоминает отпечаток её ключа. Если ключ изменится, SSH-клиент сообщит вам об этом и отклонит соединение, предлагая вам принять решение о том, доверяете ли вы изменившемуся ключу или нет.
Похожим образом работает и механизм TOFU. Когда вы впервые импортируете чей-то PGP-ключ, он считается достойным доверия. Если после этого GnuPG столкнётся с новым ключом с теми же самыми идентификационными данными, тогда оба ключа будут помечены как недействительные и вам нужно будет самостоятельно принять решение о том, какой из них следует сохранить.
В этом руководстве мы будем использовать модель доверия TOFU.
▍О терминологии
Тут нам хотелось бы отметить важность понимания различий между такими терминами, как PGP, OpenPGP, GnuPG и gpg:
▍Установка GnuPG
▍GnuPG версий 1 и 2
И GnuPG v.1, и GnuPG v.2 реализуют один и тот же стандарт, но они предоставляют несовместимые библиотеки и инструменты командной строки, в результате многие дистрибутивы поставляются и с устаревшей версией 1, и с более новой версией 2. Вам нужно удостовериться в том, что вы всегда пользуетесь GnuPG v.2.
▍Псевдоним для GnuPG v.2
Итоги
Здесь мы поговорили об основах PGP, которыми необходимо владеть для успешного применения PGP в деле защиты кода. В следующий раз мы расскажем о создании и защите PGP-ключей.
Уважаемые читатели! Используете ли вы PGP для защиты кода ваших программных проектов?
Проблема PGP
Криптоинженеры уже несколько десятилетий кричат о недостатках PGP. Когда это слышат обычные разработчики, то бывают крайне удивлены. Как, PGP никуда не годится? Зачем же тогда его советуют использовать? Ответ в том, PGP действительно никуда не годится, и никому никогда не следует его рекомендовать. Он должен исчезнуть.
Как вы скоро увидите, у PGP много проблем. Если не вдаваться в подробности, основная причина в том, что программа разработана в 90-е годы, до появления серьёзной современной криптографии. Ни один компетентный криптоинженер сегодня не станет разрабатывать систему в таком виде и не потерпит большинства её дефектов ни в какой другой системе. Серьёзные криптографы в основном отказались от PGP и больше не тратят на неё времени (за некоторыми заметными исключениями). Поэтому хорошо известные проблемы в PGP остаются нерешёнными более десяти лет.
Два небольших примечания. Во-первых, статья написана для инженеров, а не для юристов и активистов. Во-вторых, “PGP” может означать множество вещей, от стандарта OpenPGP до эталонной реализации в GnuPG. Мы используем термин “PGP” для всего этого.
Проблемы
Абсурдная сложность
И это только кодировка. Реальная система гораздо сложнее. Есть ключи и подключи. Идентификаторы ключей, серверы ключей и подписи ключей. Ключи только для подписи и только для шифрования. Многочисленные «связки ключей». Аннулирование сертификатов. Три различных формата сжатия. Это мы ещё не добрались до поддержки смарт-карт.
Дизайн швейцарского армейского ножа
Если вы заблудились в лесу и… не знаю, например, вам нужно обрезать отвороты на джинсах — да, очень удобно, что на вашем ножике есть ножницы. Но для серьёзной работы никто не будет регулярно использовать такие ножнички.
Еще в эпоху MC Hammer, когда появился PGP, «шифрование» было особой вещью в себе; был один инструмент для отправки файлов, резервного копирования, для шифрования и подписи файлов. Современная криптография так не работает, нам нужны специализированные инструменты. Криптография для безопасного обмена сообщениями отличается от криптографии для резервного копирования или подписи пакетов.
Болото обратной совместимости
PGP предшествует современной криптографии и сильно устарел за это время. Если вам повезёт, у вашего GnuPG по умолчанию будет установлен 2048-битный ключ RSA, 64-битный шифр CAST5 в CFB и контрольная сумма OpenPGP MDC (о которой позже). Если шифрование производится паролем, а не открытым ключом, протокол OpenPGP установит для PGP алгоритм формирования ключа S2K. Мягко говоря, это не те примитивы, которые криптоинженер выберет для современной системы.
Мы многому научились с тех пор, как ботан Стив Уркель украсил прайм-тайм в эфире ABC. Мы узнали, что зашифрованные тексты следует аутентифицировать (и избегать режима CFB), что 64-битные блочные шифры плохи, что RSA не идеален, что сочетание сжатия и шифрования опасно и что KDF’ы должны строго генерироваться и по времени, и по памяти.
Что бы ни говорил OpenPGP RFC, вероятно, вы не делаете ничего из этого списка, если используете PGP, и невозможно сказать, когда рекомендации начнут выполняться. Возьмите шифры AEAD: Sequoia PGP на языке Rust по умолчанию перешла в режим AES-EAX AEAD. Это здорово. Но теперь никто не может прочитать их сообщения, потому что большинство версий PGP не знает, что такое режим EAX, и это не очень здорово. В каждой плохой криптосистеме в конечном итоге вырастает расширение RFC, которое поддерживает эллиптические кривые или AEAD, так что его сторонники могут кричать на форумах, что они поддерживают современную криптографию. RFC не имеет значения: только реальные установки. Мы изобрели аутентифицированное шифрование 20 лет назад, а PGP скоро на пенсию; хватит оправданий.
Или у вас обратная совместимость с программой 90-х годов, или у вас хорошая криптография; нельзя получить и то, и другое.
Неприятный UX
Трудно сформулировать это лучше, чем Тед Унангст:
Несколько лет назад было проведено исследование юзабилити PGP, в котором группу технических специалистов поместили в комнату с компьютером и попросили настроить PGP. Через два часа никто из них ещё не отозвался.
Если вам нужны собственные эмпирические данные, чтобы подтвердить это, вот эксперимент, который вы можете провести: найдите какого-нибудь далёкого от компьютеров юриста и по телефону помогите ему установить Signal. Наверное, он справится без истерики. А теперь попробуйте сделать это с PGP.
Долговременные секреты
PGP просит пользователей практически навсегда сохранять корневой ключ, привязанный к их личности. Генерации и обмен ключами обременительны с этими «вечеринками подписи ключей» и «сетью доверия», где ключи зависят от других ключей.
Долговременные ключи почти всегда неудобны. Если вы продолжаете использовать ключ, он в конечном итоге становится открытым. С точки зрения грамотного дизайна системы нужно минимизировать ущерб и гарантировать, что пользователь не будет ни секунды колебаться при мысли о генерации нового ключа, если есть хоть какие-то опасения по поводу безопасности текущего.
Фанаты PGP сразу ответят: «Вот почему нужно держать ключи на Yubikey». Но по беглой приблизительной оценке, почти никто в мире не использует дорогие Yubikey, и вряд ли это изменится в будущем (мы едва можем развернуть U2F, а те ключи одноразовые). Мы не можем принимать плохие криптосистемы только для того, чтобы ботанам Unix было приятнее играться со своими игрушками.
Сломанная аутентификация
Подробнее об архаичных примитивах PGP: ещё в 2000 году рабочая группа OpenPGP поняла, что нужно аутентифицировать зашифрованный текст и что подписи PGP этого не делают. Поэтому OpenPGP изобрела систему MDC: сообщения PGP с MDC присоединяют SHA-1 открытого текста к самому открытому тексту, который затем шифруется (как обычно) в режиме CFB.
Если вам интересно, как PGP справляется с этим, когда современные системы используют относительно сложные схемы AEAD (поскольку не могут просто прикрепить SHA-1 к открытому тексту), то это хороший вопрос. Как бы вам описать эту карикатуру? PGP MDC можно очистить от сообщений — он закодирован таким образом, что достаточно просто отрезать последние 22 байта зашифрованного текста. Чтобы сохранить обратную совместимость с небезопасными старыми сообщениями, PGP ввёл новый тип пакета, который сигнализирует о необходимости проверки MDC. Если вы используете неправильный тип, то MDC не проверяется. Даже если вы это сделаете, новый формат пакета SEIP достаточно близок к небезопасному формату SE, которым потенциально можно обмануть получателя с понижением шифра; Тревор Перрин свёл SEIP всего к 16 битам безопасности.
Наконец, даже если всё пойдёт правильно, эталонная реализация PGP выдаст по запросу неаутентифицированный открытый текст, даже если MDC не совпадает.
Непоследовательные идентити
PGP — это и приложение, и набор интеграций с другими приложениями, и формат файла, и социальная сеть, и субкультура.
PGP выдвигает понятие криптографической идентичности (identity). Вы создаёте ключ, сохраняете его в связке ключей, печатаете его фингерпринт на визитке и публикуете на сервере ключей. Вы подписываете чужие ключи. Они, в свою очередь, могут полагаться или не полагаться на ваши подписи для проверки других ключей. Некоторые люди стараются встретиться с другими пользователями PGP лично, чтобы обменяться ключами и более надёжно прописаться в этой «сети доверия». Другие организуют «вечеринки подписи ключей». Если представить всю эту активность, то становится понятно, как трудно преданным фанатам PGP переключиться на новые технологии.
Но вся эта система не работает на практике. Ни сеть доверия с подписями ключей, ни серверы ключей, ни вечеринки. Обычные люди будут доверять всему, что выглядит как ключ PGP, независимо от того, откуда он взялся — как они могут не доверять, если даже эксперту трудно сформулировать, как оценить ключ? Эксперты не доверяют ключам, которые не получили лично. Все остальные полагаются на централизованные сервисы для распространения ключей. Механизмы распространения ключей PGP — это цирк.
Утечки метаданных
На секунду забудьте о фиаско с электронной почтой (вернёмся к этому позже). PGP сам по себе допускает утечку метаданных. При обычном использовании сообщения напрямую связаны с идентификаторами ключей, которые по всей сети доверия PGP связаны с идентификатором пользователя. Кроме того, довольно большая часть пользователей PGP использует серверы ключей, которые сами выдают в сеть, какие пользователи PGP обмениваются сообщениями друг с другом.
Нет прямой секретности
Наглядный пример: криптография для безопасного обмена сообщениями требует прямой секретности (forward secrecy). Прямая секретность означает, что если злоумышленник получит ваш ключ, то всё равно не сможет прочитать предыдущие сообщения. В современной криптографии мы предполагаем, что противник записывает всё в бесконечное хранилище. Заявленные противники PGP включают мировые правительства. Безусловно, некоторые из них делают это. Против серьёзных противников взлом криптографии без прямой секретности — лишь вопрос времени.
Чтобы на практике обеспечить прямую секретность, вы обычно храните два секретных ключа: краткосрочный сеансовый ключ и долгосрочный доверенный ключ. Ключ сеанса эфемерен (обычно продукт обмена DH), и доверенный ключ подписывает его, так что человек посередине не может применить собственный ключ. Теоретически, прямую секретность можно реализовать инструментами PGP. Конечно, почти никто этого не делает.
Топорные ключи
Открытый ключ OpenBSD signify — это строка Base64, достаточно короткая, чтобы поместиться в середине предложения в электронном письме; закрытый ключ, который не является форматом обмена, — просто строка или около того. А открытый ключ PGP — это целый гигантский документ Base64; если вы часто их использовали, вы, вероятно, уже привыкли прикреплять их в аттаче, а не вставлять в сообщения, чтобы не повредить. Ключ signify сгенерирован передовым алгоритмом Ed25519, а PGP — более слабым RSA.
Вы можете подумать, что это не имеет значения, но это важно; на порядки больше людей используют SSH и управляют SSH-ключами, чем PGP. Ключи SSH тривиальны для обработки; PGP — нет.
Согласование
PGP поддерживает ElGamal, RSA, p-кривые NIST, Brainpool, Curve25519, SHA-1, SHA-2, RIPEMD160, IDEA, 3DES, CAST5, AES. Это не полный список того, что поддерживает PGP.
Если за последние 20 лет мы узнали три важные вещи о криптографии, по крайней мере, две из них, это то, что согласование и совместимость — зло. Как правило, недостатки криптосистем появляются в реализациях, а не примитивах, и экспансивная криптосовместимость увеличивает количество реализаций. Современные протоколы, такие как TLS 1.3, стремятся избавиться от обратной совместимости с архаизмами вроде RSA, а не добавляют её. Новые системы поддерживают только один набор примитивов и простой номер версии. Если один из этих примитивов проваливается, вы избавляетесь от этой версии и бросаете сразу весь старый протокол.
Если нам не повезёт и через 20 лет люди всё ещё будут использовать PGP, он останется единственной причиной, по которой хоть где-то применяется стандарт CAST5. Мы не можем сказать это яснее, и это нужно многократно повторять: или у вас обратная совместимость с программой 90-х годов, или у вас хорошая криптография; нельзя получить и то, и другое.
Мусорный код
Де-факто стандартной реализацией PGP является GnuPG. Эта программа не очень аккуратно написана. Там обширная кодовая база на C — языка с дублированием функциональности (например, в описании недавней атаки типа «отказ в обслуживании» на парсинг SKS сказано, что у него есть несколько парсеров ключей) с длинным послужным списком CVE, начиная от повреждения памяти до криптографической атаки по сторонним каналам. Иногда можно было удалить из сообщений аутентификацию, а GnuPG не замечал этого. Можно было скормить ему ключи без правильного отпечатка. В 2018 году уязвимость Efail была вызвана тем, что GnuPG по запросу отдавал неаутентифицированный открытый текст. GnuPG — не есть хорошо.
GnuPG является и эталонной реализацией для PGP, и основой для большинства других инструментов, интегрирующих криптографию PGP. Он никуда не денется. Полагаться на PGP — значит, полагаться на GPG.
Ответы
Чтобы убедить человека отказаться от PGP, важно объяснить ему, что PGP нечем заменить, и это нормально. Альтернативный инструмент зависит от задачи.
Разговоры
Используйте Signal. Или Wire, или WhatsApp, или какой-то другой безопасный мессенджер на основе протокола Signal.
Современные безопасные мессенджеры созданы специально для обмена сообщениями. Они используют сохраняющие конфиденциальность аутентификационные рукопожатия, аннуляцию сообщений, криптографические храповики (ratchets), которые выдают ключ на каждый обмен сообщениями, и, конечно же, современные примитивы шифрования. Мессенджеры тривиально просты в использовании, никакой суеты с ключами и подключами. Если вы используете Signal, вы получаете даже больше: вы получаете систему, настолько параноидальную насчёт сохранения приватных метаданных с серверов, что она даже туннелирует поисковые запросы Giphy, чтобы избежать атак с анализом трафика, и до недавнего времени даже не поддерживала профили пользователей.
Шифрование электронной почты
Электронная почта не безопасна. Даже с PGP это открытый текст по умолчанию, то есть даже если вы всё делаете правильно, какой-то совершенно разумный получатель письма, делая абсолютно разумные вещи, обязательно процитирует открытый текст вашего зашифрованного сообщения кому-то другому в CC (мы не знаем пользователя электронной почты PGP, который с этим не сталкивался). В электронной почте PGP отсутствует прямая секретность. Метаданные электронной почты, включая тему (которая буквально является содержимым сообщения), всегда передаются открытым текстом.
Это никогда не исправят. Чтобы сделать реально безопасную электронную почту, вам придётся туннелировать по электронной почте другой протокол (вы всё равно будете уязвимы для атаки с анализом трафика). В том-то и дело, зачем прикидываться?
Шифровать электронную почту — это кликать беду. Рекомендовать пользователям шифровать электронную почту, если им что-то угрожает, — исключительная халатность. Любой, кто говорит вам о безопасности общения по электронной почте с PGP-шифрованием, ставит свои странные предпочтения выше вашей безопасности.
Отправка файлов
Используйте Magic Wormhole. Клиенты Wormhole используют одноразовый обмен ключами с парольной аутентификацией (PAKE) для шифрования файлов. Это легко (по крайней мере, для ботаников), безопасно и весело: всякий, кому мы показывали «кротовую нору», сразу начинал пропускать через неё все файлы подряд, как это делаем мы.
Кто-то сразу запускает инсталлятор под Windows на Rust или Go, это слишком классная программа, чтобы ею не пользоваться.
Если вы общаетесь с юристами, а не с инженерами, Signal отлично справляется с передачей файлов. Для получения отчётов об ошибках публикуйте номер Signal, а не ключ PGP.
Шифрование бэкапов
Используйте Tarsnap. Колин объяснит, как Tarsnap оптимизирован для защиты резервных копий. Или действительно, возьмите любой другой инструмент шифрования бэкапов; он не будет так хорош, как Tarsnap, но всё равно будет лучше PGP.
Нужны офлайновые бэкапы? Используйте шифрование образов дисков; оно встроено в современные версии Windows, Linux и macOS. Полное шифрование диска не очень хорошо, но отлично справляется с этой задачей, и оно проще и безопаснее, чем PGP.
Подпись пакетов
Шифрование данных приложений
Используйте libsodium: это универсальная библиотека с интерфейсом, в котором трудно допустить ошибку, а для работы не нужен бинарник.
Шифрование файлов
Это действительно проблема. Если у вас /не/ бэкап, /не/ архив для долгосрочного хранения в офлайне, /не/ шифрование файла для передачи и /не/ шифрование виртуальных дисков, которые вы монтируете/отмонтируете по мере необходимости, то нет ни одного хорошего инструмента, чтобы зашифровать файлы. Для других целей Филиппо Вальсорда разрабатывает инструмент age, он кажется многообещающим, но пока не готов.
Надеюсь, ясно, что это довольно узкий случай использования. Мы работаем в области безопасности программного обеспечения и обрабатываем конфиденциальные данные, включая отчёты об ошибках (ещё один очень распространённый случай, когда кричат «Нам нужен PGP!»), но почти никогда не используем PGP.