stringtranslate.com

Генерация случайных чисел

Игральные кости являются примером механического аппаратного генератора случайных чисел. При бросании кубической игральной кости получается случайное число от 1 до 6.

Генерация случайных чисел — это процесс, при котором, часто с помощью генератора случайных чисел ( ГСЧ ), генерируется последовательность чисел или символов , которую нельзя предсказать лучше, чем случайным образом. Это означает, что конкретная последовательность результатов будет содержать некоторые закономерности, которые можно обнаружить задним числом, но невозможно предвидеть. Истинные генераторы случайных чисел могут быть аппаратными генераторами случайных чисел (ГСЧ), в которых каждое поколение является функцией текущего значения атрибута физической среды, которое постоянно меняется таким образом, что практически невозможно смоделировать. Это будет отличаться от так называемых «генераций случайных чисел», выполняемых генераторами псевдослучайных чисел (ГПСЧ), которые генерируют числа, которые только выглядят случайными, но на самом деле предопределены — эти генерации можно воспроизвести, просто зная состояние ГПСЧ. [1]

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

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

Практические применения и использования

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

Генераторы псевдослучайных чисел очень полезны при разработке симуляций методом Монте-Карло , поскольку отладка облегчается возможностью повторного запуска той же последовательности случайных чисел, начиная с того же случайного начального числа . Они также используются в криптографии — при условии, что начальное число является секретным. Отправитель и получатель могут автоматически генерировать один и тот же набор чисел для использования в качестве ключей.

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

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

Истинные и псевдослучайные числа

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

Скорость, с которой энтропия может быть получена из естественных источников, зависит от измеряемых основных физических явлений. Таким образом, источники естественной «истинной» энтропии называются блокирующими  — они ограничены по скорости, пока не будет собрано достаточно энтропии для удовлетворения спроса. В некоторых Unix-подобных системах, включая большинство дистрибутивов Linux , файл псевдоустройства /dev/random будет блокироваться до тех пор, пока из среды не будет собрано достаточно энтропии. [2] Из-за этого блокирующего поведения большие объемы чтения из /dev/random , такие как заполнение жесткого диска случайными битами, часто могут быть медленными в системах, которые используют этот тип источника энтропии.

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

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

Хотя генератор псевдослучайных чисел, основанный исключительно на детерминированной логике, никогда не может считаться «истинным» источником случайных чисел в чистом смысле этого слова, на практике их обычно достаточно даже для требовательных приложений, критичных к безопасности. Тщательно спроектированные и реализованные генераторы псевдослучайных чисел могут быть сертифицированы для критически важных для безопасности криптографических целей, как в случае с алгоритмом yarrow и fortuna . Первый является основой источника энтропии /dev/random в FreeBSD , AIX , macOS , NetBSD и других. OpenBSD использует алгоритм псевдослучайных чисел, известный как arc4random . [ dubiousобсудить ] [3]

Методы генерации

Физические методы

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

Аппаратный генератор случайных чисел может быть основан на по существу случайном атомном или субатомном физическом явлении, непредсказуемость которого можно проследить до законов квантовой механики . [4] [5] Источники энтропии включают радиоактивный распад , тепловой шум , дробовой шум , лавинный шум в диодах Зенера , дрейф часов , синхронизацию фактических движений головки чтения-записи жесткого диска и радиошум . Однако физические явления и инструменты, используемые для их измерения, обычно характеризуются асимметрией и систематическими смещениями , которые делают их результаты неравномерно случайными. Экстрактор случайности , такой как криптографическая хэш-функция , может использоваться для приближения к равномерному распределению битов из неравномерно случайного источника, хотя и с более низкой скоростью передачи битов.

Появление широкополосных источников фотонной энтропии, таких как оптический хаос и усиленный шум спонтанного излучения, значительно способствует развитию физического генератора случайных чисел. Среди них оптический хаос [6] [7] имеет высокий потенциал для физического создания высокоскоростных случайных чисел благодаря своей высокой пропускной способности и большой амплитуде. Прототип высокоскоростного физического генератора случайных битов в реальном времени на основе хаотического лазера был построен в 2013 году. [8]

Были разработаны различные изобретательные способы сбора этой энтропийной информации. Один из методов заключается в запуске хэш-функции против кадра видеопотока из непредсказуемого источника. Лаваранд использовал этот метод с изображениями ряда лавовых ламп . HotBits измерял радиоактивный распад с помощью трубок Гейгера-Мюллера , [9] в то время как Random.org использует изменения амплитуды атмосферного шума, записанного с помощью обычного радио.

