Протокол MHP3 обеспечивает многоуровневую защиту данных, сочетая сессионное шифрование и сквозное шифрование (E2EE) сообщений.
Для защиты бинарного потока mhp3_data используется упрощенная реализация Noise Protocol:
- Ephemeral Key Exchange: При каждом
session_handshakeклиент генерирует эфемерную пару ключей и отправляет публичную часть (noise_pub_key). - Perfect Forward Secrecy (PFS): Сервер отвечает своим публичным ключом (
noise_resp_key). На основе этих ключей вычисляется общий секрет сессии. - Rotation: Ключи сессии автоматически обновляются каждые 24 часа или после 10,000 сообщений.
MHP3 является транспортом для MLS (Messaging Layer Security) и Signal Protocol.
Для личных сообщений используется Signal Protocol:
- PreKey Bundles: Клиент загружает свои публичные ключи (Identity Key, Signed PreKey, One-Time PreKeys) на сервер через
PreKeyBundleManager. - X3DH Handshake: Отправитель запрашивает бандл получателя для инициализации защищенного канала.
- Double Ratchet: Каждое сообщение шифруется новым ключом.
Для групповых чатов используется MLS:
- Epoch Management: Каждое изменение в группе (добавление/удаление участника) создает новую Эпоху.
- Commit Messages: Бинарные пакеты MLS Commit передаются через MHP3 и обеспечивают синхронизацию дерева ключей у всех участников.
- Epoch Guard: Сервер блокирует отправку сообщений, если эпоха клиента не совпадает с текущей эпохой группы.
Все сообщения, хранящиеся в PostgreSQL (включая pending_messages), шифруются серверным ключом:
- Ключи ротируются каждые 30 дней с помощью
KeyRotationService. - Сервер не хранит приватные ключи пользователей, обеспечивая Zero-Knowledge архитектуру.
Для предотвращения атак повторного воспроизведения (Replay Attacks):
- Каждое сообщение имеет UUID v7.
- Сервер хранит хэш ID в Redis в течение 24 часов.
- Повторные сообщения с тем же ID игнорируются.
Pixeltoo Lab (2026)