как безопасно хранить мой ключ шифрования

В настоящее время я работаю над приложением ASP.net MVC5, размещенным в Microsoft Azure, в котором мне нужно хранить множество паролей. Я думаю, что не могу использовать хеш, потому что мне нужно получить пароль. Для шифрования/дешифрования этих паролей я решил использовать класс RijndaelManaged, который кажется безопасным.

Проблема в том, что я не знаю, как хранить ключ для этого шифрования/дешифрования, чтобы приложение было максимально безопасным. Я видел несколько тем на эту тему, но мы видим все и вся. Должен ли я хранить ключ в реализации, в базе данных, в файле conf или в blob azure (или что-то еще)?


person Fabaud    schedule 21.04.2015    source источник
comment
Комментарий не по теме: I think I can not use the hash because I need to be able to get the password - Я посмотрел видео Pluralsight Троя Ханта об основах безопасного управления учетными записями, и один ключевой вывод из этого был ... if you can decrypt the password, then somebody else also can.   -  person Gaurav Mantri    schedule 21.04.2015
comment
Я принял участие в хранении множества паролей, чтобы иметь в виду, что это не пароли учетных записей пользователей, а пароли для внешних вещей, похожие на менеджер паролей, где вам в конечном итоге нужно их просмотреть.   -  person mfanto    schedule 21.04.2015


Ответы (1)


На самом деле нет безопасного способа хранить ключи и сделать их доступными для веб-приложения. При этом «самый безопасный» способ — использовать Azure Key Vault. Это HSM, сертифицированный по стандарту FIPS-140 уровня 2, и он может выполнять криптографические операции, при этом вашему приложению не требуется доступ к ключам.

Конечно, это лишь незначительно повышает безопасность, если ваше приложение может просто запросить любую расшифровку, которую оно хочет (если злоумышленник скомпрометирует приложение, он может сам отправить запрос). Но, по крайней мере, физический носитель защищен, и вы переносите фактические криптографические операции в безопасную среду. Это также с большей вероятностью будет соответствовать нормативным требованиям, в отличие от хранения необработанных ключей в файле конфигурации.

Простое руководство с примером кода можно найти здесь

person mfanto    schedule 21.04.2015
comment
Тогда где вы храните clientSecret, используемый для получения токена OAuth для доступа к Key Vault? - person BenV; 21.04.2015
comment
В конечном счете, невозможно обеспечить идеальную (или, может быть, даже хорошую) безопасность с онлайн-хранилищем ключей, к которому приложение может делать произвольные запросы. Key Vault — лучшее решение для хранения и криптообработки, а то, как вы обрабатываете токен аутентификации, зависит от вашего варианта использования (будь то одноразовое использование, а затем отбрасывание или что-то еще). - person mfanto; 21.04.2015
comment
Спасибо за ваш ответ. Я думаю, что буду использовать Key Vault. - person Fabaud; 22.04.2015