Демонстрация простого генератора случайных чисел, основанного на месте и времени нажатия кнопки

Другим распространенным источником энтропии является поведение пользователей системы. Хотя люди не считаются хорошими генераторами случайности по запросу, они довольно хорошо генерируют случайное поведение в контексте игры в смешанные стратегические игры. [10] Некоторое программное обеспечение, связанное с безопасностью, требует от пользователя выполнения длительной серии движений мыши или ввода с клавиатуры для создания достаточной энтропии, необходимой для генерации случайных ключей или инициализации генераторов псевдослучайных чисел. [11]

Методы расчета

Большинство случайных чисел, генерируемых компьютером, используют PRNG, которые являются алгоритмами, которые могут автоматически создавать длинные серии чисел с хорошими случайными свойствами, но в конечном итоге последовательность повторяется (или использование памяти растет без ограничений). Эти случайные числа хороши во многих ситуациях, но не так случайны, как числа, генерируемые из электромагнитного атмосферного шума, используемого в качестве источника энтропии. [12] Ряд значений, генерируемых такими алгоритмами, обычно определяется фиксированным числом, называемым начальным числом . Одним из наиболее распространенных PRNG является линейный конгруэнтный генератор , который использует рекуррентность

для генерации чисел, где a , b и m — большие целые числа, и — следующее в X как ряд псевдослучайных чисел. Максимальное количество чисел, которое может выдать формула, — это модуль , m . Рекуррентное соотношение может быть распространено на матрицы, чтобы иметь гораздо более длинные периоды и лучшие статистические свойства . [13] Чтобы избежать определенных неслучайных свойств одного линейного конгруэнтного генератора, несколько таких генераторов случайных чисел с немного разными значениями коэффициента множителя, a , могут использоваться параллельно с «главным» генератором случайных чисел, который выбирает из нескольких различных генераторов.

Простой метод генерации случайных чисел с помощью ручки и бумаги — это так называемый метод среднего квадрата, предложенный Джоном фон Нейманом . Несмотря на простоту реализации, его выходной сигнал низкого качества. Он имеет очень короткий период и серьезные недостатки, такие как выходная последовательность, почти всегда сходящаяся к нулю. Недавнее нововведение — объединение среднего квадрата с последовательностью Вейля . Этот метод обеспечивает высококачественный выходной сигнал в течение длительного периода. [14]

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

Качество, т.е. случайность, таких библиотечных функций широко варьируется от полностью предсказуемого вывода до криптографически безопасного. Генератор случайных чисел по умолчанию во многих языках, включая Python, Ruby, R, IDL и PHP, основан на алгоритме Mersenne Twister и недостаточен для целей криптографии, как это явно указано в документации языка. Такие библиотечные функции часто имеют плохие статистические свойства, и некоторые будут повторять шаблоны всего после десятков тысяч попыток. Они часто инициализируются с использованием часов реального времени компьютера в качестве начального значения, поскольку такие часы являются 64-битными и измеряют в наносекундах, что намного превышает точность человека . Эти функции могут обеспечивать достаточную случайность для определенных задач (например, видеоигр), но не подходят там, где требуется высококачественная случайность, например, в криптографических приложениях или статистике. [15]

Гораздо более качественные источники случайных чисел доступны в большинстве операционных систем; например , /dev/random в различных вариантах BSD, Linux, Mac OS X, IRIX и Solaris или CryptGenRandom для Microsoft Windows. Большинство языков программирования, включая упомянутые выше, предоставляют средства для доступа к этим более качественным источникам.

Людьми

Генерация случайных чисел также может выполняться людьми в форме сбора различных входных данных от конечных пользователей и использования их в качестве источника рандомизации. Однако большинство исследований показывают, что у людей есть некоторая степень неслучайности при попытке создать случайную последовательность, например, цифр или букв. Они могут слишком часто менять варианты по сравнению с хорошим генератором случайных чисел; [16] таким образом, этот подход не получил широкого распространения. Однако именно по той причине, что люди плохо справляются с этой задачей, генерация случайных чисел человеком может использоваться в качестве инструмента для получения информации о функциях мозга, которые в противном случае недоступны. [17]

Постобработка и статистические проверки

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

