WallyMates

Безопасность и шифрование

Приватность в WallyMates — не один переключатель в настройках, а несколько независимых уровней защиты, каждый под свою угрозу: перехват на сервере, кража телефона, MITM-атака во время звонка, синхронизация с веб-версией.

Сквозное шифрование один на один — Static X3DH

Личные чаты шифруются собственной реализацией Static X3DH (тройной Diffie-Hellman обмен на основе идентификационного ключа, подписанного pre-key и эфемерного ключа — упрощённая, «SESAME-lite» схема многоустройственных сессий по мотивам подхода Signal) с AES-256-GCM. Ключ шифрования выводится отдельно для каждой пары устройств — без цепочки Double Ratchet и без одноразовых pre-key, более простая модель, чем классический Signal-протокол, но сервер так же никогда не видит содержимое и не получает ни одного из ключей.

Сквозное шифрование в группах — Sender Key

Групповую переписку нельзя эффективно шифровать так же, как один на один — пришлось бы отдельно шифровать каждое сообщение для каждого участника. Вместо этого WallyMates использует схему Sender Key (v5): каждый участник генерирует собственный ключ AES-256 для конкретной группы и распространяет его другим участникам, зашифровав персонально через тот же сквозной зашифрованный канал, что и обычные личные сообщения, — сервер видит только зашифрованные блоки, не сам ключ. Сами сообщения в группе после этого шифруются быстрым AES-256-GCM этим общим ключом — без повторного согласования ключа на каждое сообщение. Протокол побитово совместим между Android и Windows — одна и та же схема распространения и шифрования ключей на обеих платформах.

Больше о самих группах и каналах — на странице «Группы и каналы».

Проверка звонков — защита от MITM

Голос и видео в звонке защищены отдельно (см. раздел «Звонки»), но остаётся вопрос: как убедиться, что звоните именно тому человеку, а не кому-то, кто подменил соединение? Во время звонка приложение показывает «отпечаток звонка» — последовательность из 96 эмодзи, вычисленную из долгосрочных идентификационных ключей обоих собеседников. Если сравнить эту последовательность вслух и она совпадает — подмена исключена: злоумышленнику понадобился бы приватный ключ собеседника, которого нет даже у сервера. Это та же идея, что «код безопасности» в Signal или WhatsApp, и алгоритм идентичен на Android и Windows.

Больше о самом звонке — на странице «Звонки».

Синхронизация с веб-версией

Веб-мессенджер (web.worldmates.club) — отдельный случай: чтобы показать историю переписки в браузере, сообщения дополнительно перешифровываются ключом Web Sync (AES-128) и хранятся в базе данных в зашифрованном виде. Это осознанный компромисс: без него веб-версия просто не смогла бы показывать историю чатов.

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

Локальное хранилище

Что попадает на серверы WallyMates?

«Зашифрованное хранилище сообщений» — это не то же самое, что «сервер не хранит ничего». Ниже — честный список того, что сервер действительно видит, а что нет, без абсолютных утверждений сверх того, что реально гарантирует текущая реализация.

Что сервер получает и хранит

Что защищено сквозным шифрованием

Сам текст личных чатов (Static X3DH) и групповых чатов (Sender Key) сервер расшифровать не может — ни одна из версий шифра, которая сейчас используется новыми сообщениями (cipher_version 6 для личных, 4 для групповых), не предусматривает серверного ключа расшифровки. Голосовые и видеозвонки 1 на 1 идут напрямую между устройствами (WebRTC) — серверы приложения вообще не получают медиапоток звонка, только служебную информацию для установления соединения.

О повседневных функциях переписки — на странице «Общение».

Где хранится приватный ключ

Оба клиента — на странице «Скачать».

Защита аккаунта