Лабораторная работа № 2

“ИЗУЧЕНИЕ И ПРАКТИЧЕСКОЕ ПРИМЕНЕНИЕ ДВУХКЛЮЧЕВЫХ БЛОЧНЫХ КРИПТОГРАФИЧЕСКИХ АЛГОРИТМОВ, ОСНОВАННЫХ НА СЛОЖНОСТИ РАЗЛОЖЕНИЯ ЦЕЛЫХ ЧИСЕЛ”

Программное контрольное обеспечение:

-  алгоритм генерации простых чисел;

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

-  расширенный алгоритм Евклида для вычисления наибольшего общего делителя (НОД) двух чисел;

-  алгоритм разложения целых чисел на множители;

-  алгоритм вычисления хэш-функции.

Порядок выполнения работы

1.  Разработать алгоритмы генерации простых чисел, вычисления модульной экспоненты и алгоритм Евклида (расширенный вариант) в выбранной среде программирования. Генерируемые числа не должны превышать значения int=216-1.

2.  Проверить правильность разработанных алгоритмов при генерации ключей шифрования-дешифрования:

а) Используя генератор простых чисел определить два числа p и q, значения которых не превышают , их произведение - число n=pq и функцию Эйлера f(n)=(p-1)(q-1).

б) Используя встроенный в среду программирования генератор случайных чисел получить открытый ключ e<f(n).

г) Используя расширенный алгоритм Евклида определить секретный ключ d, обратный e по модулю f(n):

de=1(mod f(n)).

д) Значения n, p, q, f(n), d и e занести в отчет.

е) Проверить правильность разработанных алгоритмов, используя контрольное программное обеспечение:

-  алгоритм генерации простых чисел p и q (с помощью алгоритма разложения чисел);

-  алгоритм вычисления модульной экспоненты на примере возведения в степень e контрольного числа xk=111 (y=xk e(mod n));

НЕ нашли? Не то? Что вы ищете?

-  расширенный алгоритм Евклида при получении секретного ключа d.

3.  Изучить методы шифрования-дешифрования информации:

а) Выбрать произвольную фразу (текст x), не превышающую 10 слов, и осуществить ее первичное преобразование в цифровой вид с использованием таблицы кодов ASCII.

б) Получить криптограмму y=xe(mod n), используя алгоритм модульного возведения в степень (с разрешения преподавателя можно использовать алгоритм прямого преобразования из контрольного ПО).

в) Провести дешифрование x=yd(mod n) (с разрешения преподавателя можно использовать алгоритм обратного преобразования из контрольного ПО).

в) Проверить выполнение равенства x=x, сделать выводы, результаты занести в отчет.

4.  Изучить методы генерации цифровой подписи и ее проверки:

а) Сгенерировать цифровую подпись открытого текста x без использования хэш-функции (аналогично шифрованию, но с другим ключом) s=xd(mod n). Подписью будет пара (x,s).

б) Создать подделку цифровой подписи путем возведения x и s в степень с произвольным показателем l (для его получения использовать генератор случайных чисел) x=xl(mod n), s=sl(mod n).

в) Проверить подлинность цифровой подписи:

x1=se(mod n), проверить равенство x1=x,

x2=se(mod n), проверить равенство x2=x.

Cделать выводы о безопасности цифровой подписи открытого текста и его целостности.

г) Получить хэш-образ открытого текста h(x), используя алгоритм вычисления хэш-функции контрольного ПО.

д) Получить подпись для хэш-образа s=hd(x)(mod n), используя алгоритм модульного возведения в степень. Подписью будет пара (x,s).

е) Создать подделку цифровой подписи путем возведения x и s в степень с произвольным показателем m (для его получения использовать генератор случайных чисел) x=xm(mod n), s=sm(mod n).

ж) Проверить подлинность цифровых подписей (x, s) и (x’,s’). Сделать выводы о безопасности подписи с использованием хэш-функций и целостности открытого текста, результаты занести в отчет.

5.  Изучить методы криптоанализа алгоритмов, основанных на сложности разложения целых чисел.

а) Разработать алгоритм разложения целых чисел, не превышающих значения int2=232-1. Проверить правильность разработанного алгоритма, разложив случайное число и сравнив с результатом разложения с помощью контрольного алгоритма.

б) Используя встроенный алгоритм случайных чисел, сгенерировать одно-, двух-, … , пятизначное десятичные числа vi, не превышающее значения int. Разложить данные числа на множители и оценить временные (вычислительные) затраты. Построить зависимость сложности (вычислительных затрат, операций) разложения от разрядности чисел.

в) Используя алгоритм простых чисел, сгенерировать одно-, двух-, … , пятизначное десятичные числа wi, не превышающее значения int. Разложить данные числа на множители и оценить временные (вычислительные) затраты. Построить зависимость сложности разложения (затрат) от разрядности чисел.

г) Сгенерировать случайное число r, не превышающее значения int2. Разложить данное число на множители и оценить временные затраты.

д) Результаты п. п. б-г занести в отчет, сделать выводы о сложности разложения в зависимости от вида и размера разлагаемого числа.

Содержание отчета

1.  Разработанные алгоритмы и тексты программ.

2.  Полученные значения n, p, q, f(n), d и e.

3.  Сведенные в таблицу открытый текст, его код - представление в цифровом виде, (хэш-функцию – п. 3) криптограмму и результат дешифрования (проверки подписи – п. 3) (по пп. 2, 3).

4.  Зависимости, характеризующие сложность разложения чисел.

5.  Выводы по каждому пункту работы.

Приложение 1.

Расширенный алгоритм Евклида

При заданных неотрицательных целых числах a и b этот алгоритм определяет вектор

(u1, u2, u3)

такой, что

au1+bu2=НОД(a, b)

В процессе вычисления используются вспомогательные векторы (v1, v2, v3), (t1, t2, t3). Действия с векторами производятся таким образом, что в течение всего процесса вычисления выполняются соотношения

at1+bt2=t3, au1+bu2=u3, av1+bv2=v3.

Для вычисления обратной величины a-1(mod n) используется частный режим работы расширенного алгоритма Евклида, при котором b=n, НОД(a, n)=1, и этот алгоритм определяет вектор

(u1, u2, u3)

Такой, что

u3=1, au1+nu2= НОД(a, n)=1,

(au1+nu2)mod nºau1(mod n) º1,

a-1(mod n) ºu1(mod n)

Шаги алгоритма:

1.  Начальная установка. Установить (u1, u2, u3):=(0, 1, n), (v1, v2, v3):=(1, 0, a)

2.  u3=1?. Если u3=1 , то алгоритм заканчивается.

3.  Разделить, вычесть.

Установить q:=[u3/v3] .

Затем установить

(t1, t2, t3):=(u1, u2, u3)-(v1, v2, v3)q,

(u1, u2, u3):=(v1, v2, v3),

(v1, v2, v3):=(t1, t2, t3).

Возвратиться к шагу 2.