Компрометация хэша пароля
Прошу помочь с ответом на простой вопрос, поскольку немного запарился. Пусть сервер хранит хэши от клиентских паролей с каким-то рандомным вектором h(pass,R1) и пусть кто-то взломал сервер и прочитал эти хэши. Как правило утверждается, что хранение хэшей пароля на сервере спасает от компрометации пароля при взломе сервера, но вообще то не спасает от
поддельной аутентификации, поскольку когда придет время вычислять h(R2,h(pass,R1)) на стороне клиента и сервера, сравнивая результаты, то взломщик решит задачу правильно, поскольку украл h(pass,R1), а R2 ему предоставит сервер или он его подслушал. Тогда какой резон утверждать про "отсутствие компрометации пароля", когда по факту взломщик зная хэш пароля всё равно успешно проходит аутентификацию на сервере под именем клиента?
Если был получен доступ к базе (например, sql-inj), то при аутентификации на сервер будет передан пароль, и там будет посчитано h(pass,R1). Почему вы считаете, что h(R2,h(pass,R1)) должно считаться у клиента? Если так реализовано, то конечно, h(pass,R1) само никогда не меняется и является, в некотором смысле, незасоленным паролем.
комментариев: 11558 документов: 1036 редакций: 4118
Что-то типа «length extension attack»?
Удлиннения тут не причем, пример взят из статьи в Википедии,где много бестолковщины.
В общем, совместить хранение только хэша на сервере и передачу только хэша пароля клиентом не получится?
комментариев: 11558 документов: 1036 редакций: 4118
Храните на сервере H(H(P)). В этом случае переданный клиентом хэш H(P) хэшируется сервером ещё один раз и сравнивается с записью базе. При этом, опять же, компрометация базы не позволяет использовать её содержимое для аутентификации.