что значит рандомное число

Подробно о генераторах случайных и псевдослучайных чисел

Введение

Как отличить случайную последовательность чисел от неслучайной?

Чуть более сложный пример или число Пи


Последовательность цифры в числе Пи считается случайной. Пусть генератор основывается на выводе бит представления числа Пи, начиная с какой-то неизвестной точки. Такой генератор, возможно и пройдет «тест на следующий бит», так как ПИ, видимо, является случайной последовательностью. Однако этот подход не является критографически надежным — если криптоаналитик определит, какой бит числа Пи используется в данный момент, он сможет вычислить и все предшествующие и последующие биты.
Данный пример накладывает ещё одно ограничение на генераторы случайных чисел. Криптоаналитик не должен иметь возможности предсказать работу генератора случайных чисел.

Отличие генератора псевдослучайных чисел (ГПСЧ) от генератора случайных чисел (ГСЧ)

Источники энтропии используются для накопления энтропии с последующим получением из неё начального значения (initial value, seed), необходимого генераторам случайных чисел (ГСЧ) для формирования случайных чисел. ГПСЧ использует единственное начальное значение, откуда и следует его псевдослучайность, а ГСЧ всегда формирует случайное число, имея в начале высококачественную случайную величину, предоставленную различными источниками энтропии.
Энтропия – это мера беспорядка. Информационная энтропия — мера неопределённости или непредсказуемости информации.
Можно сказать, что ГСЧ = ГПСЧ + источник энтропии.

Уязвимости ГПСЧ

Линейный конгруэнтный ГПСЧ (LCPRNG)

Распространённый метод для генерации псевдослучайных чисел, не обладающий криптографической стойкостью. Линейный конгруэнтный метод заключается в вычислении членов линейной рекуррентной последовательности по модулю некоторого натурального числа m, задаваемой следующей формулой:

где a (multiplier), c (addend), m (mask) — некоторые целочисленные коэффициенты. Получаемая последовательность зависит от выбора стартового числа (seed) X0 и при разных его значениях получаются различные последовательности случайных чисел.

Для выбора коэффициентов имеются свойства позволяющие максимизировать длину периода(максимальная длина равна m), то есть момент, с которого генератор зациклится [1].

Пусть генератор выдал несколько случайных чисел X0, X1, X2, X3. Получается система уравнений

Решив эту систему, можно определить коэффициенты a, c, m. Как утверждает википедия [8], эта система имеет решение, но решить самостоятельно или найти решение не получилось. Буду очень признателен за любую помощь в этом направлении.

Предсказание результатов линейно-конгруэнтного метода

Основным алгоритмом предсказания чисел для линейно-конгруэнтного метода является Plumstead’s — алгоритм, реализацию, которого можно найти здесь [4](есть онлайн запуск) и здесь [5]. Описание алгоритма можно найти в [9].
Простая реализация конгруэнтного метода на Java.

Отправив 20 чисел на сайт [4], можно с большой вероятностью получить следующие. Чем больше чисел, тем больше вероятность.

Взлом встроенного генератора случайных чисел в Java

Многие языки программирования, например C(rand), C++(rand) и Java используют LСPRNG. Рассмотрим, как можно провести взлом на примере java.utils.Random. Зайдя в исходный код (jdk1.7) данного класса можно увидеть используемые константы

Метод java.utils.Randon.nextInt() выглядит следующим образом (здесь bits == 32)

Результатом является nextseed сдвинутый вправо на 48-32=16 бит. Данный метод называется truncated-bits, особенно неприятен при black-box, приходится добавлять ещё один цикл в brute-force. Взлом будет происходить методом грубой силы(brute-force).

Пусть мы знаем два подряд сгенерированных числа x1 и x2. Тогда необходимо перебрать 2^16 = 65536 вариантов oldseed и применять к x1 формулу:

до тех пор, пока она не станет равной x2. Код для brute-force может выглядеть так

Вывод данной программы будет примерно таким:

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

И теперь в исходном коде заменим
crackingSeed.set(seed);
на
crackingSeed.set(getPreviousSeed(seed));

И всё, мы успешно взломали ГПСЧ в Java.

Взлом ГПСЧ Mersenne twister в PHP

Рассмотрим ещё один не криптостойкий алгоритм генерации псевдослучайных чисел Mersenne Twister. Основные преимущества алгоритма — это скорость генерации и огромный период 2^19937 − 1, На этот раз будем анализировать реализацию алгоритма mt_srand() и mt_rand() в исходном коде php версии 5.4.6.

