Парадокс аутентификации WSSE

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

Я понял основу, и это ясно в моей голове.

Однако я сталкиваюсь с проблемой.

Допустим, я хочу сгенерировать ЕДИНСТВЕННЫЙ дайджест времени, мне нужно объединить временную метку, одноразовый номер и секретный пароль.

Однако на стороне сервера у меня нет открытого пароля, хранящегося в базе данных, поэтому я не могу проверить дайджест.

Переключение на сброс пароля не вариант.

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

Единственное решение, о котором я могу подумать, - это не хэшировать дайджест, а просто объединять данные и основывать их.

Таким образом, я смогу закодировать пароль пользователя, чтобы проверить его действительность.

Поскольку пароль передается в виде простого текста, он может быть небезопасным, но что, если я заставлю HTTPS аутентифицироваться?

Будет ли это безопасно?

1 ответ

Решение

Поскольку пароль передается в виде простого текста, он может быть небезопасным, но что, если я заставлю HTTPS аутентифицироваться?

Будет ли это безопасно?

Да, и в нормальных пределах это единственный способ обеспечить его безопасность.

Просто отправьте полный пароль, но отправьте его по хорошо защищенному соединению TLS. Вы можете использовать функцию получения безопасного ключа, такую ​​как brypt или PBKDF2, и ввести сохраненную случайную соль (по одному на пользователя) и пароль, чтобы получить "хеш", который затем можно будет проверить на тот, который хранится в базе данных.

Обратите внимание, что вам не нужно отправлять отметку времени от клиента. Это, конечно, хорошая идея - регистрировать и ограничивать количество попыток аутентификации. Вы не можете использовать метку времени в качестве входных данных для хэша, результат будет отличаться при каждом изменении метки времени.

Другие вопросы по тегам