Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Карточные игры P2P без логики на сервере 
:(
    Опции темы
Logo
Дата 3.9.2015, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Возможен ли алгоритм реализации карточных игр без участия логики на сервере с защитой от читерства?
PM MAIL   Вверх
Akina
Дата 4.9.2015, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



В любом случае сервер необходим. Даже если его роль выполняет один из клиентов. И от читерства именно на этом клиенте защититься не получится. Хотя по максимуму защититься от него - можно.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ksnk
Дата 4.9.2015, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



Logo, Что значит - `без участия логики на сервере`? Сервер - это тот, кто раздает карты. Проверить честность раздающего без доступа к серверу - нельзя.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
volatile
Дата 4.9.2015, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 2
Всего: 85



Цитата(Logo @  3.9.2015,  20:28 Найти цитируемый пост)
Возможен ли алгоритм реализации карточных игр без участия логики на сервере с защитой от читерства? 

Думаю что возможен (по крайней мере для некоторых игр).

В двух словах, протокол примерно следующий.
Раздающий компьтер, делает полный снимок состояния (колоды в момент раздачи и проч.) зашифровывает случайным паролем и отсылает это состояние партнеру в зашифрованном виде.

Пароль же к этим данным, партнер получит только после кона игры.
И сможет проверить что не было шулерства.
Ну, в сыром виде, приблизительно, как-то так...

PM MAIL   Вверх
Akina
Дата 4.9.2015, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(volatile @  4.9.2015,  19:47 Найти цитируемый пост)
Раздающий компьютер, делает полный снимок состояния (колоды в момент раздачи и проч.) зашифровывает случайным паролем и отсылает это состояние партнеру в зашифрованном виде.

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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
volatile
Дата 4.9.2015, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 2
Всего: 85



Цитата(Akina @  4.9.2015,  19:08 Найти цитируемый пост)
Угу... вот только кто мешает эту колоду перемешать так, чтобы заведомо поиметь преимущество?

Компьютер отсылает свое состояние в зашифрованном виде, в самом начале.
В ответ, партнер шлет некотрое число, по которому совершается перемешивание. (аналог сдвига в реальных играх)
Раздающий компьютер не знает этого числа, поэтому перемешать так, чтобы выпал выигрышный расклад, он не может.

Цитата(Akina @  4.9.2015,  19:08 Найти цитируемый пост)
 кто сидит за раздающим компом, имеет возможность "подглядеть" расклады. 

Цитата(volatile @  4.9.2015,  18:47 Найти цитируемый пост)
по крайней мере для некоторых игр).


Для игр, где расклад общий не должен знать ни один из игроков, вероятно тоже возможен протокол.
система двух паролей, и открытие очередной карты по двум паролям (от каждого из игроков.)




Это сообщение отредактировал(а) volatile - 4.9.2015, 19:58
PM MAIL   Вверх
Akina
Дата 4.9.2015, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(volatile @  4.9.2015,  20:50 Найти цитируемый пост)
Компьютер отсылает свое состояние в зашифрованном виде, в самом начале.

Сначала он это состояние СОЗДАЁТ. Причём в нешифрованном виде. Перехватить - не проблема. Немного подкорректировать - в общем тоже.
Цитата(volatile @  4.9.2015,  20:50 Найти цитируемый пост)
Раздающий компьютер не знает этого числа, поэтому перемешать так, чтобы выпал выигрышный расклад, он не может.

Зато может посмотреть результат перемешивания. Я не представляю, как тасовать, и особенно раздавать, колоду, когда её состояние зашифровано. Не говоря уж о том, что можно вести опережающую раздачу в копии памяти процесса.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Logo
Дата 4.9.2015, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Вот тут http://habrahabr.ru/post/147241/ предложен алгоритм раздачи, но он работает для количества игроков >= 3 и сговор между двумя игроками против третьего должен быть исключен.

Это сообщение отредактировал(а) Logo - 4.9.2015, 23:09
PM MAIL   Вверх
ksnk
Дата 4.9.2015, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



Akina, Идея, насколько я понял, в том, что игрокам сервер посылает начальное состояние колоды, играющий "перемешивает" колоду собственным случайным "кодом". 

В этом месте надо бы исключить моделирование расклада на стороне клиента. Для этого коды можно складывать в доверенное хранилище с правом "добавить", но не "читать". Право "читать" появляется у всех игроков только после игры.

