Действительно случайное число могло быть сгенерировано с помощью ping для псевдослучайным образом выбранных IP-адресов?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

55
задан 14 revs, 6 users 82% 2 August 2017 в 17:26
поделиться

23 ответа

Нет.

А злонамеренная машина в Вашей сети могла использовать спуфинг ARP (или много других методов) для прерывания ping и ответа им после определенных периодов. Они тогда не только знали бы, каковы Ваши случайные числа, но они также управляли бы ими.

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

энтропия Рисунка от устройств, подключенных к Вашей машине, является хорошо изученным принципом, и за и против различных видов устройств и методов измерения могут быть, например, украдены от реализации/dev/random.

[ Редактирование : как общий принцип, при работе в основных принципах безопасности (и единственные практические потребности в значительных количествах действительно случайных данных связаны с безопасностью) НЕОБХОДИМО предположить, что фантастически хорошо снабженный, определенный взломщик сделает все, что в их власти для повреждения системы.

Для практической безопасности, можно предположить, что никто не хочет ключ PGP, что плохо, и соглашается на компромисс безопасности против стоимости. Но при изобретении алгоритмов и методов, необходимо дать им самые сильные гарантии безопасности, с которыми они могли когда-либо возможно сталкиваться. Так как я могу полагать, что кто-то, где-нибудь, мог бы хотеть, чтобы чужой закрытый ключ достаточно плохо создал этот бит набора для нанесения поражения предложению, я не могу принять его как усовершенствование по текущей лучшей практике. AFAIK/dev/random следует справедливо близко к лучшей практике для генерации действительно случайных данных по дешевому домашнему ПК]

[ Другое редактирование : это предложило в комментариях, что (1) это верно для любого TRNG, что на физический процесс можно было влиять и (2) это проблемы безопасности не применяется здесь так или иначе.

ответ на (1) - то, что возможно на любых реальных аппаратных средствах сделать настолько лучше, чем время отклика ping и собрать больше энтропии быстрее, что это предложение является нерешением. В терминах CS, очевидно, Вы не можете генерировать случайные числа на детерминированной машине, которая является тем, что вызвало вопрос. Но тогда в терминах CS, машина с внешним входным потоком недетерминирована по определению, поэтому если мы говорим о ping тогда, мы не говорим о детерминированных машинах. Таким образом, имеет смысл смотреть на реальные исходные данные, которые реальные машины имеют и рассматривают их как источники случайности. Неважно, что Ваша машина, необработанные времена ping не высоки в списке доступных источников, таким образом, они могут быть исключены прежде, чем вызвать беспокойство о пользе, лучшие. Предположение, что сеть не ниспровергается, является намного большим (и ненужный) предположение, чем предположение, что Ваши собственные аппаратные средства не ниспровергаются.

ответ на (2) является философским. Если Вы не возражаете против своих случайных чисел, имеющих свойство, что они могут быть выбраны в прихоти вместо случайно, то это предложение в порядке. Но это не то, что я понимаю под термином 'случайный'. Просто, потому что что-то непоследовательно, не означает, что это обязательно случайно.

Наконец, для обращения к деталям реализации предложения согласно просьбе: принятие Вас принимает времена ping как случайные, Вы все еще не можете использовать необработанные времена ping в качестве вывода RNG. Вы не знаете их распределение вероятностей, и они, конечно, не равномерно распределены (который обычно является, что люди хотят от RNG).

Так, необходимо решить, на какое количество битов энтропии на ping Вы готовы полагаться. Энтропия является точно определенным математическим свойством случайной переменной, которую можно обоснованно считать мерой того, насколько 'случайный' это на самом деле. На практике Вы находите нижнюю границу, которой Вы довольны. Тогда хешируйте вместе много исходных данных и преобразуйте, это во многие биты вывода, меньше чем или равного общему количеству, положилось на энтропию исходных данных. 'Общее количество' не обязательно означает сумму: если исходные данные статистически независимы тогда, это - сумма, но это вряд ли будет иметь место для ping, таким образом, часть Вашей энтропийной оценки должна будет составлять корреляцию. Сложную старшую сестру этой операции хеширования называют 'энтропийным коллектором', и все хорошие Ose имеют тот.

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

83
ответ дан Steve Jessop 26 November 2019 в 17:38
поделиться

Я предполагаю, что Вы могли. Пара вещей не упустить:

  • , Даже если проверка с помощью ping-запросов случайных IP-адресов, первые несколько транзитных участков (с Вас на первый реальный маршрутизатор L3 в сети ISP) будут тем же для каждого пакета. Это помещает нижнюю границу на круговую задержку даже при проверке с помощью ping-запросов чего-то в центре обработки данных в той первой Точке присутствия. Таким образом, необходимо быть осторожны относительно нормализации синхронизации, на распространении в прямом и обратном направлениях существует нижняя граница.
  • необходимо было бы также быть осторожны относительно формирования трафика в сети. Типичная текучая реализация блока в маршрутизаторе выпускает байты N каждый микросекунды M, который эффективно тревожит Вашу синхронизацию в определенные временные интервалы, а не непрерывный диапазон времен. Таким образом, Вы, возможно, должны были бы отбросить биты низкоуровневые своей метки времени.

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

10
ответ дан DGentry 26 November 2019 в 17:38
поделиться

Нет.

Отключают сетевой кабель (или /etc/init.d/networking stop), и энтропия в основном опускается до нуля.

Выполняют Атаку "отказ в обслуживании" на машине, которую она проверяет с помощью ping-запросов, и Вы также получаете предсказуемые результаты (значение тайм-аута ping)

13
ответ дан dbr 26 November 2019 в 17:38
поделиться

Короткий ответ

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

Более длительная версия

, Насколько случайный времена ping?

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

Однако, в то время как синхронизация не будет хорошо распределена, там будет немного находиться на одном уровне случайности в данных. Или, другими словами, уровень информационная энтропия присутствует. Это - прекрасная идея подать данные синхронизации в генератор случайных чисел для отбора его. Таким образом, какой уровень энтропии присутствует?

данные синхронизации сети For говорят приблизительно 50 мс, измеренных к самому близкому 0,1 мс, с распространением значений 2 мс, у Вас есть приблизительно 20 значений. При округлении в меньшую сторону до самого близкого питания 2 (16 = 2^4) у Вас есть 4 бита энтропии на синхронизацию значения. Если бы это для какого-либо вида защищенного приложения (такого как генерация криптографических ключей) тогда, я был бы консервативен и сказал бы, что это были только 2 или 3 бита энтропии на чтение. (Отмечают, что я сделал очень грубую оценку здесь и проигнорировал возможность нападения).

, Как генерировать действительно случайные данные

Для истинных случайных чисел, необходимо отправить данные во что-то разработанное вроде /dev/random, который соберет энтропию, распределяя его в хранилище данных (использующий некоторый , хеш-функция , обычно защищают одну ). В то же время энтропийная оценка увеличена. Таким образом для ключа AES на 128 битов, 64 синхронизации ping требовались бы, прежде чем энтропийный пул имел достаточно энтропии.

, Чтобы быть более устойчивыми, Вы могли тогда добавить данные синхронизации из клавиатуры и использования мыши, время отклика жесткого диска, данные датчика материнской платы (например, температура), и т.д. Это увеличивает уровень энтропийного набора и сложно взломщику контролировать все источники энтропии. И действительно это - то, что сделано с современными системами. Полный список источников энтропии MS Windows перечислен в второй комментарий этого сообщения .

[еще 1113] чтение

Для обсуждения (компьютерная безопасность) нападает на генераторах случайных чисел и дизайне криптографически безопасного генератора случайных чисел, Вы могли сделать хуже, чем чтение бумага тысячелистника Bruce Schneier и John Kelsey. (Тысячелистник используется BSD и системами Mac OS X).

22
ответ дан OmG 26 November 2019 в 17:38
поделиться

Случайные числа слишком важны, чтобы быть оставленными случиться.

Или внешнее влияние/управление.

27
ответ дан 26 November 2019 в 17:38
поделиться

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

Выяснение, "насколько случайный мои значения могут быть то, если я основываю их на ping?" на самом деле спрашивает, "насколько случайный ping?". Можно оценить это путем сбора достаточно большого набора данных (1 млн ping, например) и отображения их кривой распределения и поведения вовремя. Если распределение является плоским, и поведение трудно предсказать, данные кажутся более случайными. Более ухабистое распределение или предсказуемое поведение предлагают более низкую случайность.

необходимо также рассмотреть демонстрационное разрешение. Я мог вообразить результаты округленными в некотором роде к миллисекунде, таким образом, с ping у Вас могли быть целочисленные значения между 0 и 500. Это не большое разрешение.

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

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

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

0
ответ дан 6 revs 26 November 2019 в 17:38
поделиться

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

    I MADE U A RANDOM NUMBER
           BUT I EATED IT
0
ответ дан Peter Wone 26 November 2019 в 17:38
поделиться

А, я нахожу, что этот вид вопроса ведет в дискуссии о значении 'действительно случайных' довольно быстро.

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

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

(редактирование) На практической ноте, этот подход открывает Вас до возможности кого-то в Вашей сети, управляющей Вашим 'случайным' генератором чисел.

0
ответ дан 26 November 2019 в 17:38
поделиться

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

, Что метрика была бы Вы использовать - очевидная является временем отклика, но диапазон значений, которые можно обоснованно ожидать, является маленьким: несколько десятков миллисекунд к нескольким тысячам. Само время отклика будет следовать за кривой нормального распределения и не будет случайным образом распределено через какой-либо интервал (как Вы выбрали бы интервал?), таким образом, необходимо было бы попытаться выбрать несколько 'случайных' битов из чисел.

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

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

0
ответ дан Rob Walker 26 November 2019 в 17:38
поделиться

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

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

кроме того, даже если Вы сделали бы визуальный график 100 000 результатов и вычислили, что существует не или немного корреляций между числами, не означает, что это действительно случайно. Как объяснено Дилберт :)

