Data Protection API

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Data Protection API (DPAPI) — криптографический интерфейс программирования приложений в ОС семейства Windows, обеспечивающий защиту (конфиденциальность) данных путём их шифрования.

Почти для всех криптосистем одной из самых сложных задач является управление ключами. В частности, безопасного хранения ключей. Если ключ хранится в виде обычного текста, то любой пользователь, имеющий доступ к ключу, может получить доступ и к зашифрованным данным. DPAPI позволяет разработчикам шифровать приватные данные или ключи шифрования, используя симметричный ключ, полученный на основе пароля на вход владельца, или, в случае системного шифрования, на основе секрета аутентификации домена.

История[править | править код]

В 2005 году Passcape Software выпустила первое коммерческое приложение, полностью эмулирующее работу DPAPI в офлайн режиме, т.е. без входа пользователя в учетную запись.

В 2010 на Black Hat DC 2010 году Elie Bursztein и Jean-Michel Picod представили анализ DPAPI под названием Reversing DPAPI and Stealing Windows Secrets Offline. В дополнение к их брифингу, Bursztein и Picod выпустили DPAPIck (недоступная ссылка) - утилиту с открытым исходным кодом, которая также расшифровывает данные DPAPI в офлайн режиме.

В Windows 8 Microsoft изменила способ работы логики DPAPI. Теперь несколько пользовательских ключей можно использовать для расшифровки мастер ключа DPAPI.

В 2012 году Passcape Software опубликовала в своем блоге подробную статью[1] о внутренней логике DPAPI и представила набор инструментов для полной автономной расшифровки и анализа DPAPI. Набор утилит эксплуатирует старые ошибки и уязвимости и полностью совместим с Windows 8.

В Windows 10 Microsoft добавила поддержку облачных ключей шифрования для учетных записей Microsoft.

Архитектура[править | править код]

DPAPI включает в себя функции: шифрования и расшифровки данных (CryptProtectData и CryptUnprotectData), а также шифрования и расшифровки памяти. Например, для предотвращения просмотра хранимых в памяти паролей при нахождении их в файле подкачки. Функции DPAPI выполняют локальный RPC-вызов сервера проверки подлинности локальной системы безопасности, который в свою очередь вызывает библиотеку CryptoAPI для выполнения операции в своём контексте безопасности. Для защиты данных может использоваться пароль пользователя для входа в систему или запрашиваться другой пароль.

Уязвимости[править | править код]

Первая реализация DPAPI содержала критическую ошибку в логике, с помощью которой можно было расшифровать все зашифрованные объекты DPAPI без знания пароля владельца.

Windows 10 имеет критический недостаток в реализации DPAPI[2], который позволяет расшифровывать dpapi-зашифрованные данные последней активной учетной записи пользователя.

Применение[править | править код]

DPAPI получил очень широкое распространение и применяется во многих приложениях и подсистемах Windows: в системе шифрования файлов, для хранения беспроводных паролей сети, в диспетчере учетных записей, Internet Explorer, Google Chrome, Microsoft Outlook, Skype, Windows Vault, для защиты RSA ключей и т.д.

Примечания[править | править код]

  1. Секреты DPAPI. Дата обращения: 26 июля 2019. Архивировано 26 апреля 2022 года.
  2. Уязвимость в системе безопасности DPAPI Windows 10.

Ссылки[править | править код]

Windows Data Protection (англ.). MSDN Library. Microsoft (октябрь 2001). Дата обращения: 27 июля 2012. Архивировано из оригинала 30 сентября 2012 года.