An Генератор случайных чисел это инструмент или алгоритм, который выдает непредсказуемые и недетерминированные результаты. Такие генераторы необходимы во многих областях, от криптографии до компьютерного моделирования.
- Непредсказуемые результаты: Генераторы случайных чисел выдают результаты, которые невозможно предсказать.
- Используется в криптографии: Они имеют решающее значение для безопасной связи.
- Компьютерные симуляции: Часто используется при моделировании и анализе сложных систем.
Генератор случайных чисел
Как работает генератор случайных чисел? ?
Генераторы случайных чисел работают либо с физическими процессами, либо с математическими алгоритмами. Наиболее важными типами являются генераторы истинных случайных чисел (TRNG) и генераторы псевдослучайных чисел (PRNG).
Где играть в блэкджек онлайн?
У нас были самые лучшие впечатления от Black Jack в Playamo Live Casino сделано. На мой взгляд, это то, что нужно, ЛУЧШИЙ ВЫБОР за столами с живыми дилерами, и вы сможете очень хорошо потренироваться для реального казино! По сравнению с другими онлайн-казино, выигрыши в Playamo действительно выплачиваются, и поэтому я определенно рекомендую онлайн-казино Playamo!
В казино Playamo есть много живых столов для игры в блэкджек и Быстрая оплата Выиграть.
Различные применения случайности привели к разработке различных методов генерации случайных данных. Некоторые из них существовали с древних времен, включая такие известные примеры, как бросание игральных костей, подбрасывание монет, тасование игральных карт, использование стеблей тысячелистника (для гадания) в книге "И-Цзин" и бесчисленное множество других методов. Из-за механической природы этих методов генерация большого количества достаточно случайных чисел (важных для статистики) требовала много труда и времени. Поэтому результаты иногда собирались и распространялись в виде таблиц случайных чисел.
Существует несколько вычислительных методов генерации псевдослучайных чисел. Все они не достигают цели истинной случайности, хотя с разной степенью успеха выполняют некоторые из статистических требований. Тесты для случайности, которые предназначены для измерения того, насколько непредсказуемы их результаты (т.е. насколько узнаваемы их шаблоны). Это делает их в целом непригодными для таких приложений, как криптография. Однако существуют и тщательно разработанные криптографически безопасные генераторы псевдослучайных чисел (CSPRNGS), обладающие особыми свойствами, разработанными специально для Вставить были разработаны в области криптографии.
Применение генераторов случайных чисел
- Игры и развлечения:
- Генераторы случайных чисел используются в играх для создания непредсказуемых элементов, таких как броски костей, розыгрыши карт или генерация уровней.
- Криптография:
- В сфере информационной безопасности генераторы случайных чисел играют важную роль в создании ключей, солей и несов, которые необходимы для шифрования и аутентификации.
- Статистика и образцы:
- При создании выборок для опросов и исследований генераторы случайных чисел помогают составить репрезентативные и несмещенные выборки.
- Имитационные модели:
- В науке и технике генераторы случайных чисел используются для проведения симуляций Монте-Карло, в которых случайные величины используются для моделирования и анализа сложных систем.
- Лотереи и конкурсы:
- Они обеспечивают честный и случайный выбор победителей в лотереях, тотализаторах и других конкурсах.
- Алгоритмы оптимизации:
- Случайные методы, такие как генетические алгоритмы и моделируемый отжиг, используют генераторы случайных чисел для эффективного поиска пространства решений и нахождения оптимальных решений.
- Искусственный интеллект и машинное обучение Обучение:
- Генераторы случайных чисел используются для смешивания наборов данных и случайного выбора обучающих и тестовых данных для проверки и обучения моделей.
Генераторы случайных чисел находят применение в Азартные игрыв статистической выборке, компьютерном моделировании, криптографии, полностью рандомизированном проектировании и других областях, где желательно получение непредсказуемого результата. В целом, в приложениях, где непредсказуемость является ключевой характеристикой, таких как приложения безопасности, предпочтение, по возможности, отдается аппаратным генераторам.
Генераторы псевдослучайных чисел очень полезны при разработке методов моделирования Монте-Карло, поскольку отладка облегчается возможностью повторять одну и ту же последовательность случайных чисел, начиная с одного и того же случайного семени. Они также используются в криптографии - до тех пор, пока семя остается секретным. Отправитель и получатель могут автоматически генерировать один и тот же набор чисел для использования в качестве ключа.
Генерация псевдослучайных чисел - важная и распространенная задача в компьютерном программировании. В то время как криптография и некоторые числовые алгоритмы требуют очень высокой степени кажущейся случайности, многие другие операции требуют лишь скромной степени непредсказуемости. В качестве простых примеров можно привести представление пользователю "случайной цитаты дня" или определение направления движения управляемого компьютером противника в компьютерной игре. Более слабые формы случайности используются в алгоритмах хеширования и при создании амортизированных алгоритмов поиска и сортировки.
Некоторые приложения, которые на первый взгляд кажутся подходящими для рандомизации, на самом деле не так просты. Например, система, которая "рандомизирует" музыкальные треки для системы фоновой музыки, должна только появляться случайным образом и даже может иметь возможность управлять выбором музыки: действительно рандомизированная система не будет иметь ограничений на появление одного и того же трека два или три раза подряд.
Настоящие случайные числа против псевдослучайных ?.
Разница между настоящими и псевдослучайными числами заключается в предсказуемости и источнике случайности.
- Настоящие случайные числа: Непредсказуемые, основанные на физических процессах.
- Псевдослучайные числа: Генерируются алгоритмами, предсказуемы, если известно семя.
Существует два основных метода генерации случайных чисел. В первом методе измеряется физическое явление, которое считается случайным, а затем компенсируются возможные искажения в процессе измерения. В качестве примера можно привести измерение атмосферного шума, теплового шума и других внешних электромагнитных и квантово-механических явлений. Например, космическое фоновое излучение или радиоактивный распад, измеряемый в течение коротких периодов времени, являются источниками естественной энтропии (как меры непредсказуемости или неожиданности процесса генерации чисел).
Скорость, с которой энтропия может быть извлечена из природных источников, зависит от физических явлений, лежащих в основе измерения. Поэтому источники естественной "истинной" энтропии называют блокирующими - их скорость ограничена до тех пор, пока не будет собрано достаточно энтропии для удовлетворения спроса. В некоторых Unix-подобных системах, включая большинство дистрибутивов Linux, файл псевдоустройства /dev/random блокируется до тех пор, пока из окружающей среды не будет собрано достаточно энтропии. Из-за такого поведения блокировки чтение больших объемов данных из /dev/random, например, заполнение жесткого диска случайными битами, часто может быть медленным в системах, использующих этот тип источника энтропии.
Второй метод использует вычислительные алгоритмы, которые могут генерировать длинные последовательности кажущихся случайными результатов, которые на самом деле полностью определяются коротким начальным значением, известным как начальное значение или ключ. Это позволяет воспроизвести всю кажущуюся случайной последовательность, если известно начальное значение. Такой тип генератора случайных чисел часто называют генератором псевдослучайных чисел. Этот тип генератора обычно является неблокирующим, поэтому его скорость не ограничивается внешним событием, что позволяет считывать большие объемы данных.
Некоторые системы используют гибридный подход, при котором случайность собирается из естественных источников, когда они доступны, и полагаются на криптографически защищенные генераторы псевдослучайных чисел (CSPRNG), которые периодически перезаправляются, когда желаемая скорость чтения превышает способность естественного сбора удовлетворить спрос. Этот подход позволяет избежать ограниченного по скорости блокирования поведения генераторов случайных чисел, основанных на более медленных и основанных исключительно на окружающей среде методах.
Хотя генератор псевдослучайных чисел, основанный исключительно на детерминированной логике, никогда не может считаться "истинным" источником случайных чисел в чистом смысле этого слова, на практике их вполне достаточно даже для критически важных приложений, связанных с безопасностью. Тщательно разработанные и реализованные генераторы псевдослучайных чисел могут быть сертифицированы для критически важных криптографических целей, как в случае с алгоритмами Yarrow и Fortuna. Первый из них лежит в основе источника энтропии /dev/random во FreeBSD, AIX, macOS, NetBSD и других. В OpenBSD используется алгоритм псевдослучайных чисел, известный как arc4random.
Методы генерации
Физические методы
Самые ранние методы генерации случайных чисел, такие как бросание костей, монет и колес рулетки, используются и сегодня, в основном в играх и азартных играх, поскольку они слишком медленны для большинства приложений в статистике и криптографии.
Физический генератор случайных чисел может быть основан на по сути случайном атомном или субатомном физическом явлении, непредсказуемость которого может быть объяснена законами квантовой механики. Источниками энтропии являются радиоактивный распад, тепловой шум, шум выстрела, лавинный шум в диодах Зенера, отклонения часов, временные перемещения считывающей головки жесткого диска и радиошум. Однако физические явления и инструменты, используемые для их измерения, обычно обладают асимметрией и систематическими искажениями, которые делают их результаты неравномерно случайными. Для получения равномерного распределения битов из неравномерно случайного источника, но с меньшей скоростью передачи, можно использовать случайный экстрактор, например криптографическую хэш-функцию.
В 2013 году был разработан прототип высокоскоростного генератора случайных чисел реального времени на основе хаотического лазера.
Разработаны различные изобретательские методы сбора этой энтропийной информации. Один из методов заключается в применении хэш-функции к кадру видеопотока из непредсказуемого источника. Лаваранд использовал эту технику с изображениями от нескольких лавовых ламп. HotBits измерял радиоактивный распад с помощью трубок Гейгера-Мюллера, а Random.org регистрировал колебания амплитуды атмосферного шума с помощью обычного радиоприемника.
Автоматизированные методы
Большинство случайных чисел, генерируемых компьютерами, используют ГПСЧ - алгоритмы, которые могут автоматически генерировать длинные последовательности чисел с хорошими свойствами случайности, но в конечном итоге эти последовательности повторяются (или же объем памяти растет неограниченно). Этих случайных чисел достаточно во многих ситуациях, но они не столь случайны, как числа, генерируемые на основе электромагнитного атмосферного шума, используемого в качестве источника энтропии. Набор значений, генерируемых такими алгоритмами, обычно определяется фиксированным числом, называемым затравкой. Одним из наиболее распространенных ГПСЧ является генератор линейной конгруэнтности, который использует рекуррентное соотношение
Xn+1=(aXn+b)mod mX_{n+1} = (aX_n + b)\mod mXn+1=(aXn+b)modm
используется для генерации чисел, где aaa, bbb и mmm - большие целые числа, а Xn+1X_{n+1}Xn+1 - следующее число в серии псевдослучайных чисел. Максимальное количество чисел, которое может сгенерировать формула, равно модулю mmm. Рекуррентное соотношение можно распространить на матрицы, чтобы получить гораздо более длинные периоды и лучшие статистические свойства. Чтобы избежать некоторых неслучайных свойств одного генератора линейной конгруэнтности, можно параллельно использовать несколько таких генераторов случайных чисел с немного разными значениями коэффициента умножения aaa, причем "главный" генератор случайных чисел выбирает между разными генераторами.
Простым методом ручной генерации случайных чисел является так называемый метод среднего квадрата, который был предложен Джоном фон Нейманом. Несмотря на простоту реализации, его результаты отличаются низким качеством. У него очень короткий период и серьезные недостатки, например то, что выходная последовательность почти всегда сходится к нулю. Недавнее нововведение - объединение метода средних квадратов с последовательностью Вейля. Этот метод позволяет получить высококачественные результаты за длительный период.
Большинство языков программирования содержат функции или библиотечные процедуры, обеспечивающие генераторы случайных чисел. Часто они предназначены для получения случайного байта или слова или равномерно распределенного числа с плавающей точкой в диапазоне от 0 до 1.
Качество, то есть случайность, таких библиотечных функций варьируется в широких пределах - от полностью предсказуемого результата до криптографически безопасного. Стандартный генератор случайных чисел во многих языках, включая Python, Ruby, R, IDL и PHP, основан на алгоритме Mersenne Twister и не является достаточным для криптографических целей, что явно указано в документации к языку. Такие библиотечные функции часто обладают плохими статистическими свойствами, а некоторые повторяют шаблоны лишь после десятков тысяч испытаний. Они часто инициализируются компьютерными часами реального времени в качестве затравки, поскольку такие часы 64-битные и измеряются в наносекундах, что намного превышает точность человека. Эти функции могут обеспечить достаточную случайность для некоторых задач (например, видеоигр), но не подходят, когда требуется высокое качество случайности, например, в криптографических приложениях или статистике.
Генераторы случайных чисел более высокого качества доступны в большинстве операционных систем; например, /dev/random в различных производных BSD, Linux, Mac OS X, IRIX и Solaris, или CryptGenRandom для Microsoft Windows. Большинство языков программирования, включая упомянутые выше, предоставляют возможность доступа к этим источникам более высокого уровня.
Создано людьми
Генерация случайных чисел также может осуществляться людьми путем сбора различных входных данных от конечных пользователей и использования их в качестве источника случайности. Однако большинство исследований показывают, что люди проявляют определенную степень неслучайности при попытке сгенерировать случайную последовательность, например, цифр или букв. Они могут слишком часто переключаться между вариантами по сравнению с хорошим рандомизатором, поэтому данный подход не получил широкого распространения. По той же причине, по которой люди плохо справляются с этой задачей, генерация случайных чисел может быть использована как инструмент для получения информации о функциях мозга, недоступных другими способами.
Постобработка и статистические проверки
Даже при использовании правдоподобного источника случайных чисел (возможно, аппаратного генератора на основе квантовой механики) требуется тщательная проверка, чтобы получить абсолютно беспристрастные числа. Поведение таких генераторов часто меняется в зависимости от температуры, напряжения питания, возраста устройства или других внешних воздействий.
Генерируемые случайные числа иногда подвергаются статистическим тестам перед использованием, чтобы убедиться, что базовый источник по-прежнему работает, а затем подвергаются постобработке для улучшения их статистических свойств. Примером может служить аппаратный генератор случайных чисел TRNG9803, который использует измерение энтропии в качестве аппаратного теста, а затем обрабатывает случайную последовательность с помощью потокового шифра регистра сдвига. Как правило, использование статистических тестов для проверки сгенерированных случайных чисел затруднено. Ванг и Никол предложили метод статистического тестирования на основе расстояния, который используется для выявления слабых мест нескольких генераторов случайных чисел. Ли и Ванг предложили метод проверки случайных чисел на основе лазерных хаотических источников энтропии, использующих свойства броуновского движения.
Статистические тесты также используются для обеспечения уверенности в том, что обработанный конечный результат генератора случайных чисел действительно несмещенный, и для этого разработано множество пакетов тестов на случайность.
Дополнительные соображения
Настройка распределения
Равномерные распределения
Большинство генераторов случайных чисел работают с целыми числами или единичными битами, поэтому для получения "канонического" равномерного распределения между 0 и 1 требуется дополнительный шаг. Реализация не так тривиальна, как деление целого числа на его максимально возможное значение. А именно:
- Целое число, используемое в преобразовании, должно содержать достаточно битов для требуемой точности.
- Сама природа арифметики с плавающей точкой означает, что точность тем выше, чем ближе число к нулю. Эта дополнительная точность обычно не используется из-за огромного количества необходимых битов.
- Ошибки округления при делении могут исказить результат. В худшем случае в якобы исключенной области могут быть нарисованы реальные числа, что противоречит ожиданиям математиков.
Основной алгоритм, используемый в OpenJDK, Rust и NumPy, описан в предложении для STL C++. Он не использует дополнительную точность и страдает от искажений только в последнем бите из-за округления до ближайшего четного числа. Если "каноническое" равномерное распределение сдвинуто в другой диапазон, то возникают другие численные проблемы. Предложенный метод для языка программирования Swift утверждает, что везде используется полная точность.
Равномерно распределенные целые числа часто используются в таких алгоритмах, как тасовка Фишера-Ятса. Опять же, наивная реализация может внести в результат искажение по модулю, поэтому необходимо использовать более сложные алгоритмы. Метод, который почти никогда не выполняет деление, был описан Даниэлем Лемиром в 2018 году, а в настоящее время лучшим является "оптимальный алгоритм", вдохновленный арифметическим кодированием, разработанный Стивеном Кэноном из Apple Inc. в 2021 году.
Большинство ГПСЧ с соотношением 0 к 1 включают 0, но исключают 1, в то время как другие включают или исключают оба варианта.
Прочие распределения
При наличии источника равномерно распределенных случайных чисел существует несколько методов создания нового источника случайных чисел, соответствующего функции плотности вероятности. Один из методов, называемый методом инверсии, предполагает интегрирование по диапазону, который больше или равен случайному числу (которое должно быть сгенерировано между 0 и 1 для правильных распределений). Второй метод, называемый методом принятия-отклонения, предполагает выбор значений x и y и проверку того, превышает ли функция x значение y. Если это так, то значение x принимается. В противном случае значение x-w