что такое псевдослучайная последовательность

Подробно о генераторах случайных и псевдослучайных чисел

Введение

Как отличить случайную последовательность чисел от неслучайной?

Чуть более сложный пример или число Пи

что такое псевдослучайная последовательность. Смотреть фото что такое псевдослучайная последовательность. Смотреть картинку что такое псевдослучайная последовательность. Картинка про что такое псевдослучайная последовательность. Фото что такое псевдослучайная последовательность
Последовательность цифры в числе Пи считается случайной. Пусть генератор основывается на выводе бит представления числа Пи, начиная с какой-то неизвестной точки. Такой генератор, возможно и пройдет «тест на следующий бит», так как ПИ, видимо, является случайной последовательностью. Однако этот подход не является критографически надежным — если криптоаналитик определит, какой бит числа Пи используется в данный момент, он сможет вычислить и все предшествующие и последующие биты.
Данный пример накладывает ещё одно ограничение на генераторы случайных чисел. Криптоаналитик не должен иметь возможности предсказать работу генератора случайных чисел.

Отличие генератора псевдослучайных чисел (ГПСЧ) от генератора случайных чисел (ГСЧ)

Источники энтропии используются для накопления энтропии с последующим получением из неё начального значения (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.

что такое псевдослучайная последовательность. Смотреть фото что такое псевдослучайная последовательность. Смотреть картинку что такое псевдослучайная последовательность. Картинка про что такое псевдослучайная последовательность. Фото что такое псевдослучайная последовательность

Экспоненциальное распределение

Тесты ГПСЧ

Некоторые разработчики считают, что если они скроют используемый ими метод генерации или придумают свой, то этого достаточно для защиты. Это очень распространённое заблуждение. Следует помнить, что есть специальные методы и приемы для поиска зависимостей в последовательности чисел.

Одним из известных тестов является тест на следующий бит — тест, служащий для проверки генераторов псевдослучайных чисел на криптостойкость. Тест гласит, что не должно существовать полиномиального алгоритма, который, зная первые k битов случайной последовательности, сможет предсказать k+1 бит с вероятностью большей ½.

В теории криптографии отдельной проблемой является определение того, насколько последовательность чисел или бит, сгенерированных генератором, является случайной. Как правило, для этой цели используются различные статистические тесты, такие как DIEHARD или NIST. Эндрю Яо в 1982 году доказал, что генератор, прошедший «тест на следующий бит», пройдет и любые другие статистические тесты на случайность, выполнимые за полиномиальное время.
В интернете [10] можно пройти тесты DIEHARD и множество других, чтобы определить критостойкость алгоритма.

Источник

Краеугольный камень псевдослучайности: с чего начинается поиск чисел

что такое псевдослучайная последовательность. Смотреть фото что такое псевдослучайная последовательность. Смотреть картинку что такое псевдослучайная последовательность. Картинка про что такое псевдослучайная последовательность. Фото что такое псевдослучайная последовательность
(с)

Случайные числа постоянно генерируются каждой машиной, которая может обмениваться данными. И даже если она не обменивается данными, каждый компьютер нуждается в случайности для распределения программ в памяти. При этом, конечно, компьютер, как детерминированная система, не может создавать истинные случайные числа.

Когда речь заходит о генераторах случайных (или псевдослучайных) чисел, рассказ всегда строится вокруг поиска истинной случайности. Пока серьезные математики десятилетиями ведут дискуссии о том, что считать случайностью, в практическом отношении мы давно научились использовать «правильную» энтропию. Впрочем, «шум» — это лишь вершина айсберга.

С чего начать, если мы хотим распутать клубок самых сильных алгоритмов PRNG и TRNG? На самом деле, с какими бы алгоритмами вы не имели дело, все сводится к трем китам: seed, таблица предопределенных констант и математические формулы.

Каким бы ни был seed, еще есть алгоритмы, участвующие в генераторах истинных случайных чисел, и такие алгоритмы никогда не бывают случайными.

Что такое случайность

Первое подходящее определение случайной последовательности дал в 1966 году шведский статистик Пер Мартин-Лёф, ученик одного из крупнейших математиков XX века Андрея Колмогорова. Ранее исследователи пытались определить случайную последовательность как последовательность, которая проходила все тесты на случайность.

Основная идея Мартина-Лёфа заключалась в том, чтобы использовать теорию вычислимости для формального определения понятия теста случайности. Это контрастирует с идеей случайности в вероятности; в этой теории ни один конкретный элемент пространства выборки не может быть назван случайным.

«Случайная последовательность» в представлениях Мартина-Лёфа должна быть типичной, т.е. не должна обладать индивидуальными отличительными особенностями.

Было показано, что случайность Мартина-Лёфа допускает много эквивалентных характеристик, каждая из которых удовлетворяет нашему интуитивному представлению о свойствах, которые должны иметь случайные последовательности:

Существование множественных определений рандомизации Мартина-Лёфа и устойчивость этих определений при разных моделях вычислений свидетельствуют о том, что случайность Мартина-Лёфа является фундаментальным свойством математики.

Seed: основа псевдослучайных алгоритмов

Первые алгоритмы формирования случайных чисел выполняли ряд основных арифметических действий: умножить, разделить, добавить, вычесть, взять средние числа и т.д. Сегодня такие мощные алгоритмы, как Fortuna и Yarrow (используется в FreeBSD, AIX, Mac OS X, NetBSD) выглядят как генераторы случайных чисел для параноиков. Fortuna, например, это криптографический генератор, в котором для защиты от дискредитации после выполнения каждого запроса на случайные данные в размере 220 байт генерируются еще 256 бит псевдослучайных данных и используются в качестве нового ключа шифрования — старый ключ при этом каждый раз уничтожается.

Прошли годы, прежде чем простейшие алгоритмы эволюционировали до криптографически стойких генераторов псевдослучайных чисел. Частично этот процесс можно проследить на примере работы одной математической функции в языке С.

Функция rand () является простейшей из функций генерации случайных чисел в C.

В этом примере рандома используется вложенный цикл для отображения 100 случайных значений. Функция rand () хороша при создании множества случайных значений, но они являются предсказуемыми. Чтобы сделать вывод менее предсказуемым, вам нужно добавить seed в генератор случайных чисел — это делается с помощью функции srand ().

Seed — это стартовое число, точка, с которой начинается последовательность псевдослучайных чисел. Генератор псевдослучайных чисел использует единственное начальное значение, откуда и следует его псевдослучайность. Генератор истинных случайных чисел всегда имеет в начале высококачественную случайную величину, предоставленную различными источниками энтропии.

srand() принимает число и ставит его в качестве отправной точки. Если seed не выставить, то при каждом запуске программы мы будем получать одинаковые случайные числа.

Вот пример простой формулы случайного числа из «классики» — книги «Язык программирования C» Кернигана и Ричи, первое издание которой вышло аж в 1978 году:

Эта формула предполагает существование переменной, называемой random_seed, изначально заданной некоторым числом. Переменная random_seed умножается на 1 103 535 245, а затем 12 345 добавляется к результату; random_seed затем заменяется этим новым значением. Это на самом деле довольно хороший генератор псевдослучайных чисел. Если вы используете его для создания случайных чисел от 0 до 9, то первые 20 значений, которые он вернет при seed = 10, будут такими:

Если у вас есть 10 000 значений от 0 до 9, то распределение будет следующим:

0 — 10151 — 10242 — 10483 — 9964 — 9885 — 10016 — 9967 — 10068 — 9659 — 961

Любая формула псевдослучайных чисел зависит от начального значения. Если вы предоставите функции rand() seed 10 на одном компьютере, и посмотрите на поток чисел, которые она производит, то результат будет идентичен «случайной последовательности», созданной на любом другом компьютере с seed 10.

К сожалению, у генератора случайных чисел есть и другая слабость: вы всегда можете предсказать, что будет дальше, основываясь на том, что было раньше. Чтобы получить следующее число в последовательности, мы должны всегда помнить последнее внутреннее состояние генератора — так называемый state. Без state мы будем снова делать одну и ту же математическую операцию с одинаковыми числами, чтобы получить тот же ответ.

Как сделать seed уникальным для каждого случая? Самое очевидное решение — добавить в вычисления текущее системное время. Сделать это можно с помощью функции time().

Функция time() возвращает информацию о текущем времени суток, значение, которое постоянно изменяется. При этом метод typecasting гарантирует, что значение, возвращаемое функцией time(), является целым числом.

Итак, в результате добавления «случайного» системного времени функция rand() генерирует значения, которые являются более случайными, чем мы получили в первом примере.

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

Но опять же, все эти числа не случайны.

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

Период (цикл) генератора

Одними из наиболее часто используемых методов генерации псевдослучайных чисел являются различные модификации линейного конгруэнтного метода, схема которого была предложена Дерриком Лемером еще в 1949 году:

Рассмотрим случай, когда seed равен 1, а период — 100 (на языке Haskell):

В результате мы получим следующий ответ:

Это лишь пример и подобную структуру в реальной жизни не используют. В Haskell, если вы хотите построить случайную последовательность, можно воспользоваться следующим кодом:

Выбор случайного Int дает вам обратно Int и новый StdGen, который вы можете использовать для получения более псевдослучайных чисел. Многие языки программирования, включая Haskell, имеют генераторы случайных чисел, которые автоматически запоминают свое состояние (в Haskell это randomIO).

Чем больше величина периода, тем выше надежность создания хороших случайных значений, однако даже с миллиардами циклов крайне важно использовать надежный seed. Реальные генераторы случайных чисел обычно используют атмосферный шум (поставьте сюда любое физическое явление — от движения мыши пользователя до радиоактивного распада), но мы можем и схитрить программным методом, добавив в seed асинхронные потоки различного мусора, будь то длины интервалов между последними heartbeat потоками или временем ожидания mutual exclusion (а лучше добавить все вместе).

Истинная случайность бит

Итак, получив seed с примесью данных от реальных физических явлений (либо максимально усложнив жизнь будущему взломщику самым большим набором потоков программного мусора, который только сможем придумать), установив state для защиты от ошибки повтора значений и добавив криптографических алгоритмов (или сложных математических задач), мы получим некоторый набор данных, который будем считать случайной последовательностью. Что дальше?

Дальше мы возвращаемся к самому началу, к одному из фундаментальных требований — тестам.

Национальный институт стандартов и технологий США вложил в «Пакет статистических тестов для случайных и псевдослучайных генераторов чисел для криптографических приложений» 15 базовых проверок. Ими можно и ограничиться, но этот пакет вовсе не является «вершиной» проверки случайности.

Одни из самых строгих статистических тестов предложил профессор Джордж Марсалья из Университета штата Флорида. «Тесты diehard» включают 17 различных проверок, некоторые из них требуют очень длинных последовательностей: минимум 268 мегабайт.

Случайность можно проверить с помощью библиотеки TestU01, представленной Пьером Л’Экуйе и Ричардом Симардом из Монреальского университета, включающей классические тесты и некоторые оригинальные, а также посредством общедоступной библиотеки SPRNG.

Еще один полезный сервис для количественного измерения случайности.

Источник

Случайности не случайны?

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

что такое псевдослучайная последовательность. Смотреть фото что такое псевдослучайная последовательность. Смотреть картинку что такое псевдослучайная последовательность. Картинка про что такое псевдослучайная последовательность. Фото что такое псевдослучайная последовательность

Введение
Изучением случайности с древних времен занимались не только математики. Случайность стала предметом исследования во многих математических дисциплинах – в статистике, в теории игр, теории нечетких множеств, в физике и химии – при изучении свойств микромира, в экономике – при исследовании влияния случайных факторов на зарождение и развитие экономических кризисов, на траектории курсов мировых валют, в истории и социологии – при исследовании значения фактора случайности на развитие исторических событий и на смену эпох. Развитие науки уже в XX веке показало, что цепь случайных поистине непредсказуемых событий приводит исследователя не к хаосу, а к весьма жестким закономерным выводам глобального характера. Этот тезис нетрудно проиллюстрировать с помощью центральной предельной теоремы (и других теорем) теории вероятностей. Следует отметить особенность систем случайных объектов, которая может показаться в определенном смысле парадоксальной. Гораздо чаще можно описать, в крайнем случае, предсказать, глобальные, нежели локальные закономерности больших систем. Это определяет два безусловно востребованных современных направления исследования: поиск глобальных закономерностей случайных систем и обоснование для случайной системы непредсказуемости событий локального характера. Случайные последовательности чисел или элементов других множеств эффективно используются для экспериментального исследования свойств сложных объектов и систем.

Случайные последовательности
СП играют в криптографии важную роль, они используются для формирования ключевых и инициальных параметров криптографических алгоритмов, а также последовательностей шифрующих подстановок в поточных криптосистемах. Случайность и криптография тесно взаимосвязаны: основная цель криптографических систем состоит в преобразовании неслучайных осмысленных открытых текстов в кажущуюся случайной последовательность символов шифрованного текста. Это свойство криптосистем используют для генерации ПСП.
Наилучшие криптографические свойства криптосистемы достигаются при использовании так называемых идеальных случайных последовательностей (ИСП), математическая модель которых представляется реализацией последовательности независимых случайных величин, имеющих равномерное распределение вероятностей на заданном конечном алфавите. Такие последовательности называют также равномерно распределёнными (на некотором конечном множестве) случайными последовательностями (РРСП). Описанию свойств РРСП посвящено множество работ, в частности, [1], [4], [5] и [7].

Подходы к определению термина «случайность»
Существуют различные подходы к формальному определению термина «случайность», основанные на понятиях вычислимости и алгоритмической сложности [2]. Исторически первый подход, частотный, предложен фон Мизесом (Mises) в начале XX века и развивался Черчем (Church), Колмогоровым и Ловеландом (Loveland). Идея частотного подхода в том, что в СП должна наблюдаться устойчивость частот встречаемости элементов. Например, знаки 0 и 1 должны встречаться независимо и с равными вероятностями не только в самой двоичной СП, но и в любой ее подпоследовательности, выбранной независимо от исходных условий генерации.

Другой подход, сложностной, предложенный независимо Колмогоровым и Чейтином (Chaitin), основан на том, что любое описание реализации СП не может быть существенно короче самой этой реализации. То есть СП должна иметь сложное строение, и энтропия ее начальных элементов должна быть велика. При данном подходе показано, что последовательность случайна, если ее алгоритмическая сложность близка к длине последовательности.

Третий подход, количественный, развит Мартин-Лефом (Martin-Lof). Он заключается в разбиении вероятностного пространства последовательностей на неслучайные и случайные (последних относительно много). Неслучайными считаются последовательности, в которых наблюдаются какие-либо закономерности. Последовательность признается случайной, если она проходит набор определенных тестов, предназначенных для выявления закономерностей. Однако если требовать, чтобы последовательность прошла любой статистический тест, то окажется, что СП вообще не существует. На практике используют некоторый набор тестов, где доля СП, им не удовлетворяющих, стремится к 0 при неограниченном увеличении длины последовательностей.

В последние десятилетия в связи с требованиями, возникающими в криптографических приложениях, сформировался криптографический подход к определению СП, где последовательность считается случайной, если вычислительная сложность поиска закономерностей не меньше заданной величины. Этот подход согласован с существующим системным подходом к определению стойкости криптографических систем.

Указанные подходы к определению случайности имеют недостатки. Частотный подход затруднен на практике неопределенностью правил выбора подпоследовательностей, сложностной подход влечет необходимость уменьшения избыточности языка программирования. Использование количественного подхода затруднено определением множества тестов, применяемых к исследуемым последовательностям. Нижние оценки сложности криптографического подхода ориентированы на набор известных тестов, а он со временем может пополняться, что приводит к переоценке сложности. Вместе с тем, для криптографических приложений наиболее подходящим является криптографический подход, учитывающий статистические свойства последовательностей и область их применения.

Тестирование ПСП
Доказано (Herring, C., Palmore, J.I. Random Number Generators are Chaotic, 1995), что любая алгоритмическая реализация последовательности является несовершенной, то есть истинно случайная последовательность не может быть вычислена по какому-то правилу и, следовательно, она должна быть непериодической бесконечной последовательностью. Генерируемые по определенному правилу последовательности, имитирующие РРСП, называются псевдослучайными последовательностями (ПСП). Удачная имитация понимается как близость ряда характеристик генерируемых ПСП к аналогичным характеристикам ИСП.

Порождение ПСП, используемых в криптографических приложениях, основано на реализации многократных итераций определенного преобразования конечного множества Х (часто Х есть множество двоичных n-мерных векторов). Такая выходная последовательность является периодической. Однако длина периода может быть весьма большой, это гарантируется, в частности, использованием линейных регистров сдвига с примитивными характеристическими многочленами. Для многих генераторов ПСП доказаны хорошие статистические свойства и высокая линейная сложность, большая длина периода, однако доказать аналитические и статистические свойства часто не удается. Тогда для обоснования многих свойств используются статистические тесты.

Многообразие критериев оценки ПСП чрезвычайно велико. Каждый из подходов к анализу последовательностей можно отнести к одной из двух групп.
Первая группа связана с поиском закономерностей, позволяющих воспроизвести последовательность по ее отрезку небольшой длины. При этом основные требования к последовательности сводятся к отсутствию в ней относительно простых межзнаковых зависимостей.
Вторая группа критериев связана с оценкой статистических свойств последовательности: имеется ли в исследуемой последовательности какой-либо частотный дисбаланс, позволяющий аналитику прогнозировать по известному отрезку последовательности следующий (предыдущий) знак, то есть предположить значение следующего (предыдущего) бита с вероятностью большей, чем при случайном выборе? Основные требования к ПСП по второй группе критериев сводятся к тому, чтобы ряд ее статистических свойств соответствовал свойствам ИСП, в частности, в ПСП должны быть равномерно распределены частоты встречаемости и отдельных знаков, и s-грамм при достаточно больших значениях s.

При системном подходе для анализа последовательностей используются известные тесты и разрабатываются новые тесты с учётом особенностей анализируемого объекта. Если в ходе анализа в некотором классе последовательностей обнаруживается новая слабость, то разрабатывается соответствующий новый тест, который пополняет используемый набор известных тестов.
Обе группы методов анализа последовательностей составляют системный подход к анализу ПСП, в частности, к разработке поточных шифров.

Одна из первых формулировок основополагающих требований к статистическим свойствам периодических двоичных ПСП была дана С. Голомбом. Эти требования к последовательностям получили известность в криптографии как постулаты Голомба (Golomb S.W. Shift Register Sequences, 1967). Постулаты Голомба приведены, в частности, в монографии [7]. Постулаты исходят из условия сохранения положительных статистических свойств, присущих линейным рекуррентным последовательностям с максимальной длиной периода.
Правила Голомба не гарантируют высокого качества ПСП и являются скорее необходимыми. На практике использование постулатов Голомба для оценки качества ПСП затруднительно, в силу сложности теоретического расчета длин периодов ПСП, частот s–грамм на периоде, а также значений функции автокорреляции. Расчет на ЭВМ возможен лишь для ПСП с небольшой длиной периода, что ограничивает использование постулатов Голомба в криптографических приложениях.

Цель и задачи статистического тестирования ПСП
Тестирование ПСП на случайность – это способ выявления ее определенных свойств с помощью сравнения характеристик ПСП с аналогичными характеристиками ИСП.
С помощью статистического тестирования ПСП решаются следующие задачи:
1) оценка свойств выходной последовательности генератора ПСП с точки зрения использования в криптографическом алгоритме (например, в качестве секретного ключа);
2) оценка качества криптографических примитивов (хэш-функций, блочных и поточных шифров) по их выходным последовательностям, от которых требуется неотличимость от ИСП, в частности, проверка таких криптографических свойств, как лавинный эффект изменения выходных данных алгоритмов при искажениях, корреляция промежуточных и выходных последовательностей;
3) идентификация генераторов ПСП, выдающих «неслучайные» последовательности; разработка новых генераторов ПСП; проверка корректности реализации генераторов ПСП.
Суть тестирования обычно сводится к проверке так называемой «нулевой гипотезы» H0 относительно исследуемой последовательности x(k)=(x_1,…,x_k) длины k, согласно которой x получена на основе k независимых испытаний вероятностной схемы с равномерным распределением.

Вообще статистический тест Т есть двузначная функция
что такое псевдослучайная последовательность. Смотреть фото что такое псевдослучайная последовательность. Смотреть картинку что такое псевдослучайная последовательность. Картинка про что такое псевдослучайная последовательность. Фото что такое псевдослучайная последовательность,
где A* – множество последовательностей в алфавите А. Статистический тест Т разделяет множество V(k) последовательностей длины k на множество V(k,0) «неслучайных» последовательностей (как правило, относительно небольшое) и множество V(k,1)=V(k)/V(k,0) случайных последовательностей. Вероятность P того, что тест отвергает случайно выбранную двоичную последовательность x(k), равна V(k,0)/2^k. Как правило, в реальных тестах P не превышает 0,01.
Сложность точного вычисления функции Т велика ввиду громоздкости области определения. Поэтому статистическое тестирование для принятия/отклонения гипотезы H0 выполняется с помощью статистики f_T, то есть относительно просто вычислимой функции, отображающей множество последовательностей во множество действительных чисел, и вероятностного распределения статистики для гипотезы H0, определяемого теоретико-вероятностными методами. Статистический тест – это совокупность статистики, вычисленной по исходным данным, и решающего правила, в соответствии с которым по значению статистики определяют, принять или отклонить гипотезу H0.
Статистический тест является вероятностным, то есть возникают ошибки двух родов, являющиеся важными характеристиками теста:
1) ошибка a первого рода, если последовательность случайна, но H0 отклоняется;
2) ошибка b второго рода, если последовательность не случайна, но H0 принимается.
Решение о прохождении последовательности статистического теста принимается на основе различных критериев [7].
На основе порогового значения. Подход основан на вычислении для данной последовательности x(k) статистики теста f_T(x(k)) и её последующем сравнении с некоторым пороговым значением c(k). В соответствии с критерием двоичная последовательность x(k) не проходит статистический тест, если f_T(x(k)) a, то тест пройден.

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

1. 11 тестов: Donald Knuth (Stanford University), The Art Of Computer Programming Vol. 2 Seminumerical Algorithms, www-cs-faculty.stanford.edu/

uno/taocp.html
2. 15 тестов: Andrew Rukhin, et. al. (NIST ITL), NIST Statistical Test Suite, csrc.nist.gov/groups/ST/toolkit/rng/documentation_software.html
3. 12 тестов: George Marsaglia (Florida State University), DIEHARD, stat.fsu.edu/pub/diehard
4. 11 тестов: Pierre L’Ecuyer, Richard Simard (Departement d’Informatique et de Recherche Operationnelle Universite de Montreal), TestU01, www.iro.umontreal.ca/

simardr/testu01/tu01.html
5. 5 тестов: Helen Gustafson, et. al.(Queensland University of Technology), Crypt-XS, коммерческая версия, www.qut.edu.au/institute-for-future-environments

Существуют другие описания и реализации статистических тестов, во многом повторяющие тесты из представленных выше наборов:

1. Alfred Menezes и др., Handbook of Applied Cryptography
2. Peter Hellekalek (University of Salzburg), The pLab Project, random.mat.sbg.ac.at
3. John Walker (Autodesk, Inc.), ENT, www.fourmilab.ch/random
4. Robert G. Brown (Duke University), Dieharder, www.phy.duke.edu/

