Это та же проблема с курицей и яйцом, которая возникает повсюду в ИТ.
Я ожидаю, что это будет закрыто как дубликат чего-то еще, но на него быстрее ответить, чем искать дубликаты.
Существуют разные способы снижения риска, но ни один из них не решает проблему. Какое решение подходит вам, зависит от ваших конкретных c рисков - ваши резервные копии зашифрованы / защищены? Хотите, чтобы приложение автоматически восстанавливалось после перезагрузки? Ваше приложение работает в системе, которая может подтвердить свою личность / целостность на другой машине? Работает ли он как часть кластера .....
Есть только определенное количество мест, где вы можете хранить данные:
- на другом компьютере (доступ зависит от механизма аутентификации)
- в файловой системе (секрет будет виден всем, у кого есть доступ к этой файловой системе или ее резервной копии)
- в памяти (секретов много при перезагрузке, и есть ограниченные возможности для их защиты от кого-то, у кого есть доступ к машине).
Не расстраивайтесь. HSM go с максимальной длиной, чтобы обеспечить безопасность секретов там, где это целесообразно, но передадут их любому авторизованному клиенту (а схемы аутентификации не самые надежные). Модель управления мастер-ключами, используемая большинством менеджеров паролей, поистине ужасна.
Другой ключевой момент заключается в том, что многие решения, обеспечивающие умеренный уровень защиты, далеко не просты. В настоящее время я играю с идеей написать свой собственный менеджер паролей, в котором главный ключ шифрования также зашифрован с помощью ключа, состоящего из пароля каждого пользователя и секрета, хранящегося в памяти на компьютере. Но здесь есть проблемы, связанные с безопасным вводом системного ключа во время загрузки и сбросом пароля.
Ядро Linux теперь имеет возможность виртуального HSM, которая позволяет вам ограничивать данные, хранящиеся в памяти, до определенных c процессов, групп процессов или пользователей, но его нельзя переносить между операционными системами.