Права можно обеспечить шифрованием с ключами. Начальное состояние шифруется ключами игроков и ключём сервера. Код перемешивания шифруется ключём игрока.
После игры все ключи вскрываются и все ходы становятся доступны для проверки...

Вроде, получается чисто...

 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Akina
Дата 5.9.2015, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(ksnk @  5.9.2015,  00:17 Найти цитируемый пост)
 Для этого коды можно складывать в доверенное хранилище с правом "добавить", но не "читать". Право "читать" появляется у всех игроков только после игры.

Доверенное хранилище не должно быть доступно ни одному игроку. Не вижу реализации этого, если отсутствует недоступный ВСЕМ игрокам сервер. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ksnk
Дата 5.9.2015, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



Akina, С шифрованием по ключам - не обязательно. Ключи в обычной манере - приватный-публичный, кодирование расклада идет в несколько итераций, начиная от серверного ключа и в порядке перечисления игроков. До вскрытия ключей в конце игры, выяснить расклады невозможно. В любой момент можно скопировать текущие файлы игры и расшифровать их по окончании.

К тому же недоступное никому хранилище нельзя проверить === отсутствие доверия со стороны параноидальных игроков ;)

Добавлено через 6 минут и 40 секунд
Паранойя распространяется и на сервер. smile Так что считать сервер неподсудным нельзя...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Logo
Дата 6.9.2015, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Цитата

Для этого коды можно складывать в доверенное хранилище с правом "добавить", но не "читать". Право "читать" появляется у всех игроков только после игры.

Хранилище такое не проблема, каждый игрок может сохранять свои данные у себя, а остальным отправлять подпись, например MD5 хеш от данных. В конце  же он должен открыть хранилище, а остальные сверят подпись с данными. Так можно морской бой реализовать без читерства.
Но с картами сложнее тут раскладка должна быть такой, что бы ни один игрок по отдельности не мог ее расшифровать, и в тоже время все месте они могли это делать, что бы открывать карты (по одной).
PM MAIL   Вверх
ksnk
Дата 6.9.2015, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



Logo, Давай я точнее сформулирую, что у меня пока получается.
  • Перед началом игры каждый игрок и сервер сочиняют по паре ключей - публичный/приватный. Публичный отдается серверу+остальным игрокам, для обеспечения приватного чата.
  • сервер мешает колоду случайным образом первый раз, упаковывает ее состояние последовательно всеми публичными ключами игроков и выкладывает в доступное всем место (рассылает игрокам в виде черного ящика, для послеигрового контроля).
  • "Следующий по порядку" игрок генерирует "сдвиг" - код, по которому колода еще раз перемешивается. Сдвиг складывается в хранилище(рассылается игрокам ).
  • Игра идет, карты раздаются, ходы игроков записываются.
  • По окончании игры, все приватные ключи открываются и у каждого игрока появляется возможность проверить, что колода в процессе игры не тасовалась, порядок карт в колоде не менялся и все игроки играли своими картами.




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Akina
Дата 7.9.2015, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(Logo @  6.9.2015,  01:31 Найти цитируемый пост)
в тоже время все месте они могли это делать, что бы открывать карты (по одной). 

Допустим, описанное тобой реализовано. Вот наступает момент, когда некий игрок открывает очередную карту. Я не вижу реализации, при которой ему известна именно очередная карта, но неизвестны все остальные. А при последовательном шифровании колоды с подшифровыванием в неё одной карты на каждом витке раздачи каждый игрок, принимающий участие в шифровании, получает очень много (не все, но много) данных о текущем раскладе.
Цитата(Logo @  6.9.2015,  01:31 Найти цитируемый пост)
можно морской бой реализовать без читерства.

Игрок шифрует своё расположение, и только отвечает "мимо-ранен-убит" на каждый ход соперника... это очевидно. Но тут всё проще - у каждого своё поле. В отличие от карточной игры, где колода одна на всех.
Цитата(ksnk @  6.9.2015,  02:04 Найти цитируемый пост)
Давай я точнее сформулирую, что у меня пока получается.

Изначально задача ставилась так, что сервера НЕТ.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ksnk
Дата 7.9.2015, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 7
Всего: 386



Цитата(Akina @  7.9.2015,  08:55 Найти цитируемый пост)
Изначально задача ставилась так, что сервера НЕТ.

Сервер - тот кто карты раздает в эту игру. Можно это право по очереди клиентам передавать.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1183 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.