rgb/General/dieharder.php
5. George Marsaglia (Florida State University), Wai Wan Tsang (The University of Hong Kong), «Distilled» version of Diehard, www.jstatsoft.org/v07/i03

Несмотря на немалое количество существующих реализаций статистических тестов ПСП, данное направление постоянно развивается, и в настоящее время активно появляются новые проекты, которые предлагают новые реализации рассмотренных тестов, в том числе, в условиях распределенных вычислительных систем.
Рассмотренные наборы статистических тестов ПСП составляют удобный и гибкий инструмент исследования генераторов ПСП, применяемых в криптографических приложениях.
Пакет NIST STS обладает большей гибкостью, расширяемостью и эффективностью (с точки зрения временных затрат на осуществление тестирования) и является наиболее полным из имеющихся пакетов для статистического тестирования двоичных последовательностей (подробнее можно посмотреть в работах [5], [8], [9]). Тесты пакета NIST STS подробно рассмотрены в статье «Статистические проверки случайных чисел методами NIST» habrahabr.ru/company/securitycode/blog/237695 [3]. На основе пакета NIST STS могут быть построены методики более полного статистического и структурного анализа последовательностей, учитывая то, что для надежной оценки качества ПСП, выработанной генератором, целесообразно проводить не одно, а несколько испытаний.
Все тесты направлены на выявление различных дефектов случайности. Подробнее о выявляемых дефектах случайности можно посмотреть в работе [8].
На практике принятие или отвержение нулевой гипотезы основывают на результатах применения нескольких независимых тестов. Когда независимые тесты приводят к различным выводам, используется комбинирование результатов тестов с помощью статистик, учитывающих совокупность результатов всех использованных тестов. При небольшом количестве комбинируемых тестов используется статистика Фишера-Пирсона, которая сравнивается с распределением хи-квадрат. Если количество комбинируемых тестов велико, то рекомендуется применение теста Колмогорова-Смирнова.
В таблице 1 даны некоторые тесты, рекомендуемые для тестирования ПСП различных длин.

Таблица 1. Статистические тесты для ПСП различных длин
что такое псевдослучайная последовательность. Смотреть фото что такое псевдослучайная последовательность. Смотреть картинку что такое псевдослучайная последовательность. Картинка про что такое псевдослучайная последовательность. Фото что такое псевдослучайная последовательность

Предварительный анализ рассмотренных статистических тестов позволил определить, какие из них наиболее пригодны для использования в различных задачах разработки средств криптографической защиты информации.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *