Как работает шифрование в Облаке

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


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


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

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

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


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

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


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


Шифрование паролей компании


При создании компании создается пара RSA 2048 ключей. Приватный ключ шифруется публичным ключом пользователя и вместе с публичным отправляется на сервер.

Пароли компании шифруются точно также, как личные, только для шифрования используется публичный ключ компании. Поэтому чтобы расшифровать данные, нужно получить шифрованный приватный ключ компании, расшифровать приватный ключ пользователя мастер-паролем, расшифровать приватный ключ компании приватным ключом пользователя.

При добавлении пользователя в компанию приватный ключ компании шифруется его публичным ключом и отправляется на сервер, чтобы он впоследствии мог работать с паролями.