Как KeyKeeper защищает ваши данные
Сервер KeyKeeper хранит только шифротекст. Ключи и открытые данные есть лишь на ваших устройствах, а мастер-пароль даже при входе не передаётся по сети. Ниже — как это работает и где проходят границы.
Остаётся на вашем устройстве
- мастер-пароль, который никогда не отправляется на сервер
- ключи шифрования и закрытые ключи подписи
- содержимое записей: логины, пароли, карты, заметки
- названия записей и коллекций
Попадает на сервер
- шифротекст: набор байтов, который без ключа ничего не говорит
- состав участников организации и коллекций
- количество записей, их размеры и время изменения
- подписанный журнал аудита
Шифрование происходит на вашем устройстве
Каждая запись шифруется в браузере или в приложении ещё до отправки в сеть. Для этого используется XChaCha20-Poly1305 — современный шифр с аутентификацией: он не только скрывает содержимое, но и обнаруживает любую попытку его изменить. Если кто-то подменит хоть один байт шифротекста, запись просто не откроется.
Это и называется Zero-Knowledge: сервер KeyKeeper физически не получает ничего, из чего можно было бы собрать ваши пароли. Расшифровка тоже происходит только у вас.
Ключ выводится из мастер-пароля через Argon2id
Мастер-пароль не используется как ключ напрямую. Он пропускается через Argon2id — функцию вывода ключа, намеренно рассчитанную на большой расход памяти и времени. Для вас это доли секунды при входе, а для того, кто перебирает пароли на специальном оборудовании, это резко удорожает каждую попытку.
Поэтому длина и случайность мастер-пароля по-прежнему важны. Придумать хороший поможет генератор паролей, а оценить уже имеющийся — проверка надёжности.
Вход по протоколу OPAQUE: пароль не покидает устройство
В обычной схеме вы отправляете пароль серверу, а тот сверяет его с сохранённым хешем. Если сервер скомпрометирован или пароль перехвачен по дороге, он раскрыт. KeyKeeper использует OPAQUE — протокол аутентификации по паролю, при котором сервер не получает ни самого мастер-пароля, ни чего-либо равнозначного ему.
Клиент и сервер обмениваются криптографическими сообщениями, из которых каждый убеждается, что другая сторона знает нужный секрет. Но восстановить пароль по этой переписке нельзя, а утёкшая база сервера не даёт материала для быстрого перебора.
Подписи защищают от подмены ключей
Шифрование само по себе не отвечает на вопрос «чей это ключ?». Если сервер подсунет вам чужой ключ вместо ключа коллеги, вы зашифруете данные для злоумышленника. Чтобы это исключить, ключи и записи подписываются Ed25519, а клиент проверяет подписи сам и отвергает подставленные ключи.
Доверие строится на математике на вашей стороне, а не на обещании сервера вести себя честно.
Журнал аудита, который нельзя переписать незаметно
Действия в организации записываются в журнал, где каждая запись подписана и связана с предыдущей хешем. Удалить или изменить событие в середине цепочки не получится без нарушения всех последующих звеньев. Проверку выполняет клиент: сервер может хранить журнал, но не может его тихо подправить.
Что мы не скрываем: восстановление данных организации
Zero-Knowledge означает, что мы не можем прочитать ваши данные и не можем сбросить мастер-пароль. Если вы забудете пароль, а у сейфа нет другого владельца, мы доступ не вернём: личный сейф откроется только перебором.
В организациях есть осознанное исключение. Ключ организации хранится так, что его может открыть владелец организации (роль super_admin). Это функция для бизнеса: когда сотрудник уходит или забывает пароль, компания не теряет доступ к своим рабочим данным. Сервер KeyKeeper этот ключ по-прежнему открыть не может, но владельцу организации вы доверяете по определению. Учитывайте это, когда решаете, кого назначать владельцем.
Читайте также
Храните пароли в зашифрованном сейфе
Регистрация занимает меньше минуты. Мастер-пароль остаётся на вашем устройстве, а сервер хранит только шифротекст. 179 ₽ за пользователя в месяц.