Сгенерированные случайные числа иногда подвергаются статистическим тестам перед использованием, чтобы убедиться, что базовый источник все еще работает, а затем подвергаются постобработке для улучшения их статистических свойств. Примером может служить аппаратный генератор случайных чисел TRNG9803 [18] , который использует измерение энтропии в качестве аппаратного теста, а затем постобрабатывает случайную последовательность с помощью потокового шифра сдвигового регистра. Обычно сложно использовать статистические тесты для проверки сгенерированных случайных чисел. Ван и Никол [19] предложили метод статистического тестирования на основе расстояния, который используется для выявления слабых мест нескольких случайных генераторов. Ли и Ван [20] предложили метод тестирования случайных чисел на основе источников лазерной хаотической энтропии с использованием свойств броуновского движения.

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

Другие соображения

Изменение распределения

Равномерное распределение

Большинство генераторов случайных чисел изначально работают с целыми числами или отдельными битами, поэтому требуется дополнительный шаг для достижения «канонического» равномерного распределения между 0 и 1. Реализация не так тривиальна, как деление целого числа на его максимально возможное значение. А именно: [21] [22]

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

Основной алгоритм, используемый OpenJDK , Rust , и NumPy , описан в предложении для STL C++ . Он не использует дополнительную точность и страдает от смещения только в последнем бите из-за округления до четного. [23] Другие числовые проблемы оправданы при сдвиге этого «канонического» равномерного распределения в другой диапазон. [24] Предлагаемый метод для языка программирования Swift утверждает, что использует полную точность везде. [25]

Равномерно распределенные целые числа обычно используются в таких алгоритмах, как перемешивание Фишера–Йетса . Опять же, наивная реализация может вызвать смещение по модулю в результате, поэтому необходимо использовать более сложные алгоритмы. Метод, который почти никогда не выполняет деление, был описан в 2018 году Дэниелом Лемиром [26] , а текущим состоянием дел является вдохновленный арифметическим кодированием «оптимальный алгоритм» 2021 года Стивена Кэнона из Apple Inc. [27]

Большинство ГСЧ от 0 до 1 включают 0, но исключают 1, в то время как другие включают или исключают оба.

Другие дистрибутивы

При наличии источника однородных случайных чисел существует несколько методов создания нового случайного источника, соответствующего функции плотности вероятности . Один метод, называемый методом инверсии , включает интегрирование до области, большей или равной случайному числу (которое должно быть сгенерировано между 0 и 1 для правильного распределения). Второй метод, называемый методом принятия-отклонения , включает выбор значений x и y и проверку того, больше ли функция x значения y. Если это так, то значение x принимается. В противном случае значение x отклоняется, и алгоритм повторяет попытку. [28] [29]

В качестве примера для выборки с отклонением , чтобы сгенерировать пару статистически независимых стандартных нормально распределенных случайных чисел ( x , y ), можно сначала сгенерировать полярные координаты ( r , θ ), где r2 ~ χ2 2 и θ ~ UNIFORM(0,2π) (см. преобразование Бокса–Мюллера ) .

Отбеливание

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

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

Последовательности с низким расхождением как альтернатива

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

Мероприятия и демонстрации

Следующие сайты предоставляют образцы случайных чисел:

Бэкдоры

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

Сообщается, что АНБ вставило бэкдор в сертифицированный NIST криптографически безопасный генератор псевдослучайных чисел Dual EC DRBG . Если, например, SSL-соединение создается с использованием этого генератора случайных чисел, то, по словам Мэтью Грина, это позволит АНБ определить состояние генератора случайных чисел и, таким образом, в конечном итоге, иметь возможность читать все данные, отправленные по SSL-соединению. [30] Несмотря на то, что было очевидно, что Dual_EC_DRBG был очень плохим и, возможно, запрограммированным генератором псевдослучайных чисел задолго до того, как бэкдор АНБ был подтвержден в 2013 году, он широко использовался на практике до 2013 года, например, известной компанией по безопасности RSA Security . [31] Впоследствии появились обвинения в том, что RSA Security сознательно вставила бэкдор АНБ в свои продукты, возможно, как часть программы Bullrun . RSA отрицает сознательное встраивание бэкдора в свои продукты. [32]

Также была высказана теория, что аппаратные ГСЧ могут быть тайно модифицированы, чтобы иметь меньшую энтропию, чем заявлено, что сделает шифрование с использованием аппаратного ГСЧ уязвимым для атак. Один из таких методов, который был опубликован, работает путем изменения маски легирования чипа, что не поддается обнаружению с помощью оптического обратного проектирования. [33] Например, для генерации случайных чисел в Linux считается неприемлемым использовать аппаратный ГСЧ Intel RDRAND без смешивания выходных данных RDRAND с другими источниками энтропии для противодействия любым бэкдорам в аппаратном ГСЧ, особенно после раскрытия программы АНБ Bullrun. [34] [35]

