о шифровании в Jabber
В начале в XMPP широко использовались две основные схемы сквозного шифрования: обмен сообщениями Off-the-Record (OTR) (Current Off-the-Record Messaging Usage (XEP-0364)) и OpenPGP (Current Использование Jabber OpenPGP (XEP-0027)). Старые версии OTR имели существенные недостатки удобства использования для межклиентской мобильности. Поскольку сеансы OTR существовали ровно между двумя клиентами, история чата не синхронизировалась между другими клиентами вовлеченных сторон. Кроме того, чаты OTR были возможны только в том случае, если оба участника были в сети одновременно, из-за того, как работала схема соглашения с изменяющимся ключом OTR. Некоторые из этих проблем были решены в OTRv4. OpenPGP, хотя и не страдает от этих проблем с мобильностью, не обеспечивает никакой прямой секретности и уязвим для атак воспроизведения. Кроме того, PGP поверх XMPP использует пользовательский формат связей, который определяется соглашением, а не стандартизацией, и включает в себя довольно много внешних сложностей. Проблемы с форматом связей были решены с помощью OpenPGP для XMPP (XEP-0373)
Jabber обладает широкими возможностями в области шифрования. Для обеспечения безопасного подключения к серверу, а также для сохранения конфиденциальности разговоров в сети Jabber используются разнообразные системы шифрования. Ниже рассмотрены самые распространенные.
- Для безопасной передачи пароля при подключении используется механизм SASL. Суть его действия заключается в том, что сам пароль фактически не передается по каналу связи, поэтому получить его недоброжелателю в этом случае крайне тяжело. Этот механизм включен по умолчанию практически во всех клиентах, поэтому вам не требуется совершать какие-либо действия для его включения.
- Для шифрования самих сообщений используются протоколы TLS и SSL. Благодаря этим технологиям, злоумышленнику будет значительно тяжелее перехватить вашу переписку. Эти протоколы очень похожи между собой, но TLS считается немного более современным. В большинстве клиентов для компьютеров TLS или SSL включены по умолчанию, а в клиентах для мобильных устройств требуется включить эту опцию в настройках. При желании вы можете добавить сертификат из доверенного источника в ваш клиент - это повысит безопасность. Крайне важно отметить, что при использовании TLS или SSL Jabber-сервер производит расшифровку сообщений, поэтому администратор сервера имеет полный доступ к вашей переписке.
- Если вы не доверяете своему серверу, то вам необходимо использовать E2E-шифрование: OTR, OMEMO или GPG. Первые два не требуют особых усилий для их использования, GPG же нуждается в некоторой настройке, но дает максимально возможную для Jabber степень безопасности.
Сравнение аргоритмов шифрования
# | OpenPGP | OX | OTR | OMEMO |
---|---|---|---|---|
Несколько устройств | Да | Да | Нет | Да |
Офлайн-сообщения | Да | Да | Нет | Да |
Передача файлов | Да | Нет | Нет | Да |
Проверяемость | Нет | Да | Да | Да |
Отрицание | Да | Нет | Да | Да |
Прямая секретность | Нет | Нет | Да | Да |
Архив на стороне сервера | Да | Да | Нет | Нет |
Длинна передаваемого сообщения | Большая | Большая | Малая | Средняя |
OpenPGP — наиболее широко используемый стандарт шифрования электронной почты. Он определен рабочей группой OpenPGP Инженерной рабочей группы Интернета (IETF) как предлагаемый стандарт в RFC 4880. OpenPGP изначально был производным от программного обеспечения PGP, созданного Филом Циммерманном.
Защищеннось
В 1996 году криптограф Брюс Шнайер охарактеризовал раннюю версию PGP как «ближайшую к криптосистемам военного уровня». На данный момент не известно ни одного случая взлома данных, зашифрованных PGP, при помощи полного перебора или уязвимости криптоалгоритма.
Криптографическая стойкость PGP основана на предположении, что используемые алгоритмы устойчивы к криптоанализу на современном оборудовании. Например, в PGP первых версий для шифрования ключей сессии использовался алгоритм RSA, основанный на односторонней функции (факторизация). В PGP версии 2 дополнительно можно использовать алгоритм IDEA. В последующем были добавлены дополнительные алгоритмы шифрования. Ни у одного используемого алгоритма нет известных уязвимостей.
В 2010 году группе учёных из Швейцарии, Японии, Франции, Нидерландов, Германии и США удалось разложить на множители 768-битный 232-значный RSA-ключ. Нахождение простых сомножителей осуществлялось общим методом решета числового поля[6]. На первый шаг (выбор пары полиномов степени 6 и 1) было потрачено около полугода вычислений на 80 процессорах, что составило около 3 % времени, потраченного на главный этап алгоритма (просеивание), который выполнялся на сотнях компьютеров в течение почти двух лет. Если интерполировать это время на работу одного процессора AMD Opteron 2,2 ГГц с 2 ГБ оперативной памяти, то получилось бы порядка 1500 лет. Обработка данных после просеивания для следующего ресурсоёмкого шага (линейной алгебры) потребовала несколько недель на малом количестве процессоров. Заключительный шаг после нахождения нетривиальных решений ОСЛУ занял не более 12 часов.
Решение ОСЛУ проводилось с помощью метода Видемана на нескольких раздельных кластерах и длилось чуть менее 4 месяцев. При этом размер разрежённой матрицы составил 192 796 550×192 795 550 при наличии 27 795 115 920 ненулевых элементов. Для хранения матрицы на жёстком диске понадобилось около 105 гигабайт. В то же время понадобилось около 5 терабайт сжатых данных для построения данной матрицы.
В итоге группе удалось вычислить оба простых сомножителя, каждый из которых является 384-битным 116-значным числом.
Исследователи уверены, что с использованием их метода факторизации взломать 1024-битный RSA-ключ будет возможно в течение следующего десятилетия.
OpenPGP (XEP-0027) — это метод шифрования, который имеет некоторые преимущества по сравнению с OMEMO, но его следует использовать только тем, кто знает, что делает.
Как использовать OpenPGP
Прежде чем продолжить чтение, обратите внимание, что поддержка OpenPGP в диалогах является экспериментальной. Это не потому, что это сделает приложение нестабильным, а потому, что фундаментальные концепции PGP не готовы для широкого использования. Принцип работы PGP заключается в том, что вы доверяете идентификаторам ключей, а не JID или адресам электронной почты. Таким образом, теоретически ваш список контактов должен состоять из идентификаторов открытых ключей, а не из JID. Но, конечно, ни один клиент электронной почты или XMPP не реализует эти концепции. Кроме того, PGP в контексте обмена мгновенными сообщениями имеет несколько недостатков: он уязвим для повторных атак и довольно многословен.
Скачать OpenPGP
OpenPGP - приложение-менеджер OpenPGP-ключей, каторое взаимодействует с приложением "Sobesednik", участвует в за- и расшифровании сообщений.
Чтобы использовать OpenPGP, вам необходимо установить OpenPGP,
сгенерировать в приложении пару ключей (открытый и закрытый),
с последними рекомендациями предлагаю использовать ключи основанные на эллиптических кривых с максимальной длинной ключа. Так в вашей паре должно быть два дополнительных ключа. Первый для подписи, второй для зашифрования. Делаем как на скриншотах...
Затем вы должны обменяться с вашим собеседником открытой частью ключаю. Открытый ключ можно пересылать по открытым каналам связи, он служит для зашифрования информации для вас, а закрытый ключ хранится в защищенной области приложения и предназначен для расшифрования информации зашифрованной на открытом ключе.
Далее вам нужно нажать и удерживать вашу учетную запись в разделе управление учетными записями и выбрать "Анонсировать ключ OpenPGP" в контекстном меню. Собеседник аналогичным образом должен создать и обменяться с вами открытой частью своего ключа. Вся ключевая информация хранится в закрытой области приложениия OpenPGP и не передается через Беркут. OpenPGP шифрует сообшение на заданном ключе и предает в Беркут на отправку. Передавать открытые части ключей вы должны самостоятельно, допускается при этом использовать OMEMO.
Так же нужно убедиться что в сведениях у вашего контакта (а так же как и у вас) появилась информация об ID ключа OpenPGP после чего можно наслаждаться безопасной шифрованной перепиской с контактом.
Сообщения шифруются с помощью криптосистемы с открытым ключом. Если не вдаваться в подробности, суть системы шифрования состоит в том, что существует пара ключей и некая процедура, которая может с помощью одного ключа преобразовать сообщение так, что обратное преобразование можно будет выполнить только с помощью другого ключа. Один из этих ключей называется закрытым и держится в тайне, другой же, напротив, называется открытым, и распространяется свободно. Таким образом, зашифровав сообщение открытым ключом можно быть уверенным, что его прочитает только владелец закрытого ключа, напротив, подписав что-то своим ключом автор даёт уверенность получателю сообщения в своём авторстве.
Можно объединить эти две процедуры и тогда содержимое будет известно только двум лицам, обладающими соответсвующими ключами.
Шаг первый, загрузка ПО и генерация закрытого и открытого ключей
Для пользователей Windows специально создан пакет программ gpg4win, который существенно облегчает работу с GPG. Скачиваем gpg4win lite с официального сайта, выбираем необходимые компоненты и устанавливаем.
После установки, запускаем менеджер ключей WinPT. При первом запуске утилита предложит создать ключевую пару. Это очень важный шаг. Ключ это ваш паспорт в сети интернет, проверье внимательно имя и адрес, очень желательно его не терять и не забывать от него пароль. Восстановить закрытый ключ будет уже не возможно, придётся генерить новый. Каждый закрытый ключ шифруется паролем. Это нужно для того что бы даже если кто-то завладеет вашим ключом, злоумышленник не смог бы им воспользоваться, без пароля он бесполезен. Программа предожить забекапить ключ и это правильно.
Шаг второй, добавление своего ключа и импорт открытых ключей контактов
Запускаем Psi, идём в настройки аккаунта, там во вкладке подробности нажимаем «выбрать openPGP ключ» и указываем наш ключ.
После выбора ключа и переподключения к сети, Psi затребует пароль от закрытого ключа
Теперь вы подключены к сети и ваш статус подписан. То есть те, кто имеют ваш открытый ключ, знают, что за компьютером именно вы.
Допустим, вы обменялись с кем-то ключами, по есть отдали свой открытый ключ и получили чей-то открытый. Теперь нужно привязать ключ к конкретному аккаунту. Для этого заходим в WinPT, заходим в key -- import, далее выбираем файл с ключом нужного человека. Всё, открытый ключ импортирован в систему. Стоит сказать, что Psi считывает состояние ключей только при запуске, так что после того как мы добавили новый ключ надо перезапустить Psi. Кликаем правой кнопкой мыши на нужный контакт и выбираем «Присвоить ключ OpenPGP», присваиваем контакту его ключ. Теперь мы можем проверить электронную подпись нашего контакта
Выделенная зелёным строчка означает, что контакт вошёл в сеть с правильным ключом и у вас есть его открытый ключ. Если строчка чёрная это означает, что статус клиента подписан, но у вас нет его ключа или ключ неверен, так что неизвестно кто там за компом.
Шаг третьий. Обмениваемся шифрованными сообщениями
Теперь всё что требуется это отрыть новое окно с чатом и нажать иконку с замочком. Произойдёт сверка ключей и, если всё в порядке, система выдаст сообщение о том, что разговор зашифрован. После этого можно общатся спокойно, не беспокоясь что разговор будет перехвачен в пути.
Сообщение зашифрованно с использованием PGP
OMEMO (XEP-0384) — это расширение для открытого протокола XMPP, которое реализует сквозное шифрование для нескольких клиентов. OMEMO было разработано Андреасом Штраубом (Andreas Straub). OMEMO использует Olm, реализацию протокола Signal, для обмена ключами и для синхронизации сообщений между несколькими клиентами, даже если некоторые из них отключены. Имя OMEMO это рекурсивный акроним для «OMEMO Multi-End Message and Object Encryption» (OMEMO многоконечные сообщения и шифрование объектов). OMEMO кроме того базируется на протоколе Personal Eventing Protocol (PEP, XEP-0163) и предоставляет совершенную прямую секретность (Perfect Forward Secrecy) и правдоподобное отрицание (англ. plausible deniability).
Самый распространенный способ шифрования для мессенджеров, OTR, тоже поддерживает совершенную прямую секретность и правдоподобное отрицание, но требует чтобы все участники были в сети. OpenPGP поддерживает офлайн сообщения, но не предоставляет прямую конфиденциальность и правдоподобие. Olm и, соответственно, OMEMO поддерживают все три требования.
Кроме того, существующие решения шифрования мессенджеров, такие как OTR, подвергались критике за отсутствие в них интеграции XMPP. Разработчики Empathy, официальный мессенджер оболочки Gnome, указали это как причину из-за которой эта часто желаемая функция не была встроена. Благодаря интеграции в чат протоколы, OMEMO является улучшением в этом отношении.
Сообщение зашифрованно с использованием OMEMO
Поддержка клиентов
- ChatSecure (iOS)
- Conversations (Android)
- Cryptocat (Linux, macOS, Windows; этот клиент использует вариант XMPP и поэтому совместим только с серверами Cryptocat)
- Dino (Linux)
- Gajim посредством официального расширения (Linux, Windows, BSD)
- Psi посредством официального расширения (Linux, Windows, macOS)
- Psi+ посредством официального расширения (Linux, Windows, macOS,Haiku, FreeBSD) Profanity посредством экспериментальных расширений (BSD, Linux, Windows)
- Pidgin и другие клиенты на базе libpurple посредством экспериментальных расширений
- Siskin (iOS)
- Zom (Android, iOS)
OMEMO использует Double Ratchet для установления безопасных сеансов между каждой комбинацией устройств для вас и вашего контакта. Эти сеансы затем используются для передачи безопасных ключей всем устройствам. OMEMO будет генерировать новый ключ для каждого сообщения. Этот ключ используется для шифрования вашего сообщения с помощью AES-GCM. Долгоживущие сеансы Double Ratchet в фоновом режиме решают проблемы изменения порядка сообщений, их потери и случайного дублирования.
Основанный на PEP (Personal Eventing Protocol) для объявления предварительных ключей, используемых Double Ratchet для установления новых сеансов, OMEMO практически не требует изменений в существующей инфраструктуре сервера XMPP.
Аудит безопасности OMEMO
OTR был удален, поскольку он был крайне ненадежен. Он не работал с несколькими устройствами и никогда не был указан для работы с XMPP. Кодовая база была в беспорядке (там был синтаксический анализатор HTML, который громко кричал, чтобы справиться с мусором, который присылали некоторые клиенты OTR). Проверка была реализована неблокирующим способом. Он сообщит вам, использовал ли текущий сеанс неизвестный отпечаток пальца, но не остановит вас от отправки сообщений, пока вы не подтвердите новый отпечаток пальца. (То же самое, что диалоги сделали бы сейчас с BTBV после проверки или когда BTBV отключен.) Учитывая предыдущие пункты, с моей точки зрения практически не было желания исправить эту потенциальную проблему безопасности или очистить кодовую базу. Другая причина удаления заключалась в том, что люди могли случайно использовать его даже для связи между двумя клиентами, потому что они где-то читали, что OTR — это хорошо.