Как мы шифруем ваши пароли
Без формул и аббревиатур на первом экране — простыми словами о том, что происходит с паролем от момента, когда вы его вводите, до момента, когда он ложится в базу данных на сервере.
Главная идея: сервер — это сейф с чужим замком
Представьте банковскую ячейку, к которой у банка нет ключа — только у вас. Банк хранит саму ячейку, следит за зданием, но открыть её не может физически, даже если захочет, даже если его об этом попросят. Это и есть zero-knowledge: сервер Сэйфком хранит ваши данные, но не может их прочитать, потому что у него никогда не было и не будет ключа.
Что происходит, когда вы сохраняете пароль
Вы вводите пароль от какого-нибудь сайта в приложении Сэйфком. Дальше происходит это:
- Шифрование прямо в браузере. Прежде чем что-либо уйдёт на сервер, ваш пароль превращается в шифротекст — бессмысленный набор символов — прямо на вашем компьютере или телефоне. Это делает сам браузер, используя встроенные в него криптографические инструменты (Web Crypto API), а не какой-то удалённый сервис.
- Ключ для этого шифрования никуда не отправляется. Ключ строится из вашего мастер-пароля и остаётся у вас. Сервер его не видит и не запрашивает.
- На сервер уходит только шифротекст. То, что попадает в базу данных — это уже нечитаемый набор байтов. Даже если кто-то украдёт всю базу целиком, он получит только эту кашу символов, а не ваши реальные пароли.
А как же вход в приложение — разве это не пароль на сервере?
Нет. Ваш мастер-пароль не покидает браузер ни в открытом, ни в «обратимом» виде — то есть таком, из которого можно было бы вычислить исходный пароль. На сервер отправляется только производное значение (специалисты называют это хэшем), по которому нельзя восстановить исходный пароль — как по следу от печати нельзя восстановить саму печать, только подтвердить, что оттиск сделан именно ей.
Что если у меня несколько устройств?
Ваш личный ключ шифрования (не мастер-пароль, а производный от него ключ) хранится на сервере тоже в зашифрованном виде — запечатанным вашим же мастер-паролем. Когда вы входите с нового устройства, сервер отдаёт этот запечатанный ключ, а расшифровывается он снова только у вас в браузере, после ввода мастер-пароля. Сервер на всех этапах остаётся посредником, который передаёт зашифрованные данные, но не участником, который их читает.
А что с общим доступом — если я делюсь сейфом с коллегой?
Здесь сложнее, но принцип тот же. Когда вы делитесь хранилищем, происходит обмен ключами через отдельный криптографический механизм (используется алгоритм X25519 — тот же класс технологии, что защищает, например, интернет-банкинг): ключ хранилища запечатывается специально под открытый ключ вашего коллеги и только он может его распечатать своим приватным ключом. Сервер участвует в передаче зашифрованного пакета, но не может его вскрыть — как курьер, который переносит запечатанный конверт, не имея к нему ключа.
Какие конкретно алгоритмы используются
Для тех, кому интересны технические детали: деривация ключа из мастер-пароля — Argon2id, шифрование самих записей — AES-256-GCM, обмен ключами при шаринге — X25519. Это не собственные, никем не проверенные разработки, а общепринятые, независимо изученные криптографическим сообществом алгоритмы — те же классы шифрования, что используются в банковских системах и защищённых мессенджерах. Полная таблица примитивов и разбор сценариев компрометации — на странице безопасности, без упрощений, для тех, кто хочет проверить, а не просто поверить.
Что сервер всё же видит
Честности ради: zero-knowledge не означает, что сервер вообще ничего не знает. Он видит ваш email (нужен для входа), название хранилища (не шифруется — осознанный компромисс ради простоты интерфейса), и метаданные — кто с кем поделился доступом, когда создавалась запись. Но не видит сам пароль, не видит содержимое заметок, логинов, URL — то, ради чего вы вообще используете менеджер паролей. Подробный честный список — тоже на странице безопасности.