tl; dr: Этот вопрос основан на недоразумении. Хеширование на стороне клиента не повышает безопасность и поэтому не поддерживается.
Если у клиента будет sh пароль, ha sh будет выполнять роль пароля: Кто-то, кто перехватывает трафик c, может увидеть ha sh и использовать его позже для аутентификации.
Это главная причина, по которой у клиентов нет sh паролей. Чтобы защитить ваш пароль во время транспортировки, используйте TLS (но, похоже, что он у вас уже есть).
В общем, пароль - это ключ симметричный c, который выбирается одной стороной (обычно клиент, при регистрации аккаунта). При использовании этого типа секрета для аутентификации невозможно избежать его передачи в какой-то момент. Единственные способы обойти это:
- Не позволяйте ни одной стороне выбрать секрет; вместо этого согласен на секрет. Это называется «обмен ключами». Один известный метод - обмен ключами Диффи-Хеллмана . В этом случае сам ключ никогда не передается, хотя обе стороны знают это. (Однако обратите внимание, что это не помогает при аутентификации, поскольку не говорит вам, с кем вы соглашаетесь с ключом; это только помогает установить sh одноразовый ключ шифрования сеанса.)
- Не используйте симметричные c ключи, но используйте пару ключей, состоящую из частного и открытого ключа c. Затем вы можете передать ключ publi c без ущерба для безопасности и использовать другую схему аутентификации (например, сервер может попросить клиента подписать запрос; в случае успеха сервер может сделать вывод, что клиент владеет частным ключ, без необходимости иметь его на сервере).
Как видите, оба метода добавляют много дополнительной сложности, и оба они обычно не подходят для прямой аутентификации конечного пользователя.
Аналогично, хеширование на стороне клиента также добавляет гораздо больше сложности, чем может показаться на первый взгляд. Открытые вопросы включают, например, какую соль использовать, как передать соль et c. И снова, даже если на эти вопросы ответят и какое-то сложное решение будет реализовано, передаваемый ha sh все же позволит злоумышленнику «посередине» выдать себя за клиента, просто повторно используя ha sh.
В общем, хеширование на стороне клиента не является улучшением безопасности, и альтернативы, которые избегают симметричных секретов c (известных обеим сторонам) или избегают секретной передачи, также не решают проблему. Таким образом, современное решение заключается в том, чтобы фактически передавать пароль пользователя на сервер, заключенный в соединение TLS.