Проблемы С Pgp

Криптоинженеры уже Десятилетиями люди кричали о недостатках PGP. .

Когда обычные разработчики слышат это, они крайне удивляются.

Что, PGP никуда не годится? Почему же тогда рекомендуется его использовать? Ответ таков: PGP на самом деле бесполезен, и его никогда не следует никому рекомендовать.

Он должен исчезнуть.

Как вы скоро увидите, у PGP много проблем.

Не вдаваясь в подробности, основная причина в том, что программа была разработана в 90-е годы, до появления серьезной современной криптографии.

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

Серьезные криптографы в основном отказались от PGP и больше не тратят на него время (некоторые заметные исключения ).

Таким образом, известные проблемы PGP остаются нерешенными уже более десяти лет. Две небольшие заметки.

Во-первых, статья написана для инженеров, а не юристов и активистов.

Во-вторых, «PGP» может означать множество вещей: от стандарта OpenPGP до эталонной реализации GnuPG. Для всего этого мы используем термин «PGP».

Проблемы



Абсурдная сложность

По причинам, которые больше никто не понимает, PGP основан на пакетах.

Сообщение PGP (в файле .

asc) представляет собой архив типизированных пакетов.

Существует как минимум восемь различных способов кодирования длины пакета, в зависимости от того, используете ли вы пакеты «нового» или «старого» формата.

Пакеты «нового формата», такие как BER, имеют переменную длину (попробуйте написать реализацию PGP, и стандарт кодирования ASN.1 покажется вам конфеткой).

Пакеты могут иметь подпакеты.

Некоторые опции пакета дублируют друг друга.

Последняя атака на сервер ключей связана с тем, что из-за этого ненормального формата анализ ключей GnuPG случайным образом переходит в квадратичное время .

И это только кодировка.

Реальная система гораздо сложнее.

Есть ключи и подключение.

Идентификаторы ключей, серверы ключей и подписи ключей.

Ключи предназначены только для подписи и только для шифрования.

Многочисленные «брелки».

Аннулирование сертификатов.

Три разных формата сжатия.

Мы еще не дошли до поддержки смарт-карт.

Конструкция швейцарского армейского ножа

Если вы заблудились в лесу и.

не знаю, например, вам нужно разрезать манжеты на джинсах - да, очень удобно иметь ножницы на ноже.

Но регулярно использовать такие ножницы для серьезной работы никто не будет. Швейцарский армейский нож умеет много чего, и все они плохие.

PGP — довольно посредственный инструмент для подписи документов, он относительно плохо шифрует пароли и очень плохо использует открытые ключи.

PGP не особенно хорош для безопасной передачи файлов.

Это неуклюжий способ подписывать пакеты.

Это не очень хорошо для защиты резервных копий.

Это чрезвычайно опасный способ обмена защищенными сообщениями.

В эпоху MC Hammer, когда появился PGP, «шифрование» было самостоятельным явлением; существовал один инструмент для отправки файлов, резервного копирования, шифрования и подписи файлов.

Современная криптография так не работает, нам нужны специализированные инструменты.

Криптография для безопасного обмена сообщениями отличается от криптографии для резервного копирования или подписи пакетов.



Болото обратной совместимости

PGP появился раньше современной криптографии и за это время сильно устарел.

Если вам повезет, ваш GnuPG по умолчанию будет использовать 2048-битный ключ RSA, 64-битный шифр CAST5 в CFB и контрольную сумму OpenPGP MDC (подробнее об этом позже).

Если шифрование выполняется с использованием пароля, а не открытого ключа, протокол OpenPGP установит алгоритм генерации ключей S2K на PGP. Мягко говоря, это не те примитивы, которые криптоинженер выбрал бы для современной системы.

Мы многому научились с тех пор, как ботаник Стив Уркель украсил прайм-тайм на канале 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».

Но по грубой оценке почти никто в мире не использует дорогие Yubikeys, и это вряд ли изменится в будущем (мы едва можем развернуть U2F, а эти ключи одноразовые).

Мы не можем мириться с плохими криптосистемами только для того, чтобы любители Unix с удовольствием играли в свои игрушки.



Сломанная аутентификация

Еще об архаичных примитивах PGP: Еще в 2000 году рабочая группа OpenPGP поняла, что зашифрованный текст необходимо аутентифицировать, а подписи PGP этого не делают. Вот почему OpenPGP изобрел система МДК : Сообщения PGP с MDC добавляют открытый текст SHA-1 к самому открытому тексту, который затем шифруется (как обычно) в режиме CFB. Если вам интересно, как PGP справляется с этим, когда современные системы используют относительно сложные схемы AEAD (поскольку они не могут просто присоединить SHA-1 к открытому тексту), то это хороший вопрос.

Как бы вы охарактеризовали этот мультфильм? PGP MDC может быть лишен сообщений — он закодирован таким образом, что достаточно просто отрезать последние 22 байта зашифрованного текста.

Чтобы обеспечить обратную совместимость с незащищенными устаревшими сообщениями, PGP представила новый тип пакета, который сигнализирует о необходимости проверки MDC. Если вы используете неправильный тип, то MDC не проверяется.

Даже если вы это сделаете, новый формат пакета SEIP достаточно близок к небезопасному формату SE и потенциально может обмануть получателя, заставив его понизить шифр; Тревор Перрин сократил SEIP до 16 бит безопасности .

Наконец, даже если все пойдет правильно, эталонная реализация PGP по запросу выдаст неаутентифицированный открытый текст: даже если MDC не соответствует .



Несовместимые личности

PGP — это приложение, набор интеграций с другими приложениями, формат файла, социальная сеть и субкультура.

PGP вводит концепцию криптографической идентификации.

Вы создаете ключ, сохраняете его в связке ключей, печатаете его отпечаток на визитной карточке и публикуете на сервере ключей.

Вы подписываете чужие ключи.

Они, в свою очередь, могут полагаться или не полагаться на ваши подписи для проверки других ключей.

Некоторые люди пытаются лично встретиться с другими пользователями PGP, чтобы обменяться ключами и стать более защищенными в этой «сети доверия».

Другие организуют «вечеринки по подписанию ключей».

Если представить всю эту деятельность, то становится понятно, насколько сложно преданным фанатам PGP перейти на новые технологии.

Но вся эта система на практике не работает. Ни сети доверия с подписью ключа, ни серверов ключей, ни сторон.

Обычные люди будут доверять всему, что похоже на ключ PGP, независимо от того, откуда он исходит — как они могут не доверять, если даже эксперт не может сформулировать, как оценить ключ? «Эксперты не доверяют ключам, которые они не получили лично.

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

Механизмы распределения ключей PGP — это цирк.



Утечки метаданных

Забудьте на секунду о фиаско с электронной почтой (мы вернемся к этому позже).

PGP сам по себе допускает утечку метаданных.

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

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



Никакой прямой секретности

Показательный пример: криптография для безопасного обмена сообщениями требует прямой секретности.

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

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

В число заявленных противников PGP входят мировые правительства.

Конечно, некоторые из них так и делают. В борьбе с серьезными противниками взлом криптографии без прямой секретности — лишь вопрос времени.

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

Сеансовый ключ является эфемерным (обычно продукт обмена DH), и доверенный ключ подписывает его, так что человек в середине не может применить свой собственный ключ.

Теоретически прямую секретность можно реализовать с помощью инструментов PGP. Конечно, почти никто этого не делает.

Ключи от топора

Открытый ключ OpenBSD представляет собой строку Base64, достаточно короткую, чтобы поместиться в середине предложения в электронном письме; закрытый ключ, который не является форматом обмена, представляет собой просто строку или около того.

А открытый ключ PGP — это целый гигантский документ Base64; если вы часто их использовали, вы, вероятно, привыкли прикреплять их к вложению, а не вставлять в сообщения, чтобы не повредить их.

Ключ Signify генерируется усовершенствованным алгоритмом Ed25519, а PGP — более слабым RSA. Вы можете подумать, что это не имеет значения, но это так; на несколько порядков больше людей используют SSH и управляют ключами SSH, чем PGP. Ключи SSH легко обрабатывать; ПГП - нет.

Координация

PGP поддерживает ElGamal, RSA, p-кривые NIST, Brainpool, Curve25519, SHA-1, SHA-2, RIPEMD160, IDEA, 3DES, CAST5, AES. Это не полный список того, что поддерживает PGP. Если за последние 20 лет мы узнали три важные вещи о криптографии, по крайней мере две из них, так это то, что согласованность и совместимость — это зло.

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

Современные протоколы, такие как TLS 1.3, имеют тенденцию удалять обратную совместимость с такими архаизмами, как RSA, а не добавлять ее.

Поддержка новых систем только один набор примитивов и простой номер версии.

Если один из этих примитивов выйдет из строя, вы сразу избавитесь от этой версии и от всего старого протокола.

Если нам не повезет и люди все еще будут использовать PGP через 20 лет, это останется единственной причиной, по которой CAST5 используется где угодно.

Яснее не скажешь, и это нужно повторить много раз: либо вы обратно совместимы с программой из 90-х, либо у вас хорошая криптография; вы не можете иметь и то, и другое.



Мусорный код

Де-факто стандартной реализацией PGP является GnuPG. Эта программа написана не очень аккуратно.

Существует большая кодовая база C, языка с перекрывающимися функциями (например, в описании недавней атаки типа «отказ в обслуживании» при анализе SKS говорится, что он имеет несколько анализаторов ключей) с большим опытом CVE, начиная от повреждения памяти и заканчивая криптографическими атаками через сторонние каналы.

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