Можно заметить, что php_mt_reload вызывается при инициализации и после вызова php_mt_rand 624 раза. Начнем взлом с конца, обратим трансформации в конце функции php_mt_rand(). Рассмотрим (s1 ^ (s1 >> 18)). В бинарном представление операция выглядит так:

10110111010111100111111001110010 s1
00000000000000000010110111010111100111111001110010 s1 >> 18
10110111010111100101001110100101 s1 ^ (s1 >> 18)
Видно, что первые 18 бит (выделены жирным) остались без изменений.
Напишем две функции для инвертирования битового сдвига и xor

Тогда код для инвертирования последних строк функции php_mt_rand() будет выглядеть так

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

Область для взлома

Если вы думаете, что уже нечего ломать, то Вы глубоко заблуждаетесь. Одним из интересных направлений является генератор случайных чисел Adobe Flash(Action Script 3.0). Его особенностью является закрытость исходного кода и отсутствие задания seed’а. Основной интерес к нему, это использование во многих онлайн-казино и онлайн-покере.
Есть много последовательностей чисел, начиная от курса доллара и заканчивая количеством времени проведенным в пробке каждый день. И найти закономерность в таких данных очень не простая задача.

Читайте также:  Чем занять себя в ожидании хгч

Задание распределения для генератора псевдослучайных чисел

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

Треугольное распределение

Приведем пример генерации случайной величины с треугольным распределением [7] на языке C99.

Экспоненциальное распределение

Тесты ГПСЧ

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

Одним из известных тестов является тест на следующий бит — тест, служащий для проверки генераторов псевдослучайных чисел на криптостойкость. Тест гласит, что не должно существовать полиномиального алгоритма, который, зная первые k битов случайной последовательности, сможет предсказать k+1 бит с вероятностью большей ½.

В теории криптографии отдельной проблемой является определение того, насколько последовательность чисел или бит, сгенерированных генератором, является случайной. Как правило, для этой цели используются различные статистические тесты, такие как DIEHARD или NIST. Эндрю Яо в 1982 году доказал, что генератор, прошедший «тест на следующий бит», пройдет и любые другие статистические тесты на случайность, выполнимые за полиномиальное время.
В интернете [10] можно пройти тесты DIEHARD и множество других, чтобы определить критостойкость алгоритма.

Источник

Что значит «рандомно» в интернет-сленге?

Современный интернет-сленг ежедневно пополняется новыми словами и выражениями. Они заимствуются из других языков и профессиональных жаргонизмов, подстраиваются под нужды пользователей сети и прочно закрепляются в их речи. Одним из таких терминов является слово «рандомно». Что оно обозначает? Откуда появилось и как используется сейчас?

Значение и происхождение

Термин «рандомно» произошел от английского random (случайный, произвольный, хаотичный). Внедрился в русское интернет-сообщество благодаря геймерскому комьюнити.

Еще в «древних» пиксельных RPG присутствовал элемент случайности в выпадении лута после поединков. В современных РПГ и ММОРПГ этот принцип сохраняется.

Инди RPG Job Hunt Heroes. Момент выпадения лута

Кейсы Counter-Strike:Global Offensive

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

Также считается, что слово «рандомно» пришло из языка программирования, а точнее, произошло от функции random (случайная последовательность чисел).

Современное использования термина

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

Рандомайзер

Это не исключительный вариант использования термина. Слово настолько прижилось, что стало полноправным синонимом слова «случайно». Оно используется и за пределами сети.

Несмотря на давность появления, «рандомно» используется и по сей день. Употребление термина популярно как среди молодежи, так и среди взрослых.

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

Источник

Что такое рандом?

Если сказать совсем просто, то рандом — это «случайность».

Если говорить развёрнуто, то «рандом» является англицизмом, то есть происходит из английского языка, есть там такое слово —random, которое можно перевести как «случайный», «произвольный» (два прилагательных), «случайность» (существительное), «наугад», «наудачу» (два наречия). По-другому рандом определяется как «вероятность результата» при совершении каких-либо действий, а ещё «случайно произошедшее событие» и «случайный выбор».

