Интерактивное демо

Как «Сохранись Онлайн» защищает ваши данные

Мы не можем прочитать ваши секреты — даже если захотим. Пройдите этот сценарий и убедитесь сами.

Участники
Кто участвует в сценарии
В реальном сервисе это настоящие пользователи. Здесь мы сыграем за всех, чтобы показать полный цикл — от создания до расшифровки.
👨
Иван
Создаёт секрет
публичный
приватный
● ● ● ● скрыт
Только у Ивана
👩
Катя
Доверенный человек
публичный
приватный
● ● ● ● скрыт
Только у Кати
👨‍💼
Михаил
Доверенный человек
публичный
приватный
● ● ● ● скрыт
Только у Михаила
👩‍💻
Настя
Получатель секрета
публичный
приватный
● ● ● ● скрыт
Только у Насти
У каждого — пара ключей: публичный (как замок — его можно раздать всем) и приватный (только у владельца — это ключ от замка). Иван запечатает данные замком Насти — открыть сможет только она.
В реальном сервисе ключи создаются один раз при регистрации и сохраняются в браузере пользователя. На сервер приватные ключи не уходят никогда.
Настя сразу получит уведомление, что для неё пришло сообщение — но не увидит ни от кого, ни что внутри. Прочитать его она сможет только когда сработает триггер раскрытия: например, Иван не выходил на связь дольше заданного времени (пропустил чек-ин). Если настроены доверенные люди — они дополнительно подтверждают, что это не случайность. Только тогда Настя получает доступ к содержимому.
Для любопытных — технические подробности
Каждому участнику генерируется пара ключей X25519: публичный — отправляется на сервер (видит кто угодно) приватный — остаётся в браузере, на сервер не уходит X25519 — протокол обмена ключами Диффи–Хеллмана на эллиптической кривой Curve25519 (256 бит). Используется в Signal, WireGuard, TLS 1.3. На его основе строится Sealed Box — схема асимметричного шифрования: зашифровать может любой, зная публичный ключ, расшифровать — только владелец приватного. Это как почтовый ящик: бросить письмо может кто угодно, достать — только хозяин ключа от замка. Генерируется прямо сейчас через libsodium — ту же библиотеку, что использует мессенджер Signal. Хранение в реальном сервисе: Приватный ключ нельзя хранить открытым текстом — его нужно зашифровать паролем пользователя. Но хранить raw-пароль тоже нельзя. Поэтому из пароля сначала выводится ключ шифрования: PBKDF2-SHA256 — функция вывода ключа из пароля. Специально медленная: 100 000 внутренних SHA-256 операций прежде чем получить финальный ключ (~100 мс на процессоре). Цель: замедлить атаку перебором паролей в 100 000 раз. Без PBKDF2: GPU проверяет ~10 млрд паролей в секунду. С PBKDF2: GPU проверяет ~100 000 паролей в секунду. Слабый пароль это не спасёт — но надёжный пароль (12+ случайных символов) делает перебор нереальным при любом раскладе. PBKDF2 — дополнительный барьер, который защищает даже средние пароли. Затем приватный ключ шифруется этим ключом через AES-256-GCM и сохраняется в браузере. На сервер уходит только зашифрованная копия (и только при включённой функции облачного резервного хранения ключей) — без пароля расшифровать невозможно.
Шаг 0
Выберите сценарий
Нужны ли доверенные люди?
С доверенными: секрет откроется только когда нужное число доверенных людей подтвердит это. Иван выбирает кто и при каких условиях может дать «добро» на передачу.
Сколько доверенных людей?
Сколько подтверждений нужно для открытия?
Ключи созданы — посмотрите на карточки участников выше. Нажмите на публичный ключ чтобы развернуть его полностью.
Шаг 1
Иван создаёт секрет
Шаг 2
Что хранится на наших серверах
Ниже — всё, что Иван передал на сервер. Больше ничего нет. Попробуйте разгадать секрет, глядя на это.
Данные, которые получил сервер
Зашифрованный текст
Ключ для Насти
запечатан замком Насти
Оригинальный текст — никогда не попадает на сервер
Промежуточные ключи шифрования — существуют только в браузере Ивана в момент создания и сразу уничтожаются
Приватные ключи участников — хранятся только у них в браузере
Если хакер взломает наши серверы — он получит только этот бессмысленный набор символов. Без приватных ключей участников расшифровать что-либо математически невозможно.
Эти данные будут лежать здесь в таком же зашифрованном виде сколько угодно долго. Настя не знает об их существовании — пока не сработает триггер раскрытия. Триггер — пропущенный чек-ин: Иван периодически подтверждает, что он в порядке. Если подтверждение не пришло в срок, сервис запускает процедуру раскрытия. Доверенные люди (если они настроены) дополнительно подтверждают, что это не случайность — и только после этого Настя получает доступ.
Шаг 3
Подтверждение доверенных людей
К Катя подтверждает

М Михаил подтверждает
Шаг 4
Настя открывает секрет
Всё расшифрование происходит в браузере Насти. На сервер расшифрованные данные не уходят ни на каком этапе.
Справочник
Какие алгоритмы мы используем
Для чегоАлгоритмПростыми словами
Шифрование секретаXSalsa20-Poly1305Из семейства шифров, используемых в WireGuard и TLS 1.3
Шифрование ключей и частейX25519 Sealed BoxАсимметричное шифрование: запечатать может кто угодно, открыть — только владелец
Хранение ключей в браузереAES-256-GCMВоенный стандарт, используется в банках и государственных системах
Пароль → ключ шифрованияPBKDF2-SHA256, 100 000 итерацийЗамедляет перебор паролей в 100 000 раз
Разделение ключа на частиShamir's Secret Sharing GF(256)Математически доказано: одна часть не несёт никакой информации о секрете
Подписи запросов к серверуEd25519Гарантирует что запрос пришёл именно от вас. В реальном сервисе — при каждом обращении к API.
Финальный ключ шифрованияBLAKE2b (crypto_generichash)Объединяет две части в один ключ. Быстрее SHA-256, такой же надёжный