Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
312.doc
Скачиваний:
7
Добавлен:
30.04.2022
Размер:
2.14 Mб
Скачать

7. Генераторы случайных и псевдослучайных последовательностей

7.1. Общая постановка задачи

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

Рассмотрим проблему создания случайных и псевдослучайных чисел более подробно. Наиболее часто в прикладных задачах результат формируют из счетчика тиков – системных часов. В этом случае данные о текущем часе несут примерно 16 бит информации, значение счетчика тиков – еще 16 бит. Это дает нам 32 бита информации – как известно, на сегодняшний день границей стойкой криптографии является значение в 40 бит, при реальных длинах ключей в 128 бит. Естественно, подобного метода крайне недостаточно. Идем дальше, к 32 битам можно добавить еще 16 бит из сверхбыстрого таймера, работающего на частоте 1,2 МГц в компьютерах архитектуры IBM PC AT и этого еще недостаточно. Кроме того, даже если мы сможем набрать длину ключа в 128 бит (что очень сомнительно), она будет нести псевдослучайный характер, поскольку основана на состоянии только лишь данной ЭВМ на момент начала шифрования. Источниками по-настоящему случайных величин могут быть только внешние объекты, например, человек.

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

По первому методу над самими введенными значениями производятся действия, повышающие случайность выходного потока. Так, например, обязательно удаляются верхние 3 бита введенного ASCII символа, часто удаляются еще один верхний и еще один нижний биты. Затем, объем полученной последовательности уменьшается еще в три раза наложением первого и второго бита на третий операцией XOR. Это, в принципе, генерирует достаточно случайную последовательность бит.

По второму методу на введенные символы алгоритм не обращает никакого внимания, зато конспектирует интервалы времени, через которые произошли нажатия. Запись моментов производится по отсчетам быстрого системного таймера (частота 1,2 МГц) или внутреннему счетчику процессора, появившемуся в процессорах, начиная с Intel Pentium (частота соответствует частоте процессора). Так как верхние и младшие биты имеют определенную корреляцию между символами (первые из-за физических характеристик человека, вторые из-за особенностей операционной системы), то они отбрасываются (обычно удаляются 0-8 старших бита и 4-10 младших).

Как более редко встречающиеся варианты можно встретить 1) комбинацию обоих клавиатурных методов и 2) метод, основанный на манипуляторе "мышь" - он выделяет случайную информацию из смещений пользователем указателя мыши.

В мощных криптосистемах военного применения используются действительно случайные генераторы чисел, основанные на физических процессах. Они представляют собой платы, либо внешние устройства, подключаемые к ЭВМ через порт ввода-вывода. Два основных источника белого Гауссовского шума – высокоточное измерение тепловых флуктуаций и запись радиоэфира на частоте, свободной от радиовещания.

7.2. ЛП-последовательности

Двоичные параллелепипеды. Назовем двоичным отрезком все отрезки, которые могут быть получены при делении отрезка на 2m равных частей, m = 0,1,2, … Например, двоичным отрезком являются отрезки [0,1], [0,1/2), [1/2,1], [0,1/4), [1/4,1/2), [1/2,3/4), … Перенумеруем все двоичные отрезки и обозначим их ls, s = 1,2,3,… Пусть k = (k1, … , kn), где некоторые (или даже все) kj могут совпадать. Назовем двоичным параллелепипедом Пk множество точек с координатами (x1, …, xn) такими, что при j = 1,2, …, n. Любой такой двоичный параллелепипед принадлежит единичному n-мерному кубу Kn.

Сетка, состоящая из точек кубаKn, называется П -сеткой, если каждому двоичному параллелепипеду Пк с объемом Vпk = принадлежат точек сетки. При этом всегда предполагается, что .

Рассмотрим произвольную последовательность точек P0,P1,…,Pi,…, принадлежащих Kn. Назовем двоичным участком этой последовательности множество членов Pi с номерами i, удовлетворяющих неравенству вида

(k = 0, 1, 2, 3,…; s = 1, 2, …).

Последовательность точек P0,P1,…,Pi,…куба Kn называется ЛП - последовательностью, если любой ее двоичный участок, содержащий не менее, чем , точек, представляет собой П -сетку.

ДР-последовательности. Выберем бесконечную треугольную матрицу вида

,

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

