Введение
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 байта случайных данных.
Data Protection Application Programming Interface (DPAPI) is a simple cryptographic application programming interface available as a built in component in Windows 2000 and later versions of Microsoft Windows operating systems. In theory, the Data Protection API can enable symmetric encryption of any kind of data; in practice, its primary use in the Windows operating system is to perform symmetric encryption of asymmetric private keys, using a user or system secret as a significant contribution of entropy. A detailed analysis of DPAPI inner workings was published in 2011 by Bursztein et al. For nearly all cryptosystems, one of the most difficult challenges is "key management" in part, how to securely store the decryption key. If the key is stored in plain text, then any user that can access the key can access the encrypted data. If the key is to be encrypted, another key is needed, and so on. DPAPI allows developers to encrypt keys using a symmetric key derived from the user's logon secrets, or in the case of system encryption, using the system's domain authentication secrets. The DPAPI keys used for encrypting the user's RSA keys are stored under %APPDATA%\Microsoft\Protect\{SID} directory, where {SID} is the Security Identifier of that user. The DPAPI key is stored in the same file as the master key that protects the users private keys. It usually is 64 bytes of random data.
Собственности безопасности
DPAPI не хранит никаких постоянных данных для себя; вместо этого он просто получает простой текст и возвращает шифрованный текст (или наоборот). Безопасность DPAPI основана на способности операционной системы Windows защищать мастер-ключ и частные ключи RSA от компрометации, которая в большинстве сценариев атаки в наибольшей степени зависит от безопасности учетных данных конечного пользователя. Основной ключ шифрования/дешифрования получается из пароля пользователя с помощью функции PBKDF2. Определенные бинарные большие объекты данных могут быть зашифрованы таким образом, что добавляется соль и/или требуется внешний пользователь, который вызывает пароль (также известный как "Сильная защита ключа"). Использование соли является вариантом реализации, т.е. под контролем разработчика приложения, и не контролируется конечным пользователем или системным администратором. Делегированный доступ к ключам может быть предоставлен с помощью объекта COM+. Это позволяет веб-серверам IIS использовать DPAPI.
Ключи резервного копирования Active Directory
Когда компьютер является участником домена, DPAPI имеет резервный механизм, позволяющий устранить защиту данных в случае потери пароля пользователя, который называется "Credential Roaming". При установке нового домена на контроллере домена генерируется пара публичных и частных ключей, связанных с DPAPI. Когда мастер-ключ генерируется на клиентской рабочей станции, клиент общается через аутентифицированный вызов RPC с контроллером домена для получения копии публичного ключа домена. Клиент шифрует мастер-ключ с помощью публичного ключа контроллера домена. Наконец, он хранит этот новый резервный ключ в своем каталоге AppData, как и традиционное хранилище ключей.