powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Криптографический покер
25 сообщений из 156, страница 1 из 7
Криптографический покер
    #39583821
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос возник. Возможно ли реализовать карточную игру покер (холдем) таким образом, чтобы можно было обеспечить полную защиту (понятное дело, криптографическую) процесса игры от подтасовки и мухлежа?

Дано:

1. Игровой сервер — серверное приложение игры
2. Игроки (от 2-10) — приложение игрового клиента

Условия:

1. Игроки получают по 2 карты из рандомно перетасованной колоды
2. На стол выкладывается от 3 до 5 карт из той же колоды
3. Ни сервер, ни другие игроки не могут знать или хоть как-то вычислить какие карты у других игроков, до окончания игры
4. Ни сервер, ни другие игроки не должны знать, какие карты выбраны из колоды, кроме выложенных на стол
5. Раздача карт ведётся из одной колоды, так, чтобы игроков не оказалось два пиковых туза
6. Ни один игрок не может, пользуясь незнанием других игроков, изменить свои карты на желаемые

Интересует не конкретно реализация покера, а именно возможные алгоритмы.

Есть идеи? :)
...
Рейтинг: 0 / 0
Криптографический покер
    #39583833
Pu4koff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У каждого игрока есть постоянная пара ключей. Закрытый лежит на сервере и не известен другим игрокам, открытый - только у конкретного игрока, в процессе игры никак по сети не гоняются.
При начале игры каждый игрок генерирует себе временную пару ключей. Закрытые ключи пересылаются между игроками, на сервер не отправляются. Используется для обмена данными между игроками, чтобы сервер ничего не перехватил.
Сервер генерирует колоду и каждую карту защищает своей цифровой подписью.
Сервер отправляет колоду, допустим игроку № 1 - И1. Он перетасовывает колоду и рассылает другим игрокам (шифруя временными ключами).
Каждый игрок соответственно перепроверяет, что с колодой всё нормально (цифровая подпись на месте, набор карт правильный) и шифрует её ключами каждого из игроков.
Полученный набор зашифрованных карт пересылается каждым игроком на сервер.
т.е. каждый игрок отправит на сервер табличку, в которой строка - это карта, а столбец - шифровка карты ключом соответствующего игрока.
Сервер перепроверяет, что все игроки прислали одинаковые таблички и никто ничего не подменил.
Еще раз тасует колоду. Для отправки конкретному игроку карта дополнительно шифруется соответствующим постоянным ключом. Соответственно закрытые карты расшифровываются игроком в два этапа: сначала постоянным ключом, а потом - временным.
Открытые карты отправляются как есть и игроки их расшифровывают только своими временными ключами.
Когда игрок вскрывается, сервер рассылает имеющиеся у него шифровки этих карт другим игрокам, те расшифровывают своими ключами и сверяют, что подмены не было и игроку действительно пришла от сервера эта карта.
...
Рейтинг: 0 / 0
Криптографический покер
    #39583834
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Ну, как вариант:

2 колоды: одна на сервере – с картами игроков, вторая у игроков – с номиналами карт.

Игроки согласованно генерируют набор карт [ID –> карта] любым образом и обмениваются ею между собой. Все использованные ID отправляются на сервер (без номиналов). Сервер собирает колоду из 54х (или сколько там карт) ID, тасует её и раздаёт карты игрокам, часть карт выкладывает на стол. При этом игроки знают свои карты, но не знают карты на столе или карты других игроков, а сервер знает все карты, но не знает их номиналов.

Дальше идёт сама игра как обычно. Когда все ставки закончились и все вскрываются – все игроки отправляют свои колоды (одинаковые!) на сервер, он сверяет их между собой и со своими данными о раздаче, строит расклад с номиналами и рассылает его игрокам. Игроки сверяют расклад со своими картами и подтверждают его.

Раунд завершён.
...
Рейтинг: 0 / 0
Криптографический покер
    #39583835
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpПри этом игроки знают свои карты, но не знают карты на столе или карты других игроков
При этом игроки знают свои карты и карты на столе, но не карты других игроков, разумеется.
...
Рейтинг: 0 / 0
Криптографический покер
    #39583877
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt1. Игроки получают по 2 карты из рандомно перетасованной колоды
2. На стол выкладывается от 3 до 5 карт из той же колоды
3. Ни сервер, ни другие игроки не могут знать или хоть как-то вычислить какие карты у других игроков, до окончания игры
4. Ни сервер, ни другие игроки не должны знать, какие карты выбраны из колоды, кроме выложенных на столС колодой работает игровой сервер, поэтому, в любом случае, игрокам придётся доверять серверу.5. Раздача карт ведётся из одной колоды, так, чтобы игроков не оказалось два пиковых тузаКосяк, который не могут позволить себе ни честный сервер, ни мошеннический. Пренебрегаем возможностью такого мухлежа со стороны сервера.6. Ни один игрок не может, пользуясь незнанием других игроков, изменить свои карты на желаемыеТривиальная электронная подпись раздач сервером.
Надо отчётливо понимать, что никакая "интернет-схема" не защищена от утечек по по побочным каналам.
Она же - игра на одну руку. Таким образом, серверу тоже придётся доверять игрокам.
...
Рейтинг: 0 / 0
Криптографический покер
    #39583900
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovКосяк, который не могут позволить себе ни честный сервер, ни мошеннический. Пренебрегаем возможностью такого мухлежа со стороны сервера.

С таким пренебрежением, решение становится банальным и тривиальным.

Basil A. SidorovНадо отчётливо понимать, что никакая "интернет-схема" не защищена от утечек по по побочным каналам.
Она же - игра на одну руку. Таким образом, серверу тоже придётся доверять игрокам.

Ну утечки это уже проблема защиты каналов, я речь про общий алгоритм.

Вот как обмен сообщениями с помощью открытого/закрытого ключа, можно отправлять по открытым каналам. Атака in middle решается с помощью доверенных сертификатов. Но как организовать подобное для игры в покер — пока не понятно.
...
Рейтинг: 0 / 0
Криптографический покер
    #39583923
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pu4koffЗакрытые ключи пересылаются между игроками, на сервер не отправляются. Используется для обмена данными между игроками, чтобы сервер ничего не перехватил.

А зачем обмениваться закрытыми ключами? Может открытыми?


Pu4koffт.е. каждый игрок отправит на сервер табличку, в которой строка - это карта, а столбец - шифровка карты ключом соответствующего игрока.
Сервер перепроверяет, что все игроки прислали одинаковые таблички и никто ничего не подменил.

А как вычислить, что каждый игрок взял себе по карте, которую ОН ЗНАЕТ, но никто больше не знает, и при этом неизвестно, какие карты какой игрок взял, да и вообще, какие конкретно карты были извлечены, чтобы можно было делать предположения?

Известно должно быть только карты, выложенные на стол.

Тут всё бы ничего, если бы из колоды можно было брать любые карты. Но брать можно только из тех, которые другой игрок УЖЕ не взял. Как это вычислить и при этом не раскрыть информацию?


Pu4koffСоответственно закрытые карты расшифровываются игроком в два этапа: сначала постоянным ключом, а потом - временным.
Открытые карты отправляются как есть и игроки их расшифровывают только своими временными ключами.

На самом деле шифровать карту не нужно, нужно шифровать номер карты в перетасованной колоде. Но номер карты, даже шифрованный, позволяет легко вычислить соответствие. А если этого не делать, то у игроков может оказаться по одной и той же карте.

Проблема именно здесь. Непонятно как решать.
...
Рейтинг: 0 / 0
Криптографический покер
    #39583924
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpИгроки согласованно генерируют набор карт [ID –> карта] любым образом и обмениваются ею между собой.

Но это означает, что любой игрок может вступить в сговор с сервером и таким образом сообща, раскрыть все карты на руках других игроков. Это может быть игрок, который управляет сервером (типа игрок от казино). Т.е. это не решает поставленную задачу. :(
...
Рейтинг: 0 / 0
Криптографический покер
    #39583926
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Представим себе реальную ситуацию:

1. Колода карт лежит на столе
2. Все видят эту колоду карт, её нельзя подменить и посмотреть какие там карты
3. Все берут по 2 уникальных карты, количество карт в колоде уменьшается.
4. Никто не знает какие у кого карты, включая крупье, даже если один игрок играет скрытно от казино.

Нужно обеспечить такую же ситуацию, но на уровне приложения. Доверять серверу -- это не решение. Можно выпустить доверенные сертификаты, чтобы исключить атаки men-in-middle. На этом всякое доверие заканчивается.
...
Рейтинг: 0 / 0
Криптографический покер
    #39583941
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слышал, что абсолютно честное (поскольку децентрализованное) казино на блокчейне уже реализовано. Кажется даже не на отдельном блокчейне, а в виде контракта в Эфириуме...
...
Рейтинг: 0 / 0
Криптографический покер
    #39583942
Pu4koff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttPu4koffЗакрытые ключи пересылаются между игроками, на сервер не отправляются. Используется для обмена данными между игроками, чтобы сервер ничего не перехватил.

А зачем обмениваться закрытыми ключами? Может открытыми?

Это я налажал везде и напутал открытые с закрытыми. 2 часа ночи - они такие :)

