Архитектура · Спецификация протокола

Qlavis Citadel, опубликованная спецификация криптографии Qlavis · Messenger.

Каждый примитив с его стандартом и параметрами, и протокольные композиции, построенные на них. Все примитивы стандартизованы NIST или IETF; композиции, собственные разработки Qlavis, и они специфицированы на этой странице. Факты об алгоритмах и параметрах сверены с production-кодом.

01 Стек

Стандартные примитивы.
Своя композиция.

«Пост-квантовость», это спектр: полное отсутствие сквозного шифрования → классическое E2EE → пост-квант только при установлении сессии → пост-квант при установлении и при непрерывной ротации ключей. Qlavis стоит на этом верхнем уровне, на максимальном параметре NIST, и распространяет пост-квантовую защиту на две поверхности, которые этот спектр не измеряет: аутентификацию (корень доверия идентичности и каждая подпись протокола) и плоскость звонков в реальном времени. Результат, полный набор NSA CNSA 2.0, ML-KEM-1024, AES-256-GCM, ML-DSA-87, SHA-2, на каждой поверхности, касающейся пользовательского контента, за годы до федерального мандата США (Executive Order 14412: пост-квантовое установление ключей к 2030 году, подписи, к 2031-му). Каждый алгоритм, опубликованный стандарт NIST или IETF, нигде ни одного проприетарного шифра, хеша или подписи, и каждый сессионный секрет гибриден по построению: чтобы его вскрыть, нужно сломать классический примитив и пост-квантовый.

Пост-квантовая инкапсуляция ключей ML-KEM-1024 FIPS 203 · категория 5 · каждый обмен ключами в продукте
Пост-квантовые подписи ML-DSA-87 FIPS 204 · категория 5 · корень доверия идентичности и все протокольные привязки
Аутентифицированное шифрование AES-256-GCM FIPS 197 + SP 800-38D · 96-битный nonce, 128-битный тег · каждая AEAD-поверхность
Классическое согласование ключей X25519 RFC 7748 · классическая половина гибрида
Классические подписи Ed25519 RFC 8032 · кросс-подписывает PQ-корень доверия · Stellar (требование сети)
Подписи XRP Ledger secp256k1 Детерминированная ECDSA по RFC 6979 · требование сети
Деривация ключей и хеширование HKDF · HMAC · SHA-2 RFC 5869 / RFC 2104 / FIPS 180-4 · SHA-512 во всей цепи вывода ключей
Деривация восстановления BIP39 → SLIP-0010 24 слова, 256 бит энтропии · PBKDF2-HMAC-SHA512, 2048 раундов
Локальная база при хранении SQLCipher 4.14.0 Постраничный AES-256 · таблица рэтчета зашифрована дважды
Привязка к устройству Secure Enclave P-256 Приватный ключ никогда не покидает железо

Пост-квантовые примитивы работают на constant-time-реализациях Apple CryptoKit. Никаких самодельных криптографических примитивов, композиция наша; детали, нет.

Уровень пост-квантовых параметров NIST L5 ML-KEM-1024 и ML-DSA-87, высшая стандартизованная категория
Ротация ключей звонка 5 мин Смена ключей посреди звонка, без пересогласования и без разрыва
Паддинг сообщений 256 Б Однородные блоки, короткие сообщения неразличимы по длине
Путей расшифровки на сервере 0 Для пользовательского контента, проверяемо по production-схеме под NDA
02 Идентичность

24 слова.
Пост-квантовый корень.

Ни номера телефона, ни email, ни сторонних аккаунтов. Вся идентичность детерминированно выводится из BIP39-фразы в 24 слова (256 бит энтропии), развёрнутой через PBKDF2-HMAC-SHA512 (2048 раундов) в 64-байтовый сид.

i

Две идентичности, одна фраза.

Классический якорь, Ed25519, выведенный по SLIP-0010 на hardened-пути m/44'/637'/0'/0'/0' (coin type здесь, чистый разделитель доменов, не пересекающийся с путями кошелька), и пост-квантовый корень доверия, ML-DSA-87, порождённый из вторичного сида, полученного HKDF-SHA512 над тем же 64-байтовым сидом с версионированной строкой доменного разделения. Добавление пост-квантового корня не изменило ничего из того, что пользователь должен хранить в бэкапе.

