@unsafePtr

Как аутентифицировать пользователя используя HMAC?

Здравствуйте. Никак не придумать осмысленную аутентификация в вебе. Всё упирается в приватный ключ. Он должен быть известен и и клиенту и серверу, мало того должен быть известен и алгоритм шифрования. Вопрос в том как безопасно передать ключ клиенту с сервера, к тому же клиент должен где-то безопасно хранить этот ключ. Как это можно реализовать в вебе? Ведь клиент получается должен знать уже секретный ключ, а если предоставлять ему этот ключ после аутентификации, то тогда надобность в HMAC просто отпадает. Пожалуйста приведите пример использования HMAC.
  • Вопрос задан
  • 220 просмотров
Решения вопроса 2
sergiks
@sergiks Куратор тега Алгоритмы
♬♬
Пример использования – ВКонтакте и его iFrame приложения. Когда пользователь запускает приложение, нажав ссылку в ВК, открывается iframe сервера разработчика. ВК отправляет туда пользователя с некоторыми параметрами – среди них id пользователя ВКонтакте и прочие. И подпись (параметр auth_key), вычисляемый как md5 хэш от параметров, которые важно защитить от подделки пользователем, и «секрета» приложения.

Т.е. схема приемлема, когда есть три стороны: сервер ВК, сервер приложения и «ненадёжный» юзер, который, возможно, захочет подделать передаваемые от ВК приложению параметры. «Секрет» известен только серверу ВК и серверу приложения. Вычисляемый на его основе хэш гарантирует целостность и неподдельность данных.

В вашем случае HMAC имел бы смысл в схеме, например, аутентификации пользователя на одном сервере для работы на другом. Секретный ключ раскрывать пользователю, разумеется, не нужно.
Ответ написан
Комментировать
Сервер направляет клиенту в момент аутентификации уникальное случайное число, например, текущее время с точностью до секунды, сконкатенированное с порядковым номером текущего запроса с момента старта сервера.
Клиент возвращает его же, "подписанное" HMAC на своем приватном ключе. Сервер проверяет: 1) то ли число вернул клиент, что он ему отправил, и 2) корректность HMAC (используя для проверки сохраненный на его стороне экземпляр приватного ключа данного пользователя). Если обе проверки сошлись, пользователь считается успешно аутентифицированным.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы