Применение компьютерной системы для изучения алгоритмов шифрования с открытым ключом

 

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

а) генерацию пары ключей (открытого и секретного ключей) на стороне получателя сообщения;

б) передачу открытого ключа отправителю сообщения;

в) шифрование сообщения открытым ключом;

г) отправку шифротекста получателю;

д) дешифрование с помощью секретного ключа получателем.

Для изучения используется передача данных от ресурса Источник субъекту Приёмник (см. рисунок 5.2.1).

 

Рисунок 5.2.1 — Статическая диаграмма, используемая при конфиденциальной передаче данных

 

При взаимодействии элементов Приёмник и Источник выполняется передача данных как от Приёмника к Источнику так и в обратную сторону. Приёмник моделируется в виде процесса R, Источник — в виде процесса S. Процесс R генерирует пару ключей: открытый ключ и секретный ключ, затем открытый ключ передается процессу S в незашифрованном виде. После получения открытого ключа процесс S выполняет шифрование исходного сообщения и его отправку процессу R. При получении шифротекста процессом R выполняется дешифрование сообщения с помощью секретного ключа.

 

 

Рисунок 5.2.2 — Модель взаимодействия процессов при конфиденциальной передаче данных с использованием алгоритма шифрования с открытым ключом

 

Для генерации пары ключей будем использовать метод процесса R makeKeys. При получении открытого ключа вызывается обработчик onRecieve процесса S. Шифрование и отправка шифротекста выполняется в методе do_send процесса S.

В качестве примера рассмотрим шифрование целого числа алгоритмом RSA. В компьютерной системе разработан класс RSA.

Класс RSA предоставляет следующие методы:

· boolean setSecureKey(long p, long q) — установка секретного ключа, состоящего из целых чисел p и q (произведение чисел p и q должно быть меньше максимальной целого числа типа long);

· long getFi() — метод возвращает значение функции j;

· boolean checkOpenKey(long e) — выполняет проверку значения открытого ключа на удовлетворение требований предьявляемых алгоритмом;

· void setOpenKey(long e,long n) — выполняет установку открытого ключа;

· long encode(long msg) — выполняет шифрование сообщения msg установленным открытым ключом с помощью функции setOpenKey;

· long decode(long msg) — выполняет дешифрование сообщения msg установленным секретным ключом с помощью функции setSecureKey.

 

Секретный и открытый ключи должны удовлетворять требованиям алгоритма RSA. Для проверки этих требований используется класс Numerical.

 

Методы класса Numerical:

· static boolean isPrime(long n) — проверяет является ли число n простым;

· static long gcd(long a, long b) — возвращает наибольший общий делитель чисел a и b;

· static long inverse(long a, long n) — возвращает мультипликативное обратное числу a по модулю n;

· static long power(long x, long n, long p) — возводит число x в степень n по модулю p.

 

В области данных процессов R и S определена переменная rsa класса RSA:

RSA rsa=new RSA();

 

Алгоритм работы метода makeKeys процесса R имеет следующий вид

 

long x  = 25000;

long y  = 30000;

long fi;

long p,q,e;

for (p = x;!Numerical.isPrime(p); p++);

for (q = y + 2;!Numerical.isPrime(q); q++);

rsa.setSecureKey(p,q);

logDataMessage("Секретный ключ","p=" + p +" q="+q);

fi=rsa.getFi();

for (e = fi / 10; Numerical.gcd(e, fi)!= 1; e++);

rsa.checkOpenKey(e);

logDataMessage("Открытый ключ", "e=" + e+" n="+rsa.getN());

long open_key[]=new long[2];

open_key[0]=e;

open_key[1]=rsa.getN();

send("key_out",open_key);

 

Получение открытого ключа выполняется в методе-обработчике onRecieve процесса S:

 

long key[]=(long [])recv("key_in");

rsa.setOpenKey(key[0],key[1]);

logDataMessage("Получен открытый ключ","e="+key[0]+" n="+key[1]);

 

Шифрование и отправка данных выполняются в методе do_send:

 

long message=12345435;

logDataMessage("Исходный текст",message);

long code = rsa.encode(message);

logDataMessage("Зашифрованный текст",code);

send("out",new Long(code));

 

Получение и дешифрование данных процессом R обрабатывается в методе onRecieve:

 

Long lcode=(Long)recv("in");

long code=lcode.longValue();

logDataMessage("Шифротекст",code);

long decode = rsa.decode(code);

logDataMessage("Расшифрованный текст",decode);

 

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

 

Протокол работы процесса S имеет следующий вид:

 

Регистрация клиента

Процесс создан

Событие onCreate

Получены данные в узле S.key_in / in 75061013, 750665143

Событие onRecieve в узле key_in

Получен открытый ключ e=75061013 n=750665143

Запуск метода do_send

Исходный текст 12345435

Зашифрованный текст 583217134

Отправка данных с узла S.out / out 583217134

 

Протокол работы процесса R:

 

Регистрация клиента

Процесс создан

Событие onCreate

Запуск метода makeKeys

Секретный ключ p=25013 q=30011

Открытый ключ e=75061013 n=750665143

Отправка данных с узла R.key_out / out 75061013, 750665143

Получены данные в узле R.in / in 583217134

Событие onRecieve в узле in

Шифротекст 583217134

Расшифрованный текст 12345435

 

Выполнение работы

 

1. Запустить RMI-реестр, выполнив runRegistry.bat

2. Запустить серверное приложение. Для этого требуется выполнить файл runServer.bat.

3. Для создания ресурса и субъекта открыть диалоговое окно «Элементы системы». Для этого следует выполнить команду меню «Модель\Статическая».

4. В окне редактирования статической модели на вкладке «Ресурсы» добавить ресурс, на вкладке «Субъекты» добавить субъект и указать доступный ресурс.

5. Открыть диаграмму взаимодействия процессов двойным щелчком на элементе «Динамическая модель\Диаграмма взаимодействия процессов» в древовидном списке.

6. Добавить у процесса, представляющего собой ресурс, выходной узел out и входной узел key_in.

7. Добавить у процесса, представляющего собой субъект, входной узел in и выходной узел key_out.

8. Для создания канала передачи данных на диаграмме взаимодействия процессов соединить узлы out и in процессов отправителя и получателя соответственно путем перетаскивания курсора мыши с нажатой левой кнопкой.

9. Для создания канала для передачи открытого ключа на диаграмме взаимодействия процессов соединить узлы key_out и key_in процессов отправителя и получателя соответственно.

10. Добавить у процесса отправителя, представляющего собой ресурс, метод do_send, у процесса получателя — метод makeKeys.

11. Определить переменные в области данных процессов отправителя и получателя. Определение переменных выполняется в окне редактирования свойств процесса (см. рисунок 5.3.1).

 

 

 

Рисунок 5.3.1 — Окно редактирования свойств процесса отправителя сообщения

 

12. Для определения метода makeKeys вызвать окно свойств метода двойным щелчком на методе в древовидном списке. В соответствии с вариантом задания (см. таблицу 5.3.1) определить алгоритм работы метода makeKeys. Данный метод выполняет генерацию пары ключей и отправку открытого ключа процессу отправителю.

13. Определить алгоритм работы метода onRecieve ресурса.

14. Определить алгоритм работы метода do_send процесса отправителя сообщения (ресурса), выполняющего шифрование и отправку данных получателю сообщения.

15. Определить алгоритм работы метода onRecieve процесса получателя, выполняющего получение и дешифрование данных.

16. Выполнить генерацию и компиляцию процессов, запустив команду «Генерировать» в контекстном меню процессов в древовидном списке. В том случае, если в окне с сообщениями будут выведены ошибки, требуется их исправить и выполнить повторную генерацию.

17. Для выполнения моделирования запустить сервер моделирования, выполнив команду меню «Моделирование\Запуск сервера».

18. Запустить клиент моделирования для процесса отправителя сообщения на одной из рабочих станций лаборатории.

19. Запустить клиент моделирования для процесса получателя сообщения на одной из рабочих станций лаборатории.

20. Для выполнения генерации и передачи открытого ключа отправителю требуется запустить работу метода makeKeys. По протоколам клиентов моделирования проконтролируйте правильность формирования и отправки ключей.

21. Для моделирования передачи конфиденциальных данных запустите метод do_send из окна клиента моделирования процесса отправителя.

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

23. Сравнить быстродействие алгоритма на основе нескольких замеров времени шифрования и дешифрования при различной длине ключей.

 

 

Таблица 5.3.1 — Варианты заданий

 

Вариант Алгоритм Ключ Длина массива данных
1

RSA

От 1000 до 10000 100
2 От 1000 до 10000 1000
3 От 10000 до 20000 100
4 От 10000 до 20000 1000

 

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

 

Отчет выполняется один на бригаду и должен включать:

 

1. Наименование и цель работы.

2. Краткие теоретические сведения.

3. Статическую модель согласно варианта.

4. Окна редактирования ресурсов, субъектов, угроз, уязвимостей, средств защиты.

5. Анализ защищенности

6. Выводы.


 



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: