Бросить кости по электронной почте - PullRequest
7 голосов
/ 02 февраля 2011

Мне задали этот вопрос, но мне не удалось найти статью, в которой описан хороший метод. Вместо этого я выступил со своим собственным методом (см. Мой ответ ниже). Однако также возможно, что я просто придумал метод, который недостаточно умен, чтобы его сломать. Поэтому я передаю вам этот вопрос:

Алиса и Боб хотят поиграть в настольную игру по электронной почте. Им нужно найти способ бросить кости таким образом, чтобы не позволить им обмануть.

Какой хороший алгоритм для этого.

Ответы [ 7 ]

7 голосов
/ 02 февраля 2011

Это классическая проблема в криптографии.

Один из таких документов: Бросание монет по телефону .

Также есть очевидные результаты невозможности.

Например, ссылка [C86] в этой статье здесь: http://www.cs.columbia.edu/~dglasner/MyPapers/coin-cut.pdf

Надеюсь, что поможет.

4 голосов
/ 02 февраля 2011

Используйте доверенную третью сторону, такую ​​как http://rpglibrary.org/software/securedice, которая может отправлять по электронной почте броски костей с серийными номерами и хэш-кодом, который можно проверить онлайн.

4 голосов
/ 02 февраля 2011

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

4 голосов
/ 02 февраля 2011

Алиса и Боб должны иметь возможность отправить друг другу доказательство того, что они выбрали номер, прежде чем они покажут, какое число они выбрали.Затем номер, который они выбрали, нужно проверить на соответствие.Наконец, оба числа должны быть объединены таким образом, чтобы не дать каждому из них полный контроль над результатом.

В следующем crypto_function может быть что-то вроде sha1sum или md5sum:

Шаг 1 :

, необходимый для того, чтобы сделать диапазон возможных значений для crypto_function ниже достаточно большим

  • Алиса выбирает случайные числа Ra1 и Ra2 и отправляет Ra1 Бобу.
  • Боб выбирает случайные числа Rb1 и Rb2 и отправляет Rb1 Алисе.

Шаг 2 :

создает доказательство Hx, что значение Vx теперь зафиксировано, но не допускайте выведения этого значения из этого доказательства

  • Алиса выбирает значение Va (0 <= <code>Va <= 5), составляет строку <code>Sa="Va Ra2 Rb1" и отправляет Ha=crypto_hash(Sa) Бобу.
  • Бобвыбирает значение Vb (0 <= <code>Vb <= 5), составляет строку <code>Sb="Vb Rb2 Ra1" и отправляет Алисе Hb=crypto_hash(Sb).

Шаг 3 :

генерирует желаемый результат V

  • Алиса отправляет Sa Бобу.Боб вычисляет Ha из Sa и сравнивает его с Ha из шага 2. Затем берет Va из Sa и вычисляет значение V=(Va+Vb)%6+1.
  • Боб отправляет Sb Алисе.Алиса Вычислите Hb из Sb и сравните его с Hb из шага 2. Затем берете Vb из Sb и вычислите значение V=(Vb+Va)%6+1.

Обновление :

Основано на подбрасывании монет по телефону , предложенном @ Морон алгоритм может стать:

  1. Боб выбирает случайное число R и значение 0 <= Vb <= 5, вычисляет хеш H=crypto_hash("Vb R") и отправляет его Алисе.

  2. Алиса выбирает значение 0 <= Va <= 5 и отправляет его Бобу.

  3. Боб отправляет Vb и R Алисе;Боб вычисляет V=(Va+Vb)%6+1

  4. Алиса проверяет H=crypto_hash("Vb R");Алиса вычисляет V=(Va+Vb)%6+1

... Хотя я чувствую себя лучше, если:

0.Алиса выбирает случайное число Q и отправляет его Бобу.

И тогда хешируемая строка становится "Vb Q R".

2 голосов
/ 02 февраля 2011

Алиса и Боб договариваются о двух сеансовых ключах, используя что-то вроде Диффи-Хеллмана, Sa и Sb. Каждый сеансовый ключ является семенем генератора случайных чисел Ra и Rb.

ГСЧ используются в качестве одноразовых площадок для каждого броска кубика. Если Алиса хочет бросить, берет Ra[i], где i - это i-е случайное число в последовательности. Алиса отправляет Бобу i и Ra[i]. Боб может проверить i, используя свою собственную копию Ra.

Это делает Алису честной, требуя от нее использовать последовательные значения i, которые проверяются Бобом.

1 голос
/ 28 февраля 2012

Я получил ответ на похожий вопрос, который я задал: как я могу сделать кости за R? Ответом была программа для R в дополнение к программе для «интимных кубиков». Я не уверен, в каком фильме заинтересованы Алиса и Боб, но я предлагаю использовать R в дополнение к удаленному рабочему столу, чтобы каждый игрок мог видеть, что другой не обманывает.

Я не знаю, как писать коды, поэтому я скопировал / вставил полученный ответ:

Если вы хотите делать кости в статистической программе R. Начните с загрузки здесь: http://cran.r -project.org / .

Чтобы сделать нормальные кости, используйте следующий скрипт: # Функция броска костей RollDie = функция (n) выборка (1: 6, n, замена = T) #use Die RollDie (п)

#If you'd like to spice things up a bit and make a dice for safe and consensual adult
#activities then use the following series of scripts:

#Creating the function, use this script:
#Intimate dice function

Actions= c("kiss","lick","suck","bite",
"spank","blow", "stroke",
"tickle","pinch",
"torment")

Body= c("lips","arms","chest","thighs",
"neck","ear", "wrist",
"navel","nipples",
"the good stuff")

Action= function(n) sample(Actions[1:10],n,replace=T)

Area= function(n) sample(Body[1:10],n,replace=T)

Action(1)

Area(1)

#If you'd like the dice saved to the R global environment so you can be ready for when
the mood is right use the following script:

#Save the following script as yourfile.R in something like this location "C:\\Documents           
and Settings\\yourfile.R"

#Intimate dice
Action(1)
Area(1)
#yes

#Now create the following function to save to R's global environment with the following:    

#Run all
source("C:\\Documents and Settings\\yourfile.R",echo=T)

hi<-function(){source("C:\\Documents and Settings\\yourfile.R",echo=T)}

#ok

#close and save your R workspace 
#upon opening run the following function:
hi()
#If this has been done properly then you should see something along the lines of this:
#Intimate dice
Action(1)
[1] "bite"

Area(1)
[1] "ear"

#yes

#Here's to one more reason for celebrating math & science
0 голосов
/ 02 февраля 2011

Настроить автоматизированный сторонний сервер, где каждый отправляет туда электронные письма для проката и пересылки костей другому игроку?

В противном случае это просто слишком много работы, и я ухожу!

...