Как хранить учетные данные безопасности в базе данных
Я работаю над приложением, похожим на CMDB, где я должен хранить свои учетные данные безопасности (имена пользователей и пароли серверов, ...).
Я ищу лучший способ надежно хранить их с этими ограничениями:
- Большинство пользователей НЕ будут иметь доступ ко всем учетным данным (в зависимости от роли пользователя)
- Мы не хотим, чтобы все пароли были зашифрованы одним и тем же ключом (уже пробовали: когда пользователь покидает компанию, менять ключ очень сложно...)
- Действительно, мы не хотим, чтобы какой-либо закрытый ключ был написан жестко в исходном коде приложения или даже сохранен где-либо (в нашей предыдущей версии закрытый ключ хранился между нашими ушами...)
- Нам необходимо провести проверку надежности паролей (т.е. проанализировать расшифрованные пароли из скрипта)
- Не должно быть ни одного случая, когда мы больше не могли бы получить доступ к нашим учетным данным (потерянный ключ, ...) => мы не хотим, чтобы посторонние лица смотрели на них, но мы также не хотим терять их => решение для этого ограничением может быть регулярный экспорт в физический шкафчик...
Я не спрашиваю о проблемах безопасности приложений (https, ...) или базы данных (без публичного доступа,...), а только о стороне хранения (даже не может быть в базе данных...? Зашифрованных файлов или что-то в этом роде)...): Можно ли запретить кому-либо, даже имеющему доступ к коду приложения или содержимому базы данных (в худшем случае), прочитать дешифрованные учетные данные?
Я знаю, что я прошу какое-то волшебное решение, но я хочу знать его, если оно существует; о)
1 ответ
Общий случай того, что вы просите сделать, невозможен. Все виды современной криптографии имеют механическое преимущество. То есть они используют маленький секрет, чтобы охранять больший секрет. Если вы не можете сохранить маленький секрет в безопасности, нет никакой безопасности. Если вы хотите, чтобы кто-то мог предоставлять пароли на основе пароля по паролю, вы фактически даете им секрет - пароли - что им потребуется для доступа к рассматриваемым элементам.
Именно из-за этой проблемы существуют системы федеративных систем идентификации (Kerberos/Active Directory/ и т. Д.) - чтобы центральный компьютер мог аутентифицировать пользователей, не раскрывая секреты упомянутым пользователям. Но использование федеративной системы идентификации требует сотрудничества между системой, в которую нужно войти, и службой идентификации.