Re: Авторизация

Pavel V. pavel2000 at ngs.ru
Thu Jan 23 10:28:20 UTC 2014


Здравствуйте, Михаил.

Вы писали 23 января 2014 г., 15:35:37:

> Здравствуйте, Pavel.

>>>> Всё просто. Суёшь в авторизационную куку логин пользователя и хэш.
>>>> А  на  стороне  сервера  считаешь хэш от логина, пароля, подсети и
>>>> salt и смотришь, равен ли он тому, что пришёл в куках.

>>> Я  не  специалист по криптографии, но насколько понимаю просто хэша
>>> тут недостаточно, нужен HMAC.
>>> В инете на эту тему за 5 минут нашел только такую статью:
>>> http://rdist.root.org/2009/10/29/stop-using-unsafe-keyed-hashes-use-hmac/

>>> Но встречал и более наглядные объяснения, почему нельзя в куке для 
>>> авторизации хранить просто хэш и нужен именно HMAC.

>> Кто-нибудь может кинуть ссылку на более наглядные объяснения с более
>> человекопонятной  схемой,  как  это ломается? Либо может быть кто-то
>> разъяснит  "на  пальцах", как злоумышленник, имея одну или несколько
>> пар  "userId  + keyedhash" сможет сгенерировать пару "admin_userId +
>> valid_keyedhash"?

> Как  ломается,  сам  пока  не  разобрался.  Но  атака ведётся на поиск
> константной строки, которая конкатенируется к данным (в Вашем случае к
> userId  ).  Когда  она  или  её  замена  найдены, то берётся админский
> userID,  найденная  строка  и получается подпись для админа. Далее она
> суётся в куку вместе с id админа и у юзера права админа.

Хорошо. Т.е. если на сервере проверка при этом делается по схеме

- Получили из куки userId
- Получили некий зависимый от userId идентификатор, например номер телефона
- вычислили HashFunction( userId, StaticOrRollingKey, GetSomeUserData(userId))
- сравнили хеш из куки и и вычисленный

то такая схема "более безопасна" и относительно стойка к вышеприведенной атаке?

Но из-за наличия функции GetSomeUserData(), обращающейся к некоему центральному хранилищу,
хеширование можно заменить на "rand()" и с тем же успехом начать хранить в хранилище
непосредственно значение этой авторизационной куки.
Правда получится разница из-за наличия некоторого объема записи в хранилище сессий.





-- 
С уважением,
 Pavel                          mailto:pavel2000 at ngs.ru



Подробная информация о списке рассылки nginx-ru