Skip to content

Security: Pixeltooru/mhp3_docs

Security

security.md

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

Протокол MHP3 обеспечивает многоуровневую защиту данных, сочетая сессионное шифрование и сквозное шифрование (E2EE) сообщений.

1. Транспортный уровень (Noise Protocol)

Для защиты бинарного потока mhp3_data используется упрощенная реализация Noise Protocol:

  • Ephemeral Key Exchange: При каждом session_handshake клиент генерирует эфемерную пару ключей и отправляет публичную часть (noise_pub_key).
  • Perfect Forward Secrecy (PFS): Сервер отвечает своим публичным ключом (noise_resp_key). На основе этих ключей вычисляется общий секрет сессии.
  • Rotation: Ключи сессии автоматически обновляются каждые 24 часа или после 10,000 сообщений.

2. Сквозное шифрование (E2EE)

MHP3 является транспортом для MLS (Messaging Layer Security) и Signal Protocol.

Signal Protocol (1-on-1)

Для личных сообщений используется Signal Protocol:

  • PreKey Bundles: Клиент загружает свои публичные ключи (Identity Key, Signed PreKey, One-Time PreKeys) на сервер через PreKeyBundleManager.
  • X3DH Handshake: Отправитель запрашивает бандл получателя для инициализации защищенного канала.
  • Double Ratchet: Каждое сообщение шифруется новым ключом.

MLS (Messaging Layer Security)

Для групповых чатов используется MLS:

  • Epoch Management: Каждое изменение в группе (добавление/удаление участника) создает новую Эпоху.
  • Commit Messages: Бинарные пакеты MLS Commit передаются через MHP3 и обеспечивают синхронизацию дерева ключей у всех участников.
  • Epoch Guard: Сервер блокирует отправку сообщений, если эпоха клиента не совпадает с текущей эпохой группы.

3. Защита на стороне сервера

БД Шифрование (AES-256-GCM)

Все сообщения, хранящиеся в PostgreSQL (включая pending_messages), шифруются серверным ключом:

  • Ключи ротируются каждые 30 дней с помощью KeyRotationService.
  • Сервер не хранит приватные ключи пользователей, обеспечивая Zero-Knowledge архитектуру.

Дедупликация (Idempotency)

Для предотвращения атак повторного воспроизведения (Replay Attacks):

  • Каждое сообщение имеет UUID v7.
  • Сервер хранит хэш ID в Redis в течение 24 часов.
  • Повторные сообщения с тем же ID игнорируются.

Pixeltoo Lab (2026)

There aren’t any published security advisories