logo
 
?

как обмануть генератор случайных чисел

Знаете, иногда я вижу, что группе людей нужно выбрать некий случайный объект.

Например, дежурного, если нет графика, или он запутался (по поводу «правильных» графиков дежурств я бы тоже рассказал).

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

Люди совершают все эти действия, приходит долгожданный день и мы получаем… В лучшем случае мы так же получим видео, как организатор при помощи выбирает номер, а затем находит победителя в какой-нибудь таблице. Организаторы обещают честный рандом, но ничего, кроме их честного слова мы не имеем.

Они могут сотни раз снимать видео, пока не выпадет нужное число, подменить сайт на локалхосте и так далее.

Нет никаких гарантий, что мы получили действительно случайный выбор.

Я же считаю, что системы должны быть спроектированы таким образом, чтобы совершить нечто неправильное в них не было возможно, поэтому… Нам требуется получить нечто случайное, чтобы каждый участник был согласен с тем, что этот случайный объект был получен честным образом.

В реальном мире, если выбор бинарен — мы можем попросить кого-нибудь подбросить монетку (впрочем, можно бросать её долго, получить нужное кол-во бит и затем получить что угодно).

И мы будем видеть, что он действительно её бросил, что она взлетела, крутилась в воздухе, приземлилась и выпал действительно орёл или решка.

Но в интернете мы не можем видеть, что кто-то действительно что-то куда-то подбрасывает.

Поэтому нам нужен алгоритм, который бы не был централизированным и был бы легко проверяем.

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