Я подумываю написать компьютерную адаптацию полупопулярной карточной игры. Я бы хотел, чтобы он функционировал без центрального сервера, и я пытаюсь разработать схему, которая сделает невозможным обман без необходимости доверять клиенту.
Основная проблема, как я вижу, в том, что у каждого игрока есть несколько грудов карт (колода для колоды, текущая рука и отбрасывающая колода). Для любого игрока не должно быть возможности изменять состав этих свай, за исключением случаев, когда это разрешено правилами игры (т.е. Рисованием или отбрасыванием карт), а также не должны быть в состоянии знать, что находится в их или их oppponent сваях.
Я чувствую, что для достижения этого должен быть какой-то способ использовать что-то вроде криптографии с открытым ключом, но я продолжаю искать дыры в своих схемах. Может ли кто-нибудь предложить протокол или указать мне некоторые ресурсы по этой теме?
[Изменить] Хорошо, поэтому я думал об этом немного больше, и вот идея, которую я придумал. Если вы можете вытолкнуть все дыры, сообщите мне.
В случайном порядке игрок имеет стек карт, значение которых им известно. Они берут эти значения, объединяют случайную соль к каждому, а затем хешируют их. Они записывают соли и передают хэши своему противнику.
Оппонент снова объединяет соль, хеширует, затем перетасовывает хеши и передает колоду обратно первоначальному игроку.
Я полагаю, что в этот момент колода была рандомизирована, и ни один игрок не может знать значения. Однако, когда карта нарисована, противник может показать свою соль, позволяя первому игроку определить, что такое первоначальное значение, и когда играется игра, игрок показывает свою соль, позволяя оппоненту проверить значение карты.