0
ответ дан Ólafur Waage 26 November 2019 в 17:38
поделиться

Да, это возможно, но... дьявол в деталях.

, Если Вы собираетесь генерировать 32-разрядное целое число, необходимо собраться> 32 бита энтропии (и используйте достаточную функцию смешивания для получения того энтропийного распространения вокруг, но это знало и выполнимый). Большой вопрос, который является:

, сколько имеет энтропия времена ping?

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

, Если взломщики в состоянии полностью управлять временами ping, Вы получаете 0 битов энтропии на ping, и Вы никогда не можете составлять 32 бита энтропии, неважно, сколько Вы смешиваете. Если у них будут меньше, чем идеальное управление за времена ping, то Вы получите некоторую энтропию, и (если Вы не переоцените количество энтропии, Вы собираетесь), получит совершенно случайные 32-разрядные числа.

1
ответ дан Thelema 26 November 2019 в 17:38
поделиться

Я использовал бы что-то как ISAAC как более сильный PRNG прежде, чем доверять ping распространения в прямом и обратном направлениях как энтропии. Как другие сказали, это просто было бы слишком легко для кого-то к не, только предполагают Ваши числа, но также и возможно управляют ими до различных градусов.

Другие большие источники энтропии существуют, который упомянули другие. Тот, который не был упомянут (который не мог бы быть практичным) выбирает шум от на борту аудиоустройства.. который обычно будет немного шумным, даже если никакой микрофон не подключен к нему.

я пошел 9 раундов с попыткой придумать сильное (и быстро) PRNG для клиент-серверного механизма RPC, который я писал. Обе стороны имели идентичный ключ, состоя из 1 024 строк 32 символьных шифров. Клиент отправил бы AUTH xx, сервер возвратит AUTH yy.. и обе стороны знали который две строки ключа использовать для создания секрета шифра (+ соль). Сервер тогда отправил бы обзор SHA-256 всего (зашифрованного) ключа, клиент знал, что он говорил с чем-то, что имело корректный ключ.. сессия продолжена. Да, очень слабая защита для человека в середине, но открытый ключ была вне рассмотрения для того, как устройство использовалось.

Так, у Вас был не блокирующийся сервер, который должен был обработать до 256 соединений.. мало того, что PRNG должен был быть сильным, это должно было быть быстро. Это не была такая трудность использовать более медленные методы для сбора энтропии в клиенте, но это не могло быть предоставлено в сервере.

Так, должен спросить я относительно Вашей идеи.. насколько практичный это было бы?

1
ответ дан Tim Post 26 November 2019 в 17:38
поделиться

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

См. Random.org для больше на случайности.

Вот попытка реализации:

@ips  : list = getIpAddresses();
@rnd         = PseudorandomNumberGenerator(0 to (ips.count - 1));

@getTrueRandomNumber() { ping(ips[rnd.nextNumber()]).averageTime }
1
ответ дан Mark Cidade 26 November 2019 в 17:38
поделиться

