Подробно о генераторах случайных и псевдослучайных чисел
На Хабре и в сети часто начали появляться статьи, посвященные уязвимостям генераторов случайных чисел. Данная тема крайне обширна и является одной из основных в криптографии. Под катом находится описание случайных чисел от A до Z. Статья является результатом свободного перевода цикла статей из одного западного блога и личных дополнений автора. Основная цель — получить feedback и поделиться знаниями.
Введение
- Генераторы сессий (PHPSESSID)
- Генерация текста для капчи
- Шифрование
- Генерация соли для хранения паролей в необратимом виде
- Генератор паролей
- Порядок раздачи карт в интернет казино
Как отличить случайную последовательность чисел от неслучайной?
Пусть есть последовательность чисел: 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 . Является ли она случайной? Есть строгое определение для случайной величины. Случайная величина — это величина, которая принимает в результате опыта одно из множества значений, причём появление того или иного значения этой величины до её измерения нельзя точно предсказать. Но оно не помогает ответить на наш вопрос, так как нам не хватает информации для ответа. Теперь скажем, что данные числа получились набором одной из верхних строк клавиатуры. «Конечно не случайная» — воскликните Вы и тут же назовете следующие число и будете абсолютно правы. Последовательность будет случайной только если между символами, нету зависимости. Например, если бы данные символы появились в результате вытягивания бочонков в лото, то последовательность была бы случайной.
Чуть более сложный пример или число Пи
Последовательность цифры в числе Пи считается случайной. Пусть генератор основывается на выводе бит представления числа Пи, начиная с какой-то неизвестной точки. Такой генератор, возможно и пройдет «тест на следующий бит», так как ПИ, видимо, является случайной последовательностью. Однако этот подход не является критографически надежным — если криптоаналитик определит, какой бит числа Пи используется в данный момент, он сможет вычислить и все предшествующие и последующие биты.
Данный пример накладывает ещё одно ограничение на генераторы случайных чисел. Криптоаналитик не должен иметь возможности предсказать работу генератора случайных чисел.
Отличие генератора псевдослучайных чисел (ГПСЧ) от генератора случайных чисел (ГСЧ)
Источники энтропии используются для накопления энтропии с последующим получением из неё начального значения (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.
В данном случае мы берем случайную величину rand() и задаем ей распределение, исходя из функции треугольного распределения. Для параметров a = -40, b = 100, c = 50 график 10000000 измерений будет выглядеть так

Экспоненциальное распределение
Пусть требуется получить датчик экспоненциально распределенных случайных величин. В этом случае F(x) = 1 – exp(-lambda * x). Тогда из решения уравнения y = 1 – exp(-lambda * x) получаем x = -log(1-y)/lambda.
Можно заметить, что выражение под знаком логарифма в последней формуле имеет равномерное распределение на отрезке [0,1), что позволяет получать другую, но так же распределённую последовательность по формуле: x = -log(y)/lambda, где y есть случайная величина(rand()).
Тесты ГПСЧ
Некоторые разработчики считают, что если они скроют используемый ими метод генерации или придумают свой, то этого достаточно для защиты. Это очень распространённое заблуждение. Следует помнить, что есть специальные методы и приемы для поиска зависимостей в последовательности чисел.
Одним из известных тестов является тест на следующий бит — тест, служащий для проверки генераторов псевдослучайных чисел на криптостойкость. Тест гласит, что не должно существовать полиномиального алгоритма, который, зная первые k битов случайной последовательности, сможет предсказать k+1 бит с вероятностью большей ½.
В теории криптографии отдельной проблемой является определение того, насколько последовательность чисел или бит, сгенерированных генератором, является случайной. Как правило, для этой цели используются различные статистические тесты, такие как DIEHARD или NIST. Эндрю Яо в 1982 году доказал, что генератор, прошедший «тест на следующий бит», пройдет и любые другие статистические тесты на случайность, выполнимые за полиномиальное время.
В интернете [10] можно пройти тесты DIEHARD и множество других, чтобы определить критостойкость алгоритма.
Рондомно Или Рандомно Что Это
Еще совсем недавно слово «рандомно» имело узкоспециальное применение в области программирования и компьютерных игр, но сейчас термин употребляется все чаще в отношении самых разнообразных ситуаций из жизни. Особенно любимо оно людьми, не достигшими даже среднего возраста, поэтому в словарях обычно относится к сленговой молодежной лексике. Рандомно — что это значит и в каком случае уместно употребление данного слова?
Происхождение слова «рандомно»
Для русской речи слово является заимствованным. Происходит от английского random и имеет в породившей его лексике различные формы: имя прилагательное (основная и наиболее часто употребляемая), имя существительное, наречие, причастие. Употребляется в значении «случайный», «произвольный», «хаотичный», «беспорядочный», «выборочный», «наугад», «наудачу», «случайность».
Проникновение в русский язык

Богатство русского языка в большинстве случаев позволяет не искать иностранный синоним для точного выражения мысли, если, конечно, явление, о котором идет речь, не абсолютно чуждо и нетипично для славянской культуры.
Для обозначения случайности в современной русской лексике предостаточно выражений, но прилагательное «рандомный» и однокоренные слова заняли свое место в активном словарном запасе многих людей, получив широкую популярность в основном благодаря молодежной моде на употребление иностранных слов вперемешку с родными.
Однако появлением в русском языке термин скорее обязан программистам. Благодаря наличию в языках программирования функции Random (что значит рандомно, произвольно), связанной с получением последовательности случайных чисел, английское слово, звучащее необычно и профессионально, постепенно перекочевало в русский в своем изначальном варианте.
На принципе случайности основаны некоторые методы искусственного интеллекта — алгоритм машинного обучения Random forest («рэндом форест» — «случайный лес»). Он предусматривает получение конечного результата путем сравнения множества данных, подобранных произвольно.
Распространению применения слова «рандомный» в быту способствовало использование его ви инструкциях, сопровождающих разнообразные компьютерные игры.
Рандомно: что это значит для геймера

В компьютерных играх жанра РПГ (RPG или CRPG — Computer Role-Playing Game) — ролевых играх, которые построены на управлении персонажем, обладающим определенными характеристиками, совершенствующимися по ходу развития сюжета и выполнения разнообразных заданий, существует понятие «великий корейский рандом», сокращенно — ВКР.
Оно означает многократное выполнение подобных действий с целью добиться конкретного результата, не имея информации о том, которое из них приведет к успеху. Например, победа над множеством врагов в надежде получить в качестве награды необходимую для развития сюжета или совершенствования персонажа вещь или способность. Выражение ВКР обозначает именно этот случайный шанс на положительный исход каждой схватки.
В ММОРПГ — тех же ролевых играх, но массовых и многопользовательских, обычно практикуемых в режиме онлайн через общую сеть, можно узнать, что рандомно — это способ распределения добычи или ущерба, а также характеристика возможности получить ценный приз, открывая хранилища, в которых он может быть. Например, за определенную оплату открывают пещеры, склады, сундуки, где находится что-то необходимое персонажу. Повезти может сразу, или есть вероятность, что придется потратиться на множество шансов.
MOBA (моба) — сетевая игра в режиме актуального времени, где задействовано много участников, разделенных на две команды. Основу сюжета составляют их бои друг с другом на карте определенной виртуальной местности. Цель — уничтожить главный штаб противника. При отсутствии заранее собранной группы участников, соперники и соратники будут выбраны рандомно. Что это принесет — победу или поражение, — решает случай.
По принципу произвольного выбора может быть также назначена местность и конфигурация предстоящей схватки. Например, в популярнейшей World of Tanks, начиная случайный бой, игрок не имеет информации ни о напарниках, ни о виртуальной местности, на которой будет разворачиваться сражение.
Рандомайзер

Однокоренное английское слово randomize тоже имеет значение «случайный». От него произошло понятие «рандомайзер», обозначающее генератор случайных чисел.
Таким образом, под выражением «рандомные цифры» (или числа), понимаются случайные значения, полученные бессистемно, с помощью подобного генератора. Применяется такая практика для проведения лотерей, исследований, проверок и в прочих процессах, нуждающихся в беспристрастном и бессистемном выборе в пределах заданного диапазона или группы.
Рондомно или рандомно что это
Авторитетными словарями прилагательное рандомный пока не зафиксировано, однако оно активно используется программистами в значении случайный, произвольный.
Рондомно или рандомно что это
Нашел человека, которому я очень сильно завидую, способностям, которые у него есть. У меня даже нет идей, как такое делается. История простая. Живу больше полгода с девушкой, слава Духу Тупака, что хата моя. Короче, 29 числа она пошла в свою контору на новогодний корпорат, там одни странные бабы и директор 120кг весом. Я сижу, всякой херней по бизнесу занимаюсь, конец же года. Тут она после 23:00 мне звонит, не сильно бухая, и говорит, что «встретила свою судьбу, свое счастье, партнера на всю жизнь, я поняла, что все было ошибкой. » Это цитаты, если что. За вещами, типа, после НГ заеду.
Не сказать, что я прямо сильно расстроился, стараюсь не втягиваться. Опыт есть. Праздники обошлись значительно дешевле и провел их как сам хотел. Вещи сложил. И вот настало 3 число и кто бы мог мне позвонить? Звонит девка в слезах и истерике просит понять и простить. Её обманули, предали, ввели в заблуждение, а она невинная повелась и меня незаслуженно обидела. Мужик оказался женатый с тремя детьми и утром 3 числа выставил её на улицу потому, что жена возвращается от матери, а ему еще все убрать надо. Мамаша сразу девку нахер послала и ей жить негде. Я, как человек великодушный и настоящий мужик, должен её простить и забыть эту мелочь и не портить «НАШЕ» счастье. Она все поняла и осознала. Бла-бла-бла.
Вот завидую мужику. Как мля это работает. Нет слов. Хоть звони и бери мастер-класс
Рондомно или рандомно что это
Рандомно — что значит?
Пользователи интернета периодически наталкиваются на различные выражения и словечки, которые не в состоянии расшифровать. Сегодня речь пойдёт об одном из них, это Рандомно, что значит вы можете прочесть немного ниже. Добавьте наш популярный сайт модные-слова.рф к себе в закладки, чтобы время от времени наведываться к нам в гости.
Впрочем, перед тем, как продолжить, мне бы хотелось посоветовать вам прочесть ещё парочку другую полезных новостей по тематике интернет сленга. Например, что значит Хелпани; как понять слово Бугуртить; что означает Орнула; что такое Дизреспект и т. п.
Итак, продолжим, что значит Рандомно? Этот термин был заимствован из английского языка «random«, и переводится на русский, как «случайный». Обычно, слово «рандом» связано с азартными играми, такими, как однорукий пират и рулетка.
Рандомно — так говорят, о случайном переборе чисел, когда что-то выбирают наугад, случайным образом.
Рандомно — это случайное выпадение каких-то единиц или чисел, и это ни от чего не зависит и ничем не контролируется, то есть как повезёт.
В программировании имеется такая интересная функция, как Rnd(), которая возвращает случайные дробные числа. Однако, программный метод, выдаёт всё же не совсем произвольные цифры, гораздо лучше для этих целей использовать таймер CMOS часов.
Когда я в своё время играл в одну игру в Одноклассниках (не буду её здесь рекламировать), то однажды админ сообщил, что выигрышные монеты будут выпадать рандомно, то есть случайно.
Для примера, что значит рандомно, я хотел бы описать очень простенький генератор чисел, где цифры выпадают совершенно случайно, от 1 до 100, и никто не может предсказать заранее верный результат.
Существует довольно редкий фразеологизм «корейский рандом«, которым обозначают весьма редкую вероятность выпадения нужного числа или возникновение требуемого события. Эта поговорка восходит к первым корейским РПГ играм, где возможность выпадения вещи, была с шансом 1 к 17-ти тысячам.
В музыкальной обработке существует такое понятие, как «рандомайз» — это применение установок цифровых фильтров или звучания нот в случайном порядке.
Вообще, рандомы сегодня используются на многих ресурсах в интернете, например в разных лотереях или конкурсах в социальных сетях. Кроме того, оно достаточно популярно в обиходе обычных и онлайн казино, когда в рулетке произвольным образом выпадет джекпот и не менее интересные бонусы.
Прочтя эту небольшую, но познавательную публикацию, вы узнали, что значит рандомно, и теперь вас не поставит в тупик это забавное словечко.
Рондомно или рандомно что это
![]() |
Народ требует хлеба и зрелищ! Народ требует иллюстраций к статье! В конце концов, если бы мы хотели почитать, мы бы пошли в библиотеку. |
|
о великий бог дропа Хрентебе, и сын его Рандом, и дочь Размечтался, и жена Агащяс, помогите выбить немножко гитсов! Содержание
|

