Шифрование персональных хранилищ в on-prem-версии
Ниже — схема, по которой в коробочной версии BearPass шифруются персональные хранилища: как выводятся ключи, где они хранятся и почему расшифровать личные записи можно только на устройстве пользователя.
Генерация пары ключей
После регистрации система просит пользователя задать мастер-пароль. В этот момент генерируется пара RSA 2048 ключей. У каждого пользователя уже есть случайная соль (12 случайных символов), и с помощью алгоритма PBKDF2 (350000 итераций) на основе мастер-пароля и соли генерируется ключ.
Этим ключом шифруется приватный ключ (AES-256-GCM) пользователя и отправляется на сервер, публичный отправляется в открытом виде и сохраняется в базе данных. Расшифрованный приватный ключ и мастер-пароль никогда не передаются на сервер.
Расшифровка приватного ключа
Так как приватный ключ хранится в зашифрованном виде, при любой работе с паролями и компаниями его необходимо расшифровать. Для этого фронтенд запрашивает ввод мастер-пароля, расшифровывает им приватный ключ, получает с сервера временный ключ шифрования (уникален для каждого пользователя и меняется каждый период времени, заданный в настройках продукта), шифрует этим ключом приватный ключ (AES-256-GCM) и кладёт в localStorage браузера.
При смене временного ключа шифрования на сервере система просит ввести мастер-пароль заново. Тем самым приватный ключ всегда хранится в зашифрованном виде.
Шифрование личных паролей
Логин, пароль, названия и значения всех дополнительных полей шифруются на клиенте. Для каждого поля в момент сохранения записи генерируется случайный ключ (32 байта), к значению добавляется соль (32 символа). Значение с солью шифруется случайным ключом алгоритмом AES-256-GCM.
Ключ шифруется публичным ключом пользователя, расшифровать его можно только имея приватный ключ. Шифрованные данные и шифрованный ключ отправляются на сервер и сохраняются в базе данных.
Что дальше
Как устроено шифрование в облачной версии — на странице «Как работает шифрование в Облаке». Что ещё выйдет в коробочной версии — в дорожной карте.