LurkChat (onion) позиционирует себя как анонимный и безопасный мессенджер. Судя по интерфейсу и функциональности, прототипом послужил Телеграм. Действительно, защищённая альтернатива Телеграму пришлась бы наркорынку на пользу. Но так ли LurkChat безопасен?
Обычные чаты
Как и в Телеграме, вся история обычных чатов передаётся на север в нешифрованном (помимо использования HTTPS) виде. В этом мы можем убедиться, открыв инструменты разработчика на вкладке Network:

Режим Cyber Secure
На сайте мессенджера сказано, что в этом режиме сообщения отправляются напрямую к вашему собеседнику, минуя сервер:
Decentralizes the messenger system by turning off all types of history and the messages go from person to person bypassing the server.
> It is important that this mode is activated only in dialogue with the user who is notified that you want to conduct this type of dialogue, while outside of your dialog he will receive nothing.
Но это, конечно же, неправда. Включаем этот режим (о чём приложение уведомляет сервер):

И видим, что мессенджер всё так же отправляет запрос с нешифрованным текстом сообщения на сервер:

Единственное отличие — в этом режиме не сохраняется история. Точнее, она вам не показывается. Узнать, остаются ли копии ваших сообщений на сервере не представляется возможным.
Режим паранойи
Режим, призванный защитить вас от идентификации по стилю письма. Он убирает знаки препинания и переводит ваши сообщения в транслит.

Единственное "но": сервер всё так же получает исходный текст сообщения. Это защита от собеседника, не от создателей LurkChat:

Затем сервер возвращает изменённый текст:

Секретные чаты
Секретные чаты работают по тому же принципу, что и в Телеграме: они предоставляют end-to-end encryption. Это значит, что сообщение будет зашифровано на вашем устройстве, а расшифровано у собеседника, так что сервер не сможет его прочитать. В отличие от Телеграма, здесь в секретный чат можно добавить несколько собеседников.
Диалог создания секретного чата спрятан в настройках:

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

Ту же процедуру должен проделать ваш собеседник. Передать файл с ключами предлагается через этот же мессенджер в режиме Cyber Secure, что, как мы выяснили, отправит ключи на сервер. А это значит, что администрация LurkChat сможет расшифровать все сообщения, ими зашифрованные. Смысл в end-to-end шифровании теряется.
Если же вы передадите ключ другим способом, текст сообщений действительно будет скрыт от сервера:

Метаданные при этом не шифруются. Сервер будет знать, кто, когда и с кем переписывался.
После перезагрузки страницы, ключи нужно импортировать заново. В отличие от Телеграма, вы можете писать в один и тот же чат с нескольких устройств. Но для этого вам придётся скопировать ключи на каждое из них и импортировать их перед началом каждой переписки. Если у вас больше одного секретного чата, то вам придётся хранить ключи от каждого из них.
Ключи шифрования
Заглянем внутрь файла с ключами. К своему удивлению, мы увидим ключи RSA в формате PEM (узнаётся по BEGIN RSA PUBLIC KEY
), закодированные в JSON:

Для справки: RSA — алгоритм асимметричного шифрования (оно же public key encryption). Определение из Википедии:
В системах с открытым ключом используются два ключа — открытый и закрытый, связанные определённым математическим образом друг с другом. Открытый ключ передаётся по открытому (то есть незащищённому, доступному для наблюдения) каналу и используется для шифрования сообщения. Для расшифровки сообщения используется секретный ключ.
Данная схема решает проблему симметричных схем, связанную с начальной передачей ключа другой стороне. Если в симметричных схемах злоумышленник перехватит ключ, то он сможет как «слушать», так и вносить правки в передаваемую информацию. В асимметричных системах другой стороне передается открытый ключ, который позволяет шифровать, но не расшифровывать информацию. Таким образом решается проблема симметричных систем, связанная с синхронизацией ключей.
Так как открытый ключ можно отправлять по незащищённому каналу, корректное использование асимметричного шифрования позволило бы избежать необходимости передачи файла с ключом собеседнику. LurkChat мог бы делать это автоматически, так, как это делают WhatsApp, Signal, Element, Threema, XMPP с OMEMO, секретные чаты Телеграма… Любой мессенджер со встроенным шифрованием.
Почему LurkChat делает это по-другому для меня остаётся загадкой. Если есть возможность передать файл по защищённому каналу, нет никаких причин использовать асимметричное шифрование. Симметричные шифры проще в реализации, надёжнее, требуют менее длинных ключей. То, что сделали разработчики LurkChat — worst of both worlds. Мы получаем все минусы асимметричного шифрования (большие ключи, меньшая устойчивость к взлому, сложный код, которому приходится работать с парой ключей вместо одного) вместе со всеми минусами симметричного (возможность перехвата ключа).
Подробнее о шифровании
Для демонстрации, я создала новый чат и отправила в нём два сообщения:

