Третья часть цикла
Сегодня затронем все те вопросы которые всплывают в комментариях: есть ли вообще в MAX шифрование? Как он смотрится в сравнении с Telegram, WhatsApp и Signal? Что там с безопасностью личных файлов?
TL;DR
Как сказал один "великий" человек: добавить шифрование можно, а зачем ?
В MAX нет сквозного e2e шифрования (от пользователя к пользователю) ни для одного типа общения - личные чаты, группы, звонки, голосовые, файлы
Все сообщения идут открытым текстом через внутри обычного TLS - сервер VK видит каждое слово
Для сравнения: в Telegram есть Secret Chats и E2E-звонки, в WhatsApp заявлен и проверен исследователями E2E для всего, в Signal - E2E + open source
На телефоне всё хранится в открытой SQLite базе данных
Фотографии из чатов доступны по прямой ссылке без авторизации и не истекают годами
MAX - единственный из четвёрки, где владелец видит 100% сообщений и файлов
Часть 1: Шифрование в MAX - его просто нет
Сначала объясню простыми словами
Когда вы отправляете сообщение в мессенджере, оно проходит через сервер. Вопрос: может ли сервер его прочитать?
TLS (транспортное шифрование) - сообщение зашифровано по дороге от вас до сервера и от сервера до собеседника. Но на сервере оно лежит в открытом виде. Сервер видит всё. Это как если бы вы отправили письмо в конверте через почту, а на сортировочном пункте его открыли, прочитали, положили в новый конверт и только потом отправили получателю.
E2E (сквозное шифрование от пользователя к пользователю) - сообщение зашифровано ключом, который есть только у вас и собеседника. Сервер передаёт зашифрованный blob и не может его прочитать. Это как отправить запертый сейф - почта передаёт, но ключ только у получателя.
В MAX - только TLS. E2E нет.
Проверил все типы общения
Декомпилировал APK, посмотрел wire-протокол, проанализировал трафик. Вот мои результаты:
Личные сообщения - plaintext MsgPack по TCP. Из одного перехвата за 30 минут я извлёк 22 телефонных номера и 6 уведомлений о прочтении - всё открытым текстом.
Групповые чаты - тот же протокол, тот же формат. Никакой разницы с личными.
Голосовые звонки - шифрование DTLS-SRTP есть, но оно от вас до сервера VK, не от вас до собеседника. Все звонки идут через TURN-сервер VK. Ключи шифрования у VK.
Видеозвонки - то же что голосовые. Тот же TURN-сервер, те же ключи у VK.
Конференции - через отдельный vchat API на OK.ru, та же схема с relay.
Голосовые сообщения - загружаются на CDN без шифрования. Сервер VK их ещё и переводит в текст (отдельная фича).
Видеосообщения - то же что и голосовые.
Файлы / фотографии / Аудио и Видеокружки - без шифрования на CDN. Про это отдельная история ниже.
Секретные чаты - их нет. Вообще. В коде нашёл UI-ресурсы с названиями вроде secret_mode_started, но крипто-кода за ними ноль. Ни DH-обмена ключами, ни отдельного протокола.
А что на сайте MAX написано про шифрование?
Я проверил все официальные документы:
legal.max.ru/pp (политика конфиденциальности) - слово «шифрование» не встречается ни разу.
legal.max.ru/ps (пользовательское соглашение) - ноль информации
help.max.ru/help/security (раздел безопасности) - пароли, сессии, онлайн-статус, родительский контроль. Шифрование не упоминается.
«Безопасный режим» - скрытие из поиска, звонки только от контактов, фильтр контента 16+/18+.
Для сравнения: у Telegram есть отдельная страница про MTProto и шифрование . У WhatsApp - Security Whitepaper. У Signal - полная документация протокола и исходный код. У MAX - ничего, потому что нечего описывать.
Часть 2: MAX vs Telegram vs WhatsApp vs Signal
Самый частый запрос в комментариях: «а Telegram тоже так делает?» и «разбери WhatsApp».
Собрал таблицу от наименее защищённого к наиболее. Данные по MAX - мой анализ кода. По Telegram - документация + open source клиент. По WhatsApp - их Whitepaper + внешние аудиты (код закрыт). По Signal - open source + аудиты.
MAX единственный из четырёх, где: код закрыт + нет E2E ни для чего + сервер видит 100% + медиа без авторизации + ни одного аудита.
Часть 3: Медиафайлы для всех, удаление не удаляет
Эта информация уже упоминалась в других исследованиях, но не мог не затронуть это. Я отправил фото в чат, потом удалил сообщение, а потом открыл ссылку на это фото в другом браузере без логина и фото загрузилось. Потом сделал то же самое с голосовым сообщением. Аудио тоже доступно после удаления.
Фотографии - без авторизации, навсегда
Каждая фотография хранится на CDN по адресу вроде i.oneme.ru/i?r=%3C%D1%82%D0%BE%D0%BA%D0%B5%D0%BD%3E. Токен - подписанная строка, которую генерирует сервер.
Авторизация не нужна. Открываете ссылку в любом браузере, без логина - фото загружается
Ссылка не истекает.
CORS открыт: Access-Control-Allow-Origin: * - любой сайт может подгрузить картинку
Удалил сообщение, а фото осталось. Проверено: отправил фото, удалил, открыл по ссылке и увидел свое "удаленное" изображение
Токен уникальный и изменённый токен возвращает 400. Но сами токены раздаются всем участникам чата открытым текстом через wire-протокол. Переслали кому-то фото и этот кто-то навсегда имеет рабочую ссылку. Отозвать ссылку нельзя у пользователя механизма отзыва нет, только у сервера.
Вот пример отправленного фото в чат и позже удаленное из него ссылка :
Вы это можете так же легко проверить загрузите большое изображение, удалите его и попробуйте загрузить его еще раз и оно загрузится мгновенно так как файл уже есть...
Аудиосообщения - без авторизации, 24 часа
Голосовые сообщения хранятся на maxvd*.okcdn.ru. Тут чуть лучше - URL подписан и живёт 24 часа. Но:
Авторизация не нужна. Так же как с фотографиями
Удалил сообщение, а аудио осталось. Проверено: отправил фото, удалил, открыл по ссылке и услышал свое "удаленное" аудио. Вы так же можете это легко проверить
Срок жизни - 24 часа (поле expires в URL). В пределах суток аудио доступно кому угодно
Все параметры URL подписаны подменить srcIp, id, sig нельзя (400). Но имея полную ссылку - скачать может любой
URL аудио содержит IP (srcIp=146.70.231.14) и ID пользователя (userId=125915255) открытым текстом. Ссылка
Часть 4: FAQ из комментариев
«TLS - это тоже шифрование. В чём проблема?»
TLS шифрует канал между вами и сервером. Никто посередине (провайдер, сосед с Wi-Fi) не прочитает. Но сервер - прочитает. А сервер MAX - это сервер VK. VK зарегистрирован как «организатор распространения информации» и по закону обязан хранить переписку и отдавать по запросу.
E2E шифрование решает эту проблему - даже владелец сервера не может прочитать сообщения. В MAX его нет.
«Мне скрывать нечего»
Не про то, есть ли что скрывать. Про то, кто контролирует ваши данные.
Взлом сервера = все сообщения утекли.
Запрос по закону = все сообщения отдали.
Инсайдер в компании = все сообщения / контакты / файлы доступны (а учитывая сколько сейчас стоит пробив по номеру телефона и другие "сервисы". то скоро появится новая услуга).
С E2E: даже если сервер взломан - данные зашифрованы ключами, которые есть только у вас.
«Может, VK добавит шифрование позже?»
Добавить E2E в существующий мессенджер - это не флаг на сервере переключить. Нужно:
Реализовать протокол обмена ключами (DH / X3DH)
Добавить double ratchet или аналог для каждого чата
Переписать хранение сообщений (сервер больше не может их читать)
Переделать поиск, превью, пуши (всё это сейчас работает потому что сервер видит текст)
В коде MAX нет ни одного класса связанного с E2E - ни DH, ни pre-keys, ни session keys. Архитектура строилась без расчёта на это.
«В Telegram обычные чаты тоже не E2E - значит то же самое?»
Не совсем. У Telegram есть альтернатива:
Есть Secret Chats - настоящий E2E (правда только 1-на-1 и только мобильные)
Звонки - E2E с emoji-верификацией
CDN-файлы требуют авторизацию и зашифрованы AES-256-CTR
Есть certificate pinning
У MAX ничего из этого нет. Ни одной альтернативы для пользователя, который хочет приватность.
Telegram не идеален - обычные чаты действительно сервер может читать и просматривать. Но у пользователя есть выбор открытые чаты или защищенные. В MAX выбора нет.
Если вам нужен E2E для всех чатов (не только секретных) - WhatsApp или Signal. В WhatsApp E2E включён по умолчанию для всего. В Signal - E2E + open source + независимые аудиты. Так же можно еще посмотреть на мессенджер Threema
Часть 5: Доказательства
5.1 Plaintext MsgPack - перехват трафика
Через Frida-хуки на SSL_read/SSL_write я перехватил расшифрованный трафик MAX. Формат - MsgPack (бинарный JSON). Декодер писал сам
За 30 минут работы приложения перехватил 85 фреймов. Из них:
Опкод 0x80 (INCOMING_MESSAGE_PUSH) - входящие сообщения, plaintext, видно текст и sender
Опкод 0x40 (SEND_MESSAGE_NEW) - исходящие сообщения, plaintext
Опкод 0x23 (SUBSCRIBE_PRESENCE) - кто онлайн
MAX:
- Формат: точный timestamp + status (1=online, 2=offline)
- Максимальная точность: секунда. Unix timestamp seen: 1776043570 = 2026-04-13 01:26:10 UTC
Telegram:
- Точность плавает: был недавна, был на этой неделе....
Опкод 0x84 (REPORT_READ_RECEIPT) - кто прочитал
22 телефонных номера в открытом виде
Всё это идёт внутри TLS. Сервер VK видит тот же plaintext.
5.2 Protos.java - нет полей шифрования
Файл: ru/ok/tamtam/nano/Protos.java
Класс Audio (голосовые сообщения):
url, token, audioId, duration, transcription
Полей IV, key, cipher, encrypted - нет
Класс Video (видеосообщения):
url, token, videoId, duration, thumbnail, transcription
Полей IV, key, cipher, encrypted - нет
Для сравнения: в Signal Protocol каждое сообщение содержит ratchet key, counter, cipher header. В MAX - просто текст.
5.3 network_security_config.xml - нет certificate pinning
Файл: res/xml/network_security_config.xml
Ноль элементов <pin-set>. Зато 5 доменов с cleartextTrafficPermitted="true" - это HTTP без шифрования вообще (для MobileID российских операторов).
Certificate pinning - это защита от MiTM-атак (подмена сертификата на уровне провайдера или wifi). Telegram, WhatsApp, Signal - все его используют. MAX - нет.
5.4 Хранение на устройстве
Вся переписка в SQLite без шифрования:
Нет SQLCipher - база открывается любым SQLite-просмотрщиком
Нет EncryptedSharedPreferences - токены авторизации в plaintext
AndroidKeyStore используется только для биометрической авторизации, не для сообщений
Выводы
MAX - мессенджер который не шифрует ничего. Ни сообщения, ни звонки, ни файлы, ни фотографии. Сервер VK видит всё. На устройстве всё так же хранится в открытом виде. Фотографии доступны по ссылке навсегда без входа и проверки прав дотсупа.
VK нигде не обещает шифрование - ни на сайте, ни в документах. Потому что его нет.
В следующей части - практическая защита: что реально можно сделать если MAX приходится использовать. Split VPN, Knox, Frida, Virtual Device...