Появилась задача сделать аутентификацию по смс. Для этих целей решил использовать одноразовый пароль на основе времени (TOTP) и PHP библиотеку - Spomky-Labs / otphp. Пока играюсь с ней, чтобы понять суть работы, написал код для тестирования:
$otp = TOTP::create('ggg');
echo $otp->verify($_GET['code']);
echo $otp->now();
echo '
<form action="index.php" method="GET">
<input name="code" type="text">
</form>
';
Есть пару моментов, которые мне не понятны:
1) Каким образом работает алгоритм TOTP? Я праильно понимаю что он берет secret (в данном случае "ggg") и для каждого отрезка времени рассчитывает пароль, что-то вроде:
12 минут 0 секунд - пароль 234567
12 минут 30 секунд - пароль 534234
2) Правильно ли я понимаю, что зная secret можно рассчитать каким будет пароль в какой-то отрезок времени в будущем, например в 16:40
3) И последний третий вопрос. Заметил что пароль меняется независимо от времени запуска скрипта. Если оставить время действия пароля по умолчанию (30 секунд) он будет меняться в 12:30, 13:00, 13:30, 14:00 ....
То есть если пользователь запросит пароль в 13:59 у него будет не 30 секунд на ввод а всего одна секунда. Как с этим можно бороться?
Заранее спасибо.