ii

Миграция не стоила пользователям ничего.

Идентичность Ed25519 кросс-подписывает публичный ключ ML-DSA-87. Контакт с классическим пином проверяет эту аттестацию и переносит свой пин на пост-квантовый корень прямо внутри протокола, без церемонии перепроверки, без смены safety-номера и без доверия серверу, который держит только публичные ключи и подделать аттестацию не может. Пост-квантовый корень достраивается и позже, через маршрут личности при любом запросе ключа: при открытии чата, повторной отправке или звонке, только под подписью уже закреплённого Ed25519; ключ, отличный от пина, никогда его не заменяет и всегда поднимает предупреждение.

iii

Пиннинг разделён по стабильности ключей.

Ключи X25519 и ML-KEM-1024 у каждой установки случайны и из фразы не выводятся, осознанное решение. Trust-on-first-use пинит только стабильную подписную идентичность, выведенную из фразы: переустановка не поднимает ложной тревоги, а другая фраза на том же handle блокирует переписку. Контакты дополнительно отслеживают монотонную эпоху опубликованного пакета ключей: эпоха, идущая назад, фирменный признак воспроизведённого или подменённого пакета, поднимает статус безопасности даже при совпадающей идентичности.

iv

Устройство привязано на уровне железа.

Пара ключей P-256, сгенерированная внутри Secure Enclave, её приватный ключ никогда не попадает в память софта, регистрируется как хеш-отпечаток. Восстановление на другом устройстве меняет отпечаток и вызывает видимое оповещение о перепривязке на остальных устройствах аккаунта.

v

Восстановление слепо к фразе.

Клиент заново выводит ключ Ed25519 из введённой фразы и подписывает выданный сервером challenge; сервер сверяет с публичным ключом в записи. Фраза никогда не покидает устройство, и сервер не хранит ничего выведенного из фразы. Резервный PIN хранится только как солёный PBKDF2-хеш; десять неудач подряд стирают весь локальный ключевой материал, фраза по-прежнему восстанавливает идентичность на любом устройстве.

03 Хендшейк

PQXDH на ML-KEM-1024 от начала до конца.

Сессии устанавливаются PQXDH, опубликованным хендшейком Signal, в гибридной инстанциации. Опубликованный пакет prekey несёт ключи идентичности контакта, подписанный prekey, чья подпись сделана ML-DSA-87 и проверяется под запиненной пост-квантовой идентичностью, одноразовые prekey и prekey ML-KEM-1024. Инициатор вычисляет:

SK = HKDF-SHA512( DH1 ‖ DH2 ‖ DH3 ‖ DH4 ‖ SS1 ‖ SS2 )

     4 × связки Диффи-Хеллмана X25519
   + 2 × инкапсуляции ML-KEM-1024
   → 32-байтовый гибридный корневой ключ

Компрометация сессионного ключа требует сломать одновременно X25519 и ML-KEM-1024. Подпись ML-DSA-87 на подписанном prekey заодно аутентифицирует согласованный пост-квантовый набор, так что релей не может незаметно понизить KEM.

Привязка входящей идентичности, fail-closed. Каждое сообщение инициации сессии несёт публичный ключ идентичности ML-DSA-87 инициатора, его кросс-аттестацию Ed25519 и подпись-привязку над X25519-ключом этой установки. Получатель проверяет привязку только под запиненной идентичностью, никогда под ключом, пришедшим по проводу. Провал привязки трактуется как атака: сессия не устанавливается, сообщение не атрибутируется контакту, поднимается предупреждение безопасности, исходящая отправка блокируется до перепроверки. Злонамеренный или принуждённый сервер не может вбросить поддельный хендшейк «от» запиненного контакта, ему нечем подписаться: эти ключи никогда не покидают устройство контакта.

04 Рэтчет

QTR-1024, Qlavis Triskelion Ratchet.

Ключи текущей переписки даёт конструкция Double Ratchet, расширенная независимой пост-квантовой осью, на максимальном уровне параметров NIST.

04.1 · Три оси DH × цепочки × ML-KEM-1024

Смена ключей каждые 10 сообщений или 24 часа.

Рэтчет Диффи-Хеллмана на X25519, симметричные цепочечные рэтчеты (ключи цепочек продвигаются HMAC-SHA512 (усечение до 32 байт) с константами доменного разделения) и независимый рэтчет ML-KEM-1024, обновляющий пост-квантовый корень каждые 10 сообщений или 24 часа, что наступит раньше.

04.2 · Гибридные ключи MK = KDF( DH_mk ‖ PQ_mk )

Каждый ключ сообщения требует слома обеих осей.

Каждый ключ сообщения выводится сразу из классической и пост-квантовой оси, поэтому forward secrecy и post-compromise security держатся против классического противника сегодня и квантового, завтра. Signal и Apple ради экономии трафика выбрали в своих рэтчетах KEM с параметром 768; QTR-1024 несёт ML-KEM-1024 (категория 5), меняя примерно 3 КБ на ротацию на высший стандартизованный уровень.

04.3 · Устойчивость к потерям повторное включение · дедуп · ограниченное подтверждение

Потерянные и переставленные сообщения не ломают сессию.

KEM-инкапсуляция, в отличие от DH-значения, не идемпотентна, в прежних пост-квантовых рэтчетах потеря единственного сообщения с материалом новой эпохи ломает сессию. QTR-1024 повторно включает тот же ожидающий KEM-ciphertext в каждый исходящий заголовок, пока пир не подтвердит; получатель держит ограниченную SHA-256-историю обработанных ciphertext’ов и декапсулирует каждый отличный ciphertext ровно один раз, пропуская дубликаты без продвижения состояния; подтверждение объявляется в ограниченном числе последующих сообщений.

04.4 · AEAD и паддинг AES-256-GCM · блоки по 256 байт

Запечатано, аутентифицировано, длина скрыта.

Тела сообщений запечатываются AES-256-GCM (свежий случайный 96-битный nonce, 128-битный тег) с заголовком, привязанным как associated data, и дополняются до однородных блоков в 256 байт, короткие сообщения неразличимы по длине на проводе. Перед любой мутацией при расшифровке состояние сессии снимается в снапшот; неудачная аутентификация откатывает к снапшоту, так что подпорченный ciphertext не может испортить сессию.

05 Комнаты

Группы на своих ключах.
Подписанный состав.

Комната это группа только по приглашению, до 100 участников, с ролями владелец, админ, участник и наблюдатель. Сервер ведёт список участников, но не может его подделать, не может читать комнату и не может выдать ключ себе: каждое изменение состава это подпись, каждый ключ доставляется от устройства к устройству, и каждое сообщение подписано устройством, которое его написало.

05.1 · Состав подписано действующим устройством · перепроверяется каждым участником

Каждое изменение состава это подпись, проверяемая на каждом устройстве.

Каждое добавление, удаление, выход, передача владения и назначение админа подписаны ML-DSA-87 устройством того, кто действует, поверх канонического сообщения, в котором названы комната, текущая эпоха, актор, цель и, для добавлений и назначений, ключ личности цели. Сервер проверяет подпись до того, как действовать, и хранит её в журнале событий комнаты; устройство каждого участника воспроизводит этот журнал и перепроверяет каждую операцию под ключами, которые оно само закрепило, никогда под ключами, полученными по сети. Добавления и назначения при ошибке не проходят: операция, которая не проверилась, никогда не попадает в множество участников, получающих ключи. Удаления проходят всегда, даже непроверенные, потому что отказ это безопасное направление. Удаление или выход двигает эпоху комнаты. Участник, которого ни одно наше устройство никогда не закрепляло, закрепляется самой комнатой через маршрут личности под его собственными аттестованными ключами, и журнал перепроверяется с первого события, как только пин появился. Транскрипт новичка начинается с момента его добавления; полная история состава остаётся доступной в разделе Security в Room Info.

05.2 · Ключи одна цепочка на устройство и эпоху · обёртки ML-KEM-1024

Ключи отправителя: одна цепочка на отправляющее устройство, только проверенным участникам.

Каждое отправляющее устройство ведёт свою одностороннюю цепочку: ключ сообщения и следующий ключ цепочки выводятся через HMAC из текущего ключа цепочки, поэтому ключ, утёкший позже, не раскрывает более ранние сообщения. Ключ цепочки доставляется каждому проверенному устройству участника отдельно. Отправитель инкапсулирует ML-KEM-1024 на ротируемый ключ обёртки устройства получателя, подписанный этим устройством и обновляемый каждые 30 дней, а если полученный ключ не проверяется, то на сертифицированный ключ личности устройства, поэтому злонамеренный сервер может укоротить свежесть, но не может перенаправить ключ себе. Ключ цепочки едет запечатанным AES-256-GCM, привязанным к комнате, эпохе, устройству отправителя и устройству получателя, и несёт внутри запечатанных данных подпись ML-DSA-87 устройства отправителя, так что ни участник, ни сервер не могут подложить цепочку от чужого имени. Когда эпоха меняется, каждый отправитель начинает новую цепочку, и удалённое устройство не получает ни одной. Устройство, добавленное позже, начинает с текущей позиции каждой цепочки и не может вывести то, что было раньше. Отправители также перевыпускают ключ после 1000 сообщений или 7 дней.

05.3 · Сообщения AES-256-GCM · ML-DSA-87 на каждом сообщении

Запечатано под цепочкой, подписано устройством: авторство в группе с общим ключом.

Сообщение комнаты запечатано AES-256-GCM под ключом сообщения, с комнатой, эпохой, устройством отправителя и позицией в цепочке в качестве связанных данных. Поскольку каждый участник держит ключ цепочки отправителя, одна конфиденциальность не может доказать, кто написал сообщение; поэтому каждый конверт несёт подпись ML-DSA-87 устройства отправителя поверх комнаты, эпохи, идентификатора сообщения, позиции и дайджеста шифртекста. Сервер проверяет эту подпись и текущую эпоху до того, как принять конверт, и, как и в личных чатах, удаляет конверт, когда устройство каждого участника подтвердило получение, с потолком 14 дней для тех, кто так и не вернулся. Принимающее устройство проверяет подпись до того, как трогает состояние цепочки, и в приложении, и в процессе уведомлений.

05.4 · Имя, фото, файлы зашифрованные метаданные · ключ файла внутри сообщения

Сервер видит размер и время комнаты, но никогда её имя, фото или файлы.

Имя комнаты, описание и ключ фото запечатаны вместе в одном блобе под ключом метаданных комнаты, которого у сервера никогда нет. Ключ доходит до каждого устройства участника через ту же подписанную передачу в обёртке ML-KEM-1024, что и ключи цепочек, и ротируется при каждом изменении, поэтому ушедший участник не может прочитать более позднее имя. Фото, видео, голосовая заметка или файл, отправленные в комнату, шифруются на устройстве под свежим случайным ключом, и этот ключ едет внутри запечатанного тела сообщения; обёртки ключей файлов для каждого получателя нет, а сервер записывает только, кто загрузил блоб и когда он истекает, но никогда, к какой комнате или сообщению он относится. Фото комнаты живёт столько же, сколько комната; любой другой блоб комнаты удаляется по тому же потолку 14 дней, что и сообщения.

05.5 · Room Seal и ограничения SHA-512 по закреплённым ключам личности + эпоха · канон печати v2

Один код, который каждое устройство считает само, и три ограничения, названные прямо.

Room Seal это 12-значный код и символ, выведенные через SHA-512 (канон печати v2, под кодом подпись SEAL V2 · SHA-512) из закреплённых ключей личности ML-DSA-87 каждого проверенного участника и эпохи комнаты. Каждое устройство считает его само; два участника с одинаковой печатью держат один и тот же проверенный состав в одной и той же эпохе, поэтому подложенный или скрытый участник виден как расхождение печатей. Три ограничения управляемого сервером состава это часть дизайна, они смоделированы, а не спрятаны: сервер может утаить событие от части участников, и печать это выявляет; ключ метаданных не ротируется при удалении участника, потому что уже прочитанное имя нельзя забыть, а следующее изменение его ротирует; удалённый участник сохраняет сообщения и файлы, полученные, пока он был участником, как в любом групповом мессенджере. Что сервер узнаёт о комнате: состав, роли, эпохи, количество и время сообщений, идентификаторы устройств, существование и размер блобов.

06 Звонки

Пост-квант на каждом кадре.
Принуждается самой инфраструктурой.

Штатное SRTP-ключевание WebRTC классическое, поэтому Qlavis намеренно его отключает и накладывает собственный слой шифрования кадров. Принуждение, не настройка клиента.

06.1 · Контроль допуска fail-closed на релее

Классический звонок отклоняется до того, как телефон зазвонит.

В принуждающем production-режиме сигнальный релей валидирует каждый offer звонка до оповещения вызываемого и отклоняет его, если тот не несёт пост-квантовую версию протокола, требуемую capability пост-квантового набора, корректный материал ciphertext ML-KEM-1024 и утвердительный флаг пост-квантовых медиа. Answer проходит симметричные проверки. Устройство вызываемого, как эшелон обороны, само отклоняет offer без KEM-материала ещё до звонка.

06.2 · Согласование ключей ML-KEM-1024 в два захода · в пределах звонка

Звонящий и вызываемый выводят одинаковые ключи из зеркальных инкапсуляций.

Звонящий инкапсулирует к публичному ключу ML-KEM-1024 вызываемого и шлёт ciphertext в offer; вызываемый декапсулирует, инкапсулирует к ключу звонящего и отвечает. Обе стороны выводят одно и то же, ключи привязаны солью к единственному звонку, ключи сигналинга и медиа разделены по домену; релей видит только непрозрачные ciphertext’ы:

master   = HKDF-SHA512( salt = callId, IKM = ss1 ‖ ss2 )
sigKey   = PRF( master, "call:sig" )    , метаданные сигналинга
mediaKey = PRF( master, "call:media" )  , шифрование кадров
06.3 · Шифрование кадров AES-256-GCM · атомарная смена ключа каждые 5 мин

Ключи ротируются посреди звонка, без щелчка и без пересогласования.

Каждый аудио- и видеокадр запечатывается AES-256-GCM под медиа-ключом. Таймер продвигает ограниченный индекс ключа каждые пять минут; ключ кадра для индекса i выводится детерминированно из медиа-ключа и i, а индекс едет в метаданных кадра, приёмники перекатываются вперёд, не прерывая поток.

06.4 · Привязка идентичности Sig( callId ‖ ct ) · fail-closed

Сервер, подменяющий ключи, убивает звонок.

Каждая сторона подписывает свой идентификатор звонка и KEM-ciphertext ключом идентичности ML-DSA-87; подпись едет вместе с пост-квантовым публичным ключом подписанта и его Ed25519-кросс-аттестацией внутри непрозрачного сигнального поля, которое релей пересылает как есть. Приёмник проверяет аттестацию под запиненным корнем доверия, привязку, под доказанным ключом, и пинит пост-квантовую идентичность с первого взгляда прямо из звонка. Подпорченный ciphertext, отсутствующая аттестация, понижение до классического набора от способного пира или несовпадение пина завершают звонок, сравнение safety-строк не требуется; звонок наследует уже запиненную идентичность переписки.

06.5 · Без деградированного режима плюс relay-маршрутизация Hidden IP

Если звонок нельзя запечатать пост-квантово, он не соединяется.

Нет ни состояния «небезопасный звонок», ни закрываемого предупреждения: любой пост-квантовый сбой на пути звонка означает, что звонок не устанавливается или рвётся. Опциональная политика Hidden IP для конкретного звонка ограничивает соединение relay-only-кандидатами (TURN), скрывая адрес устройства от собеседника, с логируемой best-effort-деградацией, если за ограниченное окно не собран ни один relay-кандидат.

07 Медиа и аватары

KEM-DEM на файл.
Аватары, грант на зрителя.

07.1 · Медиафайлы свежий ключ на файл · чистка по доставке

Сервер хранит непрозрачный blob, который не может прочитать, а затем удаляет его.

Каждый файл шифруется на устройстве под свежим случайным 32-байтовым ключом AES-256-GCM и загружается как непрозрачный blob; ключ файла, никогда не сам файл, заворачивается каждому получателю через ML-KEM-1024 внутри сквозно-зашифрованного сообщения, которое на него ссылается. Сервер удаляет blob, как только устройство получателя подтверждает надёжное получение (успешную расшифровку и запись в шифрованное хранилище устройства), с короткой льготной паузой и независимым потолком в 14 дней для так и не скачанных blob’ов; запись о доставке намеренно не несёт идентичности получателя. Пересылка перешифровывает под свежим ключом и загружает новый blob, на сервере форвард не связать с оригиналом.

07.2 · Аватары один blob · N обёрток по зрителям

Одно зашифрованное фото, независимый криптографический грант на каждого зрителя.

Фото профиля шифруется один раз под свежим симметричным ключом; для каждого допущенного зрителя устройство владельца инкапсулирует к его ключу ML-KEM-1024 и запечатывает ключ аватара под результатом с AES-256-GCM, помечая каждую обёртку её AEAD-набором, никакого единого общего ключа профиля. Ротация аватара удаляет вытесненный blob и все старые обёртки. Зрители без обёртки ставят запрос в очередь, которую устройство владельца отрабатывает при следующем выходе в сеть, и на каждом запуске сверяет покрытие по зрителям, никто не остаётся пропущенным навсегда. Сервер пересылает и индексирует обёртки, которые никогда не может открыть.

08 Конверт и устройство

Уведомления несут маршрут, не контент.
Устройство, прочный дом истории.

08.1 · Запечатанный отправитель эшелонированная защита

Идентичность отправителя едет внутри шифрованного тела.

Идентичность отправителя встроена внутрь зашифрованного тела сообщения, это укрепляет её против любого пути, срывающего или переписывающего транспортный конверт. Скажем честно: релей всё же видит маршрут отправитель-получатель, пока существует строка сообщения, но контент не обнажается ни на одном слое, никогда.

08.2 · Пуш-конвейер ноль контента · шифрованные токены

Полезная нагрузка пуша, только метаданные маршрутизации.

Нагрузка несёт идентификаторы разговора и сообщения и handle отправителя для отрисовки; зашифрованное тело скачивает и расшифровывает notification-расширение на устройстве. Локальная настройка устройства полностью скрывает отправителя на экране блокировки. Пуш-токены хранятся зашифрованными AES-256-GCM под внутренним ключом сервера и расшифровываются мимолётно, в памяти, только в момент отправки пуша.

08.3 · Локальное хранилище SQLCipher · Secure Enclave · вне iCloud

Всё, что лежит на устройстве, зашифровано.

Вся локальная база зашифрована постранично SQLCipher; таблица рэтчет-сессий несёт дополнительный AEAD-слой на строку. База кошелька отдельна и ключуется независимо. Медиа-история, переполнение тредов и кэши отрисовки шифруются AES-256-GCM под ключами из Keychain; все хранилища несут файловую защиту iOS и исключены из бэкапа iCloud. Вход в приложение закрыт Face ID / Touch ID с резервным PIN; подпись кошелька переспрашивает аутентификацию на каждой транзакции.

09 Кошелёк

Self-custodial, из той же фразы восстановления.

Тот же BIP39-сид выводит self-custodial-кошелёк: ключ Ed25519 для Stellar через SLIP-0010 на m/44'/148'/0' и ключ secp256k1 для XRP Ledger через BIP-44 на m/44'/144'/0'/0'/0' (детерминированная ECDSA по RFC 6979). Ключи живут только на устройстве; сервер не хранит ни балансов, ни ключей, ни адресов, ни истории транзакций кошелька. Платёж в чате едет внутри переписки, запечатанный тем же рэтчетом, что и текст, релей видит блок ciphertext, а не сумму.

Подписи транзакций в сети, те, которых требует каждая цепь (сегодня классические), и мы говорим это прямо, а не приукрашиваем. У обоих леджеров опубликованы пост-квантовые дорожные карты, Stellar к 2027, XRP Ledger к 2028, а слой идентичности над ними уже пост-квантовый.

10 Сервер

Слепой релей, проверяемо, не обещано.

Сервер, транспортный посредник, который не может расшифровать пользовательский контент и держит так мало, как позволяет протокол. Мы не называем его zero-knowledge, в криптографии этот термин значит другое. Мы называем его тем, что он есть, и письменно фиксируем, что он всё-таки видит.

10.1 · Хранение ключей только публичные ключи

На сервере не существует ключа, расшифровывающего пользовательский контент.

Приватные ключи пользователей существуют только на их устройствах, в Keychain и Secure Enclave. Сервер держит публичные ключи, Ed25519, ML-DSA-87, X25519, ML-KEM-1024, prekey, материал, который нужен любому пиру для старта сессии. Его единственный внутренний симметричный ключ шифрует пуш-токены. Транспорт клиент-сервер идёт по TLS с пиннингом сертификатов, второй конверт вокруг контента, который уже зашифрован сквозно.

10.2 · Минимизация данных чистка по доставке · потолок 14 дней

Контент вычищается по подтверждённой доставке, на всех планах.

Контент доставленного сообщения стирается в момент доставки (для статуса доставки остаётся бесконтентная заглушка); доставленные медиа-blob’ы удаляются по надёжному получению; сигнальная строка звонка удаляется в момент его окончания, долгая история звонков существует только на устройстве пользователя. Потолок в 14 дней страхует всё недоставленное. Списки контактов никогда не попадают на сервер. Удаление аккаунта уведомляет каждого бывшего собеседника по отдельности и не оставляет глобального реестра удалённых аккаунтов.

10.3 · Честный остаток метаданные, которые мы всё же видим

Мы публикуем остаточную поверхность, а не отрицаем её.

Как транспортный посредник, релей видит маршрутизацию, пока существует строка сообщения, временные метки событий, размеры ciphertext’ов (тела дополнены до блоков в 256 байт), огрублённое присутствие (размытый флаг «в сети»; last-seen, округлённый до пяти минут) и состав чатов. Поза нулевого plaintext структурна и непрерывно проверяема, квалифицированным ревьюерам доступен read-only-доступ к production-базе под NDA.

11 Верификация

Проверено машиной.
Дальше, аудит.

Дизайн протокола формально верифицирован машинно-проверенными моделями в пяти независимых движках, Verifpal, ProVerif, CryptoVerif, Tamarin и F*/DY*, тот же класс инструментов и та же модель противника, что в опубликованных анализах PQXDH и SPQR Signal. Верифицированы одиннадцать свойств, каждое дополнительно прогнано со снятой защитой как негативный контроль, обязанный провалиться, чтобы доказательство что-то значило. Среди них:

  • Злонамеренный или принуждённый сервер не может выдать себя за запиненный контакт, модель до исправления заново находит эту атаку.
  • Harvest-now-decrypt-later закрыт: запиши трафик сегодня, сломай весь X25519 потом, всё равно нечитаемо.
  • Даже со сломанным ключом Ed25519 на руках сервер не может подделать идентичность: корень доверия, ML-DSA-87.
  • Каждый ключ сообщения остаётся секретным, пока не падут и X25519, и ML-KEM-1024, доказано без ограничений, на каждом сообщении, в F*/DY*.
  • Сервер не может незаметно понизить KEM-набор, его аутентифицирует prekey, подписанный ML-DSA-87.

Протокол комнат был проверен тем же способом в сентябре 2026 года, тремя из этих инструментов. ProVerif проверил цепочку сертификатов устройств, на которой держится доверие комнат, подписанные операции состава с защитой от повтора по эпохе, распределение ключей отправителя с подписанными устройством обёртками и ключами обёртки, отказывающими безопасно, подпись устройства на каждом сообщении, которая сохраняет авторство ключей отправителя, зашифрованные метаданные с ротацией при изменении и ключ файла внутри запечатанного тела. Tamarin доказал автомат эпох и состава в заявленной границе. CryptoVerif доказал обёртку распределения ключей с конкретной вычислительной оценкой. Каждое свойство снова прогонялось против отрицательного контроля, который обязан падать, а три задокументированных ограничения управляемого сервером состава смоделированы явно как границы, падающие по замыслу. Заявление намеренно узкое: комнаты проверены на уровне дизайна, граница состава конечна, реализация не покрыта.

Скажем прямо: эти инструменты верифицируют дизайнпротокола, а не код реализации. Независимый внешний аудит реализации, стандартный следующий шаг, тот же, что прошли Signal и Apple, и он ещё не проведён. Полный вайтпейпер, отчёт о формальной верификации с моделями и логами прогонов и read-only-доступ к production-базе доступны под NDA.

12 Сравнение

С опубликованным state of the art.

Публичный статус на июль 2026; первоисточники под таблицей.

Мессенджер PQ-хендшейк PQ-рэтчет PQ-подписи PQ-звонки Идентичность Платежи в чате
Qlavis · Messenger ✔ ML-KEM-1024 (FIPS 203) ✔ ML-KEM-1024 (NIST L5) ✔ ML-DSA-87 (FIPS 204) ✔ принуждается на сервере ✔ 24 слова, без телефона и email ✔ Stellar + XRP Ledger
Корпоративные платформы
NetSfere ◐ гибрид ML-KEM-1024 (ECC сохранена) ✗ не опубликован ✗ не опубликованы ✗ не заявлены ✗ корпоративный аккаунт
AWS Wickr ✗ не опубликован ✗ не опубликован ✗ классические ✗ корпоративный аккаунт
Wire ✗ классический MLS (PQ в планах) ✗ классические (Ed25519) ✗ email
Element / Matrix ✗ классический (Curve25519) ✗ классический (Megolm) ✗ классические (Ed25519) ◐ аккаунт на homeserver
SecuSUITE (BlackBerry) ✗ классический (PQ анонсирован) ✗ классические ✗ корпоративная выдача
Потребительские ориентиры
iMessage PQ3 ✔ Kyber-1024 ◐ Kyber-768 (ротация) ✗ классические (ECDSA) ✗ Apple ID + телефон
Signal + SPQR ✔ Kyber-1024 ✔ ML-KEM-768 ✗ классические (Ed25519) ✗ номер телефона
SimpleX ✔ sntrup761 ✔ двойной KEM ✗ классические (Ed25519) ✔ случайный ID
WhatsApp ✗ классические ✗ телефон

Три обязательства, которые, насколько нам известно, не повторяет ни один работающий конкурент в 2026 году: ML-KEM-1024 в рэтчете, где Signal и Apple сознательно выбрали 768 ради трафика; пост-квантовый корень доверия идентичности, где каждый конкурент спаривает пост-квантовый KEM с классической подписью; и пост-квантовое принуждение звонков на сигнальном сервере, где каждый конкурент оставляет аудио и видео на классическом SRTP.

Источники: security.apple.com/blog/imessage-pq3 (фев 2024) · signal.org/blog/spqr (окт 2025) · signal.org/docs/specifications/pqxdh · simplex.chat/blog (мар 2024) · netsfere.com/Resources/pqc (июл 2026) · wire.com/en/messaging-layer-security (июл 2026) · github.com/matrix-org/vodozemac · blackberry.com/secure-communications (2026)

13 Стандарты

Стандарты, из которых собрана спецификация.

  • NIST FIPS 203, ML-KEM (авг 2024) · NIST FIPS 204, ML-DSA (авг 2024) · FIPS 197 + SP 800-38D, AES-GCM
  • IETF RFC 7748 (X25519) · RFC 8032 (Ed25519) · RFC 5869 (HKDF) · RFC 2104 (HMAC) · RFC 8018 (PBKDF2) · RFC 6979 (детерминированная ECDSA)
  • BIP39 · BIP32 · SLIP-0010, детерминированная деривация ключей
  • Спецификации Signal, PQXDH, Double Ratchet, SPQR (signal.org/docs)
  • NSA CNSA 2.0 (сен 2022) · Executive Order 14412 (июн 2026): пост-квантовое установление ключей к 2030, подписи к 2031

Полный вайтпейпер, отчёт о формальной верификации и read-only-доступ к production-базе, доступны квалифицированным инвесторам, аудиторским фирмам и командам закупок под NDA: hello@qlavis.app