SLY_G
@SLY_G
журналист, переводчик, программист, стартапщик

Где взять случайное целое число, подлежащее сторонней проверке?

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

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

Вот только не могу придумать простой способ найти это случайное целое. Всё, что в голову приходит — количество символов в статье в каком-нибудь новостном издании, которая появится в определённый день в определённое время на главной странице. Но мне кажется, это не очень удобно и красиво.
  • Вопрос задан
  • 3602 просмотра
Решения вопроса 1
Вариант с кол-во символов в статье — хороший, наглядный, как по мне — лучше random.org. Еще лучше взять к примеру «Фото дня» на yandex, fotki.yandex.ru/calendar/ и сказать, что номер победителя будет определен как остаток от деления ID фото дня на день окончания конкурса (или можно взять размер в байтах, но ID проще и так же случайно) на кол-во участников. Фото дня за любую дату потом можно просмотреть в любое время.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@rPman
На текущий момент ЕДИНСТВЕННЫЙ генератор случайных чисел не подверженный манипуляциям и проверяемый (точнее с точной оценкой гарантии в деньгах или иных понятных величинах) — это bitcoin (а точнее любые криптовалюты, просто он достаточно дорогой).

Из недостатков — вы можете получить любое количество псевдослучайных чисел на базе нескольких случайных величинах (хеши из блоков или id транзакций), которые формируются (а точнее принимаются) не чаще чем достаточно большой интервал, а гарантия напрямую зависит от их количества. Речь идет о десятках минут и часах (6 подтверждений ~ час)… и главное, этот интервал тоже подвержен случайному числу.

Алгоритм очень прост — вы выбираете и публикуете — выбранную криптовалюту, номер блока (больше последнего найденного), алгоритм (детерминированный) получения числа из хеша блока и количество блоков, найденных после него (чем больше, тем дороже манипуляции, которые повышают вероятность 'отмены' значения).
Далее все участники ждут появления этого блока и необходимого количества блоков после него (это грубо говоря подтверждения) и вычисляют число по указанному алгоритму.

Возможные манипуляции — обладатель достаточных вычислительных мощностей (для PoW) и для некоторых криптовалют достаточного количества монет (для PoS), а сейчас разрабатываются еще более интересные технологии, например Proof-of-Wasted-Space (наличие памяти со случайным доступом) — может 'отменять' найденные блоки, таким образом меняя обнаруженное случайное число (но на какое то иное, значение которого так же не прогнозируемо).
Например пусть это будет следующий за текущим блок и 6 подтверждений после него. Алгоритм — последний байт в хеше блока (т.е. интервал числа 0..255)

Оценка стоимости атаки зависит от параметров сети, например для bitcoin это награда в блоке (статья исследование оценки требуемой мощности btcsec.com/double-spending/ ), на текущий момент это достаточно дорогое удовольствие (оценка стоимости хотя бы 2% — сейчас это 72терахеша — по цене хотя бы облачного майнинга cex.io в 0.12btc за GH/s ~ 8640btc или в$ по 223$/btc — ~2 миллиона $, и сюда не входит стоимость поддержания этого процента).
Ответ написан
Комментировать
Rulexec
@Rulexec
Метатеоретик теории типов
Спустя почти полгода придумал как мне кажется довольно надёждый алгоритм, не требующий никаких внешних данных.

Проблема только в относительной сложности. Нужно чтобы ВСЕ участники розыгрыша дважды вводили данные. Причём в худшем случае — несколько раз.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы