Если клиент просто отправляет хешированный пароль, то хешированный пароль равен «пароль»: последовательность байтов, которую клиенту просто необходимо показать для аутентификации. Если злоумышленник может прослушать это, ваш протокол обречен.
Если протокол аутентификации состоит в том, чтобы просто представить фрагмент секретных данных (если хотите, назовите его паролем), то обмен должен происходить в транспортной среде, которая обеспечивает конфиденциальность (чтобы секретные данные не могли быть прослушаны), и на сервере. аутентификация (чтобы злоумышленник не мог имитировать сервер и убедить клиента отправить ему секретные данные). Это то, что вы получаете из классического туннеля SSL / TLS (https://
URL, в веб-контексте).
Если вы не можете установить туннель SSL / TLS с аутентификацией сервера (т. Е. У сервера есть сертификат, который клиент может проверить), то вы можете прибегнуть к протоколу аутентификации с проблемой: сервер отправляет случайную последовательность байты (вызов), и клиент отвечает хеш-значением, вычисленным по соединению пароля и запроса. Не пытайтесь повторить это дома! Это очень сложно сделать правильно, особенно когда злоумышленник может перехватить связь (активные атаки).
Более общий ответ - обмен ключами с аутентификацией по паролю протоколы. PAKE объединяет протокол соглашения о криптографическом ключе (например, Диффи-Хеллмана) и взаимную аутентификацию по паролю между клиентом и сервером таким образом, что побеждает как пассивных, так и активных злоумышленников, даже при относительно слабых паролях (злоумышленник не может получить достаточно данных для «попытки») пароли без взаимодействия с клиентом или сервером для каждой догадки). К сожалению, несколько алгоритмов PAKE были стандартизированы за пределами математического описания, и область является открытым минным полем.