В компьютерных- и онлайн-играх рандом применяется, например, для того, чтобы свести игроков. Точнее сказать, игроки для конкретной, скажем для примера, гонки, подбираются рандомно. Играли в NFS World? Там перед началом гонки с реальными игроками происходит подбор таковых. Подбор этот происходит случайным образом. В шутерах по типу GTA на улицах появляются рандомные прохожие, какой-то особой закономерности обычно нет. Однако вот есть игры, где появление этих прохожих налажено, то есть появляются какие-то определённые лица в зависимости от местности. Это рандомом уже не назвать. Также в шутерах можно встретить выражение «рандомная стрельба» — это обозначает беспорядочную стрельбу, когда игрок особо ни в кого не прицеливается, но стреляет по кому-то.

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

Читайте также:  шансон 2021 лучшие песни о любви слушать

Источник

Значение слова «рандомный»

рандо́мный

1. спец. жарг. случайный ◆ Правда, в новой модели конструкторы обещают внести элементы непредсказуемости, чтобы могла отказываться, ссылаясь на рандомные причины. Юрий Никитин, «Рассветники», 2015 г.

Делаем Карту слов лучше вместе

Привет! Меня зовут Лампобот, я компьютерная программа, которая помогает делать Карту слов. Я отлично умею считать, но пока плохо понимаю, как устроен ваш мир. Помоги мне разобраться!

Спасибо! Я обязательно научусь отличать широко распространённые слова от узкоспециальных.

Насколько понятно значение слова неделикатность (существительное):

Предложения со словом «рандомный&raquo

Отправить комментарий

Дополнительно

Предложения со словом «рандомный&raquo

Рандомный выбор, не более.

Только что зарегистрированный игрок теперь попадал не в рандомный город, а в точку, приблизительно аналогичную той, что на земной карте соответствовала его населённому пункту.

Приватный ключ может быть представлен в виде сид (seed) фразы, которая представляет из себя рандомный набор слов, расположенных в определённом порядке.

Карта слов и выражений русского языка

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

Справочная информация по склонению имён существительных и прилагательных, спряжению глаголов, а также морфемному строению слов.

Сайт оснащён мощной системой поиска с поддержкой русской морфологии.

Источник

Готовимся к собеседованию: случайные числа в Python

Случайность управляет миром, а вы будете управлять случайностью. С помощью Python, конечно.

Чтобы имитировать бросок кубика в игре или предсказать загруженность интернет-ресурса, нужны случайные числа.

Мы разобрали самые популярные вопросы о случайных числах в Python с собеседований. Чаще всего для ответа достаточно написать код и кратко его прокомментировать. Да пребудет с вами Великий Рандом!

Главное, что нужно помнить

С некоторых пор утверждает, что он data scientist. В предыдущих сезонах выдавал себя за математика, звукорежиссёра, радиоведущего, переводчика, писателя. Кандидат наук, но не точных. Бесстрашно пишет о Data Science и программировании на Python.

Вопрос 1. Что такое случайные числа?

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

Другими словами, существует закон или правило, которое называется «функцией распределения» или просто «распределением». И это самое распределение «раздаёт» каждому числу из диапазона определённую вероятность выпадения.

В качестве диапазона значений математикам и программистам привычнее всего использовать диапазон действительных чисел от 0 до 1, но это могут быть и целые числа от 1 до 6, как в игральном кубике, или от 100 до 1 000 000 — и так далее. Главное, что и распределение, и диапазон известны заранее, а само число нет.

Итого: случайные числа — это искусственно полученная последовательность чисел из определённого диапазона, которая подчиняется одному из законов распределения случайной величины.

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

Вопрос 2. Как получить случайные числа в Python?

Основных способов два: с помощью «родной» библиотеки random и с помощью модуля numpy.random из библиотеки numpy.

Прежде чем интервьюер придерётся, не забудьте сказать, что и random, и numpy.random — генераторы псевдослучайных чисел (о них ниже). Истинно случайные числа можно получить, например, c сайта Random.Org: там они генерируются с помощью атмосферного шума.

Библиотека random имеет меньший объём, чем numpy.random, и проще в использовании. Зато numpy.random содержит дополнительные распределения для научных вычислений, а также функции для генерирования целых массивов случайных данных.

В первой строчке мы импортировали default_rng — это «генератор генераторов» случайных массивов из модуля numpy.random. Во второй — создали экземпляр такого генератора и присвоили ему имя rng. В третьей использовали его метод standard_normal, чтобы получить numpy-массив из 10 случайных чисел, и записали массив в переменную vals.

Вопрос 3. Псевдослучайные числа

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

Библиотека random и модуль numpy.random содержат в себе генератор не истинно случайных, а именно псевдослучайных чисел.

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

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

Читайте также:  Чем заменить орегано в греческом

Наиболее популярный современный алгоритм генерирования псевдослучайных чисел разработан в 1997 году и носит красивое название «Вихрь Мерсенна». Он используется и в Python. Последовательность чисел, порождённая им, статистически неотличима от истинно случайной и имеет период, равный числу с шестью тысячами знаков. Этого хватает для задач симуляции и моделирования, но с точки зрения криптографии такая последовательность всё равно небезопасна: для успешной атаки достаточно иметь сравнительно небольшую сгенерированную этим генератором последовательность.

Вопрос 4. Как повторить случайную последовательность?

Истинно случайную последовательность повторить невозможно. Но для повторения псевдослучайных чисел в обеих основных библиотеках — random и numpy.random есть функция seed (), которая отвечает за инициализацию («посев») последовательности.

Передавая аргумент 42 в функцию seed(), мы указываем конкретное место в псевдослучайной последовательности, поэтому команда random.random() в третьей и последней строках выдаёт одинаковое число — оно идёт первым после точки, помеченной как seed (42).

В seed() можно передать целые и дробные числа, а также строки и кортежи. Если оставить скобки пустыми, то в качестве аргумента seed() возьмёт текущее системное время.

Аналогичная функция есть в модуле numpy.random:

Вопрос 5. Красные и зелёные шары

Часто на собеседованиях просят написать программу, связанную с вероятностями. Например, код для численной проверки ответа к задачке «Какова вероятность вытащить зелёный шар из мешка, в котором 1 зелёный и 4 красных шара».
(Ответ ⅕ = 0,2).

Иными словами, если 100 раз вынимать шар из мешка, возвращая его обратно, количество выпадения зелёных шаров должно приближаться к 20. Вариант кода для проверки:

Функция random.choice() случайным образом выбирает значение из заданного диапазона — списка из одного « green» и четырёх « red». Код выведет количество зелёных шаров после 100 попыток.

Вопрос 6. Нечестная монетка

Другой вариант: предположим, у нас есть так называемая «нечестная» монетка, где орёл ( H, «heads») и решка ( T, «tails») выпадают не с вероятностью ½, как положено, а по-другому: орёл с вероятностью p(H) = 0,2, а решка, соответственно, p(T) = 0,8.

Тогда код для проверки будет выглядеть примерно так:

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

Код выведет количество выпавших орлов после 10 000 бросков.

К слову: задачи на нечестные монетки, наряду с поиском n-ного числа Фибоначчи и нахождением угла между часовой и минутной стрелками, кочуют из одного собеседования в другое уже не первый десяток лет. Есть вероятность, что одна из них попадётся и вам.

Вопрос 7. Проиллюстрируйте закон больших чисел

Закон больших чисел (ЗБЧ) говорит, что при увеличении количества попыток случайная величина стремится к своему математическому ожиданию — всё усредняется. Подробнее об этом можно прочитать в нашей статье об основах математики для Data Science.

Код для иллюстрации ЗБЧ на примере честной монетки выглядит так:

Вначале мы импортировали уже знакомый нам модуль random и модуль matplotlib.plt — он нужен для рисования простых графиков. После этого определили переменные: общее количество бросков ( total_flips), список из значений вероятностей ( numerical_probability), количество выпавших орлов ( H_count).

Теперь в цикле мы 5 000 раз «подбрасываем» монетку. Если выпадает орёл (« H»), то делим текущее количество выпавших орлов на текущее количество бросков и добавляем итоговое значение в конец списка numerical_probability. В конце рисуем график.

Чем больше бросков, тем ближе к 0,5 вероятность выпадения орла. Всё, как и предсказывает закон больших чисел.

Вопрос 8. Где применяются случайные числа?

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

В науке: с помощью метода Монте-Карло учёные моделируют поведение частиц во фрактальном окружении в трёхмерном пространстве. Метод Монте-Карло основан на использовании большого количества генерируемых случайных чисел.

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

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

Случайности не случайны

А чтобы никакая псевдослучайность не помешала вам успешно пройти собеседование, приходите в наш Шаолинь на курс «Профессия Python-разработчик». Вы изучите random, numpy и ещё много приёмов пайтонического кунг-фу, а мы поможем с наставниками, единомышленниками и, конечно, с трудоустройством.

Персонаж мультфильма «Кунг-фу Панда», старая мудрая черепаха, учитель и основоположник кунг-фу.

Источник

Библиотека с советами