Следующий Доктор
- 1 year ago
- 0
- 0
Тест на следующий бит ( англ. next-bit test ) — тест, служащий для проверки генераторов псевдо-случайных чисел на криптостойкость . Тест гласит, что не должно существовать полиномиального алгоритма, который, зная первые k битов случайной последовательности, сможет предсказать k +1 бит с вероятностью, неравной ½.
В теории криптографии отдельной проблемой является определение того, насколько последовательность чисел или бит, сгенерированных генератором, является случайной. Как правило для этой цели используются различные статистические тесты, такие как например тесты DIEHARD или тесты NIST . Эндрю Яо доказал в 1982 году что генератор, прошедший «тест на следующий бит», пройдет и любые другие статистические тесты на случайность, выполнимые за полиномиальное время.
Двоичный генератор проходит тест на следующий бит, если: для любого и любого вероятностного полиномиального по времени алгоритма A: -> {0,1} (Алгоритм, имеющий в качестве начальных данных последовательность битов длиной , и выдающий на своём выходе бит), выполняется следующее неравенство:
где — обозначение функции, убывающей быстрее, чем обратный полином степени n .
Стоит отметить, что определение теста на следующий бит не даёт никакого алгоритма для выполнения этого теста.
Бинарная последовательность , полученная от источника S, считается прошедшей расширенный тест на следующий бит, если: для любого i и l: 1 < i, l < n и любого вероятностного полиномиального по времени алгоритма A: -> выполняется то, что при помощи A не может предсказать следующие l бит или, в случае предсказания, выполнимо неравенство:
Доказано, что расширенный тест на следующий бит и тест на следующий бит — эквивалентны.
Хоть тест на следующий бит и является универсальным методом проверки независимости выходных бит последовательности, он пригоден лишь для несмещенных последовательностей, то есть таких, в которых вероятность появления единицы эквивалентна вероятности появления нуля.
Если же выходная последовательность должна заведомо обладать некоторым смещением , то есть , то данный тест не пригоден.
Поэтому для тестирования независимости выходных бит таких последовательностей приходится использовать другие тесты. В частности было предложено расширение теста на следующий бит — сравнительный тест на следующий бит . Идея теста заключается в том, что мы изначально полагаем, что распределение выходной последовательности описывается некоторой математической моделью, а тест служит для проверки соответствия генератора этой модели.
Двоичный генератор проходит S сравнительный тест на следующий бит относительно модели M, если: для любого i и любого вероятностного полиномиального по времени алгоритма (то есть алгоритм, имеющий в качестве начальных данных последовательность битов длиной i и выдающий на своём выходе бит), выполняется следующее неравенство:
где — вероятность предсказания алгоритмом следующего бита для модельного генератора.
Очевидно, что задавшись моделью M, представляющей истинно случайную последовательность, мы получим , то есть классический тест на следующий бит. Задавшись же моделью с и , получим искомый случай теста для несбалансированной последовательности с заданным смещением .
Данный тест использует преимущество древовидной структуры , способной сохранить всю информацию о подпоследовательностях в общей последовательности.
Алгоритм вычисления m-битных последовательностей может быть представлен в виде двоичного дерева с взвешенными ребрами. В данном дереве каждый лист на глубине l хранит информацию о том, сколько раз встретилась данная l-битная последовательность. Так как дерево является взвешенным, то его каждому его ребру приписывается отношение количества, записанного в дочернем листе, к количеству, записанному в родительском. Для достаточно большой случайной последовательности предполагается, что числа, соответствующие рёбрам, будут примерно равны 1/2.
Зададим величину r как вероятность того, что идеальный генератор сгенерировал последовательность менее случайную, чем исследуемый. Обычно r выбирают в пределах [0.001; 0.01]. Тогда если P-value больше r, то исследуемая последовательность считается случайной и наоборот в противном случае.
Тест Садегяна-Мохаери не дает ясного и точного критерия для определения случайности последовательности. Вместо этого создатели алгоритма предполагают возможность сделать некоторые выводы о общем поведении последовательности. Когда алгоритм успешно предсказывает (l+1) бит, то считается, что наступила локальная детерминированность.
Цель данного теста — определение отклонений в статистике появления следующего бита для подпоследовательности. Если же такое отклонение имеется — тест пытается использовать его для предсказания следующего бита. Последовательность считается неслучайной, если она содержит слишком много подпоследовательностей, чей последний бит предсказуем.
Практический тест показывает более разумные результаты в сравнении с оригинальным тестом Садегяна-Мохаери.
Стоит отметить, что нет известной теории, позволяющей вычислить точные значения μ и σ, используемые в последнем шаге алгоритма. Поэтому эти значения вычисляются приближенно.