Последовательностью двоично-рационального типа или ДР-последовательностью называется последовательность чисел r(0), r(1), r(2),…, r(i),…, вычисляемых по следующим правилам:

1. r(0) = 0, r(2s) = Vs+1;

2. Если 2s<i<2s+1, то r(i) = r(2s)*r(i-2s), где * означает поразрядное сложение по модулю 2 в двоичной системе.

Лемма. ДР- последовательность r(0), r(1), r(2),…, r(i),…, соответствующая направляющей матрице ( ), есть одномерная ЛП0-последовательность, составленная из всевозможных двоично-рациональных дробей.

Моноциклические операторы в поле GF(2). Поле GF(2) состоит из двух элементов: 0 и 1. Правила умножения – обычные; правила сложения: 0 + 0 = 1 + 1 = 0, 0 + 1 = 1 + 0 = 1.

Рассмотрим линейное разностное уравнение порядка m с постоянными коэффициентами

, где разностный оператор L определен выражением

; здесь все и принадлежат GF(2).

Решением уравнения назовем бесконечную последовательность

определенную при всех и удовлетворяющую уравнению при каждом i.

Оператор L называется моноциклическим, если уравнение имеет решение с наименьшим периодом 2m-1.

Построение ЛП-последовательностей. Условимся говорить, что направляющая матрица ( ) принадлежит оператору L порядка m, если выполнены два условия:

  1. Каждый из первых m столбцов матрицы является решением уравнения : , при каждом фиксированном j; .

  2. Каждый из последующих столбцов матрицы является решением неоднородного уравнения: , при каждом фиксированном j;

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

Пусть L2, …, Ln– различные моноциклические операторы, порядки которых равны m2, …, mn. Пусть pj(0), pj(1), …, pj(i), …– какая-нибудь ДР – последовательность, принадлежащая оператору Lj. Тогда последовательность точек Q0, Q1, …, Qi, … с координатами

, есть ЛП-последовательность в Kn со значением

.

Таблица числителей. В таблице 1 приведены числители направляющих чисел при , . Хотя в расчетах точек Qi удобнее использовать сами направляющие числа

, мы табулировали числители, чтобы уменьшить объем таблицы. По таблице 1 можно вычислять точки Qi с номерами в кубе Kn размерности .

Исходный алгоритм. Перед началом расчета надо заменить таблицу таблицей .

Далее, если в двоичной системе номер точки i записывается в форме , то декартовы координаты точки вычисляются по единой формуле (j=1,2,…,n):

, (1) где * означает поразрядное сложение по модулю два в двоичной системе (операция «исключающее ИЛИ»). В формуле (1) умножать esна не надо: если es =1, то соответствующее значение войдет в (1), если es =0, то соответствующее значение надо пропустить. Таким образом, для расчета по формуле (1) нужны только логические операции.

Арифметический алгоритм. Для реализации формулы (1) удобно использовать машинные команды. Если такой возможности нет или использование процедур в машинном коде нежелательно, то можно прибегнуть к расчету непосредственно по таблице . Для этого по заданному номеру i вычисляем

, а затем для j = 1,2,…,n

.

Расчет по арифметическому алгоритму гораздо медленнее, чем по формуле (1), но если количество используемых в расчете точек Qi не превосходит 104, то он вполне приемлем.

Программа генерации ЛП-последовательности:

#include<stdio.h>

#include<MATH.H>

constN=51;

doubled(intx){

intmask;

mask=x;

returnmask;

}

voidmain(){

int j,l,i,a,m,k,b,s,ns;

intnr[N-1][19] = {/*значения берутся из таблицы 1*/};

int Q[N-1];

a=i;

m=1+ceil(log(a)/log(2));

for (j=1; 50; j++)

{

s=0;

for (k=1; m-1; k++)

{

ns=0;

for (l=k; m-1; l++)

{

b=nr[j][l];

ns=ns+abs(2*d(a/2*l))*abs(2*d(b/2*(l+1-k)));

}

s=s+d(0.5*ns)/2*(k-1);

}

Q[j]=abs(s);

printf("\n%d",Q[j]);

}

printf(“\n”);

}

Целые числа NR(J,L) берутся из таблицы - I – номер точки, N – ее размерность. Выходные данные массив Q - ЛП-последовательность.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]