Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
Вопрос возник. Возможно ли реализовать карточную игру покер (холдем) таким образом, чтобы можно было обеспечить полную защиту (понятное дело, криптографическую) процесса игры от подтасовки и мухлежа? Дано: 1. Игровой сервер — серверное приложение игры 2. Игроки (от 2-10) — приложение игрового клиента Условия: 1. Игроки получают по 2 карты из рандомно перетасованной колоды 2. На стол выкладывается от 3 до 5 карт из той же колоды 3. Ни сервер, ни другие игроки не могут знать или хоть как-то вычислить какие карты у других игроков, до окончания игры 4. Ни сервер, ни другие игроки не должны знать, какие карты выбраны из колоды, кроме выложенных на стол 5. Раздача карт ведётся из одной колоды, так, чтобы игроков не оказалось два пиковых туза 6. Ни один игрок не может, пользуясь незнанием других игроков, изменить свои карты на желаемые Интересует не конкретно реализация покера, а именно возможные алгоритмы. Есть идеи? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 00:11 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
У каждого игрока есть постоянная пара ключей. Закрытый лежит на сервере и не известен другим игрокам, открытый - только у конкретного игрока, в процессе игры никак по сети не гоняются. При начале игры каждый игрок генерирует себе временную пару ключей. Закрытые ключи пересылаются между игроками, на сервер не отправляются. Используется для обмена данными между игроками, чтобы сервер ничего не перехватил. Сервер генерирует колоду и каждую карту защищает своей цифровой подписью. Сервер отправляет колоду, допустим игроку № 1 - И1. Он перетасовывает колоду и рассылает другим игрокам (шифруя временными ключами). Каждый игрок соответственно перепроверяет, что с колодой всё нормально (цифровая подпись на месте, набор карт правильный) и шифрует её ключами каждого из игроков. Полученный набор зашифрованных карт пересылается каждым игроком на сервер. т.е. каждый игрок отправит на сервер табличку, в которой строка - это карта, а столбец - шифровка карты ключом соответствующего игрока. Сервер перепроверяет, что все игроки прислали одинаковые таблички и никто ничего не подменил. Еще раз тасует колоду. Для отправки конкретному игроку карта дополнительно шифруется соответствующим постоянным ключом. Соответственно закрытые карты расшифровываются игроком в два этапа: сначала постоянным ключом, а потом - временным. Открытые карты отправляются как есть и игроки их расшифровывают только своими временными ключами. Когда игрок вскрывается, сервер рассылает имеющиеся у него шифровки этих карт другим игрокам, те расшифровывают своими ключами и сверяют, что подмены не было и игроку действительно пришла от сервера эта карта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 02:38 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
hVostt, Ну, как вариант: 2 колоды: одна на сервере – с картами игроков, вторая у игроков – с номиналами карт. Игроки согласованно генерируют набор карт [ID –> карта] любым образом и обмениваются ею между собой. Все использованные ID отправляются на сервер (без номиналов). Сервер собирает колоду из 54х (или сколько там карт) ID, тасует её и раздаёт карты игрокам, часть карт выкладывает на стол. При этом игроки знают свои карты, но не знают карты на столе или карты других игроков, а сервер знает все карты, но не знает их номиналов. Дальше идёт сама игра как обычно. Когда все ставки закончились и все вскрываются – все игроки отправляют свои колоды (одинаковые!) на сервер, он сверяет их между собой и со своими данными о раздаче, строит расклад с номиналами и рассылает его игрокам. Игроки сверяют расклад со своими картами и подтверждают его. Раунд завершён. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 02:46 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
alekcvpПри этом игроки знают свои карты, но не знают карты на столе или карты других игроков При этом игроки знают свои карты и карты на столе, но не карты других игроков, разумеется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 02:48 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
hVostt1. Игроки получают по 2 карты из рандомно перетасованной колоды 2. На стол выкладывается от 3 до 5 карт из той же колоды 3. Ни сервер, ни другие игроки не могут знать или хоть как-то вычислить какие карты у других игроков, до окончания игры 4. Ни сервер, ни другие игроки не должны знать, какие карты выбраны из колоды, кроме выложенных на столС колодой работает игровой сервер, поэтому, в любом случае, игрокам придётся доверять серверу.5. Раздача карт ведётся из одной колоды, так, чтобы игроков не оказалось два пиковых тузаКосяк, который не могут позволить себе ни честный сервер, ни мошеннический. Пренебрегаем возможностью такого мухлежа со стороны сервера.6. Ни один игрок не может, пользуясь незнанием других игроков, изменить свои карты на желаемыеТривиальная электронная подпись раздач сервером. Надо отчётливо понимать, что никакая "интернет-схема" не защищена от утечек по по побочным каналам. Она же - игра на одну руку. Таким образом, серверу тоже придётся доверять игрокам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 11:41 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovКосяк, который не могут позволить себе ни честный сервер, ни мошеннический. Пренебрегаем возможностью такого мухлежа со стороны сервера. С таким пренебрежением, решение становится банальным и тривиальным. Basil A. SidorovНадо отчётливо понимать, что никакая "интернет-схема" не защищена от утечек по по побочным каналам. Она же - игра на одну руку. Таким образом, серверу тоже придётся доверять игрокам. Ну утечки это уже проблема защиты каналов, я речь про общий алгоритм. Вот как обмен сообщениями с помощью открытого/закрытого ключа, можно отправлять по открытым каналам. Атака in middle решается с помощью доверенных сертификатов. Но как организовать подобное для игры в покер — пока не понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 13:13 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
Pu4koffЗакрытые ключи пересылаются между игроками, на сервер не отправляются. Используется для обмена данными между игроками, чтобы сервер ничего не перехватил. А зачем обмениваться закрытыми ключами? Может открытыми? Pu4koffт.е. каждый игрок отправит на сервер табличку, в которой строка - это карта, а столбец - шифровка карты ключом соответствующего игрока. Сервер перепроверяет, что все игроки прислали одинаковые таблички и никто ничего не подменил. А как вычислить, что каждый игрок взял себе по карте, которую ОН ЗНАЕТ, но никто больше не знает, и при этом неизвестно, какие карты какой игрок взял, да и вообще, какие конкретно карты были извлечены, чтобы можно было делать предположения? Известно должно быть только карты, выложенные на стол. Тут всё бы ничего, если бы из колоды можно было брать любые карты. Но брать можно только из тех, которые другой игрок УЖЕ не взял. Как это вычислить и при этом не раскрыть информацию? Pu4koffСоответственно закрытые карты расшифровываются игроком в два этапа: сначала постоянным ключом, а потом - временным. Открытые карты отправляются как есть и игроки их расшифровывают только своими временными ключами. На самом деле шифровать карту не нужно, нужно шифровать номер карты в перетасованной колоде. Но номер карты, даже шифрованный, позволяет легко вычислить соответствие. А если этого не делать, то у игроков может оказаться по одной и той же карте. Проблема именно здесь. Непонятно как решать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 14:34 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
alekcvpИгроки согласованно генерируют набор карт [ID –> карта] любым образом и обмениваются ею между собой. Но это означает, что любой игрок может вступить в сговор с сервером и таким образом сообща, раскрыть все карты на руках других игроков. Это может быть игрок, который управляет сервером (типа игрок от казино). Т.е. это не решает поставленную задачу. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 14:36 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
Представим себе реальную ситуацию: 1. Колода карт лежит на столе 2. Все видят эту колоду карт, её нельзя подменить и посмотреть какие там карты 3. Все берут по 2 уникальных карты, количество карт в колоде уменьшается. 4. Никто не знает какие у кого карты, включая крупье, даже если один игрок играет скрытно от казино. Нужно обеспечить такую же ситуацию, но на уровне приложения. Доверять серверу -- это не решение. Можно выпустить доверенные сертификаты, чтобы исключить атаки men-in-middle. На этом всякое доверие заканчивается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 14:42 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
Слышал, что абсолютно честное (поскольку децентрализованное) казино на блокчейне уже реализовано. Кажется даже не на отдельном блокчейне, а в виде контракта в Эфириуме... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 15:26 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
hVosttPu4koffЗакрытые ключи пересылаются между игроками, на сервер не отправляются. Используется для обмена данными между игроками, чтобы сервер ничего не перехватил. А зачем обмениваться закрытыми ключами? Может открытыми? Это я налажал везде и напутал открытые с закрытыми. 2 часа ночи - они такие :) У меня получается косяк в том, что сервер может сговориться с конкретным игроком и отправлять ему карты до тех пор, пока не придут нужные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 15:27 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
hVosttalekcvpИгроки согласованно генерируют набор карт [ID –> карта] любым образом и обмениваются ею между собой. Но это означает, что любой игрок может вступить в сговор с сервером и таким образом сообща, раскрыть все карты на руках других игроков. Это может быть игрок, который управляет сервером (типа игрок от казино). Т.е. это не решает поставленную задачу. :( В ТЗ не было пункта про исключение сговора игроков с сервером. Но в данном случае задача нерешаема, т.к. кто-то должен обязательно знать какие карты были выданы, а игроки должны знать расклад, причём этот расклад одинаковый для всех. Пользуясь вашим примером: т.к. игроки не видят друг-друга и крупье, игроку от казино никто не может помешать сговориться с крупье, чтобы тот подглядывал в раздаваемые карты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 15:32 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
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 карт серверу тоже не должны быть известны, до окончания игры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 16:33 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
hVosttОставшиеся 5 карт серверу тоже не должны быть известны, до окончания игры. Оставшиеся 5 карт в реальном казино известны _миру_, иначе бы их не существовало. В компьютерной игре аналог _мира_ наверное все же игровой сервер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 16:45 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
LRhVosttОставшиеся 5 карт серверу тоже не должны быть известны, до окончания игры. Оставшиеся 5 карт в реальном казино известны _миру_, иначе бы их не существовало. В компьютерной игре аналог _мира_ наверное все же игровой сервер? В реальном казино, эти карты лежат в колоде, содержание которой неизвестно. Ну я не беру в расчёт всякие шулерские технологии )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 16:51 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
hVosttВ реальном казино, эти карты лежат в колоде, содержание которой неизвестно. Ну я не беру в расчёт всякие шулерские технологии )) Содержание колоды неизвестно всем участникам, но не "реальному миру", "колода существует в этом мире - мир знает ее содержание" - это ведь логичней чем "колода существует в этом мире и мир не знает ее содержания"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 16:55 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
hVosttНу утечки это уже проблема защиты каналов, я речь про общий алгоритм.Это не утечки по открытым каналам, это сговор. За столом - четыре игрока. Трое в сговоре и им не важно, кто именно из них выиграет - банк будет поделён на всех. Т.к. увеличение информации улучшает оценку вероятности - вся тройка данными о своих картах. Мошенникам, в отличие от взломщиков, не требуется вклиниваться в канал между клиентом и сервером - достаточно, утрируя, голубиной почты. Можете посмотреть "Большой куш", где Гарри Топор принимает данные прямо под носом у совсем не дружественных партнёров. Вариантов мошенничества, когда каждый игрок у себя дома - вагон и маленькая тележка. Как и способов автоматизировать процесс вычисление оптимальных ходов на всю группу. P.S. Про мошеннический сервер с двумя тузами даже обсуждать неинтересно: задача мошенника не вылететь из бизнеса, будучи пойманным за руку, а "долго и счастливо" доить простофиль. С учётом того, что игровой сервер предоставляет платформу, где каждый рискует своими деньгами, а владельцы платформы живут на "входные" или проценты с выигрышей/ставок - совсем непонятно, зачем читерить с пятым тузом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 17:42 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovЗа столом - четыре игрока. Трое в сговоре и им не важно, кто именно из них выиграет - банк будет поделён на всех. Т.к. увеличение информации улучшает оценку вероятности - вся тройка данными о своих картах. Мошенникам, в отличие от взломщиков, не требуется вклиниваться в канал между клиентом и сервером - достаточно, утрируя, голубиной почты. Это допустимо по условиям задачи. Алгоритм должен лишь обеспечивать сокрытие и сохранность информации до момента её раскрытия всем участникам. Когда трое в сговоре, они могут поделиться информацией о картах друг друга, но не узнать что там у четвёртого. Basil A. SidorovP.S. Про мошеннический сервер с двумя тузами даже обсуждать неинтересно: задача мошенника не вылететь из бизнеса, будучи пойманным за руку, а "долго и счастливо" доить простофиль. С учётом того, что игровой сервер предоставляет платформу, где каждый рискует своими деньгами, а владельцы платформы живут на "входные" или проценты с выигрышей/ставок - совсем непонятно, зачем читерить с пятым тузом. Меня интересует не сколько конкретно именно покера, сколько алгоритм реализации подобной схемы. Я не собираюсь делать очередное онлайн-казино и выбивать из должников деньги ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 18:14 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
LRСодержание колоды неизвестно всем участникам, но не "реальному миру", "колода существует в этом мире - мир знает ее содержание" - это ведь логичней чем "колода существует в этом мире и мир не знает ее содержания"? ЯННП ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 18:14 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
hVosttУ меня есть решение, которое мне лично не нравится, так как не отвечает условиям задачи полностью. Сервер тасует колоду, разбивает на N кучек, соответственно количеству игроков, каждый игрок выбирает по 2 карты из своей кучки. Таким образом сервер знает из какого набора выбраны карты, хотя не знает какие именно. И это позволяет рассчитывать вероятность победы для любого из игроков. А дополнительной сдачи там нет?.. Т.е. игроки получают карты только один раз? Потому что если будет ещё хоть одна раздача, то либо надо заново разбивать карты на кучки, а для этого серверу надо узнать какие карты убрать из колоды, либо это уже не "честный" покер получается, когда доступные игроку карты ограничены ещё до раздачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 18:30 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
alekcvpА дополнительной сдачи там нет?.. Т.е. игроки получают карты только один раз? Потому что если будет ещё хоть одна раздача, то либо надо заново разбивать карты на кучки, а для этого серверу надо узнать какие карты убрать из колоды, либо это уже не "честный" покер получается, когда доступные игроку карты ограничены ещё до раздачи. Ну в данном варианте игроки получают карты только один раз. Согласен, что не честный, но пока вариантов больше не напрашивается :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 18:55 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
hVosttЭто допустимо по условиям задачи. Алгоритм должен лишь обеспечивать сокрытие и сохранность информации до момента её раскрытия всем участникам.Асимметричные алгоритмы шифруют на паре "закрытый ключ отправителя - открытый ключ получателя", а расшифровывают на паре "закрытый ключ получателя - открытый ключ отправителя". Таким образом, отправитель не может расшифровать собственное зашифрованное послание. Проблема в том, что сервер, который тасует и сдаёт колоду, всё равно имеет доступ к содержимому этой колоды - нет принципиальной разницы между хитромудрым алгоритмом и простым доверием "честному серверу". В целом, наверное, можно попробовать такой вариант: 0. Доверенная сторона генерирует растасованную колоду, шифрует пары "карта - ЭП" индивидуальными ключами и заверяет всю колоду-цепочку ЭП; 1. Колода (список шифрованных пар, заверенный ЭП) публикуется сервером, который делает начальную раздачу и последующие выдачи карт; 2. Игрок, получив карты , запрашивает у доверенной стороны индивидуальные ключи и вскрывает то, что ему пришло. 3. Раздача сервера, запросы и вскрытия игроков подписываются личными ЭП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 19:19 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
hVostt, серверу нужны хелперы - генераторы, тасовщики, раздатчики и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 19:39 |
|
||
|
Криптографический покер
|
|||
|---|---|---|---|
|
#18+
Вообще, при такой постановке задачи и сервер не нужен. Ведь что такое сервер, по-факту, в обычной игре? Это некая доверенная сторона, которая хранит и обрабатывает часть информации, доступа к которой игроки иметь не должны. Однако, если мы допускаем что игрок (или несколько) могут иметь "сговор" с сервером и доступ к его информации, то алгоритм, который будет исключать такую ситуацию, будет прекрасно работать и в том случае, если сервером изначально будет один из игроков (можно считать что он изначально "сговорился" с сервером). Таким образом такой игре сервер и не нужен. И вообще, мне кажется, что если решение этой задачи и существует, то это некий децентрализованный алгоритм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2018, 19:39 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39583834&tid=1340184]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
189ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 309ms |

| 0 / 0 |
