Введение

Windows API для криптографии Data Protection Application Programming Interface (DPAPI) - это простой криптографический интерфейс программирования приложений, доступный в качестве встроенного компонента в Windows 2000 и более поздних версиях операционных систем Microsoft Windows. В теории API защиты данных может обеспечивать симметричное шифрование любого вида данных; на практике его основное использование в операционной системе Windows заключается в выполнении симметричного шифрования асимметричных частных ключей, используя секрет пользователя или системы в качестве значительного вклада энтропии. В 2011 году был опубликован подробный анализ внутренней работы DPAPI Bursztein et al. Для почти всех криптосистем одной из самых сложных задач является "управление ключами", частично, как безопасно хранить ключ расшифровки. Если ключ хранится в виде обычного текста, то любой пользователь, который может получить доступ к ключу, может получить доступ к зашифрованным данным. Если ключ должен быть зашифрован, нужен еще один ключ и так далее. DPAPI позволяет разработчикам шифровать ключи, используя симметричный ключ, полученный из секретов входа в систему пользователя, или в случае шифрования системы, используя секреты аутентификации домена системы. Ключи DPAPI, используемые для шифрования ключей RSA пользователя, хранятся в каталоге %APPDATA%\Microsoft\Protect\{SID}, где {SID} является идентификатором безопасности этого пользователя. Ключ DPAPI хранится в том же файле, что и мастер-ключ, защищающий частные ключи пользователей. Обычно это 64 байта случайных данных.

Собственности безопасности

DPAPI не хранит никаких постоянных данных для себя; вместо этого он просто получает простой текст и возвращает шифрованный текст (или наоборот). Безопасность DPAPI основана на способности операционной системы Windows защищать мастер-ключ и частные ключи RSA от компрометации, которая в большинстве сценариев атаки в наибольшей степени зависит от безопасности учетных данных конечного пользователя. Основной ключ шифрования/дешифрования получается из пароля пользователя с помощью функции PBKDF2. Определенные бинарные большие объекты данных могут быть зашифрованы таким образом, что добавляется соль и/или требуется внешний пользователь, который вызывает пароль (также известный как "Сильная защита ключа"). Использование соли является вариантом реализации, т.е. под контролем разработчика приложения, и не контролируется конечным пользователем или системным администратором. Делегированный доступ к ключам может быть предоставлен с помощью объекта COM+. Это позволяет веб-серверам IIS использовать DPAPI.

Ключи резервного копирования Active Directory

Когда компьютер является участником домена, DPAPI имеет резервный механизм, позволяющий устранить защиту данных в случае потери пароля пользователя, который называется "Credential Roaming". При установке нового домена на контроллере домена генерируется пара публичных и частных ключей, связанных с DPAPI. Когда мастер-ключ генерируется на клиентской рабочей станции, клиент общается через аутентифицированный вызов RPC с контроллером домена для получения копии публичного ключа домена. Клиент шифрует мастер-ключ с помощью публичного ключа контроллера домена. Наконец, он хранит этот новый резервный ключ в своем каталоге AppData, как и традиционное хранилище ключей.