Парадокс аутентификации WSSE
В настоящее время я провожу некоторые исследования протокола WSSE для защиты моего API.
Я понял основу, и это ясно в моей голове.
Однако я сталкиваюсь с проблемой.
Допустим, я хочу сгенерировать ЕДИНСТВЕННЫЙ дайджест времени, мне нужно объединить временную метку, одноразовый номер и секретный пароль.
Однако на стороне сервера у меня нет открытого пароля, хранящегося в базе данных, поэтому я не могу проверить дайджест.
Переключение на сброс пароля не вариант.
Я не могу предоставить клиенту алгоритм, используемый для хэширования пароля, потому что они используют соль, а соль недоступна для клиента.
Единственное решение, о котором я могу подумать, - это не хэшировать дайджест, а просто объединять данные и основывать их.
Таким образом, я смогу закодировать пароль пользователя, чтобы проверить его действительность.
Поскольку пароль передается в виде простого текста, он может быть небезопасным, но что, если я заставлю HTTPS аутентифицироваться?
Будет ли это безопасно?
1 ответ
Поскольку пароль передается в виде простого текста, он может быть небезопасным, но что, если я заставлю HTTPS аутентифицироваться?
Будет ли это безопасно?
Да, и в нормальных пределах это единственный способ обеспечить его безопасность.
Просто отправьте полный пароль, но отправьте его по хорошо защищенному соединению TLS. Вы можете использовать функцию получения безопасного ключа, такую как brypt или PBKDF2, и ввести сохраненную случайную соль (по одному на пользователя) и пароль, чтобы получить "хеш", который затем можно будет проверить на тот, который хранится в базе данных.
Обратите внимание, что вам не нужно отправлять отметку времени от клиента. Это, конечно, хорошая идея - регистрировать и ограничивать количество попыток аутентификации. Вы не можете использовать метку времени в качестве входных данных для хэша, результат будет отличаться при каждом изменении метки времени.