Вопрос или проблема
Google-fu меня подводит, и я не смог найти документацию, которая ответила бы на следующий вопрос: если приложение использует ключ машины Windows или ключ пользователя для шифрования определенных данных, и зашифрованные данные все еще доступны, но машина становится неработоспособной (неисправность жесткого диска, ошибочно отформатированный диск и т. д.), как можно сделать резервное копирование и восстановление ключей, чтобы использовать их для восстановления после аварии?
Я понимаю, что возможно создать образ такой машины и восстановить ее из образа, но я ищу решение, которое не зависит от образа. Существует ли такое решение? То есть возможно ли сделать резервную копию ключа машины или пользователя Windows и повторно применить ее на другой машине, если оригинальная полностью потеряна?
Я предполагаю, что создание такой резервной копии представляет собой риск безопасности, но сейчас меня интересует только сама возможность такого подхода.
Похоже, здесь говорится о использовании альтернативного местоположения для ключей в файловой системе: Провайдеры хранения ключей в ASP.NET Core. Странно, что я не смог сначала это найти, но результат появился, как только я убрал ‘Microsoft’ из поисковых запросов DPAPI.
Связанная статья, должно быть, говорит о ключах пользователя, если только я что-то не упускаю. Это имело бы смысл, потому что, как я предполагал, резервное копирование ключа машины — это риск безопасности. Я довольно уверен, что смогу продолжить с этого и базировать любое дальнейшее шифрование на ключах пользователя.
Мне также была интересна статья DPAPI и переносимые профили, которая связана с Шифрованием ключей в покое в Windows и Azure с использованием ASP.NET Core, но она выдает 404.
Решение высокого уровня, похоже, состоит в том, чтобы использовать хранилище ключей пользователя, основанное на файловой системе, и включить шифрование ключей в покое, при этом убедившись, что ключ шифрования также резервируется где-то.
Согласно этой (устаревшей, последний раз обновлялась в 2010 году, но, возможно, она все еще актуальна) документации Microsoft для DPAPI, мастер-ключ пользователя может быть сохранен. Я не уверен, относится ли это также к ключу машины.
Когда компьютер является членом домена, у DPAPI есть механизм резервного копирования для восстановления данных. Когда создается мастер-ключ, DPAPI связывается с контроллером домена. Контроллеры домена имеют пару публичных/приватных ключей, связанных исключительно с DPAPI. Локальный клиент DPAPI получает публичный ключ контроллера домена, используя взаимно аутентифицированный и защищенный от прослушивания RPC-вызов. Клиент шифрует мастер-ключ с использованием публичного ключа контроллера домена. Затем он сохраняет этот резервный мастер-ключ вместе с мастер-ключом, защищенным паролем пользователя.
При расшифровке данных, если DPAPI не может использовать мастер-ключ, защищенный паролем пользователя, он отправляет резервный мастер-ключ контроллеру домена, используя взаимно аутентифицированный и защищенный от прослушивания RPC-вызов. Контроллер домена затем расшифровывает мастер-ключ с помощью своего приватного ключа и отправляет его обратно клиенту, используя тот же защищенный RPC-вызов. Этот защищенный RPC-вызов используется, чтобы гарантировать, что никто, кто слушает в сети, не сможет получить мастер-ключ.
Теперь вы, вероятно, думаете, что это резервное копирование отлично работает с клиентами домена, но вы также задаетесь вопросом, что происходит со всеми домашними пользователями, которые работают с автономными системами или в рабочей группе. Ну, в Windows XP появилась новая функция: диск сброса пароля (PRD). Пользователь может создать PRD из панели управления в любое время, и это позволяет пользователю сбросить свой пароль, когда он его забывает. Когда пароль сбрасывается с помощью PRD, все мастер-ключи пользователя шифруются заново под новый пароль.
Ответ или решение
Microsoft DPAPI и управление ключами
Введение
Microsoft Data Protection API (DPAPI) предоставляет разработчикам удобный способ защиты конфиденциальных данных, таких как пароли и другие критически важные учетные данные. DPAPI использует два типа ключей для шифрования: ключи пользователя и ключи машины. В случае потери или выхода из строя системы, крайне важно иметь возможность восстановить доступ к зашифрованным данным. Данная статья отвечает на вопросы, касающиеся бэкапа и восстановления ключей DPAPI, а также предлагает рекомендации по повышению уровня безопасности.
Ключи DPAPI: пользовательские и машинные
DPAPI использует два типа ключей:
-
Ключ пользователя: Применяется для шифрования данных, доступных только текущему пользователю. Этот ключ защищен паролем пользователя и может храниться в Roaming Profiles (блуждающих профилях), позволяя восстановить доступ к данным на других устройствах.
-
Ключ машины: Этот ключ обеспечивает шифрование для всех пользователей на конкретной машине. Он, в отличие от ключа пользователя, не требует ввода пароля. Однако если машина повреждена, данные, зашифрованные с использованием ключа машины, могут быть утеряны навсегда.
Восстановление ключей DPAPI
-
Резервное копирование ключей пользователя:
- Для пользователей, работающих в доменной среде, DPAPI автоматически создает резервные копии мастер-ключей на контроллерах домена. Если система не может использовать мастер-ключ, защищенный паролем пользователя, он может обратиться к запасному ключу DPAPI на контроллере домена для восстановления доступа.
- Для домашних пользователей процесс более сложный, но возможно создание диска сброса пароля, что позволит переопределить пароль и заново зашифровать мастер-ключи.
-
Резервное копирование ключей машины:
- К сожалению, резервное копирование ключей машины в отличие от ключей пользователя в стандартной версии DPAPI не предусмотрено. Потеря машины означает потерю всех данных, зашифрованных с использованием её ключа, если не был создан образ системы.
- Однако в некоторых случаях разработчики могут рассмотреть возможность использования сторонних решений или внедрение пользовательского механизма для резервирования и восстановления данных.
Оптимизация безопасности ключей
Для повышения безопасности и упрощения восстановления данных рекомендуется использовать следующие подходы:
-
Используйте файловое хранилище для пользовательских ключей: Это позволит управлять ключами без привязки к определенной машине. Включите шифрование ключей для хранения данных на файловой системе.
-
Энкрипция ключей при хранении: Наиболее важные ключи следует зашифровать (например, с использованием ключа, доступного через безопасное хранилище) перед их сохранением.
-
Регулярные резервные копии: Создавайте регулярные резервные копии мастер-ключей и важных данных, чтобы избежать их потери в случае возникновения критических инцидентов.
Заключение
Хотя существующие механизмы DPAPI для восстановления данных обеспечивают некоторую защиту и удобство в средах с доменными контроллерами, важно осознавать, что резервное копирование ключей машины не предусмотрено. Для обеспечения высокой надежности данных в случае разрушительных событий и повреждений системы рекомендуется разрабатывать архитектуру, предполагающую использование резервного копирования и дополнительных средств безопасности. Заявленный подход может значительно упростить работу с конфиденциальной информацией и обеспечить уверенность в её сохранности.