Использование HMAC для уже хэшированного значения, хорошая или плохая практика? - PullRequest
0 голосов
/ 13 июля 2011

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

То, что я хотел бы сделать, было бы примерно так, в php.

$val = hash_hmac('sha256', md5($password), $salt);

Причина этогоявляется то, что мы аутентифицируемся с доверенным партнером через закрытый API.Пароли хранятся в виде хеша MD5 в нашей БД.Однако я не хочу, чтобы наш партнер отправлял это же значение через сеть.

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

Что вы говорите?

1 Ответ

0 голосов
/ 13 июля 2011

Прежде всего, это пароль пользователя (т. Е. Вы авторизуетесь от имени пользователя) или общий секрет между двумя серверами?

Если это пароль пользователя, остановитесь. Вы сохраняете пароли в виде открытого текста (или как несоленый md5). В любом случае это плохо. Сохраните пароли как соленый хеш и используйте вместо этого OAuth или что-то еще для аутентификации.

Если это общий секрет между двумя серверами (не представляющий пользователя), вы все равно можете использовать oauth или что-то еще, но если вы просто хотите что-то простое, вы должны аутентифицироваться следующим образом:

$val = hash_hmac('sha256', $nonce, $secret);

$nonce - это одноразовое значение, выбранное сервером случайным образом для предотвращения атак воспроизведения.

Имейте в виду, что если у вас нет одноразового номера, то любое значение, которое вы отправляете через , является вашим общим секретом. Не имеет значения, производите ли вы его от hmac md5 или чего-то еще; если он оказывается одинаковым каждый раз, он эквивалентен паролю, отправленному по каналу связи. И не забудьте также защитить канал связи от MITM!

...