В этой статье
Что такое генерация случайных чисел?
Генерация случайных чисел — это процесс получения чисел, которые невозможно предсказать заранее. Компьютеры — детерминированные машины: без внешнего источника они не способны создавать истинную случайность. Разные методы обеспечивают разное качество случайности, что особенно важно для задач безопасности.
Истинные генераторы случайных чисел (TRNG) собирают энтропию из физических процессов: движения мыши, времени нажатий клавиш, задержек сетевых пакетов или специализированных датчиков. Псевдослучайные генераторы (PRNG) используют математические алгоритмы, засеянные энтропией, для создания последовательностей, внешне похожих на случайные.
Как генерируются случайные числа
CheckTown использует криптографически стойкий генератор случайных чисел браузера.
- Источник энтропии — использует window.crypto.getRandomValues(), который берёт энтропию на уровне операционной системы
- Отображение диапазона — переводит исходные случайные значения в заданный диапазон min/max без смещения
- Групповая генерация — создавайте сразу несколько чисел для списков, массивов или массовых задач
Попробуйте бесплатно — без регистрации
Сгенерировать случайные числа →Когда использовать генератор случайных чисел
Генерация случайных чисел находит применение в разработке, тестировании и статистике.
- Тестирование — генерируйте случайные тестовые данные для наполнения фикстур или тестовых баз данных
- Выборка — случайно отбирайте образцы из наборов данных для статистического анализа или A/B-тестирования
- Игры и симуляции — генерируйте непредсказуемые входные данные для симуляций, игр или лотерей
Частые вопросы
В чём разница между Math.random() и crypto.getRandomValues()?
Math.random() использует быстрый PRNG, инициализируемый при запуске. Он подходит для симуляций и игр, но не для задач безопасности. crypto.getRandomValues() использует CSPRNG операционной системы, который пригоден для генерации токенов, ключей и других чувствительных к безопасности значений. Для целей безопасности всегда используйте crypto.getRandomValues().
Можно ли использовать случайные числа для криптографических ключей?
Да, но только если они получены с помощью CSPRNG. Случайные числа от Math.random() или аналогичных некриптографических PRNG предсказуемы при знании начального значения и достаточном количестве выходных образцов. Криптографические ключи, токены, соли и одноразовые числа должны генерироваться с использованием криптографически стойкой случайности.
Что такое смещение по модулю и как оно влияет на диапазоны случайных чисел?
Смещение по модулю возникает при отображении случайного значения на диапазон с помощью оператора %. Если пространство случайных значений не делится нацело на размер диапазона, некоторые значения встречаются чаще других. Например, при отображении 0–255 на 0–9 с помощью % 10 значения 0–5 появляются чуть чаще. CheckTown использует метод отклонения выборок для устранения смещения.