Генератор случайных чисел

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

Кто-нибудь знает об этой статье?

Ответ 1

Я считаю, что это было на thedailywtf.com - т.е. не то, что вы хотите сделать.

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

Вы можете получить "истинные" случайные числа из специального hardware. Вы также можете собирать энтропию от движений мыши и тому подобное.

Ответ 2

Я должен не согласиться с множеством ответов на этот вопрос.

Можно собирать случайные данные на компьютере. SSL, SSH и VPN не будут защищены, если вы не смогли.

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

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

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

Хорошие качественные случайные генераторы, такие как Yarrow, имеют сложную энтропийную оценку, встроенную в них, и будут излучать только столько байтов, сколько она может надежно сказать, что он имеет в своем "пуле случайности".

Ответ 3

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

Есть философские дебаты о том, что означает случайность. Здесь я буду иметь в виду "неотличимый во всех отношениях от равномерного распределения (0,1) по образцам" Я полностью игнорирую философские вопросы о том, что такое случайное.

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

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

Можно создать "бесконечный" поток бит, который представляется полностью случайным, детерминированным. К сожалению, такие подходы растут в памяти с количеством запрошенных битов (как это было бы необходимо, чтобы избежать повторяющихся циклов), поэтому их объем ограничен.

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

Однако, поскольку случайные числа из заданного генератора детерминистически определены в известной последовательности, ваша процедура может быть обнаружена кем-то, кто ищет генератор и находит последовательность выравнивания. Таким образом, вы, вероятно, можете избежать того, что ваш дистрибутив сразу распознается как получаемый от определенного генератора случайных чисел, если вы поддерживаете два генератора. С первого раза вы выбираете i, а затем отображаете это равномерно по одному на n, где n не больше фазового размера. Затем во втором вы выбираете я раз и возвращаете i-й результат. Это уменьшит размер вашего цикла до (размер исходного цикла /n ) в худшем случае, но для этого цикла все равно будут генерироваться равномерные случайные числа и сделать это таким образом, чтобы поиск экспоненциального выравнивания по n. Это также уменьшит независимую фазу. Не используйте этот метод, если вы не понимаете, что означает сокращение цикла и независимой длины фаз для вашего приложения.

Ответ 4

Алгоритм для действительно случайных чисел не может существовать, поскольку определение случайных чисел:

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

Есть лучшие или худшие генераторы псевдослучайных чисел (PRNG), то есть полностью предсказуемые последовательности чисел, которые трудно предсказать, не зная части информации, называемой seed.

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

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

Они все еще подвержены атакам, потому что они могут быть независимо измерены, иметь предубеждения и т.д. Так что это действительно сложно. Это делается с помощью специального оборудования, которое обычно довольно дорого. Я понятия не имею, насколько хорош /dev/random, но я бы поспорил, что он недостаточно хорош для криптографии (большинство криптографических программ имеют свой собственный RNG, а Linux также ищет аппаратный RNG при запуске).

Ответ 5

Согласно Wikipedia /dev/random, в Unix-подобных операционных системах используется специальный файл, который служит в качестве генератора случайных чисел.

Драйвер/dev/random собирает экологический шум из разных недетерминированных источников, включая, помимо прочего, межклавишные тайминги и интервалы между прерываниями, которые происходят в среде операционной системы. Данные шума выбираются и объединяются с CRC-подобной функцией смешивания в постоянно обновляющийся "энтропийный пул". Случайные битовые строки получают, принимая хеш MD5 содержимого этого пула. Односторонняя хеш-функция отбрасывает истинные случайные биты из данных пула и скрывает состояние пула от противников.

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

Модуль/dev/random kernel также предоставляет другой интерфейс /dev/urandom, который не дожидается перезагрузки пула энтропии и возвращает столько байтов, сколько было запрошено. В результате /dev/urandom значительно быстрее при генерации по сравнению с /dev/random, который используется только при желании очень качественной случайности.

Ответ 6

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

Не даже /dev/random является случайным, в математике или физическом смысле этого слова. Даже измерение радиоактивности радиоизотопов не является случайным. (Скорость затухания равна. Измерение отсутствует. Счетчики Гейгера имеют небольшое reset время после каждого обнаруженного события, в течение которого они не могут обнаружить новые события. Это приводит к незначительным искажениям., но не полностью устранить его.)

Прекратите искать истинную случайность. Хороший генератор псевдослучайных чисел - это то, что вы ищете.

Ответ 7

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

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

Ответ 8

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

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

Умность редко вознаграждается криптографией. Пойдите с проверенными и истинными решениями.

Ответ 9

Обычно компьютер имеет много доступных физических источников случайного шума:

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

И иногда

  • Оборудование на основе дрифта часов
  • Счетчики Гейгера и другие детекторы редких событий
  • Все виды датчиков, подключенных к аналого-цифровым преобразователям

Сложно оценить энтропию этих источников, которая в большинстве случаев низкая, несмотря на высокие скорости передачи данных и очень переменную; но энтропия может быть оценена с консервативными предположениями или, по крайней мере, не потрачена впустую, для питания таких систем, как Ярроу или Фортуна.

Ответ 10

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

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

Ответ 11

Один из лучших способов генерации случайного числа - Clock Drift. Это в первую очередь работает с двумя генераторами.

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

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