Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 А как работает pwdencrypt и pwdcompare  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
Всем привет!

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

ps Сомневаюсь, что можно гдето это почитать - но надежду не оставляю :)

select pwdencrypt('qwerty')

select pwdcompare('qwerty', 0x01001A050E12BCCAF8A10EAC067AC1E0963669A213CBD5170177)
select pwdcompare('qwerty', 0x0100AA2A2F1DA8F83301230E206A8C7158678F9C25BD5CD775AD)
13 окт 11, 07:56    [11431121]     Ответить | Цитировать Сообщить модератору
 Re: А как работает pwdencrypt и pwdcompare  [new]
aleks2
Guest
1. В MS SQL 2000 вапще забавно.
select pwdencrypt('qwerty')
select pwdencrypt('qwerty')
select pwdencrypt('qwerty')
генерируют одинаковые хеши. Ишо раз нажатие Execute - другие хэши. Причем если быстро нажимать - могут и пару раз одинаковые сгенериться.

2. В 2005 и 2008 отличаются. Но хеш, выработанный 2000-м, 2005 признает при сравнении. Наоборот - фиг.
3. Видимо введено для усложнения жизни хакеров, шоб невидно было ОДИНАКОВОСТЬ паролей пользователей.
4. Ну а механизм генерации вряд ли скажут. Можна тока почитать общую теорию этого дела - вдруг там написано.

Вот тута слегка описано
http://msdn.microsoft.com/en-US/library/aa545602(v=CS.70).aspx
http://msdn.microsoft.com/en-US/library/aa545760(v=CS.70).aspx
13 окт 11, 09:38    [11431385]     Ответить | Цитировать Сообщить модератору
 Re: А как работает pwdencrypt и pwdcompare  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
Ну тут больше интерес не к механизму генерации, а к механизму pwdcompare... Если имеем разные хэши - то каким образом pwdcompare удается их сравнить. т.е. имея хэш - получить первоначальную строку не можем, а если из строки генерим хэш = получаем визуально разные хэши. Но не исключаю, что вносится некоторый элемент помехи, который теоретически наверное из хэша можно отсечь (читай имеем шифрованный хэш), а сами хэши в чистом виде одинаковы.

Развивая тему, задаем вопрос, как внести элемент помехи. Ну логично использовать чтото похожее на открытый ключ, например с меткой времени (чтобы иметь визуально разные значения). Но тогда получается, что существует некий закрытый ключ внутри сервера. Учитывая что хэши одинаково воспринимаются на разных серверах, то получается вывод, что этот закрытый ключ не генерится при установке, а является константой. Получается дырка, которую врядле сталибы делать. И тут логические рассуждения приходят в тупик (я знаю, что ни чего не знаю :) ).

ps Статьи MSDN ща гляну, спасибо.
13 окт 11, 10:32    [11431680]     Ответить | Цитировать Сообщить модератору
 Re: А как работает pwdencrypt и pwdcompare  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
Продолжаем развивать тему...

Статья, из рекомендованных aleks2, How to Hash Passwords:
2.Type code that generates random values based on UTF-16 encoding and the system time.

Это впринципе логично... правда статья про Commerce Server 2007, но допустим Microsoft не изобретает велосипеды. Тогда как это может работать:
строковый пароль на входе переводится в UTF-16 encoding, скрещивается с system time (хэши будут различаться, т.к. system time будет разным = логично). Но как сравнить? Тоже следуя логике прихожу к выводу, что для сравнения необходим некий ключик, в качестве этого ключика выступает пароль в текстовом виде. Ну допустим... тогда получается, что из хэша мы должны выделить (выкрестить ранее скрещенное) ту часть которая является "пароль в UTF-16 encoding" и останется у нас system time которое надо проверить на корректность. Вполне логично, но при таком подходе, есть у меня подозрения что в интернете много былобы про это написано статей типа "Inside Password Hash", но их нет... А цель - понять существующий принцип, считать достигнутой тоже нельзя.
14 окт 11, 08:41    [11438712]     Ответить | Цитировать Сообщить модератору
 Re: А как работает pwdencrypt и pwdcompare  [new]
aleks2
Guest
SanyL
А цель - понять существующий принцип, считать достигнутой тоже нельзя.


Чукча не читатель.
Там прямо сказано, что Salt (случайный параметр) тупо и незатейливо дописывается прямо в запись вместе с самим хэшем.
И при сравнении считывается оттуда, добавляется к сравниваемому паролю, исчисляется хэш и сравнивается с собственно хэшем
14 окт 11, 08:48    [11438732]     Ответить | Цитировать Сообщить модератору
 Re: А как работает pwdencrypt и pwdcompare  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
aleks2
SanyL
А цель - понять существующий принцип, считать достигнутой тоже нельзя.


Чукча не читатель.
Там прямо сказано, что Salt (случайный параметр) тупо и незатейливо дописывается прямо в запись вместе с самим хэшем.
И при сравнении считывается оттуда, добавляется к сравниваемому паролю, исчисляется хэш и сравнивается с собственно хэшем


Может и правда чукча :)

Hashing passwords is a way of taking a variable-length password and creating a cryptic, fixed-length password from it. You do this by generating and using a salt value. A salt value is a random value that you use to generate the hashed password.

4.Type code that hashes the password, puts it into an array of bytes, and returns the salt value plus the hashed password.


Ещебы понять какая часть хэша и есть этот парметр :)
14 окт 11, 09:19    [11438807]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить