Управление ключами в Windows Azure
Я немного смущен тем, как хранить ключи (для шифрования данных) в Windows Azure.
В соответствии со следующими двумя ссылками (# 1, # 2), рекомендуется хранить ключи/библиотеку ключей в хранилище Windows Azure:
Сохранение собственной библиотеки ключей в службах хранения Windows Azure - это хороший способ сохранить некоторую секретную информацию, так как вы можете полагаться на безопасность этих данных в среде с несколькими арендаторами и защищенными вашими собственными ключами хранения.
Но "Рекомендации по безопасности для разработки приложений для Windows Azure" (№ 3) НЕ рекомендует хранить какие-либо связанные с ключом материалы в Windows Azure:
Кроме того, разработчики не должны загружать ключ или любой материал для ключей для Windows Azure Storage, независимо от того, насколько они осторожны в его скрытии. Если любой компьютер или службы хранения были скомпрометированы, это может привести к открытию ключей шифрования.
Каков наилучший подход для хранения ключей для шифрования в Windows Azure?
Ответы
Ответ 1
Недавно появившаяся служба хранилища Azure Key отлично подходит для решения проблемы. Это было введено для того, чтобы клавиши могли управляться в центральном месте, и доступ можно легко контролировать. Он также поддерживает обслуживание, поддерживающее HSM, что делает его очень безопасным.
Вот искусство на Начало работы с хранилищем ключей Azure
Ответ 2
Вы увидите из моего комментария в этой первой ссылке, что я согласен с вашими проблемами.:)
Azure не имеет безопасного способа хранения ключей, отличных от собственного хранилища сертификатов. Вот статья об использовании этого метода:
Поле Примечание: использование шифрования на основе сертификатов в приложениях Windows Azure
Вы заметите, что я также прокомментировал эти недостатки статьи, ссылаясь на этот вопрос:
Прочитайте раздел сертификата azure ServiceConfiguration с помощью С#
Пример использования Azure, встроенного в хранилище сертификатов для шифрования ключей AES (исключая ограничения RSA на зашифрованную длину данных, сохраняя ключ безопасности AES), можно найти в этом проекте:
Codeplex: шифрование таблицы Azure через атрибут
Класс SymmetricKeyHelper
в проекте EncryptDecrypt представляет особый интерес.
Престижность @breischl за упоминание об этом и за вклад в проект.
Ответ 3
В будущем Googlers - я реализовал решение, описанное Stuart Pegg выше, но разделенное с Azure Tables.
См. https://www.fasterweb.io/Blog/two-way-encryption-for-azure-web-roles для записи, или https://gist.github.com/strommen/20905504949072fe5e16 только для кода.
Ответ 4
Всегда есть риск. Если кто-то получает доступ к вашей учетной записи с помощью любых средств (например, с помощью инструмента), они могут узнать ваш ключ. Таким образом, в конце концов, необходимо защитить учетную запись хранилища от доступа к неавторизованному доступу.
Например, не разрешайте разработчику доступ к учетной записи производственного хранилища. Это включает в себя не позволяет им получать доступ к учетной записи с помощью инструментов. Пожалуйста, защитите ключ учетной записи хранилища и не пропустите никакой информации в любом приложении.
Только администраторы хранилища (и разработчики, которым доверяют 100%) могут иметь полный доступ к учетной записи производственного хранилища. Тогда вы сохраните ключ в своем хранилище.
Ответ 5
Я знаю, что это может быть немного поздно, но если кто-то ищет быструю и легкую реализацию шифрования для веб-сайтов Azure, я создал (Azure.Security, а исходный код в настоящее время находится на GitHub. Проект свободно основан на Codeplex: Azure Table Encryption by Attribute, но это намного проще и удобнее. Вскоре после этого появится сообщение о том, как его настроить и использовать он.