Подтвердить что ты не робот

Генерация распределенного случайного числа

Мне было интересно, есть ли способ, чтобы сеть из N участников согласилась с тем, что число от 1 до М было выбрано случайным образом. (например, без влияния какого-либо из участников). Это было решено для значений n = 2 и m = 2 с помощью

4b9b3361

Ответ 1

Edit

Лучший алгоритм (спасибо wnoise):

  • Каждый выбирает секретный номер от 0 до M-1
  • Каждый добавляет нагрузку случайного gunk к своему числу и хеширует результат с помощью безопасного хэша
  • Все говорят всем, что этот хэш
  • Все говорят каждому другому свой секретный номер, плюс случайный мусор, к которому они присоединяются.
  • Каждый проверяет соответствие чисел и хэшей + gunk
  • Добавьте все секретные числа вместе по модулю M, затем добавьте 1, чтобы получить окончательный результат

Как участник, я должен быть доволен этим, потому что я знаю, что я имел полное влияние на конечный результат - окончательное число могло быть вообще чем угодно, в зависимости от моего выбора секретного номера. Поэтому, поскольку никто другой не мог предсказать мой номер, они также не могли предсказать конечный результат.

Любой способ уменьшить сообщения от 3M ^ 2, которые, как я подозреваю, потребует широковещательный подход?

Я считаю, что только хеш-публикация должна быть широковещательной, но она все еще O (M ^ 2). Я предполагаю, что единственный способ - это обмен ключами цифровой подписи или наличие надежного узла связи.

Edit2. Насколько безопасно это хеширование?

Возможные атаки включают:

  • Если я могу создать хэш-столкновение, тогда у меня есть два секретных номера с одинаковым хэшем. Поэтому, когда я знаю все остальные секретные номера, я могу выбрать, какие из моих секретных номеров вывести, выбрав один из двух возможных результатов.
  • Если я создаю свой секретный номер и случайный мусор с помощью PRNG, тогда злоумышленник, пытающийся переборщить мой хэш, не должен пытаться использовать все возможные числа + gunk, только все возможные семена для PRNG.
  • Я использую число + gunk, которое каждый обнаруживает, чтобы определить информацию об их PRNG - я мог бы попытаться угадать или переборщить семена или вычислить внутреннее состояние с выхода. Это помогает мне предсказать, какие числа они будут генерировать в следующий раз, что сужает пространство поиска для атаки грубой силы.

Поэтому вы должны

  • Использовать надежный, непрерывный алгоритм хэширования.
  • Используйте криптографически безопасный генератор случайных чисел, который имеет большое семя/состояние, и попытайтесь высеять его из хорошего источника энтропии.

Ответ 2

Я не знаю, можно ли людям договориться о случайности одного числа; это должно быть в статистике. Если статистика многих случайных чисел соответствовала статистике чисел, взятых из здесь, я бы рассмотрел ваш номер случайным образом, но я не знаю о следующего парня N + 1 в сети.

Ответ 3

Это, вероятно, не то, что вы ищете, а просто начать эту тему, как об этом -
Выберите лидера, пусть лидер выбирает номер, распределяет его всем.