Можно ли сгенерировать действительно случайное число, используя ping для псевдослучайно выбранных IP-адресов? - PullRequest
55 голосов
/ 26 сентября 2008

Этот вопрос возник во время лекции по Comp Comp на втором курсе, в которой обсуждалась невозможность генерирования чисел в детерминированном вычислительном устройстве.

Это было единственное предложение, которое не зависело от оборудования не товарного класса.

Впоследствии никто не поставит под угрозу свою репутацию, чтобы окончательно утверждать за или против.

Любой, кто хочет выступить за или против. Если да, то как насчет упоминания о возможной реализации?

Ответы [ 23 ]

0 голосов
/ 26 сентября 2008

Это не кажется мне хорошим источником случайности.

Какой показатель вы бы использовали - очевидным является время отклика, но диапазон значений, которые вы можете разумно ожидать, невелик: от нескольких десятков миллисекунд до нескольких тысяч. Сами времена отклика будут следовать кривой колокольчика и не будут случайным образом распределены по какому-либо интервалу (как бы вы выбрали интервал?), Поэтому вам придется попытаться выбрать несколько «случайных» бит из чисел.

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

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

0 голосов
/ 14 июня 2010

вот мое предложение:

1 - выберите группу сайтов, которые находятся как можно дальше от вашего местоположения. например Если вы находитесь в США, попробуйте некоторые веб-сайты с IP-адресами серверов в Малайзии, Китае, России, Индии и т. д. лучше серверы с большим трафиком.

2- во время высокого интернет-трафика в вашей стране (в моей стране это с 7 до 11 часов вечера) пингуйте эти сайты много-много раз, принимайте каждый результат пинга (используйте только целочисленное значение) и рассчитайте модуль это (то есть из каждой операции ping вы получаете один бит: 0 или 1).

3 - повторить процесс в течение нескольких дней, записав результаты.

4 - собрать все биты, которые вы получили от всех ваших пингов (вероятно, вы получите сотни тысяч битов) и выбрать из них свои биты. (может быть, вы хотите выбрать биты, используя некоторые данные из того же метода, упомянутого выше :))

БУДЬТЕ ОСТОРОЖНЫ: в своем коде вы должны проверить время ожидания .. и т. Д.

0 голосов
/ 26 сентября 2008

Эх, я считаю, что этот тип вопросов довольно быстро приводит к дискуссии о значении слова «действительно случайный».

Я думаю, что измерение ping даст случайные биты приличного качества, но с недостаточной скоростью, чтобы быть очень полезной (если вы не захотите сделать серьезную DDOSing).

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

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

...