Одноразовые соли и сравнение паролей серверов

Я читал, что один из наиболее безопасных способов аутентификации пользователя - использовать одноразовые соли при хешировании пароля. Чего я не понимаю:

Если клиент генерирует новую соль в каждом сеансе, разве полученный хэш соли + пароля не будет отличаться в каждом сеансе? Если да, то как сервер сможет сравнить отправленный пароль с сохраненным паролем? Есть ли способ, чтобы серверы сравнивали разные хэши и при этом могли определить, что был использован один и тот же пароль?

(Отказ от ответственности: я не пытаюсь изобретать колесо / писать протокол входа в систему (я знаю, я знаю: используйте SSL / TLS). Мне просто любопытно, как работают протоколы входа на высоком уровне)


person Gorkamorka    schedule 21.09.2011    source источник


Ответы (2)


Вам нужно только сгенерировать соль только один раз и может каждый раз при смене пароля.

Клиенту не нужно нигде хранить соль или даже знать об этом. Соль будет храниться на сервере вместе с хешем.

Рекомендуется хранить хэш и соль в двух разных базах данных.

person Prabath Siriwardena    schedule 22.09.2011
comment
Почему вы храните хэш и соль в двух базах данных? По сути, это будет то же самое, что разделить хеш-код и сохранить его половинки в отдельных базах данных. Для очень немногих атак он может защитить немного лучше, но я считаю, что это гораздо больше проблем, чем оно того стоит. - person Rob Napier; 22.09.2011
comment
Не существует такой вещи, которая называется «абсолютная безопасность». Это еще один шаг, чтобы держать злоумышленников в шаге от них .. - person Prabath Siriwardena; 22.09.2011
comment
Вы можете разделить ключ на три части и поместить его в три базы данных. Или по одной базе данных на байт. Вам нужно подумать о том, какая атака дает злоумышленнику доступ к одной базе данных, а не к другой. Это единственные атаки, от которых вы защищаетесь. Большинство атак такого типа не получают доступа только к одной базе данных. Они получают доступ к приложению или к машине. Вот почему я считаю эту сложность самой сложной, а не реальной безопасностью. - person Rob Napier; 22.09.2011
comment
Все дело в поиске баланса ... глубокоэшелонированной защиты - person Prabath Siriwardena; 22.09.2011

вы создаете новую соль только тогда, когда пользователь изначально устанавливает пароль. Затем вы сохраняете соль вместе с хешем пароля.

person mre666    schedule 21.09.2011
comment
Как клиент хранит соль? Как печенье? - person Gorkamorka; 22.09.2011
comment
клиент не хранит соль. клиент предоставляет имя пользователя и пароль, затем вы просматриваете соль и хэш, хешируете пароль с солью и проверяете, соответствует ли он хешу, который вы сохранили. - person mre666; 22.09.2011