Выделение псевдослучайного генератора со случайным числом из лучшего случайного источника

Допустим, у нас есть генератор псевдослучайных чисел, который принимает 32-разрядное целое число в качестве начального числа (например, rand() функция из стандартной библиотеки C), которая выводит случайные числа из исходного семени. Если это семя должно быть получено, скажем, от радиоактивного распада, правильно ли считать, что случайное число, которое мы получаем от вызова rand() такое «хорошее» случайное число, как получение одного из радиоактивного распада?

2

Решение

Нет, определенно нет. Встроенная библиотека стандартной библиотеки C / C ++ rand() функция обычно реализуется как линейный конгруэнтный генератор (LCG). Это один из самых ранних известных семейств генераторов псевдослучайных чисел (PRNG), и они обычно обладают плохими статистическими свойствами. Кроме того, поскольку PRNG фактически создают математическую последовательность, предопределенную начальным начальным числом, они являются предсказуемыми. Даже криптографически безопасные генераторы псевдослучайных чисел (например, Блум Блум Шуб) предсказуемы, даже если прогнозировать последовательность очень сложно в вычислительном отношении и очень много времени.

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

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

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

Хороший надежный ресурс о современных генераторах случайных чисел Сайт Себастьяно Виньи.

2

Другие решения

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

1

НЕТ. Свойства случайного числа последовательность полностью зависит от генератора случайных чисел (ГСЧ). Таким образом, любая корреляция между последующими случайными числами сводится к ГСЧ, а не к начальному числу.

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

1

Псевдослучайные числа (PRN) могут быть последовательностью рядом случайные числа. Тем не менее, Истинные случайные числа (TRN) — это те, которые генерируют случайные числа, принимая входные данные от источники энтропии это может быть любая физическая среда, от вибрации до жесткого диска. Библиотека rand () библиотеки C относится к категории PRN. Для большей случайности лучше использовать библиотеки, которые используют / dev / random или / dev / urandom.

Обратитесь также к man-странице urandom для получения более подробной информации о случайных, случайных — ядрах устройств с исходным числом случайных чисел на https://linux.die.net/man/4/urandom.
«Генератор случайных чисел собирает шум окружающей среды от драйверов устройств и других источников в пул энтропии. Генератор также сохраняет оценку количества битов шума в пуле энтропии. Из этого пула энтропии создаются случайные числа».

0
По вопросам рекламы [email protected]