Студопедия

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

КАТЕГОРИИ:

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






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






 

Для изучения схемы работы цифровой подписи рассмотрим пример передачи подписанного сообщения от ресурса Источник к субъекту Приёмник с использованием алгоритма RSA (см. рисунок 7.2.1).

Рисунок 7.2.1 — Статическая модель для изучения ЭЦП

 

При определении динамической модели субъект Приёмник представляется в виде процесса R, ресурс Источник — в виде процесса S (см. рисунок 7.2.2).

Рисунок 7.2.2 — Динамическая модель для изучения ЭЦП

 

При реализации схемы ЭЦП присутствуют следующие потоки данных:

· процесс S передаёт открытый ключ (E, N) процессу R;

· процесс S передаёт ЭЦП процессу R;

· процесс S передаёт сообщение процессу R.

 

Переменные в области данных процессов приведены в таблице 7.2.1.

 

Таблица 7.2.1 — Определение переменных процессов

 

Процесс Определение области данных
S RSA rsa = new RSA();
R RSA rsa=new RSA(); long digest=-1; String message;

 

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

Формирование и отправка открытого ключа процессу приемнику выполняется в методе exchangeKeys:

 

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.setOpenKey(e, rsa.getN());

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);

 


 

Подпись и отправка сообщения с ЭЦП выполняется в методе sendSignedMessage процесса S:

String message=" Тестовое сообщение";

byte digest[]=MD5.digest(message);

long calcDigest=0;

for (int i=0; i< 16; i++)

{

calcDigest< < =1;

calcDigest|=digest[i];

}

logDataMessage(" Cообщение", message);

logDataMessage(" Дайджест сообщения", calcDigest);

long code = rsa.decode(calcDigest);

logDataMessage(" Сформирована ЭЦП", code);

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

send(" msg_out", message);

 

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

if (hasMoreData(" key_in"))

{

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

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

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

} else if (hasMoreData(" hash_in"))

{

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

long code=lcode.longValue();

logDataMessage(" Получена ЭЦП", code);

digest = rsa.encode(code);

logDataMessage(" Дайджест сообщения", digest);

} else if (hasMoreData(" msg_in"))

{

message=(String)recv(" msg_in");

logDataMessage(" Сообщение", message);

}

 

Проверка ЭЦП реализована в методе checkSign процесса R:

 

if (digest> =0 & & message! =null)

{

 

byte calcByteDigest[]=MD5.digest(message);

long calcDigest=0;

for (int i=0; i< 16; i++)

{

calcDigest< < =1;

calcDigest|=calcByteDigest[i];

}

if (calcDigest==digest)

logMessage(" Сообщение подлинное");

else

logMessage(" Сообщение ложное");

} else

logMessage(" Не получены все данные");

 

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

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

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

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

3. Событие onCreate

4. Запуск метода exchangeKeys

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

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

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

8. Запуск метода sendSignedMessage

9. Cообщение Тестовое сообщение

10. Дайджест сообщения 42700

11. Сформирована ЭЦП 705409300

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

13. Отправка данных с узла S.msg_out / out Тестовое сообщение

 

Протокол моделирования процесса R:

 

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

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

3. Событие onCreate

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

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

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

7. Событие onRecieve в узле hash_in

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

9. Получена ЭЦП 705409300

10. Дайджест сообщения 42700

11. Событие onRecieve в узле msg_in

12. Получены данные в узле R.msg_in / in Тестовое сообщение

13. Сообщение Тестовое сообщение

14. Запуск метода checkSign

15. Сообщение подлинное


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

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