Рефераты. Защита информации от несанкционированного доступа

4.1 Общее описание

Для разработки программы были выбраны языки программирования Delphi 5.0 (Object Pascal) - разработка удобного интерфейса и встроенный ассемблер - для написания, собственно, алгоритмов шифрования.

Проект состоит из девяти модулей:

GOST, K1, K2 - реализация алгоритмов ГОСТ 28147-89 и тестовых методов шифрования.

CodingTools, CodingUnit - модули, реализующие вспомогательные алгоритмы и типы данных.

OptionsUnit, ProgressUnit, TestUnit - модули, описывающие интерфейс с пользователем.

Hazard - основной модуль программы. Создает окна и запускает программу.

Программа использует три формы (окна), созданные с помощью среды Delphi.

Основная форма TestForm, содержит список файлов и кнопки запуска процесса шифрования, выхода, вызова окна настроек, добавления и очистки списка (рисунок 4.1).

Окно настроек содержит списки поддерживаемых и применяемых методов шифрования, поле описания метода и поле ввода ключа (рисунок 4.2).

Третье окно - ProgressForm появляется при запуске процесса кодирования и состоит из двух надписей и двух индикаторов.

Рисунок 4.1 - Интерфейс программы

4.2 Дополнительные модули

Модуль CodingTools содержит описание типов для 64,48 и 32-разрядных чисел и процедуры их обработки: сложение по модулю 2, &, |, кодирование по таблице, разложение на числа меньшей разрядности. Также он содержит описания параметров кодирования и тип-шаблон функции шифрования.

Модуль CodingUnit содержит список встроенных алгоритмов и общие функции: обработка командной строки, подбор функции шифрования, шифрование файла, процедуры поиска функций по имени или индексу, поиск ошибок и оповещение.

Модули методов экспортируют каждый по две процедуры - шифрование и дешифрацию блоков по 64К.

5. Руководство пользователя

Программа работает под управлением ОС Windows 95/98/ME и требует правильной инсталляции. После инсталляции программу можно запустить из меню «Пуск» либо из командной строки эмуляции MS-DOS.

Командная строка имеет следующий вид:

Hazard.exe [/D] [путь к файлу [путь к файлу […]]]

/D - дешифрование

Чтобы запустить программу в режиме шифрования или дешифрования из графической оболочки Windows нужно воспользоваться соответствующими ярлыками из меню «Программы».

Чтобы добавить файлы в список шифрования/дешифрования можно воспользоваться соответствующей кнопкой на главной панели программы, либо «перетащить» их из окна проводника Windows.

Чтобы выбрать алгоритм шифрования нужно нажать кнопку «Настройки». Появится окно со списками поддерживаемых и применяющихся методов и полем ввода ключа.

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

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

При дешифровании следует учитывать, что программа расшифровывает файлы только с расширением .crf.

Заключение

В результате курсовой работы была разработана первая версия программы, осуществляющей шифрование информации. В дальнейшем предполагается разработка и усовершенствование комплекса программ, обеспечивающих защиту информации от несанкционированного доступа. В процессе разработки были закреплены навыки шифрования информации по ГОСТ 28147-89 и программирования на ассемблере.

Библиографический список

1. Конспект лекций по курсу «Кодирование и защита информации»

2. Андрей Винокуров. «Алгоритм шифрования ГОСТ 28147-89, его использование и реализация для компьютеров платформы Intel x86»

3. Михаил Гук. «Процессоры Pentium II, Pentium Pro и просто Pentium», Санкт-Петербург «Питер», 1999 г.

Приложение А

program Hazard;

uses

Windows,

Messages,

SysUtils,

Forms,

TestUnit in 'TestUnit.pas' {MainForm},

CodingUnit in 'CodingUnit.pas',

OptionsUnit in 'OptionsUnit.pas' {OptionsForm},

K1 in 'K1.pas',

K2 in 'K2.pas',

K3 in 'K3.pas',

ProgressUnit in 'ProgressUnit.pas' {ProgressForm},

GOST in 'GOST.pas';

{$R *.RES}

{$R Laynik.res}

function AlreadyRunning: boolean;

begin

Result:=False;

if FindWindow('TMainForm','Кодирование')<>0 then

Result:=True;

end;

begin

Decode:=false;

If not AlreadyRunning then

begin

Application.Initialize;

Application.Title := '[LG] Hazard';

Application.CreateForm(TMainForm, MainForm);

Application.CreateForm(TOptionsForm, OptionsForm);

Application.CreateForm(TProgressForm, ProgressForm);

MainForm.DoCommandLine(String(system.CmdLine));

Application.Run;

end else

begin

MessageBox(0,'Приложение уже запущено','Ошибка',MB_ICONSTOP+MB_OK);

end

end.

unit K1;

interface

uses CodingTools;

function Coding_K1(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;

function DeCoding_K1(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;

implementation

const

FShTable: TConvertTable64 =

(57,49,41,33,25,17, 9, 1,59,51,

43,35,27,19,11, 3,61,53,45,37,

29,21,13, 5,63,55,47,39,31,23,

15, 7,56,48,40,32,24,16, 8, 0,

58,50,42,34,26,18,10, 2,60,52,

44,36,28,20,12, 4,62,54,46,38,

30,22,14, 6);

LShTable: TConvertTable64 =

(39, 7,47,15,55,23,63,31,38,6,

46,14,54,22,62,30,37, 5,45,13,

53,21,61,29,36, 4,44,12,52,20,

60,28,35, 3,43,11,51,19,59,27,

34, 2,42,10,50,18,58,26,33, 1,

41, 9,49,17,57,25,32, 0,40, 8,

48,16,56,24);

procedure K1Coding64bits(A: word64; var R: word64; K1:word64);

begin

convert(A,FShTable,R);

asm

push esi

mov esi,DWORD[R]

mov eax,DWORD[K1]

xor [esi],eax

add esi,4

mov eax,DWORD[K1+4]

xor [esi],eax

pop esi

end;

end;

procedure K1DeCoding64bits(A: word64; var R: word64; K1:word64);

begin

asm

mov eax,DWORD[K1]

xor DWORD[A],eax

mov eax,DWORD[K1+4]

xor DWORD[A+4],eax

end;

convert(A,LShTable,R);

end;

function Coding_K1(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;

var

i,j,l:integer;

a,r: ^word64;

k: word64;

begin

for i:=0 to 7 do

k.v8[i]:=BYTE(Param.Key[i]);

convert(K,LshTable,K);

l:=Size div 8;

for i:=1 to Param.WayCount do

begin

for j:=0 to l-1 do

begin

a:=Pointer(LongWord(Buf)+j*8);

r:=a;

K1Coding64bits(A^,R^,K);

end;

end;

result:=0;

end;

function DeCoding_K1(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;

var

i,j,l:integer;

a,r:^word64;

k: word64;

begin

for i:=0 to 7 do

k.v8[i]:=BYTE(Param.Key[i]);

convert(K,LshTable,K);

l:=Size div 8;

for i:=1 to Param.WayCount do

begin

for j:=0 to l-1 do

begin

a:=Pointer(LongWord(Buf)+j*8);

r:=a;

K1DeCoding64bits(A^,R^,K);

end;

end;

result:=0;

end;

end.

unit K2;

interface

uses CodingTools;

function Coding_K2(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;

function DeCoding_K2(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;

implementation

const

FShTable: TConvertTable64 =

(57,49,41,33,25,17, 9, 1,59,51,

43,35,27,19,11, 3,61,53,45,37,

29,21,13, 5,63,55,47,39,31,23,

15, 7,56,48,40,32,24,16, 8, 0,

58,50,42,34,26,18,10, 2,60,52,

44,36,28,20,12, 4,62,54,46,38,

30,22,14, 6);

LShTable: TConvertTable64 =

(39, 7,47,15,55,23,63,31,38,6,

46,14,54,22,62,30,37, 5,45,13,

53,21,61,29,36, 4,44,12,52,20,

60,28,35, 3,43,11,51,19,59,27,

34, 2,42,10,50,18,58,26,33, 1,

41, 9,49,17,57,25,32, 0,40, 8,

Страницы: 1, 2, 3, 4, 5



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.