Проект подготовили студенты группы 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
Во всех описанных протоколах подразумевается следующее:
9/44
10/44
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_i\) - игрок с индексом \(i\)
\(m\) - текущее число
\(q_i\) - счетчик получения числа \(m\)
\(c_i\) - максимальное значение \(q_i\) (\(1 \le c_i \le N, c_i \in Z\))
13/44
Обозначения
\(s\) - количество чисел, которые получит каждый игрок
14/44
Обозначения
\(s\) - количество чисел, которые получит каждый игрок
\(n\) - количество игроков
\(c_i\) - максимальное число раз, когда игрок получает текущее число \(m\) (\(1 \le c_i \le N, c_i \in Z\))
15/44
16/44
Цель: перетасовать карты методом Кнута.
Обозначения
\(M\) - количество карт
\(N2.1\) - протокол коллективной генерации случайного числа
17/44
18/44
Цель: секретно сгенерировать случайное число с помощью смежных узлов.
Обозначения
\(n\) - Количество узлов
\(n_i\) - случайно сгенерированное число узлом \(i\)
\(M\) - количество карт в колоде
\(P_i\) - узел под номером \(i\), \(i \in [1, n]\)
19/44
20/44
Цель: cгенерировать случайное число с помощью смежных узлов так, чтобы узел не мог сделать это нечестным образом (например, заменить его на свое).
Обозначения
\(n_i\) - случайно сгенерированное число узла \(i\)
\(n\) - количество узлов
\(M\) - количество карт в колоде
21/44
22/44
Цель: секретно взять \(k\) карт из колоды.
Обозначения
\(K\) - множество карт добора
\(M\) - количество карт в колоде \(K\)
\(N\) - множество карт сброса
\(*\) - если правила игры позволяют.
23/44
24/44
Начальные условия
25/44
Процесс игры
26/44
27/44
Обозначения:
\(n\) - количество игроков \((2 \le n \le 5)\)
\(K\) - множество карт колоды (\(\tilde K = 56\))
\(N\) - множество карт сброса
28/44
Обозначения:
\(n\) - количество игроков
\(K\) - множество карт добора
Примечание: карты в колоде \(K\) располагаются в порядке: нейтральные, черные, зеленые.
29/44
Обозначения
\(n\) - количество игроков
\(K\) - множество карт добора
\(N1\) - протокол тасования
\(N2.1\) - протокол генерации случайного числа с помощью смежных узлов
30/44
После чего участник делает проверку:
Обозначения
\(N\) - множество карт колоды сброса
\(N1\) - протокол тасования
31/44
32/44
Есть две колоды "прикуп" и "сброс". Из первой игроки выбирают карты, а во вторую - сбрасывают.
Каждая карта представлена в 4 цветах: красный, синий, желтый и зеленый.
В начале игры каждому игроку выдается по 7 карт. После этого все выбирают каким-то способом первого игрока, который сделает первый ход.
В колоде "прикуп" изначально имеется 108 карт, среди которых
33/44
Ходы передаются по часовой стрелке. Во время своего хода игрок может выложить карту по одному из следующих правил:
Если у игрока нет подходящей карты, то он берет одну из колоды "прикуп" и выкидывает ее если это возможно, иначе оставляет себе, а ход передается следующему игроку.
34/44
Игра продолжается до тех пор, пока кто-то из игроков не скинет все свои карты. Он и будет победителем.
Правило "Уно!"
Если после выкидывания карты у игрока остается одна и кто-то раньше него говорит "Уно", то он берет одну карту из колоды "прикуп".
35/44
Обозначения
\(n\) - количество игроков
\(m\) - начальное число карт на руках у игрока (\(m = 7\))
\(K\) - множество карт "прикуп" (\(\tilde K = 108\))
\(N\) - множество карт "сброс"
\(Q_i\) - множество карт, имеющиеся на руках игроков
\(L_i\) - множество карт, которые игрок взять не может
36/44
Обозначения
\(\tilde K\) - количество карт во множестве добора
\(n\) - число игроков
\(m\) - начальное число карт на руках у игрока
\(N0\) - протокол выдачи s чисел игрокам
\(N1\) - протокол тасования
37/44
Обозначения
\(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