Было отмечено, что мой предыдущий ответ мог быть основан на неправильном понимании того, что вы имели в виду под «подделкой». (Если так, пожалуйста, дайте мне знать, и я удалю его.)
Если вы хотите предотвратить то, что игровые серверы отправляют фиктивные данные на главный сервер, то, как отмечает Яри Комппа, это вообще невозможно предотвратить полностью. Фактически это просто вариант классической проблемы предотвращения мошенничества в многопользовательской среде , за исключением промежуточных серверов, а не клиентов, подозреваемых в мошенничестве. Многие из тех же методов, которые используются для традиционного мошенничества, также могут работать здесь, но, как обычно, ни один из них не является абсолютно надежным.
Тем не менее, есть есть некоторые вещи , которые вы могли бы сделать , что бы конкретно помочь против обмана серверов. Одним из них будет то, что каждый игрок в матче по отдельности свяжется с главным сервером и подтвердит свое участие в этом матче. (Возможно, вы захотите сделать это до начала матча, чтобы убедиться, что все согласны с тем, кто является участниками, и чтобы никто не испытывал соблазн утверждать, что не участвовал в проигранном матче. Вы можете использовать цифровые подписи, чтобы отложите это, хотя, по сути, вы могли бы попросить каждого игрока в матче подписать сообщение: « Я игрок X, и я участвую в матче M на сервере S в момент времени T с игроками Y, Z и W."и отправьте его на игровой сервер, который позже сможет передать его на главный сервер.) Таким образом, вы можете по крайней мере убедиться, что обманный сервер не может повлиять на рейтинг любого игрока, который фактически не играет на этом сервере ,
Это особенно полезно, если вы используете что-то вроде рейтинга Эло, где рейтинг игрока в основном зависит от их относительной эффективности. Несомненно, кто-то, использующий фиктивный сервер, может по-прежнему создавать кучу поддельных учетных записей и отправлять результаты, в которых говорится, что его собственная учетная запись превосходит поддельные, но при использовании системы относительного ранжирования все, что нужно сделать, это сделать учетную запись мошенника немного выше фальшивых ( который в свою очередь будет иметь самые низкие оценки).
Еще одна очевидная вещь, которую следует избегать, - это позволить игрокам проверять результаты своих матчей непосредственно с главного сервера. Если игрок выигрывает матч на новом сервере, но результаты, отправленные на главный сервер, говорят о том, что они проиграли (или если результаты никогда не отправляются вообще), это даст им знать, что происходит что-то подозрительное. Надеемся, что в этот момент они либо сообщат серверу о мошенничестве, либо, по крайней мере, проголосуют ногами и никогда больше не будут играть на этом сервере.
Фактически, вы могли бы сделать это автоматически: после каждой игры, после того, как результаты были отправлены на главный сервер, клиенты должны получить их обратно с главного сервера и сравнить их с тем, как клиент думает, что игра завершилась. Если есть несоответствие, сообщите об этом как игроку (чтобы они знали, что что-то не так), так и на главный сервер (чтобы вы могли обнаружить мошеннические серверы). Конечно, в качестве оператора главного сервера вам нужно будет решить, кто лжет - сервер или игрок - но, надеюсь, в большинстве случаев это будет довольно очевидно из шаблона отчетов.