Задача: шифровать бэкап.
Вариант 1. При бэкапе пользователь вводит пароль, пароль превращается в ключ, используется симметричное шифрование (AES).
Минус: пользователю нужно вводить ключ каждый раз при шифровании.
Вариант 2. Сохраняем пароль в конфигах на бэкап-машине.
Минус: любой, кто получит доступ к этой машине и увидит пароль, сможет расшифровать все предыдущие бэкапы.
Вариант 3.
1. Ввод или смена пароля.
1.1. Пользователь вводит пароль.
1.2. Генерируется пара RSA ключей, открытый ключ сохраняется в конфиге.
1.3. Закрытый ключ из 1.2 шифруется пользовательским паролем из 1.1 и сохраняется в конфиге.
2. Шифрование бэкапа.
2.1. Генерируется случайный AES-ключ.
2.2. Из конфига достаётся открытый ключ из 1.2 и им шифруется AES-ключ из 2.1.
2.3. Бэкап шифруется AES ключом из 2.1.
2.4. В результате сохраняется тройка: (зашифрованный AES ключ из 2.2; зашифрованный RSA ключ из 1.3; зашифрованный бэкап из 2.3).
3. Расшифровка бэкапа.
3.1. Пользователь вводит пароль.
3.2. С помощью пароля пользователя расшифровывается закрытый RSA-ключ из 1.3 (он хранится в бэкапе).
3.3. С помощью закрытого RSA-ключа расшифровывается AES-ключ из 2.1.
3.4. С помощью этого AES-ключа расшифровывается весь бэкап.
Минусов не вижу. Бэкапы делаются, шифруются, расшифровать может только тот, кто знает пароль из 1.1.
Схема достаточно сложная, возможно есть какие то неявные уязвимости из-за этого. Просьба прокомментировать. Может быть есть более простой путь, чтобы это всё сделать, я проще не придумал.