Ответ 1
Есть ли способ использовать одностороннее шифрование общего секретного ключа OTP...?
Не совсем. Вы можете использовать обратимый механизм шифрования, но, вероятно, не так много.
Вы можете использовать только хеш HMAC на сервере, если клиент аутентифицирован, отправив полный unhashed ключ HMAC по сети, который обычно как работает аутентификация на основе пароля, но это будет уязвимо для повторных атак, что именно то, что рекомендуется для HOTP/TOTP.
почему мы применяем одностороннюю функцию к паролю перед его хранением (соль + хеш)...?
Это действительно хороший вопрос.
Я думаю, что это связано с тем, что ранние версии операционной системы Unix сохраняли всю свою информацию о пароле в "читаемом мире" файле /etc/passwd
, поэтому они явно должны были быть запутаны каким-то образом, а salt + hash просто оказался методом, который они выбрали.
В настоящее время, как правило, не делается доступ к их файлу паролей, поэтому нет необходимости вообще их хешировать.
Однако есть еще одна причина для их обфускации, а именно, что пароли обычно выбираются людьми, поэтому для удобства они часто выбирают один и тот же пароль для нескольких систем. Я сомневаюсь, что это верно и для ключей HMAC, которые (надеюсь) выбраны с использованием криптографически более сильного механизма.
Итак, главная причина для хэширования пароля в настоящее время - это не столько повысить безопасность вашей системы, сколько снизить риск нарушения безопасности ваших пользователей в других системах, если ваш система была скомпрометирована.
Если злоумышленник может читать пароль незашифрованного текста из вашей системы, он, вероятно, не очень им подходит, потому что, возможно, они все равно могут читать все остальное в системе.
Но если один и тот же пароль использовался и в другой системе, то вы потенциально дали злоумышленнику средства для компрометации этой системы.
Если бы людям можно было доверять не использовать один и тот же пароль для нескольких систем, то, вероятно, им не понадобилось бы хэшировать их вообще, но я думаю, что несколько оптимистично предположить, что это когда-либо произойдет.: -)