Я столкнулся с двухфакторным механизмом входа в систему, использующим OTP на основе времени (TOTP). TOTP (6 цифр) отображается пользователю в приложении.
Есть два способа входа в систему.
Способ 1:
Пользователь вводит имя пользователя и пароль. Затем утверждает уведомление о входе, полученное в приложении TOTP. В этом случае нет необходимости вводить TOTP.
имя пользователя = имя пользователя
пароль = пароль
Способ 2:
Пользователь вводит комбинацию пароля и TOTP из приложения в качестве пароля. В этом случае уведомление в приложение не поступает.
имя пользователя = имя пользователя
пароль = пароль + TOTP (6 цифр)
Имя пользователя и пароль отправляются через TLS.
На стороне сервера я предполагаю, что они отделяют последние 6 цифр от полученного значения пароля и проверяют, соответствует ли оно TOTP (а затем сопоставляют остальную часть строки с сохраненным паролем).
В противном случае они хешируют полный пароль и сопоставляют его со значением, хранящимся в базе данных (при условии, что пароли не хранятся в виде обычного текста). Если он совпадает, на устройство пользователя отправляется уведомление.
Какие могут быть возможные проблемы или криптографические недостатки в этой системе?