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

 

 

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

В компьютерной системе изучения методов и средств аппаратно-программной защиты информации разработана динамическая модель. Графическое представление модели взаимодействия процессов изображено на рисунке 4.2.1.

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

 

Процесс источник сообщения S выполняет шифрование данных с помощью ключа K, после чего передает шифротекст по каналу процессу получателю R. Процесс R обладает ключом К, с помощью которого выполняется дешифрование шифротекста и получения исходного сообщения.

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

· DES;

· IDEA.

Для описание алгоритмов работы процессом применяется язык Java.

Алгоритмы IDEA и DES реализованы в виде классов, предоставляющих следующие методы:

· конструктор — выполняет инициализацию объекта;

· void setIV(byte IV[]) — метод устанавливающий начальные вектор для режимов сцепления шифровальных блоков, обратной связи по шифротексту и по выходу;

· void resetFB() — выполняет сброс регистра сдвига для режимов обратной связи по шифротексту и по выходу в начальное состояние;

· boolean setKey(byte[] key) — метод для установки ключа;

· byte[] encode(byte[] key, byte[] data) — метод, выполняющий шифрование одного блока данных data с помощью ключа key;

· byte[] decode(byte[] key, byte[] data) — метод, выполняющий дешифрование одного блока данных data с помощью ключа key;

· byte[] encodeBlock(byte[] data) — метод выполняет шифрование одного блока данных data с помощью ключа, установленного функцией setKey;

· byte[] decodeBlock(byte[] data) — метод выполняет дешифрование одного блока данных data с помощью ключа, установленного функцией setKey;

· byte[] encodeData(byte data[], int mode) — выполняет шифрование данных data произвольной длины одним из режимов работы (см. таблицу 4.2.1);

· byte[] decodeData(byte data[], int mode) — выполняет дешифрование данных data произвольной длины одним из режимов работы (см. таблицу 4.2.1).

 

 

Таблица 4.2.1 — Константы режимов работы блочных шифров

 

 

Режим работы блочного шифра Константа Примечание
Электронной шифровальной книги MODE_ECB  
Сцепления шифровальных блоков MODE_CBC  
Шифрованной обратной связи MODE_CFB Длина данных в методах encodeData и decodeData должна быть не больше длины стандартного блока данных
Обратной связи по выходу MODE_OFB Длина данных в методах encodeData и decodeData должна быть не больше длины стандартного блока данных

 

 

В примере в качестве алгоритма шифрования используется алгоритм IDEA и режим сцепления шифрованных блоков (CBC).

Для шифрования определим метод процесса S do_send, блок-схема метода представлена на рисунке 4.2.2.

 

Рисунок 4.2.2 — Блок-схема работы метода do_send процесса S

 

При возникновении сообщения в узле процесса R сервер будет вызван метод onRecieve процесса R.

Блок-схема работы метода onRecieve процесса R представлена на рисунке 4.2.3.

 

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

· void logMessage(String message) — выполняет сохранение сообщения message в списке сообщений моделирования;

· void logDataMessage(String message, data) — выполняет сохранение сообщения message и связанных с сообщением данных data в журнале сообщений моделирования.

 

 

Рисунок 4.2.3 — Блок схема работы метода onRecieve процесса R

 

 

Для просмотра этих сообщений следует открыть окно сообщений моделирования двойным щелчком на элементе «Моделирование\Сообщения» в древовидном списке приложения.

Для работы с бинарными данными используется тип byte[] (массив байтовых целых чисел). Каждый элемент массива представляет собой бинарное число (0 или 1).

Для определения и обработки бинарных данных используются методы класса Binary:

· static public byte[] random(int len) — метод для генерации случайного бинарных данных длины len;

· static public byte[] setByBits(byte[] data) — метод для инициализации бинарных данных путем копирования вектора бинарных чисел data;

· static public byte[] setByInt(int num, int len) — метод для инициализации бинарных данных путем преобразования целого числа num в бинарные данные длиной len;

· static public byte[] setByLong(long num, int len) — метод для инициализации бинарных данных путем преобразования целого числа num в бинарные данные длиной len;

· static public byte[] setByLength(int len) — метод для инициализации бинарных данных длины len нулевыми значениями;

· static public byte[] setFromBinary(String binString) — метод для инициализации бинарных данных из строки содержащей число в бинарном формате;

· static public byte[] setFromHex(String hexString) — метод для инициализации бинарных данных из строки содержащей число в шестнадцатеричном формате;

· static public byte[] setFromString(String data) — метод для инициализации бинарных данных из строки путем перевода кодов символов в бинарные данные;

· static public String toBinString(byte[] data) — перевод бинарного значения data в строку, содержащую данные в бинарном формате;

· static public String toHexString(byte[] data) — перевод бинарного значения data в строку, содержащую данные в шестнадцатеричном формате;

· static public String toString(byte[] data) — перевод бинарного значения data в строку, содержащую символы с кодами из в массиве data;

· boolean equals(byte val1[],byte val2[]) — выполняет сравнение двух бинарных значений и возвращает истину если значения равны, иначе — ложь.

 

Для замера времени выполнения шифрования и дешифрования используется объекты класса TimeUtil. Для измерения времени выполнения определенных действий требуется до начала действий создать экземпляр класса TimeUtil, вызвать метод start(), после — вызвать метод finish(), после чего время в миллисекундах можно получить вызовом функции millisec().

 Для передачи данных по каналу применяется метод void send(String node, Object data). В качестве параметров метода send указываются:

 

· node — узел процесса, выполняющего передачу данных;

· data — данные.

 

У процесса, который принимает данные вызывается обработчик события onRecieve. Для получения данных в обработчике onRecieve выполняется вызов метода Object recv(String node). Параметр node определяет в каком узле следует считывать данные. Если данные не обнаружены метод recv возвращает null, иначе будут возвращены полученные данные.

Метод do_send процесса S определяется следующим образом:

 

byte key[]=Binary.setFromHex("9B58 086D 9BF9 CD96 C6EA 3381 B1B4 F637");

byte IV[]=Binary.setFromHex("7836 ECD6 C5F0 37B6");

byte data[]=Binary.random(10000);

IDEA idea=new IDEA();

idea.setIV(IV);

idea.setKey(key);

logDataMessage("Открытый текст",data);

TimeUtil t=new TimeUtil();

t.start();

byte code[]=idea.encodeData(data,idea.MODE_CBC);

t.finish();

logDataMessage("Время шифрования ",t.millisec());

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

send("out",code);

 

Определение метода onRecieve процесса R представлено ниже.

 

byte key[]=Binary.setFromHex("9B58 086D 9BF9 CD96 C6EA 3381 B1B4 F637");

byte IV[]=Binary.setFromHex("7836 ECD6 C5F0 37B6");

IDEA idea=new IDEA();

idea.setIV(IV);

idea.setKey(key);

byte code[]=(byte[])recv("in");

TimeUtil t=new TimeUtil();

t.start();

byte data[]=idea.decodeData(code,idea.MODE_CBC);

t.finish();

logDataMessage("Время расшифрования",t.millisec());

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

 

 

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

 

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

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

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

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

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

6. Добавить у процесса, представляющего собой ресурс, выходной узел out. Для этого можно из контекстного меню группы «Узлы процесса» выполнить команду «Новый объект Узел», указать имя узла и его тип (in/out).

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

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

9. Добавить у процесса, представляющего собой ресурс, метод do_send. Для этого можно из контекстного меню группы «Методы процесса» выполнить команду «Новый объект Метод».

10. Для определения метода do_send вызвать окно свойств метода двойным щелчком на методе в древовидном списке.

11. В соответствии с вариантом задания (см. таблицу 4.3.1) определить алгоритм работы метода do_send.

12. Определить алгоритм работы метода onRecieve процесса получателя сообщений.

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

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

15. Запустить клиент моделирования для процесса отправителя на одной из рабочих станций лаборатории. Для этого следует выполнить исполняемый файл runClient.bat. В окне на рисунке 4.3.1 указать rmi путь к серверу моделирования.

 

 

Рисунок 4.3.1 — Окно задания адреса удаленного сервера моделирования

 

16. В окне на рисунке 4.3.2. выбрать процесс S.

 

 

Рисунок 4.3.2 — Окно выбора процесса в клиенте моделирования

 

17. В окне клиента моделирования на рисунке 4.3.3 проконтролируйте правильность процесса регистрации клиента на сервере моделирования, создание процесса отправителя.

 

 

Рисунок 4.3.3 — Окно клиент моделирования

 

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

19. Для моделирования передачи конфиденциальных данных запустите метод do_send из окна клиента моделирования процесса отправителя. Для этого следует выбрать метод do_send в списке методов и выполнить команду «Запустить».

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

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

22. Проанализировать достоинства и недостатки применяемого режима сцепления.

 

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

 

Вариант Алгоритмы Размер блока данных, байт Режим сцепления
1

DES, IDEA

1000 Электронной шифровальной книги
2 1000 Сцепления шифровальных блоков
3 10000 Шифрованной обратной связи
4 10000 Обратной связи по выходу

 

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

 

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

 

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

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

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

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

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

6. Выводы.

 

 


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



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