Вряд ли надо объяснять, кто такие читеры и что именно они делают с индустрией сетевых трехмерных стрелялок. С этим явлением борются с момента его появления, и до сих пор безуспешно. Главная проблема даже не в том, чтобы выявить читера — они иногда не особо и скрываются. Главная проблема заключается в том, что администратор сервера, разработчик игры и системы противодействия (такие как Punkbuster) могут забанить лишь игровой аккаунт читера (или его цифровую копию игры), железо или IP. И все это можно с легкостью сменить или «подделать». В результате даже забаненный читер через очень короткий промежуток времени возвращается и продолжает пить кровь честным игрокам. Следовательно, для решения этой проблемы необходимо банить не все вышеперечисленное, а самого читера. Звучит бредово, верно? Ок, посмотрим, вдруг это все-таки возможно.
Возникает вопрос: есть ли у любого игрока какой-либо уникальный идентификатор, который он не сможет ни сменить, ни подделать? Ответ — нет. На данный момент такого идентификатора не существует. Однако его можно создать.
Вы, вероятно, знаете, что почерк каждого человека индивидуален и может быть идентифицирован, причем идентификация не зависит от «канцелярии», т.е. ручкой вы пишете или карандашом, на бумаге или холсте — не имеет принципиального значения. Почерковедческая экспертиза все равно сможет дать бинарный (это важно) ответ, и это будет ответ на вопрос, соответствует ли исследуемый образец почерку того или иного человека.
Цитата из главы 1 статьи «Почерковедческая экспертиза: предмет, объекты, задачи, подготовка материалов»:
"Несмотря на разнообразие причин, вызывающих изменения почерка, система движений (динамический стереотип) в целом, выработанная на протяжении длительного времени, относительно устойчива. Это значит, что возможность идентификации человека по почерку сохраняется во времени и даже при попытках умышленного искажения или при изменении почерка в старости, что выражается в замедленности письма и снижении координации движений, в упрощении строения букв."
Логично будет предположить (пока только предположить), что те же индивидуальные особенности динамического стереотипа присущи человеку не только тогда, когда он пользуется ручкой или карандашом, но и тогда, когда он пользуется мышью. Особенно если этот динамический стереотип выработан на протяжении длительного времени. Однако бинарного ответа на вопрос «Соответствует ли данный образец кривой движения мыши данному конкретному пользователю?» мало, даже если алгоритм получения такого ответа будет найден. Для подобной идентификации придется хранить гигантскую базу данных, и достаточно очевидно, что каждая идентификация будет требовать проверки в среднем 50% этой базы. Необходим алгоритм, который позволил бы преобразовывать образец «цифрового почерка» в короткий идентификатор, который был бы устойчив для каждого отдельного человека, и мы уверены, что придумали такой алгоритм.
Причина, по которой этот алгоритм прекрасно подходит для идентификации именно «геймеров» и не представляет собой опасности свободе пользования Сетью, очень проста. Очевидно, что короткого «росчерка мышью» будет недостаточно. Предварительные исследования показали, что во время игры «простой» мыши (т.е. время, когда мышь неподвижна) колеблется от 40 до 90% (за редкими исключениями). А вот во время обычной «офисной» работы или серфинга интернета этот показатель достигает 97%. Кроме шуток, присмотритесь к мыши своего коллеги за соседним столом и убедитесь сами. Мы поставили себе порог в 5000 изменений положения мыши для уверенной идентификации, и если для игры это 1-3 минуты реального времени, то для той же «офисной» работы это от часа до нескольких. Овчинка выделки не стоит. А вот для того, чтобы раз и навсегда искоренить читерство как явление, этот алгоритм прекрасно подходит, более того — он изначально создавался с этой целью.
Все дальнейшее излагается гипотетически, прошу не забывать об этом.
Итак, мы собираем «образцы почерка» объемом 100 000 изменений положения мыши с десяти тысяч игроков (одновременно мы получаем от них же бинарные ответы на 64 простых вопроса). Естественно, образцы собираются во время игры в любой трехмерный шутер. Каждый такой образец кривой движения мыши делится на 20 кусков по 5000 значений, а затем обрабатывается для получения всех возможных математических параметров этой кривой. Параметров этих довольно много, а число возможных соотношений этих параметров просто огромно.
В результате мы получаем 200000 образцов, состоящих из нескольких сотен численных значений, полученных от 10000 человек. По одному образцу от каждого человека мы включаем в нашу статистическую базу, а остальные 19 сохраняем для проверки стабильности (об этом чуть ниже).
Те самые 64 простых вопроса теперь позволят нам разделить всю группу по 64 признакам. Вопросы, разумеетя, выбираются так, чтобы ответы могли иметь хотя бы косвенное значение для цифрового почерка (правша/левша, мужчина/женщина, умеете рисовать/не умеете и т.д.). Таким образом, мы получаем возможность оценивать вероятность принадлежности каждого образца к тому или иному признаку по тем самым математическим параметрам кривой, причем точность оценки прямо пропорциональна общему количеству образцов.
Здесь мы вынуждены сделать большой пробел в изложении — мы не можем рассказать вам об алгоритме оценки вероятности. Разумеется, не потому, что не доверяем вам, а из-за существования «противоборствующей стороны». Разработчики читов вряд ли обрадуются реализации этой идеи, а зная алгоритм полностью, они получат возможность подсунуть нам образцы, которые очень сильно осложнят их обработку. Просим понять и простить.
В результате мы получаем двоичный код объемом 64 бита, который проверяем на «стабильность», прогоняя те самые 19 образцов по каждому человеку, оставленные про запас именно для этого. Этот код, эти 8 байт и будут тем самым уникальным идентификатором игрока, и даже с учетом небольшой нестабильности (которая теоретически возможна), точность будет составлять 2 в степени 64. Это немало, тем более что на самом деле мы уже умеем создавать признаки «с нуля», а эти 64 нам нужны главным образом для поиска наиболее релевантных параметров и их соотношений.
Самый главный плюс заключается в том, что такую идентификацию можно проводить прямо во время игры, по все тем же параметрам. Однажды забаненный игрок уже не сможет авторизоваться, и даже если это сделает за него кто-то другой, первая же негласная проверка обнаружит это. 3, максимум 5 минут игры — все, что будет доступно читеру, потом очередная цифровая копия игры уйдет в бан.
Собственно говоря, перед вами не совсем статья — это пост, и его цель — не получение инвайта на Хабрахабр, а объективное обсуждение IT-специалистами. Дело в том, что осторожные попытки продвижения этой идеи в среде геймеров встретили острое недоверие, причем вполне обоснованное. По сути, наша программа сбора статистики является стопроцентным кейлоггером. Даже то, что мы выкладываем у себя на сайте исходный код, не помогает. Возможно, ваше обсуждение даст нам толчок в нужном направлении — в споре рождается истина.
Мы намеренно не даем никаких ссылок и названий — для того, чтобы сохранить объективность. Заранее спасибо всем, кто сумел дочитать до конца.
Автор: CeBeP_2012