Как вы печатаете запрос: ритм набора выдаёт бота быстрее биометрии мыши

Ровные интервалы между нажатиями и отсутствие опечаток выдают бота мгновенно. Как строить правдоподобную модель набора запроса при накрутке ПФ.

Как вы печатаете запрос: ритм набора выдаёт бота быстрее биометрии мыши

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

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

Что снимается при наборе текста

Каждое нажатие клавиши порождает пару событий с метками времени высокого разрешения. Из них выводится несколько независимых характеристик.

  • Время удержания клавиши. Интервал между нажатием и отпусканием одной клавиши. У человека это десятки миллисекунд, причём величина устойчиво разная для разных пальцев и разных клавиш: мизинец держит дольше указательного, крайние клавиши дольше центральных.
  • Интервал между клавишами. Время от отпускания предыдущей до нажатия следующей. Основной носитель ритма. У человека сильно зависит от того, насколько привычно сочетание символов.
  • Перекрытие нажатий. Быстро печатающий человек нажимает следующую клавишу до того, как отпустил предыдущую. Интервал становится отрицательным. У генератора, который просто ждёт паузу между символами, перекрытий не бывает вообще.
  • Паузы разного масштаба. Микропаузы внутри слова, паузы на границе слов, длинная пауза на обдумывание в середине фразы. Три разных масштаба, каждый со своим распределением.
  • Правки. Нажатия стирающей клавиши, перемещение курсора стрелками, выделение и перенабор. Следы того, что человек ошибся и исправился.
  • Работа с модификаторами. Заглавная буква, знак препинания через верхний регистр, переключение раскладки. Каждое такое действие даёт характерную задержку и дополнительные события.

Почему кириллица печатается иначе, чем латиница

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

Траекторию мыши можно сгладить и зашумить так, что она станет неотличимой. Ритм набора отражает моторику и знание языка — это не шум вокруг среднего, а структура, где каждая пауза чем-то вызвана.

Как выглядит бот на гистограмме интервалов

Есть три типовые картины, и все они распознаются без машинного обучения, простым взглядом на распределение.

Картина первая: строка появилась целиком

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

Картина вторая: идеальный метроном

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

Картина третья: случайность без структуры

Более продвинутый вариант: интервал берётся из случайного диапазона. Гистограмма становится широкой, но остаётся плоской и симметричной — и теряется всё, что делает набор человеческим. Нет корреляции между соседними интервалами (человек, который разогнался, печатает быстро несколько символов подряд). Нет связи интервала с содержанием (пауза перед редкой буквой). Нет времени удержания как отдельной величины. Нет перекрытий. Нет ни одной опечатки на сотнях запросов.

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

Таблица: ритм набора у человека и у генератора

ХарактеристикаЖивой наборТиповая эмуляция
Распределение интервалов широкое, асимметричное, с длинным хвостом узкое либо плоское равномерное
Связь соседних интервалов есть: разгон и торможение сериями отсутствует, значения независимы
Время удержания клавиши отдельная величина, разная по клавишам константа или не моделируется
Перекрытие нажатий регулярно при быстром наборе никогда
Опечатки и правки встречаются постоянно нет ни одной
Пауза перед редким символом заметно длиннее средней такая же, как перед частым

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

Где именно снимается клавиатурный ритм

Точек съёма больше, чем кажется, и они распределены по всему пути визита.

  • Поисковая строка. Главная точка. Пока пользователь печатает запрос, каждое нажатие обрабатывается для подсказок — то есть события гарантированно отслеживаются.
  • Поиск по сайту. На целевой площадке внутренний поиск даёт вторую независимую выборку по тому же профилю.
  • Формы обратной связи. Имя, телефон, комментарий. Здесь ритм особенно показателен: телефон набирается цифрами в другом темпе, чем текст.
  • Проверочные механизмы. Системы защиты от автоматизации собирают клавиатурную биометрию целенаправленно, и это один из входных сигналов при решении, показывать проверку или пропустить молча. Подробнее — в разборе умной капчи Яндекса.
  • Любое текстовое поле на странице. Счётчик аналитики видит события ввода в масштабах всего сайта, даже если поле не отправляется никуда.

Таблица: типовые ошибки модели набора и их исправление

ОшибкаКак проявляетсяИсправление
Подстановка строки в поле нет клавиатурных событий вообще посимвольный ввод настоящими событиями
Фиксированная задержка гистограмма в одну колонку распределение с длинным хвостом
Равномерный случайный интервал плоское симметричное распределение модель с зависимостью от соседних значений
Отсутствие времени удержания нажатие и отпускание в одну метку моделировать удержание отдельно
Ноль опечаток на всей ферме идеальный ввод в каждой сессии ошибки с последующим исправлением
Одна модель на все профили кластер по почерку набора индивидуальная скорость и почерк профиля

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

Как строить правдоподобную модель

Профиль набора привязан к профилю пользователя

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

Интервал зависит от содержания, а не только от случая

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

Ошибки и правки как обязательный элемент

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

Разгон, торможение и обдумывание

Внутри одного запроса ритм не постоянен. Начало — медленнее, человек ещё формулирует. Середина — разгон. Перед последним словом нередко длинная пауза: пользователь думает, стоит ли уточнять. Иногда запрос меняется на полпути: набрал половину, стёр всё, начал заново с другой формулировкой. Такие сценарии стоит включать в модель как редкие, но существующие.

Согласованность с языком и раскладкой

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

Ритм согласован с остальной сессией

Скорость набора должна вязаться с общим темпом поведения профиля. Человек, который стремительно молотит запрос, вряд ли потом медитативно читает страницу по минуте на экран, и наоборот. Темп — свойство личности, и он проявляется и в наборе, и в скролле, и в скорости принятия решения по выдаче, о чём речь в материале про работу со сниппетом и кликом в выдаче.

Проверка на уровне автоматизации

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

Чек-лист проверки своей модели набора

  1. Запишите последовательность клавиатурных событий, которую генерирует ваш инструмент при вводе типового запроса, с метками времени.
  2. Постройте гистограмму интервалов. Она обязана быть широкой и асимметричной, с хвостом длинных пауз.
  3. Посчитайте связь соседних интервалов. Если её нет — модель случайная, а не человеческая.
  4. Проверьте, есть ли отдельное время удержания клавиши и различается ли оно по клавишам.
  5. Найдите перекрытия нажатий. Их полное отсутствие при высокой скорости неправдоподобно.
  6. Посчитайте долю запросов с опечатками и правками за последние сто сессий. Ноль — плохой результат.
  7. Сравните почерк набора двух разных профилей. Совпадение означает кластер.
  8. Проверьте паузу при переходе с кириллицы на латиницу внутри запроса.

Разбор кейса: безупречная машинистка на сорок профилей

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

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

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

Частые ошибки

  • Вставлять запрос строкой. Отсутствие клавиатурных событий отсекает сессию раньше, чем начнётся анализ ритма.
  • Считать случайность достаточной. Равномерный шум даёт широкое, но плоское распределение без структуры — это распознаётся не сложнее метронома.
  • Игнорировать время удержания. Многие модели работают только с паузами между клавишами, а удержание — независимая и хорошо различающая величина.
  • Печатать безошибочно. Ноль опечаток за тысячу запросов невозможен ни для одного живого пользователя.
  • Применять одну модель ко всей ферме. Клавиатурный почерк идентифицирует личность, и одинаковый почерк склеивает профили в один.

Частые вопросы

Насколько это весомее биометрии мыши? Сигнал плотнее и чище: клавиатура даёт дискретные события с точными метками, где мышь даёт зашумлённую кривую. К тому же ритм набора связан с языком и содержанием, а не только с моторикой, — это дополнительный слой проверки, которого у курсора нет.

Достаточно ли добавить опечатки, чтобы модель стала человеческой? Нет, опечатки закрывают одну конкретную аномалию. Без правильной формы распределения интервалов и без связи соседних значений набор с опечатками остаётся машинным — просто с искусственными ошибками в ровном ритме, что выглядит даже страннее.