У меня получается косяк в том, что сервер может сговориться с конкретным игроком и отправлять ему карты до тех пор, пока не придут нужные.
...
Рейтинг: 0 / 0
Криптографический покер
    #39583943
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttalekcvpИгроки согласованно генерируют набор карт [ID –> карта] любым образом и обмениваются ею между собой.
Но это означает, что любой игрок может вступить в сговор с сервером и таким образом сообща, раскрыть все карты на руках других игроков. Это может быть игрок, который управляет сервером (типа игрок от казино). Т.е. это не решает поставленную задачу. :(
В ТЗ не было пункта про исключение сговора игроков с сервером.

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

Пользуясь вашим примером: т.к. игроки не видят друг-друга и крупье, игроку от казино никто не может помешать сговориться с крупье, чтобы тот подглядывал в раздаваемые карты.
...
Рейтинг: 0 / 0
Криптографический покер
    #39583958
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpВ ТЗ не было пункта про исключение сговора игроков с сервером.

Напрямую не было :) Но это следует из того, что ни сервер ни любой из игроков не должен знать какие карты были выбраны из колоды.


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

Расклад не обязательно должен быть одинаковый для всех. Единственное что важно, это уникальность выбранных карт.

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

У меня есть решение, которое мне лично не нравится, так как не отвечает условиям задачи полностью.

Сервер тасует колоду, разбивает на N кучек, соответственно количеству игроков, каждый игрок выбирает по 2 карты из своей кучки. Таким образом сервер знает из какого набора выбраны карты, хотя не знает какие именно. И это позволяет рассчитывать вероятность победы для любого из игроков.

Можно упростить задачу.

Колода представляет собой 16 карт: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
Пусть будет 3-ое игроков.
После того, как игроки выбрали по 2 карты, в колоде остаётся 10 карт.
Сервер выбирает произвольные 3-5 карт и публикует их всем игрокам.
Оставшиеся 5 карт серверу тоже не должны быть известны, до окончания игры.
...
Рейтинг: 0 / 0
Криптографический покер
    #39583960
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttОставшиеся 5 карт серверу тоже не должны быть известны, до окончания игры.
Оставшиеся 5 карт в реальном казино известны _миру_, иначе бы их не существовало. В компьютерной игре аналог _мира_ наверное все же игровой сервер?
...
Рейтинг: 0 / 0
Криптографический покер
    #39583963
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRhVosttОставшиеся 5 карт серверу тоже не должны быть известны, до окончания игры.
Оставшиеся 5 карт в реальном казино известны _миру_, иначе бы их не существовало. В компьютерной игре аналог _мира_ наверное все же игровой сервер?

В реальном казино, эти карты лежат в колоде, содержание которой неизвестно. Ну я не беру в расчёт всякие шулерские технологии ))
...
Рейтинг: 0 / 0
Криптографический покер
    #39583967
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttВ реальном казино, эти карты лежат в колоде, содержание которой неизвестно. Ну я не беру в расчёт всякие шулерские технологии ))
Содержание колоды неизвестно всем участникам, но не "реальному миру", "колода существует в этом мире - мир знает ее содержание" - это ведь логичней чем "колода существует в этом мире и мир не знает ее содержания"?
...
Рейтинг: 0 / 0
Криптографический покер
    #39583983
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНу утечки это уже проблема защиты каналов, я речь про общий алгоритм.Это не утечки по открытым каналам, это сговор.
За столом - четыре игрока. Трое в сговоре и им не важно, кто именно из них выиграет - банк будет поделён на всех. Т.к. увеличение информации улучшает оценку вероятности - вся тройка данными о своих картах.
Мошенникам, в отличие от взломщиков, не требуется вклиниваться в канал между клиентом и сервером - достаточно, утрируя, голубиной почты.

Можете посмотреть "Большой куш", где Гарри Топор принимает данные прямо под носом у совсем не дружественных партнёров.
Вариантов мошенничества, когда каждый игрок у себя дома - вагон и маленькая тележка. Как и способов автоматизировать процесс вычисление оптимальных ходов на всю группу.

P.S. Про мошеннический сервер с двумя тузами даже обсуждать неинтересно: задача мошенника не вылететь из бизнеса, будучи пойманным за руку, а "долго и счастливо" доить простофиль.
С учётом того, что игровой сервер предоставляет платформу, где каждый рискует своими деньгами, а владельцы платформы живут на "входные" или проценты с выигрышей/ставок - совсем непонятно, зачем читерить с пятым тузом.
...
Рейтинг: 0 / 0
Криптографический покер
    #39583989
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovЗа столом - четыре игрока. Трое в сговоре и им не важно, кто именно из них выиграет - банк будет поделён на всех. Т.к. увеличение информации улучшает оценку вероятности - вся тройка данными о своих картах.
Мошенникам, в отличие от взломщиков, не требуется вклиниваться в канал между клиентом и сервером - достаточно, утрируя, голубиной почты.

Это допустимо по условиям задачи. Алгоритм должен лишь обеспечивать сокрытие и сохранность информации до момента её раскрытия всем участникам.

Когда трое в сговоре, они могут поделиться информацией о картах друг друга, но не узнать что там у четвёртого.


Basil A. SidorovP.S. Про мошеннический сервер с двумя тузами даже обсуждать неинтересно: задача мошенника не вылететь из бизнеса, будучи пойманным за руку, а "долго и счастливо" доить простофиль.
С учётом того, что игровой сервер предоставляет платформу, где каждый рискует своими деньгами, а владельцы платформы живут на "входные" или проценты с выигрышей/ставок - совсем непонятно, зачем читерить с пятым тузом.

Меня интересует не сколько конкретно именно покера, сколько алгоритм реализации подобной схемы. Я не собираюсь делать очередное онлайн-казино и выбивать из должников деньги
...
Рейтинг: 0 / 0
Криптографический покер
    #39583991
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRСодержание колоды неизвестно всем участникам, но не "реальному миру", "колода существует в этом мире - мир знает ее содержание" - это ведь логичней чем "колода существует в этом мире и мир не знает ее содержания"?

ЯННП )
...
Рейтинг: 0 / 0
Криптографический покер
    #39583994
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttУ меня есть решение, которое мне лично не нравится, так как не отвечает условиям задачи полностью.

Сервер тасует колоду, разбивает на N кучек, соответственно количеству игроков, каждый игрок выбирает по 2 карты из своей кучки. Таким образом сервер знает из какого набора выбраны карты, хотя не знает какие именно. И это позволяет рассчитывать вероятность победы для любого из игроков.
А дополнительной сдачи там нет?.. Т.е. игроки получают карты только один раз?
Потому что если будет ещё хоть одна раздача, то либо надо заново разбивать карты на кучки, а для этого серверу надо узнать какие карты убрать из колоды, либо это уже не "честный" покер получается, когда доступные игроку карты ограничены ещё до раздачи.
...
Рейтинг: 0 / 0
Криптографический покер
    #39583997
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpА дополнительной сдачи там нет?.. Т.е. игроки получают карты только один раз?
Потому что если будет ещё хоть одна раздача, то либо надо заново разбивать карты на кучки, а для этого серверу надо узнать какие карты убрать из колоды, либо это уже не "честный" покер получается, когда доступные игроку карты ограничены ещё до раздачи.

Ну в данном варианте игроки получают карты только один раз. Согласен, что не честный, но пока вариантов больше не напрашивается :(
...
Рейтинг: 0 / 0
Криптографический покер
    #39584003
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЭто допустимо по условиям задачи. Алгоритм должен лишь обеспечивать сокрытие и сохранность информации до момента её раскрытия всем участникам.Асимметричные алгоритмы шифруют на паре "закрытый ключ отправителя - открытый ключ получателя", а расшифровывают на паре "закрытый ключ получателя - открытый ключ отправителя". Таким образом, отправитель не может расшифровать собственное зашифрованное послание.
Проблема в том, что сервер, который тасует и сдаёт колоду, всё равно имеет доступ к содержимому этой колоды - нет принципиальной разницы между хитромудрым алгоритмом и простым доверием "честному серверу".

В целом, наверное, можно попробовать такой вариант:
0. Доверенная сторона генерирует растасованную колоду, шифрует пары "карта - ЭП" индивидуальными ключами и заверяет всю колоду-цепочку ЭП;
1. Колода (список шифрованных пар, заверенный ЭП) публикуется сервером, который делает начальную раздачу и последующие выдачи карт;
2. Игрок, получив карты , запрашивает у доверенной стороны индивидуальные ключи и вскрывает то, что ему пришло.
3. Раздача сервера, запросы и вскрытия игроков подписываются личными ЭП.
...
Рейтинг: 0 / 0
Криптографический покер
    #39584012
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

серверу нужны хелперы - генераторы, тасовщики, раздатчики и т.д.
...
Рейтинг: 0 / 0
Криптографический покер
    #39584013
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, при такой постановке задачи и сервер не нужен.
Ведь что такое сервер, по-факту, в обычной игре? Это некая доверенная сторона, которая хранит и обрабатывает часть информации, доступа к которой игроки иметь не должны.

Однако, если мы допускаем что игрок (или несколько) могут иметь "сговор" с сервером и доступ к его информации, то алгоритм, который будет исключать такую ситуацию, будет прекрасно работать и в том случае, если сервером изначально будет один из игроков (можно считать что он изначально "сговорился" с сервером). Таким образом такой игре сервер и не нужен.

И вообще, мне кажется, что если решение этой задачи и существует, то это некий децентрализованный алгоритм.
...
Рейтинг: 0 / 0
Криптографический покер
    #39584022
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
25 сообщений из 156, страница 1 из 7
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Криптографический покер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]