Насколько защищен ProtectedData.Protect(DPAPI)?
Предположим, кто-то получает доступ ко всему моему жесткому диску, я думаю, что слабым местом будет мой пароль для Windows. Не зная/будучи в состоянии получить это, данные должны быть в значительной степени безопасными, не так ли?
Я спрашиваю конкретно из-за записи EFS в wikipedia, в которой говорится, что
В Windows 2000 локальный администратор является агентом по восстановлению данных по умолчанию, способным дешифровать все файлы, зашифрованные EFS любым локальным пользователем.
и EFS используется DPAPI. То же самое относится к моим собственным данным, защищенным с помощью этого:
ProtectedData.Protect(plain, null, DataProtectionScope.CurrentUser);
И если это действительно так, как я могу его предотвратить?
[Изменить] N.B. Я пытаюсь сохранить учетные данные для приложения winforms, чтобы пользователь не вводил свой пароль при каждом входе в систему. Другими словами, если кто-то может войти в систему как пользователь (т.е. Знать пароль пользователя), тогда они могут также прочитать прочитанные зашифрованные данные.
Что - не из фона Windows - теперь заставляет меня задаться вопросом - не может ли локальный администратор войти как любой локальный пользователь в любом случае? В этом случае я не должен беспокоиться о том, что администратор может получать пароли в любом случае...
[Edit2] Как показывает Google, он выглядит как администратор не может просто войти в систему как любой пользователь, не сначала перезагружая/меняя свой пароль. Поэтому мой вопрос по-прежнему кажется актуальным...
Ответы
Ответ 1
EFS использует DPAPI, а не наоборот. Администратор не может читать ваш ключ именно так.
Прежде чем забыть о DPAPI, я бы рассмотрел альтернативы. Если вы зашифруете файл самостоятельно,
- Вы должны выбрать сильный алгоритм и реализовать его хорошо.
- Вам понадобится ключ. Где это будет?
- Вы сохраните ключ в файле где-нибудь на своем диске.
- Этот ключ чувствителен, очевидно, вы захотите его зашифровать.
- Перейти к 1
DPAPI делает от 1 до 3 скважин. 4 и 5 являются спорными. Если для защиты данных недостаточно пароля Windows, спросите себя, почему этого достаточно, чтобы CRUD данные.
Для обеспечения большей безопасности вы можете не сохранять данные, а использовать (соленый) хэш, если это возможно. Тем не менее, это заставляет ваши данные писать. Например, если вы хотите проверить номер лицензии клиента:
- Сохранить соленое значение хэша
- Запустите тот же хеш на указанном лицензионном номере, который вы хотите проверить,
- Сравните два. Это они совпадают, лицензия действительна.
Если вам нужно прочитать зашифрованные данные, а локально зашифрованного ключа недостаточно, подумайте о шифровании ключа приложения (шаг 2 выше) с помощью закрытого ключа, хранящегося на смарт-карте.
В любом случае, помните, что все происходит. Вам всегда нужен резервный ключ.
Ответ 2
См. в этой статье о безопасности DPAPI. В принципе, он такой же безопасный, как ваш пароль Windows - если ваш пароль reset у администратора, ключ дешифрования будет потерян. Основные атак, которые вам понадобятся, следующие:
- Раскрытие пароля: "плечо серфинга", липкие заметки и т.д.
- Захват базы данных учетных записей компьютеров и использование взломщика паролей
- Онлайн-атака с помощью "загрузки при загрузке", сменного носителя AutoPlay и т.д.
- Захват пароля reset, если вы сделали один
- Физическая установка устройства регистрации ключей или другой "ошибки"
Ответ 3
DPAPI может использоваться как с дополнительной энтропией, так и без нее. Есть только два способа:
без может быть скомпрометирована дополнительная энтропия:
-
Администратор домена может в любой момент получить любую историю основных ключей DPAPI. Больше ничего не требуется. Они могут использоваться для дешифрования всех блоков. Локальные администраторы не могут этого сделать.
-
Учетные данные пользователя Windows скомпрометированы.
Если вы используете дополнительную энтропию, данные не могут быть дешифрованы кем-либо, который не знает значения. Энтропия может быть получена из пароля, необходимого для запуска приложения и т.д. Без значения данные теряются навсегда.
EFS работает по-разному. пользовательский ключ защищен с помощью DPAPI для своего профиля, но ключ дешифрования для самого файла дополнительно напрямую шифруется открытым ключом администратора. Поэтому администратор домена может получить доступ к файлам.