Войдите в VPN-клиент, который сначала запрашивает пароль, а затем шестизначный код, и два запроса выглядят как два независимых барьера. Если считать по типу фактора, так и есть: пароль — это то, что вы знаете, код — то, чем вы владеете. Если считать по тому, что раскрывает один скомпрометированный ноутбук, они могут схлопнуться в одну границу, потому что то, чем вы владеете, — файл на машине, в которую вы вводите текст. Разрыв между этими двумя подсчётами и есть тема этого разбора.

Проследите один вход от поля пароля до поля кода

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

Обе стороны хранят один и тот же ключевой материал. Эта симметрия — то, что упускают, описывая код как секрет: поставщик тоже может создавать ваши коды, поэтому зерно ценнее любого отдельного вывода. Утёкший код — одноразовое значение; зерно, которое его создало, — постоянные учётные данные, продолжающие выдавать действительные значения, пока их не заменят.

Активация — вторая половина потока. Генератор, который открывается кодом устройства, биометрическим запросом или зашифрованным контейнером, предъявляет доказательство владения плюс что-то ещё. Тот, что работает без шифрования и открывается сеансом операционной системы, предъявляет только файл. Одно и то же приложение может предлагать оба варианта в зависимости от того, как выполнена регистрация, поэтому решение о развёртывании находится на этом шаге, а не на маркетинговой странице приложения.

Решите, что код на самом деле доказывает

Язык стандартов здесь необычно ясен, и его стоит прочитать напрямую. Руководство NIST по аутентификаторам перечисляет программные генераторы OTP как аутентификаторы, отличает однофакторный OTP от многофакторного OTP с фактором активации и утверждает, что аутентификация OTP не устойчива к фишингу. Каждое из этих трёх положений меняет то, что вы можете утверждать о запросе.

Отсутствие устойчивости к фишингу — самая острая грань. Код, введённый в поле, можно ввести в чужое поле в реальном времени человеком, которого к этому склонили. Окно короткое, что уменьшает число полезных попыток, но не закрывает технику. Если ваше требование включает устойчивость к этому, OTP — неподходящий примитив, где бы ни работал генератор.

Один фактор против нескольких — второе различие. Код, появляющийся без шага активации, доказывает владение файлом и ничего больше, а файл лишь настолько крепок, насколько крепка учётная запись, которая может его прочитать. Добавьте фактор активации, и утверждение улучшается, хотя по-прежнему описывает доказательство, предъявленное при входе, а не изоляцию машины, которая его создаёт.

Посмотрите, до чего может добраться скомпрометированный ноутбук

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

ArrangementWhat it adds at loginWhat it leaves inside the laptop boundary
Password plus TOTP app on the same machineA possession proof the password alone does not supplyThe seed, the unlock step and the authenticated session
TOTP app on a separate phoneSeed storage outside the workstationSession cookies, the typed password and any prompt that can be proxied
Hardware key with a signed challengeA per-login signature bound to the originWhatever the browser and the workstation are already trusted to do

Читайте третий столбец как честный. Любой вариант выше оставляет что-то внутри границы доверия рабочей станции, потому что именно там используется сеанс. Меняется то, путешествует ли долговременный секрет вместе с этой границей или остаётся вне её, и привязано ли доказательство к конкретному источнику, чтобы поддельная страница не могла его передать.

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

Переносите генератор только туда, где разделение помогает

Размещение генератора кодов на телефоне — реальное улучшение для одной конкретной поломки: украденный ноутбук больше не несёт оба доказательства. Оно ничего не делает против перехвата сеанса на ноутбуке, ничего для пользователя, который вводит код на фишинговой странице, и ничего для кодов восстановления, которые однажды распечатали и сфотографировали в приложение заметок.

Поэтому напишите требование до выбора инструмента. Если цель — дополнительное доказательство против утёкшего пароля, скажите это прямо, и приложение на том же устройстве уже его даёт. Если цель — устойчивость к компрометации рабочей станции VPN, назовите эту возможность злоумышленника и выберите вариант, оценённый для неё, а требование к фишингу сформулируйте отдельно, а не подразумевайте.

Затем займитесь операционной половиной, которая решает, переживёт ли что-то из этого столкновение с инцидентом. Потеря устройства требует документированного пути замены, ротация учётных данных требует отзыва активных сеансов, а материал регистрации требует такой же защиты, как зерно, поскольку незащищённая копия регистрации даёт злоумышленнику те же будущие коды более коротким путём. Перечисление этих четырёх пунктов полезнее споров о том, хороши ли токены на одном устройстве или бесполезны.

Похожие статьи