Пароль от зашифрованного бэкапа можно хранить прямо рядом с этим бэкапом.

Звучит как шутка, но я пришёл ровно к такой схеме.

Допустим, резервные копии лежат в S3 и зашифрованы с помощью restic. Для восстановления нужен пароль от репозитория.

Можно положить этот пароль в тот же S3-бакет отдельным файлом. Но перед этим зашифровать его ещё раз, уже с помощью age.

При восстановлении вы забираете из S3 оба файла, с помощью age расшифровываете пароль от restic и уже этим паролем открываете основной бэкап.

Схема хороша тем, что приватный ключ age можно хранить на аппаратном токене вроде YubiKey. При использовании "age-plugin-yubikey" ключ не покидает устройство, а для расшифровки потребуется физически подключить YubiKey к компьютеру.

Получается как с иглой у Кощея, но на минималках.

+ Сервер умеет автоматически создавать бэкапы;
+ S3 хранит всё необходимое для восстановления;
+ прочитать данные без физического ключа нельзя.

Остаётся последний вопрос: что будет, если YubiKey потеряется или сломается?

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

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

Хоть тут он пригодится.