Введение

Психический покер — это общее название для набора криптографических задач, связанных с обеспечением честной игры на расстоянии без привлечения доверенной третьей стороны. Этот термин также применяется к теориям, окружающим эти задачи, и их возможным решениям. Название происходит от карточной игры покер, которая является одной из игр, к которым применима эта задача. Схожие задачи, описываемые как игры для двух участников, включают бросание монеты Блума на расстоянии, проблему миллионеров Яо и необязательный перенос Рабина. Проблему можно сформулировать следующим образом: «Как предоставить доступ к определенной информации только авторизованным участникам, не используя доверенного посредника?» (Исключение доверенной третьей стороны позволяет избежать необходимости оценивать, можно ли ей доверять, а также может снизить требуемые ресурсы.) В контексте покера это можно интерпретировать так: «Как обеспечить, чтобы ни один из игроков не подтасовывал колоду и не подглядывал карты других игроков, когда мы сами тасуем колоду?» В обычной карточной игре это было бы относительно просто, если бы игроки сидели друг напротив друга и наблюдали друг за другом, по крайней мере, если исключить возможность традиционного мошенничества. Однако, если игроки находятся в разных местах и передают колоду друг другу (например, по почте), это внезапно становится очень сложной задачей. А в электронных карточных играх, таких как онлайн-покер, где механика игры скрыта от пользователя, это невозможно, если используемый метод не исключает возможности обмана путем манипулирования или несанкционированного наблюдения за электронной «колодой». Было предложено несколько протоколов для решения этой задачи, первый из которых разработан Ади Шамиром, Роном Ривестом и Леном Адлеманом (создателями протокола шифрования RSA). Этот протокол стал первым примером безопасных вычислений, выполняемых двумя сторонами, а не безопасной передачи сообщений с использованием криптографии. Позже, из-за утечки частичной информации в исходном протоколе, это привело к определению семантической безопасности Шафи Голдвассером и Сильвио Микали. Концепция психического покера с участием нескольких игроков была представлена в книге Моти Юнга 1984 года «Криптопротоколы». Впоследствии эта область развилась в то, что известно как протоколы безопасных многосторонних вычислений (как для двух, так и для нескольких участников).

Смешивание карт с использованием коммутативного шифрования

Один из возможных алгоритмов перемешивания карт без использования доверенной третьей стороны — использование коммутативной схемы шифрования. Коммутативная схема означает, что если одни и те же данные шифруются несколько раз, порядок расшифровки не будет иметь значения. Например: у Алисы есть сообщение в открытом виде. Она шифрует его, получая зашифрованный текст, который затем передает Бобу. Боб шифрует этот зашифрованный текст еще раз, используя ту же схему, что и Алиса, но с другим ключом. При расшифровке этого дважды зашифрованного сообщения, если схема шифрования коммутативная, неважно, кто расшифрует первым.

Слабость

Используемая схема шифрования должна быть устойчива к атакам по известному открытому тексту: Боб не должен иметь возможности определить исходный ключ Алисы А (или достаточную его часть, чтобы расшифровать любые карты, которыми он не владеет), основываясь на знании нешифрованных значений карт, которые он получил. Это исключает некоторые очевидные коммутативные схемы шифрования, такие как простое XOR-шифрование каждой карты с ключом. (Использование отдельного ключа для каждой карты даже на этапе первоначального обмена, что в противном случае обеспечило бы безопасность схемы, не подходит, поскольку карты перемешиваются до их возврата.) В зависимости от согласованной колоды карт, этот алгоритм может оказаться уязвимым. При шифровании данных некоторые характеристики этих данных могут сохраняться при переходе от открытого текста к зашифрованному тексту. Это может быть использовано для "идентификации" определенных карт. Поэтому стороны должны договориться об использовании колоды, в которой ни одна карта не обладает свойствами, сохраняющимися в процессе шифрования.

"Корзинка инструментов для ментальных карточных игр" и ее реализация

Кристиан Шиндельгауэр описывает сложные протоколы для выполнения и проверки большого числа полезных операций с картами и стопками карт в своей работе 1998 года «Набор инструментов для ментальных карточных игр» [SCH98]. Работа посвящена операциям общего назначения (маскирование и демаскирование карт, перемешивание и повторное перемешивание, вставка карты в стопку и т. п.), что делает протоколы применимыми к любой карточной игре. Криптографические протоколы, используемые Шиндельгауэром, основаны на свойствах квадратичных вычетов, а общая схема по духу схожа с описанным выше протоколом. Корректность операций можно проверить с помощью доказательств с нулевым разглашением, чтобы игрокам не приходилось раскрывать свою стратегию для проверки правильности игры. Библиотека C++ libtmcg [STA05] предоставляет реализацию набора инструментов Шиндельгауэра. Она была использована для реализации защищенной версии немецкой карточной игры Skat, продемонстрировав умеренную производительность в реальных условиях. В Skat играют три игрока с колодой из 32 карт, поэтому она значительно менее требовательна к вычислительным ресурсам, чем покер, в котором от пяти до восьми игроков используют полную колоду из 52 карт.