В 2018 году уязвимость Efail была вызвана тем, что GnuPG предоставлял по запросу неаутентифицированный открытый текст. GnuPG — это нехорошо.

GnuPG является одновременно эталонной реализацией PGP и основой для большинства других инструментов, интегрирующих криптографию PGP. Он никуда не денется.

Полагаться на PGP — значит полагаться на GPG. Ответы Чтобы убедить человека отказаться от PGP, важно объяснить ему, что замены PGP нет, и это нормально .

Альтернативный инструмент зависит от задачи.



Разговоры

Используйте сигнал.

Либо Wire, либо WhatsApp, либо какой-нибудь другой защищенный мессенджер на основе протокола Signal. Современные безопасные мессенджеры созданы специально для обмена сообщениями.

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

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

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



Шифрование электронной почты

Не делай этого.

Ээлектронная почта не защищена .

Даже при использовании PGP по умолчанию это открытый текст, то есть даже если вы все сделаете правильно, какой-нибудь совершенно разумный получатель электронной почты, действуя совершенно разумно, обязательно процитирует открытый текст вашего зашифрованного сообщения кому-то еще в CC (мы не знаем адрес электронной почты).

пользователь PGP mail, который с этим не сталкивался).

В электронной почте PGP нет прямой секретности.

Метаданные электронной почты, включая тему (которая буквально является содержанием сообщения), всегда отправляются в виде открытого текста.

Если вам нужна другая причина, читайте статья об уязвимости Efail .

Сообщество GnuPG, которое не удалось раскрыть Efail , подверг резкой критике статью, но был принят в Usenix Security (один из ведущих академических центров по безопасности программного обеспечения), а также в Black Hat USA (ведущая конференция по безопасности программного обеспечения).

Это одна из лучших криптографических атак за последние пять лет — и довольно разрушительная бомба для экосистемы PGP. Как вы увидите из статьи, S/MIME не лучше.

Это никогда не будет исправлено.

Чтобы обеспечить по-настоящему безопасную электронную почту, вам придется туннелировать электронную почту к другому протоколу (вы все равно будете уязвимы для атаки с перехватом трафика).

В том-то и дело, зачем притворяться? Шифрование электронной почты требует проблем.

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

Любой, кто говорит вам, что электронная почта, зашифрованная с помощью PGP, безопасна, ставит свои странные предпочтения выше вашей безопасности.



Отправка файлов

Использовать Волшебная червоточина .

Клиенты червоточины используют обмен ключами с одноразовой аутентификацией паролем (PAKE) для шифрования файлов.

Это просто (по крайней мере для ботаников), безопасно и весело: любой, кому мы показывали червоточину, сразу начинал прогонять через нее все файлы, как и мы.

Некоторые сразу запускают установщик для Windows на Rust или Go; это слишком крутая программа, чтобы ею не пользоваться.

Если вы общаетесь с юристами, а не с инженерами, Signal отлично справляется с передачей файлов.

Чтобы получать отчеты об ошибках, укажите свой номер сигнала, а не ключ PGP.

Шифрование резервных копий

Используйте Тарснап.

Колин объяснит, как Tarsnap оптимизирован для защиты ваших резервных копий.

.

Или действительно, возьмите любой другой инструмент шифрования резервных копий; он не будет так хорош, как Tarsnap, но все же лучше, чем PGP. Нужны автономные резервные копии? Используйте шифрование образа диска; он встроен в современные версии Windows, Linux и macOS. Полное шифрование диска не очень хорошо, но оно отлично справляется со своей задачей, оно проще и безопаснее, чем PGP.

Подписание пакетов

Используйте Signify/Minisign. Тед Унангст тебе все расскажет .

Этот инструмент используется для подписи пакетов в OpenBSD. Это очень просто и использует современные подписи.

Минивывеска Фрэнк Денис (один из разработчиков libsodium) реализует один и тот же дизайн в Windows и macOS; у него есть привязки к Go, Rust, Python, Javascript и .

NET; он даже совместим с Signify.

Шифрование данных приложения

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



Шифрование файлов

Это действительно проблема.

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

Для других целей Филиппо Вальсорда разрабатывает инструмент возраст , вроде многообещающе, но пока не готово.

Надеюсь, понятно, что это довольно узкий вариант использования.

Мы занимаемся безопасностью программного обеспечения и обрабатываем конфиденциальные данные, включая отчеты об ошибках (еще один очень распространенный крик «Нам нужен PGP!»), но мы почти никогда не используем PGP. Теги: #информационная безопасность #Программное обеспечение #Криптография #шифрование #gpg #gnupg #pgp #OpenPGP #signal #Tarsnap #Magic Wormhole #AEAD #forward secrety #signify #Minisign #libsodium

Вместе с данным постом часто просматривают: