Студопедия

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

КАТЕГОРИИ:

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






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






 

 

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

В компьютерной системе изучения методов и средств аппаратно-программной защиты информации разработана динамическая модель. Графическое представление модели взаимодействия процессов изображено на рисунке 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);

 

 


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

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