Есть игра.
1. Существует ли способ защитить от изменения счётчики игровых ресурсов?
2. Необходимо деление игры на 2 части — клиентскую и серверную для защиты?
Здравствуйте, kvlad2015, Вы писали:
K>Есть игра. K>1. Существует ли способ защитить от изменения счётчики игровых ресурсов? K>2. Необходимо деление игры на 2 части — клиентскую и серверную для защиты?
Защитить от кого?
Вообще есть стандартная криптографическая задача "казино по телефону" — когда 2 недоверенных стороны могут совместно формировать случайные числа (по-честному) или сравнивать значения, не раскрывая их и т.п.
Здравствуйте, DOOM, Вы писали:
DOO>Вообще есть стандартная криптографическая задача "казино по телефону" — когда 2 недоверенных стороны могут совместно формировать случайные числа (по-честному) или сравнивать значения, не раскрывая их и т.п.
Видимо от начитивания игроками ресурсов. Аналогичная задача сейчас стоит, ибо игра оффлановая, но с рейтингами. И вот чтобы рейтинги не читили нужно что-то придумать. Точнее придумка уже есть, это проверка лога действий игрока на сервере и выкидывание из рейтинга начитивших.
Здравствуйте, _Artem_, Вы писали:
_A_>Видимо от начитивания игроками ресурсов. Аналогичная задача сейчас стоит, ибо игра оффлановая, но с рейтингами. И вот чтобы рейтинги не читили нужно что-то придумать. Точнее придумка уже есть, это проверка лога действий игрока на сервере и выкидывание из рейтинга начитивших.
Замечу сразу, что в общем случае твоя задача нерешаема. Это ведь проблема аналогичная фискальному регистратору — т.е. некий девайс что-то считает (касса, электросчетчик и пр.) и ты хочешь быть уверен, что показания не были модифицированы.
В компьютерном мире все немного проще, но все равно есть ограничения.
1. Ты должен обеспечить целостность клиента. Т.е. при соединении с сервером необходимо организовывать проверку ЭЦП клиента. Если была модификация — в лес.
2. Надо обеспечить защиту тех данных, от которых зависит рейтинг (сам рейтинг, журнал, подтверждающий его зароботок и пр.). Вот тут твое ограничение (с оффлайном) создает проблему — чисто теоретически владелец компьютера может получить доступ к любым данным, которые на нем хранятся. Здесь тебя спасает наличие журнала и потоковое шифрование (чтобы обеспечить сцепку отдельных записей и сильно усложнить несанкционированное изменение).
Схема примерно такая:
1. Во время сеанса связи с сервером клиент получает симметричный ключ шифрования для защиты журнала.
2. В процессе работы оффлайн производится запись журнала в оперативной памяти с шифрованием в режиме CBC (причем размер записи журнала хорошо бы сделать равной размеру блока алгоритма шифрования).
3. По окончанию работы, перед записью журнала на диск делается повторное шифрование в режиме CBC, но с обратным порядком следования блоков.
Что мы имеем?
В журнал нельзя внести никакие изменения не повредив его (ни внести запись в середине, ни дополнить записями). Единственный способ модифицировать журнал — полностью его расшифровать, дополнить, а потом опять зашифровать. От этого уже не защититься — ибо оффлайн и ключ все равно где-то хранится. Надежда только на то, что никто не захочет заморачиваться ради рейтинга в какой-то игрушке...
_A_>Видимо от начитивания игроками ресурсов. Аналогичная задача сейчас стоит, ибо игра оффлановая, но с рейтингами. И вот чтобы рейтинги не читили нужно что-то придумать. Точнее придумка уже есть, это проверка лога действий игрока на сервере и выкидывание из рейтинга начитивших.
грубо говоря доверять данным с клиента нельзя. если клиент просто присылает свой рекорд, то конечно взломанный клиент будет присылать любое значение.
можно что-то подумать вроде посылки ряда значений по которым по неочевидной формуле вычисляется рейтинг, чтобы хотя бы не сломали в первый же день, но в общем случае все равно взломают кому надо.