В 2010 году лотерейный розыгрыш в США был сфальсифицирован директором по информационной безопасности Ассоциации лотерей разных штатов (MUSL), который тайно установил вредоносное ПО на защищенный компьютер ГСЧ MUSL во время планового обслуживания. [36] В ходе взломов мужчина выиграл в общей сложности 16 500 000 долларов за несколько лет.

Смотрите также

Ссылки

  1. ^ Лугрин, Томас (2023), Малдер, Валентин; Мермуд, Ален; Лендерс, Винсент; Телленбах, Бернхард (ред.), «Генератор случайных чисел», Тенденции в технологиях защиты данных и шифрования , Cham: Springer Nature Switzerland, стр. 31–34, doi : 10.1007/978-3-031-33386-6_7 , ISBN 978-3-031-33386-6
  2. ^ random(4)  –  Руководство программиста Linux – Специальные файлы
  3. ^ arc4random(3)  –  Руководство по функциям библиотеки OpenBSD
  4. ^ Эрреро-Коллантес, Мигель; Гарсиа-Эскартин, Хуан Карлос (2016). «Квантовые генераторы случайных чисел». Обзоры современной физики . 89 : 015004. arXiv : 1604.03304 . doi : 10.1103/RevModPhys.89.015004. S2CID  118592321.
  5. ^ Ячак, Марцин М.; Йозвяк, Петр; Немчук, Якуб; Яцак, Януш Э. (2021). «Квантовые генераторы случайных чисел». Научные отчеты . 11 (1): 16108. doi : 10.1038/s41598-021-95388-7 . ПМЦ 8352985 . ПМИД  34373502. 
  6. ^ Ли, Пу; Ван, Юнь-Цай; Чжан, Цзянь-Чжун (13.09.2010). «Полностью оптический быстрый генератор случайных чисел». Optics Express . 18 (19): 20360–20369. Bibcode : 2010OExpr..1820360L. doi : 10.1364/OE.18.020360 . ISSN  1094-4087. PMID  20940928.
  7. ^ Ли, Пу; Сунь, Юаньюань; Лю, Сянлянь; И, Сяоган; Чжан, Цзяньго; Го, Сяоминь; Го, Яньцян; Ван, Юньцай (15 июля 2016 г.). «Полностью основанный на фотонике физический генератор случайных битов». Оптические письма . 41 (14): 3347–3350. Бибкод : 2016OptL...41.3347L. дои : 10.1364/OL.41.003347. ISSN  1539-4794. PMID  27420532. S2CID  2909061.
  8. ^ Ван, Аньбан; Ли, Пу; Чжан, Цзяньго; Чжан, Цзяньчжун; Ли, Лэй; Ван, Юньцай (2013-08-26). «4,5 Гбит/с высокоскоростной физический генератор случайных битов в реальном времени». Optics Express . 21 (17): 20452–20462. Bibcode : 2013OExpr..2120452W. doi : 10.1364/OE.21.020452 . ISSN  1094-4087. PMID  24105589. S2CID  10397141.
  9. ^ Уокер, Джон. "HotBits: Genuine Random Numbers" . Получено 27.06.2009 .
  10. ^ Halprin, Ran; Naor, Moni . "Games for Extracting Randomness" (PDF) . Weizmann Institute of Science . Архивировано из оригинала (PDF) 2011-08-07 . Получено 2009-06-27 .
  11. ^ TrueCrypt Foundation. "Учебник для начинающих TrueCrypt, часть 3" . Получено 27.06.2009 .
  12. ^ "RANDOM.ORG – True Random Number Service". www.random.org . Получено 2016-01-14 .
  13. ^ "Генератор псевдослучайных чисел высокой размерности" . Получено 21.11.2018 .
  14. ^ Видынски, Бернард (19 мая 2020 г.). «ГСЧ последовательности Вейля со средним квадратом». arXiv : 1704.00358 [cs.CR].
  15. ^ Мацумото, М.; Нисимура, Т. (1998). «MersenneTwister: 623-мерно равнораспределенный равномерный генератор псевдослучайных чисел». Труды ACM по моделированию и компьютерному моделированию . 8 (1): 3–30. CiteSeerX 10.1.1.215.1141 . doi :10.1145/272991.272995. S2CID  3332028. 
  16. ^ WA Wagenaar (1972). «Генерация случайных последовательностей людьми: критический обзор литературы». Psychological Bulletin . 77 (1): 65–72. CiteSeerX 10.1.1.211.9085 . doi :10.1037/h0032060. 
  17. ^ WA Wagenaar (1972). «Генерация случайных последовательностей людьми: критический обзор литературы». Psychological Bulletin . 77 (1): 65–72. CiteSeerX 10.1.1.211.9085 . doi :10.1037/h0032060. 
  18. ^ Домстедт, Б. (2009). "TRNG9803 True Random Number Generator". Производитель: www.TRNG98.se.
  19. ^ Ван, Йонге (2014). «Статистические свойства псевдослучайных последовательностей и эксперименты с PHP и Debian OpenSSL». Computer Security - ESORICS 2014. Lecture Notes in Computer Science. Vol. 8712. Heidelberg: Springer LNCS. pp. 454–471. doi :10.1007/978-3-319-11203-9_26. ISBN 978-3-319-11202-2.
  20. ^ Ли, Пу; И, Сяоган; Лю, Сянлянь; Ван, Юньцай; Ван, Юнге (2016-07-11). «Свойства броуновского движения оптоэлектронных случайных битовых генераторов на основе лазерного хаоса». Optics Express . 24 (14): 15822–15833. Bibcode : 2016OExpr..2415822L. doi : 10.1364/OE.24.015822 . ISSN  1094-4087. PMID  27410852.
  21. ^ Goualard, F. (2020). «Генерация случайных чисел с плавающей точкой путем деления целых чисел: исследование случая». Computational Science – ICCS 2020 . ICCS. Lecture Notes in Computer Science. Vol. 12138. pp. 15–28. doi : 10.1007/978-3-030-50417-5_2 . ISBN 978-3-030-50416-8. S2CID  219889587.
  22. ^ Кэмпбелл, Тейлор Р. (2014). «Равномерные случайные числа с плавающей точкой: как сгенерировать число с плавающей точкой двойной точности в [0, 1] равномерно случайным образом, учитывая равномерный случайный источник битов» . Получено 4 сентября 2021 г.
  23. ^ "Новая спецификация для std::generate_canonical". www.open-std.org .
  24. ^ Goualard, Frédéric (июль 2021 г.). «Извлечение случайных чисел с плавающей точкой из интервала». HAL . Получено 4 сентября 2021 г. .
  25. ^ NevinBR. "[stdlib] Улучшения случайных чисел с плавающей точкой от NevinBR · Запрос на извлечение № 33560 · apple/swift". GitHub .
  26. ^ Лемир, Дэниел (23 февраля 2019 г.). «Быстрая генерация случайных целых чисел в интервале». Труды ACM по моделированию и компьютерному моделированию . 29 (1): 1–12. arXiv : 1805.10941 . doi : 10.1145/3230636. S2CID  44061046.
  27. ^ "Оптимальный алгоритм для ограниченных случайных целых чисел от stephentyrone · Запрос на извлечение № 39143 · apple/swift". GitHub .
  28. ^ The MathWorks. "Общие методы генерации" . Получено 2024-09-08 .
  29. ^ Группа численных алгоритмов. "G05 – Генераторы случайных чисел" (PDF) . Руководство по библиотеке NAG, Марк 23 . Получено 2012-02-09 .
  30. ^ Мэтью Грин (2013-09-18). «Множество недостатков Dual_EC_DRBG».
  31. ^ Мэтью Грин (2013-09-20). «RSA предупреждает разработчиков не использовать продукты RSA».
  32. ^ «Мы не включаем бэкдоры в наши криптопродукты, — сообщает RSA клиентам». Ars Technica . 2013-09-20.
  33. ^ «Исследователи могут внедрить необнаруживаемый троян в процессоры Intel Ivy Bridge». Ars Technica . 2013-09-18.
  34. ^ Теодор Цо. «Я так рад, что устоял перед давлением инженеров Intel, которые хотели, чтобы /dev/random полагался только на инструкцию RDRAND». Google Plus.
  35. ^ Теодор Цо. "Re: [PATCH] /dev/random: Недостаточная энтропия на многих архитектурах". LWN.
  36. ^ Nestel, ML (7 июля 2015 г.). «Внутри крупнейшего в истории лотерейного мошенничества». The Daily Beast . Получено 10 июля 2015 г.

Дальнейшее чтение

Внешние ссылки