ГСЧ лаборатория случайностей

Технология

Генератор,
который не стыдно показать

Большинство сайтов пишут Math.random() и называют это случайностью. Мы смешиваем три независимых источника энтропии через SHA-256 и показываем, как это проверить.

SHA-256 миксер 3 источника живой тест
CSPRNG браузера crypto.getRandomValues
Ваши движения координаты, тайминги, тапы
Публичный маяк drand #6588653
SHA-256 миксер seed = H(CSRNG ∥ пул ∥ маяк)
Поток чисел CSPRNG ⊕ SHA-256 keystream
Все инструменты числа, монетка, кости, выбор

Если внешний маяк недоступен, сайт не ломается: остаются два независимых источника — криптографический генератор и энтропия ваших действий.

Три слоя

Почему это лучше одного источника

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

01

Криптографический CSPRNG

crypto.getRandomValues() — тот же источник, что защищает TLS-соединения и генерацию ключей. Он гарантирует непредсказуемость: зная все остальные слои, результат всё равно нельзя вычислить.

непредсказуемость
02

Энтропия ваших действий

Каждое движение мыши, тап и нажатие клавиши — это координаты с микронной точностью и тайминги с наносекундным разбросом. Мы хешируем их в пул из 256 бит, который обновляется на каждом событии. Данные не покидают браузер.

физическая природа
03

Публичный маяк случайности

drand — распределённая сеть из независимых организаций (Cloudflare, EPFL, Protocol Labs и др.), которая каждые несколько секунд публикует подписанный блок случайных данных. Любой может проверить подпись и убедиться, что значение не подменили.

проверяемость
Состояние маяка drand #6588653
Случайность текущего раунда 159ab80744af175f7ef16eb55da63754ff9acb10ebd7a4f267977f5c8a3874d6
6588653 раунд drand
11:43:38 время публикации
32 байт энтропии

Проверить можно на сервере маяка: https://api.drand.sh/public/6588653. Подпись BLS выдаётся распределённым комитетом — в одиночку её не подделать.

Живой сбор энтропии 30 %

Запрашиваем публичный маяк случайности…

CSPRNG Ваши движения Маяк

Проверка

Убедитесь сами: тест на 65 536 числах

Сгенерируем большую выборку тем же генератором, что используют инструменты, и проверим её статистическими критериями: равномерность байтов (хи-квадрат), баланс битов, серийная корреляция.

Результат проверки тест не запускался
— значений
— хи-квадрат (255 ст. св.)
— p-value
— баланс битов
— серийная корреляция

Хи-квадрат проверяет, насколько равномерно распределены байты сгенерированных чисел. Для 255 степеней свободы нормой считается значение около 255; p-value больше 0,05 означает, что отклонений от случайности статистически не обнаружено.

Сравнение с «обычным» генератором

Что именно меняется, если не ограничиваться Math.random().

СвойствоMath.random()Наш генератор
ИсточникПсевдослучайный, инициализируется один разCSPRNG + физическая энтропия + публичный маяк
ПредсказуемостьВосстановим по нескольким значениямНе восстанавливается
ПроверяемостьНетПодписанные раунды drand
Источник в офлайнеЕстьОстаётся CSPRNG + движения
Контроль качестваНетОткрытый статистический тест
Что важно знать
Движения мыши обрабатываются локально: в браузере остаётся только хеш от пула энтропии. На сервер не уходит ни координат, ни истории.
Смешивание устроено так, что даже полное знание публичного маяка не позволяет предсказать результат: он дополнительно смешивается с секретом CSPRNG.
Генератор — инструмент для честного выбора и развлечения. Это не азартная игра и не лотерея: ставки не принимаются, выигрыши не выплачиваются.
Правовая информация
↑↓ навигация Enter открыть Esc закрыть