Решают ли проблему реальные устройства? Частично. Само устройство даёт честную аппаратную часть, но если ввод на нём всё равно программный, ритм остаётся синтетическим. Клавиатурная биометрия закрывается только качеством модели, а не типом железа.

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

Вывод

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

Больше о поведенческом продвижении и других услугах — на главной странице ProfSEO24.

Закажите накрутку ПФ в ProfSEO24

Выводим сайты в ТОП-1 Яндекса за счёт поведенческих факторов на базе ИИ — без риска фильтров. Более 300 сайтов в ТОП-1, первые сдвиги по позициям за 3 дня. Рассчитаем стоимость под вашу нишу и регион.

Заказать накрутку ПФ Написать в Telegram

Комментарии

Борис Ефимов

Записал события с нашего инструмента — интервал гуляет в диапазоне сорок-шестьдесят миллисекунд и всё. Ни удержания, ни перекрытий, ни одной опечатки за всё время. Думал, случайный разброс закрывает вопрос.

Admin

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

Регина Валеева

Мысль про то, что клавиатурная биометрия изначально создавалась для узнавания личности, всё расставляет по местам. Одинаковый почерк набора = один человек, сколько бы разных отпечатков ни было.

keystroke_lab

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

Семён Дроздов

Как правильно дозировать опечатки? Боюсь переборщить: если профиль ошибается в каждом втором запросе, это тоже выглядит странно.

Admin

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

Ангелина Ковтун

Про разную скорость кириллицы и латиницы вообще не задумывалась. Логично же: русскоязычный человек на родной раскладке идёт увереннее, а на латинице спотыкается.

Admin

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

Тимур Насыров

Пауза на переключение раскладки внутри смешанного запроса — отличный практический маркер. Сотни миллисекунд там, где генератор проскакивает мгновенно.

Зоя Панкратова

Вопрос: а есть смысл вообще возиться с ритмом, если запросы вводятся редко и большая часть сессии — чтение страницы?

Admin

Смысл есть, потому что момент ввода запроса приходится ровно на самое ответственное место сессии — вход в выдачу. Именно там решается, будет ли визит засчитан как осмысленный. Плюс набор даёт очень высокую плотность сигнала: тридцать символов запроса — это шестьдесят точных временных меток, больше, чем даст минута скролла. Соотношение «усилия к пользе» здесь одно из лучших.

Григорий Асташев

Связь соседних интервалов — самая простая проверка и самая убийственная. У человека разгон и торможение сериями, у генератора каждое значение независимо. Это считается в пару строк.

Виолетта Мороз

Сценарий «набрал половину, стёр всё, переформулировал» — очень жизненно. Сама так делаю постоянно, а в модели набора такого никто не закладывает.

input_rhythm

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

Эдуард Рощин

Уточню по технике: если события генерируются программно, они ведь могут отличаться от настоящих на уровне флагов. Тогда качество ритма уже неважно?

Admin

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

Кристина Лебеда

«Вариативность внутри профиля и между профилями — две разные задачи». Мы решили первую и считали, что закончили. Оказалось, вся ферма печатает одинаково вариативно.

Захар Тюрин

Забрал идею с коэффициентом по частотности сочетаний символов. Не нужны никакие сложные модели, обычная таблица переходов даёт распределение правильной формы почти даром.

Инга Савельева

Обращалась в ProfSEO24 с проектом, который до этого вели двое подрядчиков. Приятно, что разбор начали с диагностики, а не с предложения пакета услуг, и по итогу часть работ оказалась не нужна. Сотрудничеством довольна.

🚀

Получите бесплатный расчёт

Напишите нам в Telegram — ответим за 15 минут, рассчитаем стоимость под ваши запросы и регион.

Написать в Telegram

✓ Бесплатно  ·  ✓ Без обязательств  ·  ✓ Ответ за 15 минут

Вопрос — ответ

Ответили на популярные вопросы о нашей работе и продвижении.