Как работает генератор случайных чисел
Полный гид по случайным числам: алгоритмы, криптография, применение, честность.
Что такое генератор случайных чисел
Генератор случайных чисел (ГСЧ, или RNG – Random Number Generator) – это алгоритм или физическое устройство, создающее последовательность чисел, которую невозможно предсказать. Случайные числа используются повсеместно: от криптографии и компьютерных игр до научных симуляций и проведения лотерей.
Существует два принципиально разных типа генераторов: аппаратные (истинно случайные) и программные (псевдослучайные). Разница между ними – в источнике случайности.
Псевдослучайные числа (PRNG)
Большинство программных генераторов создают псевдослучайные числа. Они вычисляются по математической формуле из начального значения (seed). Если знать seed и алгоритм, можно полностью воспроизвести последовательность.
Самый известный алгоритм PRNG в вебе – Math.random() в JavaScript. В большинстве современных браузеров он использует алгоритм xorshift128+, который был разработан Sebastiano Vigna в 2014 году. Этот алгоритм быстрый и даёт хорошее распределение, но он не подходит для криптографии, так как предсказуем.
Псевдослучайные числа отлично подходят для:
- Игровой логики и анимаций
- Тестирования программного обеспечения
- Моделирования и симуляций
- Генерации контента (карты, уровни)
Криптостойкие генераторы (CSPRNG)
Для задач, где критически важна непредсказуемость, используются криптостойкие генераторы псевдослучайных чисел (CSPRNG). Они получают энтропию из операционной системы – тепловые шумы процессора, тайминги пользовательских действий, сетевые пакеты и другие физические процессы.
В браузере для этого используется crypto.getRandomValues() – часть Web Crypto API. Этот метод генерирует числа, которые невозможно предсказать даже при полном знании алгоритма, потому что источник случайности находится за пределами программы.
Криптостойкие генераторы необходимы для:
- Генерации паролей и ключей шифрования
- Создания токенов аутентификации
- Гейблинга и лотерей (где на кону деньги)
- Определения победителей в конкурсах
Наш сервис использует именно crypto.getRandomValues() – это гарантирует честный и непредсказуемый результат.
Аппаратные генераторы (TRNG)
Аппаратные (истинно случайные) генераторы используют физические явления как источник энтропии:
- Радиоактивный распад (самый старый метод)
- Тепловой шум резисторов
- Фотоны (квантовый шум)
- Лавинный пробой диодов
- Дрожание тактовых частот (jitter)
Современные процессоры (Intel, AMD) имеют встроенные аппаратные генераторы (например, инструкция RDRAND), которые используют тепловой шум кристалла. Эти данные смешиваются с энтропией ОС и доступны через /dev/urandom в Linux и crypto API в браузерах.
История случайных чисел
Люди генерировали случайные числа задолго до компьютеров. Вот краткая история:
- Древний мир – бросание костей (астрогалы), гадание на камнях. Первые шестигранные кости найдены в Месопотамии, 3000 г. до н.э.
- Средневековье – карточные игры, лотереи. Первая государственная лотерея в Европе – 1449 год, Брюгге.
- 1927 год – Л. Триппетт опубликовал первую таблицу случайных чисел (40 000 цифр, созданных вручную).
- 1946 год – Джон фон Нейман создал один из первых программных ГСЧ (метод середины квадрата) для Манхэттенского проекта.
- 1958 год – первый аппаратный ГСЧ ERNIE определил победителей британской лотереи Premium Bonds.
- 1997 год – Makoto Matsumoto и Takuji Nishimura создали алгоритм Mersenne Twister, ставший стандартом в программировании.
- 2014 год – xorshift128+ стал стандартом в движках V8 (Chrome) и SpiderMonkey (Firefox).
Часто задаваемые вопросы
Что такое генератор случайных чисел?
Генератор случайных чисел (ГСЧ, англ. Random Number Generator, RNG) – это алгоритм или устройство, создающее последовательность чисел, которая не подчиняется какой-либо закономерности и не может быть предсказана. В программировании используются псевдослучайные генераторы, которые создают числа по математическим формулам, и криптостойкие генераторы, которые получают случайность из физических процессов операционной системы.
Чем отличается псевдослучайное число от действительно случайного?
Псевдослучайное число вычисляется алгоритмом из начального значения (seed). Если знать алгоритм и seed, последовательность можно полностью воспроизвести. Истинно случайное число получается из непредсказуемого физического процесса – теплового шума, радиоактивного распада, квантовых эффектов. На практике псевдослучайных чисел достаточно для большинства задач, кроме криптографии и гейблинга.
Какой алгоритм использует ваш генератор?
Наш сервис использует Web Crypto API – метод crypto.getRandomValues(), встроенный во все современные браузеры. Этот метод обращается к системному источнику энтропии операционной системы (на Linux – /dev/urandom, на Windows – CryptGenRandom). Это криптостойкий генератор, который значительно надёжнее популярного Math.random().
Можно ли использовать ваш генератор для проведения розыгрышей?
Да, абсолютно. Наш генератор обеспечивает честный, непредсказуемый результат, который невозможно подделать или предсказать заранее. Это делает его идеальным инструментом для определения победителей в конкурсах, розыгрышах и лотереях. Рекомендуем фиксировать результат на скриншоте или видео для透明ности.
Можно ли предсказать результат генератора?
Нет. Мы используем криптостойкий генератор crypto.getRandomValues(), который получает энтропию из операционной системы. Даже если злоумышленник знает алгоритм, он не может предсказать следующее число, так как источник случайности находится за пределами программы. Это принципиальное отличие от Math.random(), который теоретически предсказуем.
Бесплатный ли ваш сервис?
Да, все инструменты нашего сервиса полностью бесплатны. Вам не нужно регистрироваться, создавать аккаунт или платить за использование. Мы не собираем персональные данные и не используем cookies для отслеживания. Сервис существует за счёт рекламы.
Какое максимальное число можно сгенерировать?
Максимальный диапазон генерации – от 0 до 999 999 999. За один запрос можно получить до 1000 случайных чисел. Для большинства задач этого более чем достаточно.
Может ли одно число выпадать чаще других?
Нет. В нашем генераторе все числа в заданном диапазоне имеют абсолютно равную вероятность выпадения. Это статистически проверенный факт – при большом количестве генераций распределение будет равномерным. Человеческий мозг склонен искать паттерны в случайных данных, но это когнитивное искажение, а не реальная закономерность.
Входят ли граничные числа (от и до) в выборку?
Да, оба граничных значения включены в диапазон генерации. Например, если вы указали «от 1 до 10», то числа 1 и 10 тоже могут быть выбраны. Общее количество чисел в выборке равно (до − от + 1).
Работает ли генератор без интернета?
После того как страница загрузилась, генератор работает полностью в вашем браузере – интернет не нужен. Весь код JavaScript выполняется локально на вашем устройстве. Это значит, что генерация работает быстро и приватно – данные не передаются на сервер.
Что такое алгоритм Фишера-Йетса?
Алгоритм Фишера-Йетса (Fisher-Yates shuffle) – это метод случайного перемешивания массива, при котором каждый элемент получает равную вероятность оказаться на любой позиции. Этот алгоритм используется в нашем сервисе для функции «Без повторений» и инструментов «Выбор из списка» и «Разделение на группы». Он был предложен Рональдом Фишером и Фрэнком Йетсом в 1938 году.
Что такое Mersenne Twister?
Mersenne Twister – это один из самых популярных алгоритмов псевдослучайной генерации, разработанный в 1997 году. Он имеет огромный период (2^19937 − 1) и хорошее распределение. Используется в Python, PHP, Ruby и многих других языках. Однако он не является криптостойким и не подходит для безопасности.
Сохраняете ли вы историю генераций?
Мы сохраняем только общую статистику – количество генераций по типам (числа, кубики, пароли и т.д.) для отображения счётчика на сайте. Мы не сохраняем сами сгенерированные числа, ваши списки или пароли. Вся генерация происходит в вашем браузере локально.