После перезагрузки страницы, ключи слетают, и мы видим зашифрованный текст в формате base64 (узнаётся по знакам равенства в конце сообщений):

Формат base64 позволяет закодировать бинарный код в текст. Он часто используется в криптографии для хранения ключей и шифротекста. Мы видим, что и сообщения, и ключи передаются мессенджером в стандартных форматах. А это значит, что мы можем использовать сторонние утилиты для расшифровки.
Для этого нам нужно будет скопировать приватный ключ из файла (в кавычках после ”private_key”:
) и заменить все \n
на перевод строки. После этого зайдём на сайт с утилитой расшифровки RSA — я использовала https://www.lddgo.net/en/encrypt/rsa, но вы можете найти другой. Вставим ключ в поле Input Key, зашифрованный текст сообщения в поле Input Content, и выберем их форматы: Key Type = Private Key, In-Format: base64, Out-Format: string. Нажмём RSA Decrypt:

Второе сообщение зашифровано тем же ключом:

Это подтверждает то, о чём я догадывалась с самого начала: вместо генерации сессионных ключей (как это делают большинство других мессенджеров), LurkChat использует один и тот же ключ для шифрования всех сообщений от любого из участников секретного чата.
Такое шифрование (правда, с разными ключами для каждого из собеседников) использовалось в мессенджерах из 2000-х, и до сих пор используется в шифровании почты (PGP). У него есть один большой недостаток: если кто-то получит доступ к приватному ключу (например, через брутфорс), он сможет прочитать абсолютно все сообщения в переписке. Тогда как современные мессенджеры поддерживают perfect forward secrecy. Это значит, что брутфорс одного сообщения даст вам доступ только к этому сообщению.
Надёжность ключей
LurkChat использует странную систему шифрования, у которой много недостатков. Но всё же, она была бы достаточно безопасной для большинства пользователей, если бы использовались надёжные ключи. Тем не менее, LurkChat генерирует ключи длиной 1024 бита, что мы можем увидеть в коде:

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

Ключи RSA длиной 1024 бита считаются небезопасными с 2014 года: https://crypto.stackexchange.com/q/10700.
О разработчиках
Как мы видим, даже секретные чаты в LurkChat — далеко не самый приватный способ коммуникации. Вся безопасность LurkChat держится на честности его разработчиков. Мы не можем убедиться, что режим Cyber Secure не сохраняет истории переписок, но мы можем поверить в их заявления.
Но кто эти разработчики? Группа анонимов, о которых нам мало что известно. Единственная зацепка, которую я нашла при поверхностном поиске, это меню локализации. Мессенджер поддерживает три языка: английский, русский и армянский.

Учитывая это и количество ошибок в английской локализации, мы можем предположить, что администрация LurkChat находится в одной из стран СНГ.
Выводы
Стоит ли использовать LurkChat — решать вам. Но стоит учитывать, что он безопасен ровно настолько, насколько правдивы заявления его разработчиков. Кроме них в природе не существует доказательств того, что ваши переписки в LurkChat не читает товарищ майор.
Предполагаю, что на Pasaremos есть представители администрации мессенджера. Если так, то было бы интересно получить ответ на статью.
Версия статьи для отправки в Телеграм: https://telegra.ph/Bezopasnost-LurkChat-08-05.