Подход измерение чего-то для генерации случайного семени, кажется, довольно хороший. Книга O'Reilly Практический Unix и Защита в сети Интернет дает несколько подобных дополнительных методов определения случайного семени, таких как то, чтобы просить, чтобы пользователь ввел несколько нажатий клавиш и затем измерения времени между нажатиями клавиш. (Книга отмечает, что эта техника используется PGP в качестве источника своей случайности.)

интересно, могла ли текущая температура ЦП системы (отмеренный ко многим десятичным разрядам) быть жизнеспособным компонентом случайного семени. Этот подход имел бы преимущество не необходимости получить доступ к сети (таким образом, случайный генератор не станет недоступным, когда сетевое соединение понизится).

Однако, вероятно, маловероятно, что внутренний датчик ЦП мог точно отмерить температуру ЦП к достаточным десятичным разрядам для создания значения действительно жизнеспособным как семя случайного числа; по крайней мере, не с "аппаратными средствами товарного класса", как упомянуто в вопросе!

1
ответ дан Jon Schneider 26 November 2019 в 17:38
поделиться

Часть хорошего генератора случайных чисел является равными вероятностями всех чисел как n-> бесконечность.

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

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

2
ответ дан Lamar 26 November 2019 в 17:38
поделиться

Никакое mathmatical вычисление не может привести к случайному результату, но в "реальном мире" компьютеры точно просто не производят подсчеты... С определенной креативностью должно быть возможно привести к случайным результатам вида, где нет никакого известного метода репродуцирования или предсказания точных результатов.

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

Другие идеи включают синхронизацию теплового шума и низкого уровня строк кэша. Много современных ПК с микросхемами TPM имеют качественные аппаратные генераторы случайных чисел шифрования уже на борту.

Моя реакция коленного рефлекса проверить с помощью ping-запросов (особенно при использовании ICMP) состоит в том что обман слишком очевидно. В той точке Вы могли бы также выкрикнуть счетчик giger и использовать радиационный фон в качестве Вашего случайного источника.

1
ответ дан 2 revs 26 November 2019 в 17:38
поделиться

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

10
ответ дан 2 revs, 2 users 67% 26 November 2019 в 17:38
поделиться

Можно использовать метод XKCD:

Random Number Generator

0
ответ дан 2 revs 26 November 2019 в 17:38
поделиться

У меня есть код, который создает случайные числа с помощью traceroute. Еще у меня есть программа, которая делает это с помощью ping. Я сделал это более года назад для классного проекта. Все, что он делает, - это запускает traceroute и адрес, и он берет наименьшую цифру из числа миллисекунд. Он довольно хорошо работает при получении случайных чисел, но я действительно не знаю, насколько он близок к истинному случайному.

Вот список из 8 чисел, который я получил, когда запустил его.

455298558263758292242406192

506117668905625112192115962

805206848215780261837105742

095116658289968138760389050

465024754117025737211084163

995116659108459780006127281

814216734206691405380713492

124216749135482109975241865

#include <iostream>
#include <string>
#include <stdio.h>
#include <cstdio>
#include <stdlib.h>
#include <vector>
#include <fstream>

using namespace std;

int main()
{
system("traceroute -w 5 www.google.com >> trace.txt");

string fname = "trace.txt";
ifstream in;
string temp;

vector<string> tracer;
vector<string> numbers;

in.open(fname.c_str());
while(in>>temp)
tracer.push_back(temp);

system("rm trace.txt");

unsigned index = 0;

string a = "ms";
while(index<tracer.size())
{
if(tracer[index]== a)
numbers.push_back(tracer[index-1]);
++index;
}


std::string rand;

for(unsigned i = 0 ; i < numbers.size() ; ++i)
{
std::string temp = numbers[i];
int index = temp.size();
rand += temp[index - 1];
}

cout<<rand<<endl;

return 0;

}
0
ответ дан 26 November 2019 в 17:38
поделиться

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

Идея веб-камеры звучит (немного) разумно. Пользователи Linux часто рекомендуют просто использовать случайный шум от звуковой карты, к которой не подключен микрофон.

0
ответ дан 26 November 2019 в 17:38
поделиться

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

2
ответ дан 26 November 2019 в 17:38
поделиться

YouTube показывает устройство в действии: http://www.youtube.com/watch?v=7n8LNxGbZbs

Случайно, если никто не может предсказать следующее состояние.

1
ответ дан 26 November 2019 в 17:38
поделиться

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

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

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

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

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

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

0
ответ дан 26 November 2019 в 17:38
поделиться