Алоха!
Существует несколько методов и инструментов для проверки на случайность.Они применяются к набору чисел, собранных с генератора, подлежащего проверке.То есть, вы тестируете генератор на основе набора сгенерированных данных.
В вычислительной среде, особенно для IT-безопасности, мы обычно хотим иметь генератор, который соответствует единому случайному процессу.Существует много разных процессов, но я предполагаю, что вы стремитесь к единому процессу.
NIST опубликовал несколько документов с рекомендациями по обоим генераторам псевдослучайных чисел, а также по их проверке.Посмотрите на документы NIST SP 800-22 и SP 800-20.
Как указал кто-то другой.Если вы хотите Истинный Генератор Случайных Чисел (TRNG), вам нужно собрать физическую энтропию.Примерами таких источников являются радиоактивный распад, космическое излучение, лавовые лампы и т. Д. Предпочтительно вы хотите источники, которыми трудно манипулировать.У IETF есть RFC, в котором есть несколько хороших рекомендаций, см. RFC 4086 - Источник случайности для безопасности: http://tools.ietf.org/html/rfc4086
Обычно вы собираете энтропию из одного или более (предпочтительно более чем одного) источника.Собранные данные затем фильтруются (отбеливаются) и, наконец, используются для периодического посева хорошего PRNG.С разными семенами, естественно.
Так работает большинство современных хороших генераторов случайных чисел.Коллектор энтропии, питающий PRNG, созданный с использованием криптографических примитивов, таких как симметричные шифры (например, AES) или хэш-функций.См., Например, генератор случайных чисел Yarrow / Fortuna от Schneier, который в измененном виде используется во FreeBSD.
Возвращаясь к вашему вопросу о тестировании.Как кто-то указал, Marsaglia подготовил хороший набор тестов, который был кодифицирован в тестах DIEHARD.Теперь в тестах Dieharder есть еще более расширенный набор тестов: http://www.phy.duke.edu/~rgb/General/dieharder.php
Dieharder - это хороший инструмент, который даст вам уверенность в том, что огромная куча чисел, переданных ему (собранная из вашего генератора)случайно (с хорошим качеством) или нет.Запустить Dieharder легко, но это займет некоторое время.
Проверка случайности на месте - сложная задача.Обычно вы не хотите внедрять Dieharder в вашу систему.Что вы можете сделать, так это реализовать несколько простых детекторов, которые должны обнаруживать патологические случаи.Я обычно предлагаю:
Длина равного значения.Простой счетчик, который сбрасывается всякий раз, когда два последовательных значения, генерируемые ГСЧ, отличаются.И затем вам нужно определить порог, когда вы думаете, что счетчик показывает, что ГСБ сломан.Если вы видите 10 миллионов одинаковых значений и пространство значений больше, чем одно значение (то, которое вы видите), ваш ГСЧ, вероятно, работает не так хорошо.Esp, если значение является одним из значений ребра.Например, 0x00000 .... или 0xfffff ...
Медиана.Если после генерации миллиона значений и равномерного распределения медианное значение сильно наклонено к одному из краев пространства значений, а не близко к середине, возможно, что-то не так.
Дисперсия.Если вы после генерации миллионов значений не видели значений, близких к минимальному и максимальному значениям пространства значений, но вместо этого имеете узкое сгенерированное пространство значений, то что-то также не так.
В заключение.Поскольку, надеюсь, вы используете хороший PRNG (например, на основе AES), предложенные in-situ тесты могут вместо этого применяться к источнику энтропии.
Я надеюсь, что это помогло в некоторых отношениях.