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