DPAPI: использование CryptUnprotect до входа пользователя в систему
Я использую DPAPI для хранения данных XML. Данные после CryptProtectData хранятся в файле. В одном из моих вариантов использования эти данные должны быть дешифрованы до того, как любой пользователь войдет на рабочую станцию. Поскольку я не могу использовать пользовательский ключ в этом, я устанавливаю флаг "CRYPTPROTECT_LOCAL_MACHINE" во время шифрования. Энтропийный ключ - это статический текст.
Unprotect работает во всех сценариях, кроме случаев, когда я вызываю его перед входом в систему (ни один пользователь не вошел в систему). Его возвращающая ошибка 87 (параметр неверен).
Я перечитываю всю документацию DPAPI, чтобы узнать, как генерируются ключи. Но, к сожалению, информации об этом конкретном флаге недостаточно.
Будет ли CryptUnprotectData работать в этом сценарии вообще? Может ли это быть вызвано приложениями, которые выполняются под некоторым сеансом пользователя? Любая помощь приветствуется.
Спасибо,
D
Ответы
Ответ 1
Мы используем DPAPI для хранения пароля, требуемого службой:
Служба запускается, когда машина загружается (то есть перед входом в систему); все работает нормально.
Ответ 2
Документация Microsoft действительно расплывчата в этом вопросе. Passcape сделал очень хорошую рецензию под названием DPAPI Secrets.
Соответствующий раздел для вашего вопроса Восстановление паролей беспроводного подключения в Windows 7, в котором подробно описаны данные, необходимые для дешифрования:
- "Главный ключ системы из папки
E:/Windows/System32/Microsoft/Protect/S-1-5-18/User
"
- Два файла реестра: "SYSTEM" и "SECURITY"
Основываясь на именах, я не удивлюсь, если эти файлы будут защищены операционной системой и доступны только для входа в систему, хотя кто-то еще сможет подтвердить.