Здравствуйте, Marty, Вы писали:
CF>>Только придётся перевести часы назад ещё и на сервере. Тогда примет, да.
M>А как сервер воспримет то, что у него почему-то на будущее в базе лежат кучи кодов, которые он вроде бы пока ещё не должен был бы генерить?
M>Ну, и так-то, я тут как раз не так давно немного разбирался со слетевшей 2FA на гитхабе, я так понимаю, там эти пароли генерятся на небольшое временное окно, три-четыре пароля на последние несколько 30 сек интервалов — скорее всего, это всё в оперативе лежит в каком-нибудь мем-кеше, и быстро удаляется. Так что даже завладев серваком и переставив там время, вряд ли что-то получится сделать
Я имел в виду, переставить время, а после этого залогиниться, чтобы сервер запросил у клиента код. Для этого серверу надо будет сгенерить код по текущему (отстающему) времени, и злоумышленник сможет повторно послать код, перехваченный с клиента в прошлом, когда время было таким, как сейчас на сервере. И поскольку код получится одинаковым, сервер его примет.
Никакие кэши тут не нужны. Зачем? Пользователи не так часто логинятся, чтобы это требовалось кэшировать, а у разных аккаунтов секреты разные, так что и коды будут получаться у каждого свои. А то, что коды из будущего — во-первых, сервер знать не знает, из какого они времени. Сгенерировал коды, сравнил с клиентским вводом, дал разрешение или отлуп, а из какого они там времени, его не колышет. Более того, сервер в любом случае будет генерировать коды из будущего, так как рекомендуется принимать код из текущего интервала, предыдущего и следующего (чтобы не падать при малейшем рассинхроне времени и корректно принимать коды, сгенерированные на границе интервала).
Естественно, от перевода времени могут быть всякие странные последствия (в зависимости от структуры кода и базы данных), но к TOTP это уже отношения не имеет.
И в любом случае, это был чисто умозрительный пример. Если уж мы заполучили доступ к серваку с привилегиями, достаточными для смены текущего времени, то с большой вероятностью у нас уже есть доступ к коду движка и базе данных, а там хранятся все секретные коды для TOTP в сыром виде (хэшировать нельзя, для генерации кода нужен оригинал). И тогда нам нафиг не сдалось куда-то перематывать время, мы можем просто генерировать актуальные коды и по текущему времени. И более того, даже сами эти коды нам уже будут совершенно не нужны.