2012-04-12 3 views
3

я знаю, что это можно проверить пользователя Windows (например, домен) учетные данные программно с помощью:Подтвердить пароль пользователя с помощью хэша?

Там пришло время, когда я хочу упорствовать те credentails.

Я использую Data Protection API (через CredUI API) для шифрования пароля. Это означает, что зашифрованные данные могут быть доступны только самим пользователем. Моя программа, работающая как пользователь, может затем расшифровать защищенные данные.

Но это также означает, что злонамеренная программа, работающая как пользователь, может расшифровать защищенные данные; украсть зашифрованные учетные данные пользователя.

Я знаю, что сама ОС Windows не хранит password пользователя. То, что они хранят, - это соленая и хешированная версия пароля; и формирует «общий секрет» между пользователем и Windows.

Есть ли API, который позволяет мне спрашивать Windows, если пароль пользователя действителен, когда я знаю соленый хэш пароля?

+0

Это не имеет отношения к вашему вопросу, но я не считаю, что хэши паролей солей в Windows. –

ответ

0

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

Посмотрите здесь, чтобы выяснить, как получить ключ от пароля

http://www.opensource.apple.com/source/Heimdal/Heimdal-172.18/kuser/kinit.c

Кстати, Kerberos не использует обычный соленые хэш пароля. Фактическая функция генерации ключей более активна, потому что сама парольная фраза не обладает достаточной энтропией для создания неопознанных ключей. Помните, что kerberos должен быть устойчив к атакам подслушивания.

0

Вы действительно не хотите хранить хэширование пароля Windows, поскольку, как было указано, хеш может использоваться для олицетворения пользователя, если контроллер домена присутствует. По сути, знание фактического ключа в Kerberos так же плохо, как знание пароля для злоумышленника. Вместо этого вам нужно солить пароль с другой солью, чем Windows будет использовать и хранить это. Я бы рекомендовал искать реализацию хорошего хэша паролей, такого как PBKDF2, и использовать его. См. Wikipedia's список реализаций. Для получения информации о том, что Kerberos делает для соления паролей, см. RFC 3962. Windows использует этот процесс для AES и использует другой процесс для NTLM и для Kerberos RC4.

Я достаточно уверен, что нет открытого API API, который позволяет сравнивать пароли, хранящиеся в Kerberos. Я менее знаком с API NTLM.

+0

Я действительно не хочу хранить хеш пароля Windows (зашифрован). Но сейчас я храню сам пароль Windows (зашифрован). я предпочел бы хранить какой-то абстрактный * «токен» *, а не пароль.Секретность пароля человека важнее, чем возможность выдавать себя за них (мне все равно, можете ли вы выдавать мои учетные данные на моем домене), но я потеряю рассудок, если вы знаете мой * личный частный * пароль). –

+0

Уверен, и я указал вам на решение, которое, по крайней мере, соответствует вашим ограничениям, как вы их заявили. –

Смежные вопросы