TOTP: может ли кто-нибудь использовать тот же OTP в течение 30 секунд и использовать его неправильно - PullRequest
0 голосов
/ 04 февраля 2020

В моем python проекте я планирую использовать TOTP.

Новый пользователь вводит свою электронную почту. Затем он получает OTP, сгенерированный с помощью TOTP.

import pyotp
totp = pyotp.TOTP('base32secret3232')
totp.now() # => '492039'

OTP действителен в течение 30 с.

Теперь можно ввести поддельное электронное письмо и использовать тот же OTP, который будет действовать до 30 с.

totp.verify('492039') # => True

Итак, как защититься от таких вещей.

До адрес электронной почты пользователя подтвержден. Я не хочу сохранять первого пользователя в базе данных

1 Ответ

2 голосов
/ 04 февраля 2020

Из документов PyOTP :

Как минимум, разработчики приложений должны следовать этому контрольному списку:

...

  • Запретите атаки воспроизведения путем отклонения одноразовых паролей, которые использовались клиентом (для этого требуется сохранить в вашей базе данных самую последнюю аутентифицированную метку времени, OTP или ha sh OTP, и отклонить OTP при обнаружении совпадения )

...

Поэтому при использовании TOTP вы должны что-то хранить. Обойти это невозможно.

Также обратите внимание, что 30-е годы - довольно короткое время для OTP на основе электронной почты. Если почтовый сервер работает немного медленнее, срок действия OTP истекает.


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

Теоретически, нет даже причины для шифрования; Подписание будет служить цели. Но клиенту не нужно знать содержимое URL, поэтому мы могли бы не раскрывать его.

...