Как работает шифрование персональных хранилищ в on-prem-версии

Дата публикации текущей версии: 27.01.2025 г.


Генерация пары ключей


После регистрации система просит пользователя задать мастер-пароль. В этот момент генерируется пара RSA 2048 ключей. У каждого пользователя уже есть случайная соль (12 случайных символов), и с помощью алгоритма PBKDF2 (350000 итераций) на основе мастер-пароля и соли генерируется ключ.

Этим ключом шифруется приватный ключ (AES-256-GCM) пользователя и отправляется на сервер, публичный отправляется в открытом виде и сохраняется в базе данных. Расшифрованный приватный ключ и мастер-пароль никогда не передаются на сервер.

Расшифровка приватного ключа


Так как приватный ключ хранится в зашифрованном виде, при любой работе с паролями и компаниями его необходимо расшифровать. Для этого фронтенд запрашивает ввод мастер-пароля, расшифровывает им приватный ключ, получает с сервера временный ключ шифрования (уникален для каждого пользователя и меняется каждый период времени, заданный в настройках продукта), шифрует этим ключом приватный ключ (AES-256-GCM) и кладет в localStorage браузера. При смене временного ключа шифрования на сервере система просит ввести мастер-пароль заново. Тем самым приватный ключ всегда хранится в зашифрованном виде.

Шифрование личных паролей


Логин, пароль, названия и значения всех дополнительных полей шифруются на клиенте. Для каждого поля в момент сохранения записи генерируется случайный ключ (32 байта), к значению добавляется соль (32 символа). Значение с солью шифруется случайным ключем алгоритмом AES-256-GCM. Ключ шифруется публичным ключом пользователя, расшифровать его можно только имея приватный ключ. Шифрованные данные и шифрованный ключ отправляются на сервер и сохраняются в базе данных.