Защита информации от несанкционированного доступа. 2
МИНИСТЕРСТВО
ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовому проекту
на тему: "Защита информации от несанкционированного доступа"
по курсу "Кодирование и защита
информации"
2004
АННОТАЦИЯ
Пояснительная записка содержит описание разработанной программы и руководство по ее использованию. Также в ней приводится описание используемых методов шифрования информации.
СОДЕРЖАНИЕ
АННОТАЦИЯ
ВВЕДЕНИЕ
- Постановка задачи
- Основные понятия
- Выбор методов шифрования
- Программная реализация
Общее описание
Дополнительные модули
- Руководство пользователя
ЗАКЛЮЧЕНИЕ
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
ПРИЛОЖЕНИЕ А
Введение
В
настоящее время большое
1. Постановка задачи
Необходимо
разработать программу для
2. Основные понятия
В данной работе будет рассматриваться защита информации, хранящейся в электронном виде, от несанкционированного доступа. Для обеспечения секретности информации используются следующие методы:
- хранение на съемном носителе;
- ограничение доступа к системе;
- хранение в зашифрованном виде;
Комбинированием этих средств защиты можно добиться относительно хорошей защищенности информации. Невозможно абсолютно защитить информацию от несанкционированного доступа (взлома). Любой из этих способов поддается взлому в некоторой степени. Вопрос в том, будет ли выгодно взламывать или нет. Если затраты ресурсов на защиту (стоимость защиты) больше чем затраты на взлом, то система защищена плохо.
Данная разработка является криптографической частью системы защиты – она зашифровывает и расшифровывает информацию, поэтому ниже будут приведены только основные понятия криптографии.
Шифр – последовательность операций, проводимых над открытыми (закрытыми) данными и ключом с целью получения закрытой (открытой) последовательности.
Ключ – конкретное для каждого нового кода значение каких-нибудь характеристик алгоритма криптографической защиты.
Гамма
шифра – это некоторая
Гаммирование – процес наложения гаммы шифра на открытые данные.
Зашифровывание – процесс преобразования открытых данных в закрытые с помощью шифра и ключа.
Расшифровывание – процедура преобразования закрытых данных в открытые с помощью шифра и ключа.
Шифрование – зашифровывание и (или) расшифровывание.
Дешифрование – совокупность действий по преобразованию закрытых данных в открытые без знания ключа и (или) алгоритма зашифровывания.
Имитозащита – защита от ложной информации. Осуществляется по собственным алгоритмам, с помощью выработки имитовставки.
Имитовставка – последовательность данных определенной длины, полученных специальными методами гаммирования из открытых исходных данных. Содержимое имитовставки является эталоном для проверки всей остальной информации.
3. Выбор методов шифрования
Для шифрования информации в программу встроены следующие алгоритмы:
- ГОСТ 28147-89 - стандарт шифрования Российской Федерации. В программе используется два режима кодирования – режим простой замены и режим гаммирования. Данные кодируются по 64 бита (8 байт) с помощью 256-битного (32-байтного) ключа.
- Два простых метода, вложенных как пример построения модулей для программы. Кодирование по 64 бит, ключ – 64 бит.
Программа может быть дополнена алгоритмами кодирования, т.е. рекомпилирована с дополнительными модулями. В дальнейших версиях предполагается создание модульных расширений (plug-in) для программы, которые будут содержать дополнительные алгоритмы криптографических преобразований.
Рассмотрим подробнее алгоритм криптографического преобразования ГОСТ 28147-89. Ключ состоит из восьми 32-битных элементов, рассматриваемых как беззнаковые целые числа. Таким образом, ключ составляет 256 бит или 32 байта. При шифровании используется таблица замен, являющейся матрицей 8х16, содержащей 4-битовые элементы (числа от 0 до 15). Основной шаг криптопреобразования – оператор, определяющий преобразование 64-битового блока. Дополнительным параметром этого оператора является 32-битный блок, в качестве которого используется какой – либо элемент ключа.
Алгоритм основного шага криптопреобразования
Рисунок 3.1 Схема основного шага криптопреобразования алгоритма ГОСТ 28147-89.
- Определяет исходные данные для основного шага криптопреобразования: N –преобразуемый 64-битовый блок данных, в ходе выполнения шага его младшая (N1) и старшая (N2) части обрабатываются как отдельные 32-битовые целые числа без знака. Таким образом, можно записать N=(N1,N2). X – 32-битовый элемент ключа;
- Сложение с ключом. Младшая половина преобразуемого блока складывается по модулю 232 с используемым на шаге элементом ключа, результат передается на следующий шаг;
- Поблочная замена. 32-битовое значение, полученное на предыдущем шаге, интерпретируется как массив из восьми 4-битовых блоков кода: S=(S0,S1,S2,S3,S4,S5,S6,S7). Далее значение каждого из восьми блоков заменяется на новое, которое выбирается по таблице замен следующим образом: значение блока Si заменяется на Si-тый по порядку элемент (нумерация с нуля) i-того узла замен (т.е. i-той строки таблицы замен, нумерация также с нуля). Другими словами, в качестве замены для значения блока выбирается элемент из таблицы замен с номером строки, равным номеру заменяемого блока, и номером столбца, равным значению заменяемого блока как 4-битового целого неотрицательного числа.
- Циклический сдвиг на 11 бит влево. Результат предыдущего шага сдвигается циклически на 11 бит в сторону старших разрядов и передается на следующий шаг. На схеме алгоритма символом Q11 обозначена функция циклического сдвига своего аргумента на 11 бит в сторону старших разрядов.
- Побитовое сложение: значение, полученное на шаге 3, побитно складывается по модулю 2 со старшей половиной преобразуемого блока.
- Сдвиг по цепочке: младшая часть преобразуемого блока сдвигается на место старшей, а на ее место помещается результат выполнения предыдущего шага.
- Полученное значение преобразуемого блока возвращается как результат выполнения алгоритма основного шага криптопреобразования.
Базовые циклы:
- цикл выработки имитовставки (0123456701234567)
Для каждого элемента данных выполняется основной шаг криптографического преобразования с элементами ключа, порядок Базовые циклы построены из основных шагов криптографического преобразования. Существует всего три базовых цикла, различающиеся порядком следования ключевых элементов:
- цикл зашифрования
(
012345670123456701234567765432 10) - цикл расшифрования
(
012345677654321076543210765432 10)
следования которых приведен выше. Для циклов шифрования левая и правая половины блока меняются местами, для цикла выработки имитовставки – нет.
Предусматривается три режима шифрования данных: простая замена, гаммирование, гаммирование с обратной связью и один дополнительный редим формирования имитовставки.
Рис. 4. Алгоритм зашифрования (расшифрования) данных в режиме гаммирования.
Режим простой замены – наиболее простой. Блоки данных по 64 бит проходят базовый цикл зашифрования (расшифрования). Результат – зашифрованная (расшифрованная информация). При таком режиме блоки независимы.
Режим гаммирования – чтобы блоки информации были зависимы друг от друга используется рекуррентный генератор последовательности чисел, который инициализируется синхропосылкой, прошедшей цикл зашифрования. Схема алгоритма шифрования в режиме гаммирования приведена на рисунке 3.2, ниже изложены пояснения к схеме:
- Определяет исходные данные для основного шага криптопреобразования: Tо(ш) – массив открытых (зашифрованных) данных произвольного размера, подвергаемый процедуре зашифрования (расшифрования), по ходу процедуры массив подвергается преобразованию порциями по 64 бита; S – синхропосылка, 64-битный элемент данных, необходимый для инициализации генератора гаммы;
- Начальное преобразование синхропосылки, выполняемое для ее «рандомизации», то есть для устранения статистических закономерностей, присутствующих в ней, результат используется как начальное заполнение РГПЧ;
- Один шаг работы РГПЧ, реализующий его рекуррентный алгоритм. В ходе данного шага старшая (S1) и младшая (S0) части последовательности данных вырабатываются независимо друг от друга;
- Гаммирование. Очередной 64-битный элемент, выработанный РГПЧ, подвергается процедуре зашифрования по циклу 32–З, результат используется как элемент гаммы для зашифрования (расшифрования) очередного блока открытых (зашифрованных) данных того же размера.
- Результат работы алгоритма – зашифрованный (расшифрованный) массив данных.
4. Программная реализация
4.1
Общее описание
Для разработки программы были выбраны языки программирования Delphi 5.0 (Object Pascal) – разработка удобного интерфейса и встроенный ассемблер – для написания, собственно, алгоритмов шифрования.
Проект состоит из девяти модулей:
GOST, K1, K2 – реализация алгоритмов ГОСТ 28147-89 и тестовых методов шифрования.
CodingTools, CodingUnit – модули, реализующие вспомогательные алгоритмы и типы данных.
OptionsUnit, ProgressUnit, TestUnit – модули, описывающие интерфейс с пользователем.
Hazard – основной модуль программы. Создает окна и запускает программу.
Программа использует три формы (окна), созданные с помощью среды Delphi.
Основная форма TestForm, содержит список файлов и кнопки запуска процесса шифрования, выхода, вызова окна настроек, добавления и очистки списка (рисунок 4.1).
Окно
настроек содержит списки поддерживаемых
и применяемых методов
Третье окно – 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 и программирования на ассемблере.
Библиографический
список
- Конспект лекций по курсу «Кодирование и защита информации»
- Андрей Винокуров. «Алгоритм шифрования ГОСТ 28147-89, его использование и реализация для компьютеров платформы Intel x86»
- Михаил Гук. «Процессоры 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','
Result:=True;
end;
begin
Decode:=false;
If not AlreadyRunning then
begin
Application.Initialize;
Application.Title := '[LG] Hazard';
Application.CreateForm(
Application.CreateForm(
Application.CreateForm(
MainForm.DoCommandLine(
Application.Run;
end else
begin
MessageBox(0,'Приложение
уже запущено','Ошибка',MB_
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[
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)+
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[
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)+
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,
48,16,56,24);
procedure K2Coding64bits(A: word64; var R: word64; B: byte);
begin
convert(A,FShTable,R);
asm
push esi
mov esi,DWORD[R]
mov cl,[b]
ror dword[esi],cl
add esi,4
mov cl,[b]
ror dword[esi],cl
pop esi
end;
end;
procedure K2DeCoding64bits(A: word64; var R: word64; B: Byte);
begin
asm
mov cl,[b]
rol DWORD[A],cl
mov cl,[b]
rol DWORD[A+4],cl
end;
convert(A,LShTable,R);
end;
function Coding_K2(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;
var
i,j,l:integer;
a,r: ^word64;
k: word64;
b: byte;
begin
b:=0;
for i:=0 to 7 do
k.v8[i]:=BYTE(Param.Key[
convert(K,LshTable,K);
for i:=0 to 7 do b:=b xor K.v8[i];
l:=Size div 8;
for i:=1 to Param.WayCount do
begin
for j:=0 to l-1 do

- Защита информации от утечки по техническим каналам
- Защита информационных систем
- Защита и осуществление гражданских прав
- Защита и помощь при проведении спасательных работ в военное время
- Защита и содержание договора
- Защита коммерческой деятельности
- Защита коммерческой информации и тайны
- Защита информации объекты и методы
- Защита информации ограниченного доступа в ОАО "ЧЗПСН - Профнастил"
- Защита информации ограниченного доступа в ООО «Анкад»
- Защита информации от вирусов
- Защита информации от искажения в условиях естественных помех
- Защита информации от компьютерных вирусов
- Защита информации от несанкционированного доступа