Как это работает
Никаких изобретений - только изученные примитивы: BIP-39, X25519, HKDF-SHA256, XChaCha20-Poly1305. Вот весь путь, человеческим языком.
12 слов - вся идентичность
Профиль начинается с мнемоники BIP-39 - 12 английских слов, в которых 128 бит энтропии. Слова растягиваются в seed, из него HKDF выводит ключевую пару шифрования. Те же слова на любом устройстве восстанавливают те же ключи: «аккаунта», который надо возвращать, нет - есть только фраза.
Адрес - это публичный ключ
Ваш публичный ключ X25519 в кодировке bech32 с префиксом sk - это и есть адрес: около 60 символов, начинается с sk1. Передаётся текстом или QR-кодом. Нет каталога, где надо регистрироваться, и нет сервера, который сопоставляет имена с людьми.
sk1qsva3e52awafjvedj5ethvc5hs9j4t0ml26m83kn6kycsh9m46rejzha
Сообщение становится конвертом
Текст шифруется один раз случайным ключом сообщения (XChaCha20-Poly1305). Затем этот ключ «заворачивается» в слот для каждого адресата - и всегда ещё в один слот для вас. Поэтому свои отправленные сообщения остаются читаемыми: расшифровка истории - та же операция, что чтение входящих.
Слоты анонимны и перемешаны: адресов в конверте нет, снаружи видны только размеры. Ключ каждого слота согласуется двумя рукопожатиями X25519 - с эфемерным ключом, созданным для этого конверта (forward secrecy), и с постоянным ключом отправителя (аутентификация отправителя).
Конверт путешествует как текст
Бинарный конверт заворачивается в base64-блок с рамкой. Он самодостаточен: вставьте его в мессенджер, письмо, пост на форуме или файл - любой канал, доставляющий текст, доставляет сообщения Secret Keeper.
-----BEGIN SECRET MESSAGE V1----- AlXhZ0Qq7bfPj…base64…M42kLBi6p4Jro -----END SECRET MESSAGE V1-----
Файлы: контейнер .skf
Файлы используют ту же слотовую схему, но тело шифруется чанками - многогигабайтное видео проходит потоком, не загружаясь в память. Нонсы чанков построены по конструкции STREAM (как в age и Tink): счётчик ловит перестановку и дубли, финальный байт - усечение. Даже имя файла лежит внутри зашифрованного заголовка.
Резервные копии
Копия - файл .skb: настройки, контакты и история в одном контейнере, зашифрованном самому себе, - та же схема, что у зашифрованных файлов, снаружи не прочитать даже адреса контактов. Seed-фразы в копии нет никогда: профиль восстанавливается 12 словами, копия возвращает всё вокруг них.
Что это даёт
- Forward secrecy
- свежий эфемерный ключ на каждый конверт
- Отправитель читает своё
- свой слот в каждом отправленном конверте
- Нет состояния
- ни парных сессий, ни хранения на серверах
- Нет user-id
- адрес - сам публичный ключ
- Две реализации
- Dart в приложении, @noble в расширении - сверяются общими тест-векторами
Хотите проверить?
Полная побайтовая спецификация открыта - тот же документ, по которому тестируются приложение и расширение: