Алгоритмы карточных игр с применением криптографии без односторонних функций
Проект подготовили студенты группы 0372
Жуков Владимир Андреевич
Пахаревская Элина Станиславовна
1/44
Научный руководитель
Дужин Василий Сергеевич
Данная работа выполнена с использованием материалов статьи "Secrecy without one-way functions" (D. Grigoriev, V. Shpilrain, 2013)
2/44
Роли членов команды
Пахаревская Элина:
- презентация
- алгоритмы
Жуков Владимир:
- презентация
- алгоритмы
3/44
Содержание
Цель...........................................................................................................................3
Что такое односторонние функции?..................................................................4
Вспомогательные протоколы..............................................................................7
Протокол N0.........................................................................................................8
Протокол N1.......................................................................................................13
Протокол N2.......................................................................................................15
Протокол N2.1....................................................................................................17
Протокол N3.......................................................................................................19
Взрывные котята...................................................................................................21
Уно!...........................................................................................................................29
4/44
Рассмотреть практическое применение протоколов без односторонних функций в реализациях двух карточных игр разного уровня сложности интерпретации на язык криптографии с соблюдением честности игроков.
5/44
Цель
Что такое односторонние функции?
6/44
Односторонняя функция - это функция, которую довольно легко вычислить, но трудно* найти по значению функции соответствующее значение аргумента.
*Под «трудно найти» нужно понимать как: потребуется не один год расчетов с использованием ЭВМ.

7/44
Базовые протоколы:
1. N0 - распределение чисел
2. N1 - тасование колоды
3. N2, N2.1 - коллективная генерация числа
4. N3 - добор карт из колоды
Игры:
1. Взрывные котята
2. Уно
Множество проблем современной криптографии решается с помощью односторонних функций. Один из ярких примеров их использования – это хеш-функции. Если длина значения односторонней функции постоянна при любом аргументе, то ее называют хеш-функцией. Односторонние функции являются центральным понятием криптографии, однако само существование этих функций до сих пор не доказано, к тому же они имеют достаточно сложную реализацию. В данной работе предлагается рассмотреть некоторые криптографические протоколы и их применение в реализации карточных игр с учетом обеспечения честной игры.
8/44
Введение
Во всех описанных протоколах подразумевается следующее:
- все узлы находятся в широковещательной сети, причем каждый включен в замкнутую цепь \(P_1 \rightarrow P_2 \rightarrow \dots \rightarrow P_n \rightarrow P_1\) защищенных каналов связи, что необходимо для предотвращения перехвата данных
- каждый узел в точности выполняют поставленные каждому из них в протоколе задачи
- случаи, когда игроки объединяются, не учитываются
9/44
Вспомогательные протоколы
10/44
Протокол \(\mathsf{N0}\)
11/44
Цель: распределить числа от \(1\) до \(s*n\) между \(n\) игроками так, чтобы у каждого было \(s\) чисел, причем никто другой не знал какие.
Обозначения
\(P_i\) - игрок с индексом \(i\)
\(m\) - текущее число
\(s\) - количество чисел, которые получит каждый игрок
\(q_i\) - счетчик получения числа \(m\)
\(N\) - натуральное число, выбираемое участниками перед выполнением алгоритма
\(c_i\) - максимальное значение \(q_i\) (\(1 \le c_i \le N, c_i \in Z\))
\(n\) - количество игроков
12/44
- Узел \(P_1\) начинает алгоритм с "лишнего" значения \(m = 0\) и отправляет его \(P_2\).
- \(P_2\) отправляет \(P_3\) одно из двух значений: \(m\) или \(m+1\) по следующей схеме:
- если узел \(P_i\) встречает число впервые, то он отправляет \(m\) узлу \(P_{i+1}\) и генерирует новое значение счетчика \(c_i\), запоминая факт получения \(m\) (\(q_i = 1\));
- если узел \(P_i\) встречает число меньшее или равное количество раз счетчику \(c_i\) (\(q_i \le c_i\)), то он передает \(m\) узлу \(P_{i+1}\);
- если узел \(P_i\) встречает число большее количество раз, чем значение счетчика \(c_i\) (\(q_i \gt c_i\)), то он забирает себе число \(m\) и передает \(m+1\) узлу \(P_{i+1}\).
Обозначения
\(P_i\) - игрок с индексом \(i\)
\(m\) - текущее число
\(q_i\) - счетчик получения числа \(m\)
\(c_i\) - максимальное значение \(q_i\) (\(1 \le c_i \le N, c_i \in Z\))
13/44
- Описанный в пункте 2 алгоритм повторяет каждый узел до тех пор, пока у каждого участника не будет \(s\) значений (не считая \(0\)). Если у узла уже имеется \(s\) чисел, то он "пропускает ход", просто передавая полученное значение следующему узлу, пока остальные участники не доберут \(s\) чисел.
Обозначения
\(s\) - количество чисел, которые получит каждый игрок
14/44
- Когда один из игроков забирает себе последнее значение из \(s\) возможных, он передает его далее, как будто он не забирал его себе.
- Алгоритм прекращает свою работу, когда последнее значение из возможных \(n*s\) проходит \(N+1\) циклов.
Обозначения
\(s\) - количество чисел, которые получит каждый игрок
\(n\) - количество игроков
\(c_i\) - максимальное число раз, когда игрок получает текущее число \(m\) (\(1 \le c_i \le N, c_i \in Z\))
15/44
Протокол \(\mathsf{N1}\)
16/44
Цель: перетасовать карты методом Кнута.
- \(P_i\) начинает выполнение протокола, сообщая об этом остальным
- Все игроки заводят счетчик \(q = 1\) и начинают проверять общий канал связи на наличие чисел
- \(P_i\) выполняет протокол \(N2.1\), получая позицию карты, которую все узлы меняют с картой на позиции \(q\), увеличивая \(q\) на 1.
- Шаг 3 выполняется игроком \(P_{i+1}\), пока \(q \neq M\).
Обозначения
\(M\) - количество карт
\(N2.1\) - протокол коллективной генерации случайного числа
17/44
Протокол \(\mathsf{N2}\)
18/44
Цель: секретно сгенерировать случайное число с помощью смежных узлов.
Обозначения
\(n\) - Количество узлов
\(n_i\) - случайно сгенерированное число узлом \(i\)
\(M\) - количество карт в колоде
\(P_i\) - узел под номером \(i\), \(i \in [1, n]\)
- \(P_{i-1}\) и \(P_{i+1}\) тайно и независимо генерируют значения \(n_{i-1}\) и \(n_{i+1}\) по модулю числа \(M\).
- \(P_{i-1}\) и \(P_{i+1}\) передают свои \(n_{i-1}\) и \(n_{i+1}\) узлу \(P_i\).
- \(P_i\) складывает полученные числа и сохраняет себе сумму \(n_i = (n_{i-1} + n_{i+1}) \mod M\).
19/44
Протокол \(\mathsf{N2.1}\)
20/44
Цель: cгенерировать случайное число с помощью смежных узлов так, чтобы узел не мог сделать это нечестным образом (например, заменить его на свое).
Обозначения
\(n_i\) - случайно сгенерированное число узла \(i\)
\(n\) - количество узлов
\(M\) - количество карт в колоде
- \(P_{i-1}\) и \(P_{i+1}\) независимо генерируют значения \(n_{i-1}\) и \(n_{i+1}\) по модулю числа \(M\).
- \(P_{i-1}\) и \(P_{i+1}\) передают свои \(n_{i-1}\) и \(n_{i+1}\) всем узлам.
- \(P_i\) складывает полученные числа и сохраняет себе сумму \(n_i = (n_{i-1} + n_{i+1}) \mod M\).
- \(P_i\) передает число \(n_i\) всем узлам, которые выполняют проверку.
21/44
Протокол \(\mathsf{N3}\)
22/44
Цель: секретно взять \(k\) карт из колоды.
- Добрать \(k\) карт из множества \(K\),
соответствующие свободным индексам - Если индексы закончились, то
- Собрать свободные индексы у всех игроков
- Составить новое множество \(K\) из карт, находящихся на позициях полученных индексов
- Если индексов достаточно мало, то смешать \(K\) с \(N\) \(^*\)
- Выполнить протокол \(N0\) для \(s = M/n\)
- Добрать оставшиеся карты
Обозначения
\(K\) - множество карт добора
\(M\) - количество карт в колоде \(K\)
\(N\) - множество карт сброса
\(*\) - если правила игры позволяют.
23/44
Взрывные котята
24/44
Правила
Начальные условия
- Количество игроков от двух до пяти.
- В колоде \(56\) карт, среди которых \(6\) зеленых, \(4\) черных, а остальные - нейтральные.
25/44
Процесс игры
- В начале игры каждый игрок получает по \(1\) зеленой карте, \((6-n)\) оставшихся замешиваются в колоду (если игроков не более \(3\), то замешиваются \(2\), остальные удаляются из игры);
- Черных карт замешивается в колоду на единицу меньше, чем игроков;
26/44
- Каждый игрок в начале хода тянет одну карту из колоды
- если вытянул НЕЙТРАЛЬНУЮ: помещает в колоду сброса;
- если вытянул ЗЕЛЕНУЮ: забирает себе;
- если вытянул ЧЕРНУЮ: проверяет наличие зеленой карты
- если зеленая есть: черную вмешивает в колоду, а зеленую сбрасывает
- если зеленой нет: игрок проиграл.
27/44
Обозначения:
\(n\) - количество игроков \((2 \le n \le 5)\)
\(K\) - множество карт колоды (\(\tilde K = 56\))
\(N\) - множество карт сброса
Протокол
28/44
Обозначения:
\(n\) - количество игроков
\(K\) - множество карт добора
- Игрок-инициатор начинает игру, сообщая об этом остальным.
- Все игроки собирают новую колоду \(K\) в зависимости от значения \(n\):
- Если \(n \ge 4\): \(\tilde K = 46 + (6 - n) + (n - 1) = 51\)
- Если \(n \le 3\): \(\tilde K = 46 + 2 + (n - 1) = 47 + n\ (\tilde K \in [49, 50])\)
Примечание: карты в колоде \(K\) располагаются в порядке: нейтральные, черные, зеленые.
29/44
- Каждый игрок забирает одну зеленую карту без удаления ее из колоды (это выполнимо, так как в шаге 2 зеленых карт в колоде \(6 - n\)).
- Выполняется тасование (протокол \(N1\)).
- Игроки выбирают участника, который сделает первый ход, выбирая случайную карту с помощью протокола \(N2.1\) (карта же удаляется из \(K\)), после чего делает проверку.
Обозначения
\(n\) - количество игроков
\(K\) - множество карт добора
\(N1\) - протокол тасования
\(N2.1\) - протокол генерации случайного числа с помощью смежных узлов
30/44
После чего участник делает проверку:
- Если карта нейтральная, он помещает ее во множество \(N\)
- Если карта зеленая, он забирает ее
- Если карта черная, он проверяет наличие у себя зеленой карты:
- Если она есть, то она помещается в \(N\), а черная возвращается на исходное место (для больше случайности можно выполнить протокол N1, но это не обязательно)
- Если ее нет, то игрок выбывает
Обозначения
\(N\) - множество карт колоды сброса
\(N1\) - протокол тасования
31/44
"Уно!"
32/44
Правила
Есть две колоды "прикуп" и "сброс". Из первой игроки выбирают карты, а во вторую - сбрасывают.
Каждая карта представлена в 4 цветах: красный, синий, желтый и зеленый.
В начале игры каждому игроку выдается по 7 карт. После этого все выбирают каким-то способом первого игрока, который сделает первый ход.
В колоде "прикуп" изначально имеется 108 карт, среди которых
- цифровые карты от 1 до 9 в двойном количестве и по одной с цифрой 0
- активные карты "пропусти ход", "возьми две" и "наоборот" в двойном количестве
- черные активный карты "закажи цвет" и "закажи цвет и возьми 4 карты" по одной
33/44
Ходы передаются по часовой стрелке. Во время своего хода игрок может выложить карту по одному из следующих правил:
- карта одного цвета с последней в колоде сброса
- карта должна иметь ту же цифру
- карта должна быть активной и иметь ту же картинку
- карта должна быть черной активной
Если у игрока нет подходящей карты, то он берет одну из колоды "прикуп" и выкидывает ее если это возможно, иначе оставляет себе, а ход передается следующему игроку.
34/44
Игра продолжается до тех пор, пока кто-то из игроков не скинет все свои карты. Он и будет победителем.
Правило "Уно!"
Если после выкидывания карты у игрока остается одна и кто-то раньше него говорит "Уно", то он берет одну карту из колоды "прикуп".
35/44
Протокол
Обозначения
\(n\) - количество игроков
\(m\) - начальное число карт на руках у игрока (\(m = 7\))
\(K\) - множество карт "прикуп" (\(\tilde K = 108\))
\(N\) - множество карт "сброс"
\(Q_i\) - множество карт, имеющиеся на руках игроков
\(L_i\) - множество карт, которые игрок взять не может
36/44
- Игрок \(P_i\) начинает игру, о чем сообщает остальным
- Выполняются протоколы \(N0\) (для \(s = \tilde K/n\)) и \(N1\), после чего игроки берут \(m\) карт
- Выбирается игрок \(P_i\), который делает первый ход и передает его следующему \(P_{i+1}\)
Обозначения
\(\tilde K\) - количество карт во множестве добора
\(n\) - число игроков
\(m\) - начальное число карт на руках у игрока
\(N0\) - протокол выдачи s чисел игрокам
\(N1\) - протокол тасования
37/44
- Игрок \(P_i\) проверяет возможность выполнения хода:
- Если такая возможность есть, то он выкидывает карту, а ход передается следующему
- Иначе выполняется протокол \(N3\) для \(k = 1\):
- Если после взятия карты ход возможен, он ее выкидывает и передает ход следующему игроку
- Иначе передает ход игроку \(P_{i+1}\)
Обозначения
\(L_i\) - множество карт, которые игрок взять не может
\(N3\) - протокол добора \(k\) карт
Примечание: каждая выброшенная карта игроком \(P_i\) заносится во множество \(L_i\).
38/44
Честность
Возможные варианты лжи
- Игрок взял не свою карту
- Игрок выкинул не свою карту
- Игрок заявил, что выкинутая карта другого игрока принадлежит ему
39/44
Игрок взял не свою карту
Решение
Ложь выявится в процессе игры: когда он выкинет эту карту, другой игрок заметит, что индекс этой карты принадлежит ему, о чем сообщит остальным.
40/44
Игрок выкинул не свою карту
Решение
Как только игрок выкинет не свою карту, другой игрок это заметит и сообщит остальным.
41/44
Игрок заявил, что выкинутая карта другого игрока принадлежит ему
Решение
Оба игрока сообщают свои счетчики \(q_i\) и \(q_j\), соответствующие карте и сгенерированные в процессе выполнения протоколов \(N0\) или \(N3\). У кого его не будет или он окажется больше, тот и лжет.
Если же так получилось, что эти числа равны, то игру начинают заново, потому что определение лжеца не представляется возможным.
42/44
Вариант реализации честной игры
Все действия, совершаемые игроками, на любом этапе игры и выполнении любого протокола, записываются в логи. Они позволяют согласовать состояние всей системы и обнаружить игроков, играющих нечестно.
43/44
44/44
Спасибо за внимание!
No one-way functions card games algorithms
By Vladimir Z
No one-way functions card games algorithms
- 327