номер
Вредоносный компьютер в вашей сети может использовать спуфинг ARP (или ряд других методов) для перехвата ваших пингов и ответа на них через определенные промежутки времени. Тогда они не только узнают, какие у вас случайные числа, но и контролируют их.
Конечно, все еще остается вопрос о том, насколько детерминистична ваша локальная сеть, так что это может быть не так просто, как на практике. Но поскольку вы не получаете никакой выгоды от пингования случайных IP-адресов в Интернете, вы также можете извлечь энтропию из трафика Ethernet.
Получение энтропии с помощью устройств, подключенных к вашей машине, является хорошо изученным принципом, и плюсы и минусы различных видов устройств и методов измерения могут быть, например, украдено из реализации /dev/random.
[ Редактировать : в качестве общего принципа, работая с основами безопасности (а единственные практические потребности в значительном количестве действительно случайных данных связаны с безопасностью), вы ДОЛЖНЫ предположить, что фантастически хорошо решительный злоумышленник сделает все возможное, чтобы сломать вашу систему.
В целях практической безопасности вы можете предположить, что никто не хочет получить ваш ключ PGP так сильно, и согласиться на компромисс между безопасностью и стоимостью. Но, изобретая алгоритмы и методы, вы должны дать им самые строгие гарантии безопасности, с которыми они когда-либо могли столкнуться. Поскольку я могу поверить, что кому-то где-то может понадобиться чей-то личный ключ достаточно сильно, чтобы создать этот набор средств, чтобы опровергнуть ваше предложение, я не могу принять его как опережение передовой практики. AFAIK / dev / random следует довольно близко к передовому опыту создания действительно случайных данных на дешевом домашнем ПК]
[ Другое редактирование : в комментариях было высказано предположение, что (1) верно для любого ТРНГ, что на физический процесс можно повлиять, и (2) что соображения безопасности здесь не применимы в любом случае.
Ответ на (1) заключается в том, что на любом реальном оборудовании можно сделать намного лучше, чем время отклика ping, и быстрее собрать больше энтропии, что это предложение не является решением. В терминах CS, очевидно, вы не можете генерировать случайные числа на детерминированной машине, что и вызвало вопрос. Но с точки зрения CS, машина с внешним входным потоком по определению недетерминирована, поэтому, если мы говорим о ping, то речь не идет о детерминированных машинах. Поэтому имеет смысл взглянуть на реальные входные данные, которые есть у реальных машин, и рассматривать их как источники случайности. Независимо от того, какая у вас машина, время необработанного пинга не стоит на первом месте в списке доступных источников, поэтому их можно исключить, прежде чем беспокоиться о том, что лучше, тем лучше. Предполагать, что сеть не является подрывной, - это гораздо большее (и ненужное) предположение, чем предполагать, что ваше собственное оборудование не подрывается.
Ответ на (2) философский. Если вы не возражаете против случайных чисел, обладающих тем свойством, что они могут быть выбраны по прихоти, а не случайно, тогда это предложение в порядке. Но это не то, что я понимаю под термином «случайный». То, что что-то противоречиво, не означает, что оно обязательно случайное.
Наконец, чтобы обратиться к деталям реализации предложения в соответствии с запросом: предполагая, что вы принимаете время пинга как случайное, вы все равно не можете использовать необработанное время пинга в качестве вывода RNG. Вы не знаете их распределения вероятностей, и они, конечно, не распределены равномерно (что обычно и требуется людям от ГСЧ).
Итак, вам нужно решить, на сколько бит энтропии на один пинг вы хотите положиться. Энтропия - это точно определенное математическое свойство случайной величины, которое можно разумно считать мерой того, насколько она «случайна». На практике вы находите нижнюю границу, которой вы довольны. Затем хэшируйте вместе несколько входов и преобразуйте их в число битов вывода, меньших или равных общей положительной энтропии входов. «Итого» не обязательно означает сумму: если входные данные статистически независимы, то это сумма, но вряд ли это относится к пингам, поэтому часть вашей оценки энтропии будет учитывать корреляцию. Сложная старшая сестра этой операции хеширования называется «сборщиком энтропии», и у всех хороших ОС есть один.
Если вы используете данные для заполнения PRNG, и PRNG может использовать произвольно большой начальный вход, то вам не нужно хешировать, потому что он сделает это за вас. Вы все еще должны оценить энтропию, если хотите знать, насколько «случайной» была ваша начальная стоимость - вы можете использовать лучший PRNG в мире, но его энтропия все еще ограничена энтропией семени.]