Студопедия

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

Разделы сайта

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






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






 

При исследовании схемы идентификации и аутентификации с помощью процедуры рукопожатия будем использовать следующие алгоритмы:

· для шифрования и дешифрования случайного значения S — алгоритм симметричного шифрования DES;

· для получения хэш значения от S — алгоритм вычисления дайджеста (профиля) сообщения MD5.

Рассмотрим криптографические блоки, реализующие функции получения дайджеста. Построение классов, реализующих хэш-функции, базируется на наборе стандартных функций определенных в классе BaseHash.

Класс BaseHash предоставляет пользователю следующие функции:

· void reset() — выполняет сброс внутренних данных для последующего получения хэш-значений;

· boolean compare(byte dig1[], byte dig2[]) — выполняет сравнение двух хэш-значений и возвращает истинное значение, если значения равны, иначе — ложное значение.

В данном классе также определены абстрактные функции, которые реализуются в классах-потомках.

Алгоритм хэширования MD5 реализован в виде класса MD5.

Основные функции класса MD5:

· MD5() — конструктор;

· void update(byte[] b, int offset, int len) — выполняет установку исходных данных для получения хэш-значения, offset — смещение в буфере данных b, len — длина данных;

· byte[] digest() — возвращает дайджест данных, установленных с помощью функции update, данные возвращаются в виде 16-байтового массива;

· byte[] convertBytes(byte d[]) — преобразует данные из 16-байтового массива в бинарный массив из 128 байт, где каждый байт определяет значение одного бита.

Для удобства получения хэш-значений разработаны статические методы:

· byte[] digest(String s) — возвращает дайджест строки s в виде бинарного массива из 128 байт;

· byte[] digest(byte b[]) — возвращает дайджест бинарных данных b в виде бинарного массива из 128 байт.

Пример получения дайджеста сообщения:

byte data[]= Binary.setFromHex(" BBBB CCCC 4444 6666")

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

Рассмотрим задачу идентификации и аутентификации субъекта B при обращении к ресурсу А.

Статическая модель представлена на рисунке 6.2.1.

 

Рисунок 6.2.1 — Статическая модель схемы для изучения схемы идентификации и аутентификации

 

 

Процессы, представляющие собой субъекты и ресурсы, выполняют взаимодействие по каналам передачи данных:

· канал передачи идентификатора от процесса А процессу В;

· канал передачи криптограммы случайной последовательности S от процесса А процессу В;

· канал передачи криптограммы дайджеста последовательности S от процесса В процессу А, полученной путем применения шифрования к значению односторонней функции от S.

 

Диаграмма взаимодействия процессов представлена на рисунке 6.2.2.

 

 

Рисунок 6.2.2 — Диаграмма взаимодействия процессов для изучения схемы идентификации и аутентификации

 

В области данных процесса А определим следующие переменные:

 

int id=1;

byte key[]=Binary.setFromHex(" BBBB CCCC 4444 6666");

byte s[];

где s — переменная для хранения случайной последовательности S;

key — ключ процесса А;

id —идентификатор процесса А.

 

В области данных процесса В определены переменные:

 

BinaryVector ids=new BinaryVector();

byte key[];

byte s[];

где ids — список ключей для идентификаторов;

key — переменная для хранения ключа, соответствующего идентификатору процесса А;

s — переменная для хранения случайной последовательности.

 

 

Для управления процессами передачи сообщений у процесса А определены методы:

· sendId — выполняет отправку идентификатора процесса А;

· sendES — выполняет генерацию последовательности S, шифрование и отправку криптограммы процессу В.

 

У процесса В определен метод sendAS, выполняющий формирование дайджеста последовательности S, шифрование и отправку результата процессу А.

 

Определения методов процесса А приведено в таблице 6.2.1.

 

 

Таблица 6.2.1 — Методы процесса А

 

Метод Определение метода
sendId send(" id_out", new Integer(id));
sendES s=Binary.random(64); byte es[]=DES.encode(key, s); send(" es_out", es);
onRecieve if (hasMoreData(" as_in")) { byte ds[]=MD5.digest(s);   byte as_r[]=(byte[])recv(" as_in");   DES des = new DES(); des.setKey(key); byte ds_r[] = des.decodeData(as_r, BlockCipher.MODE_ECB);   if (BaseHash.compare(ds, ds_r)) logMessage(" B подлинный"); else logMessage(" B ложный"); }

 

 

Определения методов процесса В представлены в таблице 6.2.2.


 

Таблица 6.2.2 — Методы процесса В

 

Метод Определение метода
onCreate ids.put(Binary.setFromHex(" AAAA 1111 2222 3333"), 0); ids.put(Binary.setFromHex(" BBBB CCCC 4444 6666"), 1);
onRecieve if (hasMoreData(" id_in")) { int id=((Integer)recv(" id_in")).intValue(); key=ids.get(id); } else if (hasMoreData(" es_in")) { byte es[]=(byte[])recv(" es_in"); s=DES.decode(key, es); }
SendAS byte ds[]=MD5.digest(s); DES des = new DES(); des.setKey(key); byte as[] = des.encodeData(ds, BlockCipher.MODE_ECB); send(" as_out", as);

 

Для моделирования описанного протокола требуется выполнить действия:

 

а) запустить сервер моделирования;

 

б) запустить клиент моделирования для процесса А;

 

в) запустить клиент моделирования для процесса В;

 

г) запустить метод процесса А sendId;

 

д) запустить метод процесса А sendES;

 

е) запустить метод процесса В sendAS.

 

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

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.