Вот то, что я получил для схемы входа в веб-приложение.
В базе данных будут присутствовать две соли и hmac (hmac (пароль, salt1), salt2).
Когда пользователь заходит на страницу входа, он получает salt1.
Если у него активирован javascript, вместо отправки обычного пароля он отправит hmac (пароль, salt1).
Если у него нет javascript, отправляется текстовый пароль.
Итак, на стороне сервера, при получении запроса на вход в систему, мы сначала проверяем, что отправлено (passwordSent) по hmac (passwordSent, salt2). Если это не работает, мы попробуем hmac (hmac (passwordSent, salt1), salt2).
Кто-то, получающий доступ к базе данных, не должен иметь возможности войти в систему с хэшами паролей, и я не думаю (но я могу ошибаться), что кратные значения hmacs уменьшают сопротивление хеш-функции.
Видит ли какой-нибудь хороший крипто-эксперт очевидную ошибку, которую я, возможно, совершил?