Можно ли проверить хеш пароля по другому хешу пароля? - PullRequest
0 голосов
/ 02 февраля 2011

Рассмотрим следующее взаимодействие:

Пользователь сохраняет свое имя пользователя и пароль на веб-сервере.В целях безопасности сервер записывает хэш пароля и некоторую уникальную соль.

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

Таким образом, у вас есть следующая информация на сервере, и вам нужно знать, является ли запрос аутентичным:

  • Соль сервера
  • Хешированный пароль сервера
  • Соль клиента
  • Хешированный пароль клиента

Еще раз ... клиент отправляет: clientSalt + MD5(clientSalt + password).Сервер имеет serverSalt + MD5(serverSalt + password).Я не хочу знать пароль, я просто хочу знать, были ли хэши рассчитаны по тому же паролю.

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

Моя цель - разрешить некоторую форму безопасной аутентификации в среде клиент-сервер без обмена действительным паролем по проводам.У меня есть только одна идея, но я даже не знаю, возможно ли это.

Ответы [ 6 ]

4 голосов
/ 02 февраля 2011

Это потребует отмены хеширования пароля, что невозможно.Если сервер получает: salt, md5sum, он не может видеть, что вошло в сумму md5.

Вместо этого будет работать протокол запроса-ответа.Сервер должен сгенерировать случайное значение nonce и отправить его клиенту.Клиент вычисляет md5(md5(password) | nonce)) и возвращает его на сервер.Сервер проверяет, проверяя md5(storedpassword | nonce).

1 голос
/ 02 февраля 2011

Аутентификация с вызовом-ответом - это, вероятно, способ, возможно, с использованием Kerberos , в зависимости от ваших компромиссов.Одним из компромиссов является возможность для злоумышленников, контролирующих клиентов, использовать скомпрометированные хеши для аутентификации.

Не изобретайте свои собственные криптографические протоколы.Используйте тот, который хорошо известен и хорошо проверен.Если возможно, используйте существующую (проверенную) реализацию.

1 голос
/ 02 февраля 2011

Нет, вы не можете этого сделать.

Как только вы добавляете соль в смесь, становится практически невозможно сравнивать хэши. (Для этого потребуется как-то «не хэшировать» эти хэши, прежде чем сравнивать «не хэшированные» данные.)

0 голосов
/ 02 февраля 2011

Вы не сможете проверить хэш с этой настройкой.Если вы не хотите, чтобы кто-то видел пароль, просто перейдите по протоколу SSL.Если вы не хотите использовать SSL, вы можете проверить SRP.Дополнительно: не используйте MD5 + Salt для хранения пароля, используйте функции усиления ключа, такие как bcrypt или scrypt.

0 голосов
/ 02 февраля 2011

Это невозможно.Если вы не храните пароль на сервере, пользователь должен предоставить его.

ИЛИ

Если вы храните пароль на сервере, пользователь может предоставить хэш, рассчитанный с использованием запрошенной соли.

0 голосов
/ 02 февраля 2011

Моя цель - разрешить некоторую форму безопасной аутентификации в среде клиент-сервер без обмена действительным паролем по проводам.У меня есть только одна идея, но я даже не знаю, возможно ли это.

Для этого я советую заглянуть в Kerberos: Официальный сайт и Wikipedia

...