Технічна документація

PROTOCOL
NOTES.

Криптографічний потік LUMYN: обмін ключами, шифрування повідомлень, ephemeral архітектура та Socket.IO транспорт.

← Назад до оновлень
// 01
Обмін ключами
lumyn/core — key-exchange.flow
01
Генерація ключової пари
Клієнт генерує X25519 ключову пару локально при реєстрації. Приватний ключ зберігається у flutter_secure_storage і ніколи не залишає пристрій.
X25519 · flutter_secure_storage
02
Публікація публічного ключа
Публічний ключ реєструється на сервері Socket.IO. Сервер виступає лише як key server — не може розшифрувати жодного повідомлення.
Socket.IO · Node.js
03
ECDH shared secret
При відкритті чату клієнт отримує публічний ключ співрозмовника і обчислює спільний секрет через X25519 ECDH. Shared secret ніколи не передається по мережі.
Elliptic Curve Diffie-Hellman
04
Деривація сесійного ключа
Зі shared secret деривується сесійний ключ для AES-256-GCM шифрування через HKDF. Для кожного повідомлення генерується унікальний nonce.
HKDF · AES-256-GCM · cryptography package
// 02
Шифрування повідомлень
Алгоритм
AES-256-GCM
Автентифіковане шифрування з додатковими даними. Кожне повідомлення індивідуально зашифровано.
Ключ обміну
X25519
Elliptic Curve Diffie-Hellman на Curve25519. Швидкий та стійкий проти атак.
Nonce
96 bit
Унікальний per-message nonce гарантує що однаковий текст завжди шифрується по-різному.
MAC
GCM tag
128-бітний authentication tag верифікує цілісність і автентичність кожного повідомлення.
// 03
Транспорт та доставка
lumyn/transport — socket-events
sendMessage
Клієнт відправляє зашифрований payload. Сервер маршрутизує до отримувача або групи не бачачи вмісту.
sendGroupMessage
Групові повідомлення підтримують груповий shared secret або per-member шифрування залежно від налаштувань.
sendEphemeral / sendEphemeralGroup
Ефірні повідомлення позначені флагом isEphemeral. Після підтвердження доставки сервер видаляє з пам'яті. Клієнт видаляє після перегляду.
sendVoice / sendImage
Медіа-файли шифруються окремим ключем, закодовуються в base64 і передаються як частина payload.
// 04
Volatile Memory Model
Server Architecture
// Сервер не має бази даних для повідомлень // Весь стан зберігається виключно в RAM const activeConnections = new Map(); // socket per user const publicKeys = new Map(); // public keys only const offlineQueue = new Map(); // temp until delivery // Після доставки — повідомлення знищується // Після відключення — сесія очищається // Zero persistent storage for message content
// Статус
Roadmap протоколу
Реалізовано
X25519 + AES-256-GCM E2E
Повноцінне end-to-end шифрування для прямих та групових чатів, голосових і медіа повідомлень.
Реалізовано
Ephemeral Messages
Ефірні повідомлення для прямих чатів та груп, що зникають після перегляду на всіх пристроях.
В розробці
Multi-device синхронізація
Безпечна синхронізація сесій між пристроями без компромісу Zero-Knowledge архітектури.
Заплановано
Forward Secrecy
Ротація ключів для гарантії що компрометація поточного ключа не розкриє минулі повідомлення.
Заплановано
Відкритий вихідний код
Публічний аудит криптографічного коду клієнтської частини та бекенду.