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

Криптоалгоритмы с открытыми ключами (RSA)

Цель работы

Освоить методику работы ассиметричных алгоритмов шифрования, где существует два ключа: один для шифрования, другой для дешифрования.

Указание к работе

Алгоритм RSA был разработан в 1977 году Роном Ривестом, Ади Шамиром и Леном Адлеманом и опубликованный в 1978 году. С тех пор алгоритм Rivest-Shamir-Adleman (RSA) широко применяется практически во всех приложениях, использующих криптографию с открытым ключом.

Алгоритм RSA состоит из трёх этапов:

  I.  Вычисление ключей. Важным моментом в этом криптоалгоритме является создание пары ключей: открытого и закрытого. Для алгоритма RSA этап создания ключей состоит из следующих операций:

1.  Выбираются два простых различных числа p и q. Вычисляется их произведение n = pq, называемое модулем.

2.  Вычисляется функция Эйлера Φ(n) = (p–1)∙(q–1).

3.  Выбирается произвольное число e (n), такое, что 1 < e < Φ(n) и не имеет с числом (p–1)∙(q–1) других общих делителей, кроме 1 (т. е. оно является взаимно простым с ним).

4.  Вычисляется d (расширенным алгоритмом Евклида) таким образом, что (ed–1) делилось на (p–1)∙(q–1).

5.  Два числа (еn) публикуются как открытый ключ.

6.  Число d хранится в секрете. Закрытый ключ есть пара (dn), который позволит читать все послания, зашифрованные с помощью пары чисел (еn).

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

  II.  Шифрование с помощью этих чисел производится так:

1.  Отправитель разбивает свое сообщение M на блоки mi. Значение mi < n, поэтому длина блока открытого текста mi в битах не больше k = [log2(n)] бит, где квадратные скобки обозначают взятие целой части от дробного числа. Например, если n=21, то максимальная длина блока открытого текста k = [log2(21)]=[4.39…]=4 бита.

2.  Подобный блок может быть интерпретирован как число из диапазона (0; 2k–1). Для каждого такого числа mi вычисляется выражение (ci – зашифрованное сообщение):

ci = (mi)e mod n.

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

Необходимо добавлять нулевые биты слева в двоичное представление блока ci до размера ke бит.

  III.  Дешифрование.

1.  Чтобы получить открытый текст, надо каждый блок зашифрованного текста длиной ke бит дешифровать отдельно:

mi = (ci)d mod n.

Пример:

Выбрать два простых числа:

р = 7, q = 17.

Вычислить:

n = p·q = 7·17 = 119.

Вычислить:

Ф(n) = (p–1)·(q–1) = 96.

Выбрать е так, чтобы е было взаимно простым с Ф(n) = 96 и меньше, чем Ф(n):

е = 5.

Определить d так, чтобы d·e ≡ 1 mod 96 и d < 96:

d = 77, так как 77·5 = 385 = 4·96 + 1.

Результирующие ключи:

открытый ключ (5, 119) и закрытый ключ (77, 119).

Например, требуется зашифровать сообщение М = 19:

195 = 66 (mod 119); С = 66.

Для дешифрования вычисляется 6677 (mod 119) = 19.

Задание

  I.  Реализовать приложение, вычисляющее открытый и закрытый ключи для алгоритма RSA.

1.  Числа p и q генерируются программой или задаются из файла.

2.  Сгенерированные ключи сохраняются в файлы: открытый ключ (еn) в один файл, закрытый (dn) в другой.

  II.  Реализовать приложение, позволяющее шифровать данные по алгоритму RSA.

1.  Шифруемый текст должен храниться в одном файле, а открытый ключ – в другом.

2.  Зашифрованный текст должен сохраняться в файле.

3.  Требования к приложению:

·  в процессе шифрования предусмотреть возможность просмотра и изменения шифруемого текста в двоичном, восьмеричном, шестнадцатеричном и символьном виде;

·  должно измеряться время, в течение которого происходит шифрование по алгоритму RSA;

·  программа должна уметь работать с текстом произвольной длины, при этом размер блока шифруемого текста k определяется в зависимости от n.

  III.  Реализовать приложение, позволяющее дешифровать данные по алгоритму RSA.

1.  Зашифрованный текст должен храниться в одном файле, а закрытый ключ – в другом.

2.  Расшифрованный текст должен сохраняться в файл.

3.  В процессе дешифрования предусмотреть возможность просмотра и изменения зашифрованного текста в двоичном, восьмеричном, шестнадцатеричном и символьном виде.

  IV.  С помощью реализованных приложений выполнить следующие задания.

1.  Протестировать правильность работы разработанных приложений.

2.  Сделать выводы о проделанной работе.

Требования к оформлению отчёта

Отчёт должен содержать:

·  титульный лист (обязат.);

·  задание на лабораторную работу (обязат.);

·  описание разработанного программного средства;

·  описание проведённых исследований, построенные графики лавинного эффекта (обязат.);

·  программный код, написанный непосредственно студентами (обязат.);

·  тестирование программы.

Отчёт не должен содержать орфографических, пунктуационных и смысловых ошибок.

Все его разделы должны быть выдержаны в едином стиле оформления.

Критерии оценивания качества работы

1.  Наглядность приложений:

1 – приложения позволяют просматривать и изменять шифруемый и зашифрованный тексты во всех предусмотренных заданием представлениях;

0 – приложения позволяют просматривать ключи, шифруемый и зашифрованный тексты в любых двух представлениях;

Л. р. не принимается – иначе.

2.  Выполнение требований к оформлению отчёта:

1 – отчёт удовлетворяет всем требованиям;

0 – отчёт не удовлетворяет всем требованиям, но содержит обязательные разделы;

Л. р. не принимается – в отчёте нет хотя бы одного обязательного раздела.

3.  Обработка ошибок:

1 – все возможные ошибки и нестандартные ситуации (например, неудачная попытка открытия файла) обрабатываются программой, которая выдаёт соответствующее сообщение;

0 – не все возможные ошибки обрабатываются программой.

4.  Применение принципов структурного программирования:

1 – все повторяющиеся либо логически целостные фрагменты программы выделены в качестве функций; работа каждой функции полностью определяется её параметрами (т. е. не используются глобальные переменные, все данные, нужные функции для работы, передаются ей через параметры); программа позволяет без перекомпиляции изменять все параметры, от которых зависит её работа; в тексте программы отсутствуют числовые константы (все необходимые константы объявляются как поименованные);

0 – иначе (не выполняется что-либо из перечисленного).

5.  Наличие комментариев в тексте программы:

1 – комментариев достаточно для документирования исходных кодов;

0 – комментариев недостаточно.

6.  Глубина понимания материала лабораторной работы каждым членом бригады:

1 – быстрые и правильные ответы на все вопросы;

0 – не на все вопросы ответы правильные и быстрые.

Л. р. не принимается – на половину вопросов ответы неправильные.

Контрольные вопросы

1.  Дайте определение алгоритма с открытым ключом.

2.  Какие этапы содержит алгоритм RSA?

3.  В чем заключается вычисление ключей алгоритма RSA?

4.  Как происходит шифрование в алгоритме RSA?

5.  Как происходит дешифрование в алгоритме RSA?