![]() |
|
![]() ![]() ![]() |
|
Logo |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: нет Всего: 10 |
Возможен ли алгоритм реализации карточных игр без участия логики на сервере с защитой от читерства?
|
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
В любом случае сервер необходим. Даже если его роль выполняет один из клиентов. И от читерства именно на этом клиенте защититься не получится. Хотя по максимуму защититься от него - можно.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
Logo, Что значит - `без участия логики на сервере`? Сервер - это тот, кто раздает карты. Проверить честность раздающего без доступа к серверу - нельзя.
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 2 Всего: 85 |
Думаю что возможен (по крайней мере для некоторых игр). В двух словах, протокол примерно следующий. Раздающий компьтер, делает полный снимок состояния (колоды в момент раздачи и проч.) зашифровывает случайным паролем и отсылает это состояние партнеру в зашифрованном виде. Пароль же к этим данным, партнер получит только после кона игры. И сможет проверить что не было шулерства. Ну, в сыром виде, приблизительно, как-то так... |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Угу... вот только кто мешает эту колоду перемешать так, чтобы заведомо поиметь преимущество? ну а потом пошифрить и отправить... И в любом случае тот, кто сидит за раздающим компом, имеет возможность "подглядеть" расклады. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 2 Всего: 85 |
Компьютер отсылает свое состояние в зашифрованном виде, в самом начале. В ответ, партнер шлет некотрое число, по которому совершается перемешивание. (аналог сдвига в реальных играх) Раздающий компьютер не знает этого числа, поэтому перемешать так, чтобы выпал выигрышный расклад, он не может.
Для игр, где расклад общий не должен знать ни один из игроков, вероятно тоже возможен протокол. система двух паролей, и открытие очередной карты по двум паролям (от каждого из игроков.) Это сообщение отредактировал(а) volatile - 4.9.2015, 19:58 |
||||
|
|||||
Akina |
|
||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Сначала он это состояние СОЗДАЁТ. Причём в нешифрованном виде. Перехватить - не проблема. Немного подкорректировать - в общем тоже.
Зато может посмотреть результат перемешивания. Я не представляю, как тасовать, и особенно раздавать, колоду, когда её состояние зашифровано. Не говоря уж о том, что можно вести опережающую раздачу в копии памяти процесса. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
Logo |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: нет Всего: 10 |
Вот тут http://habrahabr.ru/post/147241/ предложен алгоритм раздачи, но он работает для количества игроков >= 3 и сговор между двумя игроками против третьего должен быть исключен.
Это сообщение отредактировал(а) Logo - 4.9.2015, 23:09 |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
Akina, Идея, насколько я понял, в том, что игрокам сервер посылает начальное состояние колоды, играющий "перемешивает" колоду собственным случайным "кодом".
В этом месте надо бы исключить моделирование расклада на стороне клиента. Для этого коды можно складывать в доверенное хранилище с правом "добавить", но не "читать". Право "читать" появляется у всех игроков только после игры. Права можно обеспечить шифрованием с ключами. Начальное состояние шифруется ключами игроков и ключём сервера. Код перемешивания шифруется ключём игрока. После игры все ключи вскрываются и все ходы становятся доступны для проверки... Вроде, получается чисто... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Доверенное хранилище не должно быть доступно ни одному игроку. Не вижу реализации этого, если отсутствует недоступный ВСЕМ игрокам сервер. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
Akina, С шифрованием по ключам - не обязательно. Ключи в обычной манере - приватный-публичный, кодирование расклада идет в несколько итераций, начиная от серверного ключа и в порядке перечисления игроков. До вскрытия ключей в конце игры, выяснить расклады невозможно. В любой момент можно скопировать текущие файлы игры и расшифровать их по окончании.
К тому же недоступное никому хранилище нельзя проверить === отсутствие доверия со стороны параноидальных игроков ;) Добавлено через 6 минут и 40 секунд Паранойя распространяется и на сервер. ![]() -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Logo |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: нет Всего: 10 |
Хранилище такое не проблема, каждый игрок может сохранять свои данные у себя, а остальным отправлять подпись, например MD5 хеш от данных. В конце же он должен открыть хранилище, а остальные сверят подпись с данными. Так можно морской бой реализовать без читерства. Но с картами сложнее тут раскладка должна быть такой, что бы ни один игрок по отдельности не мог ее расшифровать, и в тоже время все месте они могли это делать, что бы открывать карты (по одной). |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
Logo, Давай я точнее сформулирую, что у меня пока получается.
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Допустим, описанное тобой реализовано. Вот наступает момент, когда некий игрок открывает очередную карту. Я не вижу реализации, при которой ему известна именно очередная карта, но неизвестны все остальные. А при последовательном шифровании колоды с подшифровыванием в неё одной карты на каждом витке раздачи каждый игрок, принимающий участие в шифровании, получает очень много (не все, но много) данных о текущем раскладе. Игрок шифрует своё расположение, и только отвечает "мимо-ранен-убит" на каждый ход соперника... это очевидно. Но тут всё проще - у каждого своё поле. В отличие от карточной игры, где колода одна на всех. Изначально задача ставилась так, что сервера НЕТ. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 7 Всего: 386 |
Сервер - тот кто карты раздает в эту игру. Можно это право по очереди клиентам передавать. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |