Шесть цифр, которые меняются каждые полминуты
TOTP, Time-based One-Time Password, это одноразовый пароль на основе времени, описанный в стандарте RFC 6238. Именно такие коды показывают приложения-аутентификаторы: шесть цифр, меняющиеся примерно раз в тридцать секунд. Для работы им не нужен интернет, потому что код вычисляется на самом устройстве.
При включении защиты сервис показывает QR-код или строку-секрет. Вы добавляете её в приложение, и с этого момента сервер и телефон знают общий ключ. Потом при каждом входе вы вводите текущий код вместе с паролем.
Из чего получается код
Сервер и приложение берут общий секрет и текущее время, округлённое до шага в тридцать секунд, и пропускают их через криптографическую функцию HMAC. Из результата выбирается короткая часть и превращается в шестизначное число. Поскольку часы у обоих сторон одинаковые, коды совпадают, хотя ничего между ними не передаётся.
Из этого следуют практические выводы. Время на телефоне должно быть точным: расхождение больше допуска сервера приведёт к отказам, и в приложениях есть функция коррекции синхронизации времени. Сервер обычно принимает код соседнего шага, чтобы компенсировать небольшой сдвиг и задержку при вводе.
Где TOTP лучше и где хуже SMS
Главное преимущество перед SMS в независимости от телефонного номера. Подмена SIM-карты или перехват сообщения ничего не дают, потому что код не пересылается. Нет зависимости от покрытия сети: код доступен и в самолёте. Настройка проста для сервиса и стандартизирована, поэтому один и тот же аутентификатор работает с множеством сайтов.
Слабости остаются. Секрет хранится на телефоне, и заражение устройства или потеря без резервной копии создают проблему. TOTP, как и любой код, вводимый человеком, уязвим к фишингу: фальшивый сайт просит код и мгновенно использует его на настоящем. Здесь надёжнее аппаратные ключи и passkey.
Настройка и перенос
Практический порядок такой. Включите двухфакторную защиту в настройках сервиса, отсканируйте QR-код приложением, введите первый код для подтверждения и обязательно сохраните резервные коды. Если приложение поддерживает синхронизацию или экспорт, настройте резервное копирование заранее: без него смена телефона превращается в восстановление каждого аккаунта отдельно.
При переезде на новое устройство лучше сначала перенести записи и проверить входы, а старый телефон стирать потом. Никогда не публикуйте QR-код и не сохраняйте его снимок экрана в общедоступных местах: он содержит тот самый секретный ключ.
Что проверить у себя
Загляните в приложение-аутентификатор и посмотрите, какие сервисы там записаны. Убедитесь, что для каждого важного аккаунта у вас есть резервные коды или второй способ входа. Проверьте, что время на телефоне включено на автоматическую установку по сети.
Если код систематически не принимается, причина чаще всего в рассинхронизации времени, реже в вводе кода соседнего аккаунта с похожим названием. Сначала проверьте эти два пункта, а уже потом подозревайте сервис.
Выбор приложения и типичные ошибки
Приложений-аутентификаторов много, и хорошие среди них поддерживают одни и те же стандарты, так что выбор сводится к удобству. Обратите внимание на возможность зашифрованного резервного копирования, блокировку приложения биометрией или PIN-кодом, экспорт данных. Хранить коды в приложении, у которого нет ни блокировки, ни резервной копии, рискованно.
Среди ошибок чаще всего встречаются такие. Пользователь делает снимок экрана с QR-кодом и забывает его в галерее. Записи в приложении называются одинаково, и человек вводит не тот код. Смена телефона происходит без переноса записей, а старое устройство уже сброшено. Каждую из ошибок легко исключить: используйте разные понятные названия, храните резервные коды и переносите записи заранее.
Проверьте, что вы понимаете, как войти при потере телефона: где лежат резервные коды, на какой почте настроено восстановление и кто ещё может подтвердить вашу личность. Этот сценарий лучше отработать спокойно, а не в момент, когда доступ уже нужен срочно.