Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






 

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

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

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

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

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

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

Для изучения используется передача данных от ресурса Источник субъекту Приёмник (см. рисунок 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

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.013 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал