- •Тема 1. Введение в проблемы информационной безопасности 9
- •Тема 2. Криптографические методы защиты информации 30
- •Тема 3. Симметричные криптосистемы 52
- •Тема 4. Асимметричные криптосистемы 81
- •Тема 5. Методы и средства защиты информации от несанкционированного доступа 105
- •Тема 6. Средства защиты от компьютерных вирусов 126
- •Введение
- •1.1.1. Основные понятия и определения
- •Тема 1. Введение в проблемы информационной безопасности
- •1.1. Концептуальная модель информационной безопасности
- •1.1.2. Взаимосвязь понятий в области информационной безопасности
- •1.2. Основные угрозы информационной безопасности и каналы утечки информации
- •1.2.1. Основные виды угроз
- •1.2.2. Каналы утечки информации
- •1.3. Основные виды атак на информацию
- •1.3.1. Атаки доступа
- •1.3.2. Атаки модификации
- •1.3.3. Атаки на отказ в обслуживании
- •1.3.4. Атаки отказа от обязательств
- •1.4. Классификация методов и средств защиты информации
- •1.4.1. Основные методы защиты информации
- •1.4.2. Неформальные средства защиты
- •1.4.3. Формальные средства защиты
- •Вопросы для повторения
- •Резюме по теме
- •Тема 2. Криптографические методы защиты информации
- •2.1. Принципы криптографической защиты информации
- •2.1.1. Шифры
- •2.1.2. Односторонние функции
- •2.1.4. Электронная цифровая подпись
- •2.1.5. Генераторы псевдослучайных последовательностей
- •2.2. Криптоанализ и виды криптоаналитических атак
- •2.3. Основные криптографические преобразования в симметричных криптосистемах
- •2.3.1. Шифры перестановки
- •2.3.2. Шифры замены (подстановки)
- •2.3.3. Шифры гаммирования
- •2.3.4. Композиционные блочные шифры
- •Вопросы для повторения
- •Резюме по теме
- •Тема 3. Симметричные криптосистемы
- •3.1. Сеть Фейстеля
- •3.2. Алгоритм криптографического преобразования данных гост 28147-89
- •3.3. Стандарт шифрования сша нового поколения
- •3.4. Комбинирование блочных шифров
- •3.5. Режимы работы блочных шифров
- •3.5.1. Режим "Электронная кодовая книга"
- •3.5.2. Режим "Сцепление блоков шифртекста"
- •3.5.3. Режим обратной связи по шифртексту
- •3.5.4. Режим обратной связи по выходу
- •3.6. Режимы работы алгоритма криптографического преобразования данных гост 28147-89
- •Вопросы для повторения
- •Резюме по теме
- •Тема 4. Асимметричные криптосистемы
- •4.1. Алгоритмы шифрования с открытым ключом
- •4.1.1. Криптосистема rsa
- •4.1.2. Криптосистемы Диффи-Хеллмана и Эль Гамаля
- •4.1.3. Криптосистема на основе эллиптических кривых
- •4.2. Алгоритмы криптографического хэширования
- •4.2.1. Алгоритм безопасного хэширования
- •4.2.2. Односторонние хэш-функции на основе симметричных блочных алгоритмов
- •4.2.3. Алгоритм хэширования гост р 34.11–94
- •4.3. Алгоритмы электронной цифровой подписи
- •4.3.1. Алгоритм цифровой подписи rsa
- •4.3.2. Алгоритм цифровой подписи Эль Гамаля (egsa)
- •4.3.3. Алгоритм цифровой подписи dsa
- •4.3.4. Алгоритмы электронной цифровой подписи гост р 34.10–94 и гост р 34.10–2001
- •Вопросы для повторения
- •Резюме по теме
- •Тема 5. Методы и средства защиты информации от несанкционированного доступа
- •5.1. Основные понятия концепции защиты от несанкционированного доступа
- •5.2. Идентификация и аутентификация
- •5.2.1 Аутентификация пользователя на основе паролей и процедуры "рукопожатия"
- •5.2.2. Проверка подлинности пользователя по наличию материального аутентификатора
- •5.2.3. Аутентификация пользователя по биометрическим характеристикам
- •5.3. Управление доступом и регистрация доступа к ресурсам асои
- •5.4. Защита информации от несанкционированного доступа в сетях
- •Вопросы для повторения
- •Резюме по теме
- •Тема 6. Средства защиты от компьютерных вирусов
- •6.1. Классификация компьютерных вирусов
- •6.1.1. Файловые вирусы
- •6.1.2. Загрузочные вирусы
- •6.1.3. Макровирусы
- •6.1.4. Сетевые вирусы
- •6.1.5. Прочие вредоносные программы
- •6.2. Методы обнаружения и удаления компьютерных вирусов
- •6.2.1. Профилактика заражения компьютера
- •6.2.2. Использование антивирусных программ
- •6.2.3. Методы обнаружения и удаления неизвестных вирусов
- •Вопросы для повторения
- •Резюме по теме
- •Практикум (лабораторный)
- •Лабораторная работа №1. Программная реализация простых шифров перестановки и замены
- •Требования к содержанию, оформлению и порядку выполнения
- •Теоретическая часть
- •Общая постановка задачи
- •Список индивидуальных данных
- •Пример выполнения работы
- •Способ оценки результатов
- •Лабораторная работа №2. Генерация и исследование псевдослучайных последовательностей. Реализация потокового шифрования данных
- •Требования к содержанию, оформлению и порядку выполнения
- •Контрольные вопросы к защите
- •Теоретическая часть
- •Общая постановка задачи
- •Список индивидуальных данных
- •Пример выполнения работы
- •Контрольные вопросы к защите
- •Общая постановка задачи
- •Список индивидуальных данных
- •Пример выполнения работы
- •Теоретическая часть
- •Общая постановка задачи
- •Список индивидуальных данных
- •Пример выполнения работы
- •Контрольные вопросы к защите
- •Способ оценки результатов
- •Лабораторная работа №5. Изучение электронной цифровой подписи и принципов шифрования с открытым ключом с использованием системы pgp
- •Требования к содержанию, оформлению и порядку выполнения
- •Теоретическая часть
- •Общая постановка задачи
- •Список индивидуальных данных
- •Пример выполнения работы
- •Рекомендуемая дополнительная литература
- •Глоссарий
Список индивидуальных данных
Данные для выполнения лабораторной работы сведены в табл. Л2.3.
Таблица Л2.3 (начало)
Варианты заданий к лабораторной работе №2
№ варианта |
Задание |
1 |
Осуществить программную реализацию универсального ЛКГ и потокового шифра на его основе. |
2 |
Осуществить программную реализацию РСЛОС и потокового шифра на его основе. Отводная последовательность РСЛОС задается полиномом x20 + x3 + 1. |
3 |
Осуществить программную реализацию РСЛОС и потокового шифра на его основе. Отводная последовательность РСЛОС задается полиномом x20 + x5 + 1. |
4 |
Осуществить программную реализацию РСЛОС и потокового шифра на его основе. Отводная последовательность РСЛОС задается полиномом x31 + x3 + 1. |
5 |
Осуществить программную реализацию РСЛОС и потокового шифра на его основе. Отводная последовательность РСЛОС задается полиномом x31 + x13 + 1. |
6 |
Осуществить программную реализацию РСЛОС и потокового шифра на его основе. Отводная последовательность РСЛОС задается полиномом x19 + x6 + x5 + x + 1. |
Таблица Л2.3 (окончание)
Варианты заданий к лабораторной работе №2
№ варианта |
Задание |
7 |
Осуществить программную реализацию РСЛОС и потокового шифра на его основе. Отводная последовательность РСЛОС задается полиномом x24 + x4 + x3 + x + 1. |
8 |
Осуществить программную реализацию РСЛОС и потокового шифра на его основе. Отводная последовательность РСЛОС задается полиномом x25 + x3 + 1. |
9 |
Осуществить программную реализацию РСЛОС и потокового шифра на его основе. Отводная последовательность РСЛОС задается полиномом x27 + x8 + x7 + x + 1. |
10 |
Осуществить программную реализацию РСЛОС и потокового шифра на его основе. Отводная последовательность РСЛОС задается полиномом x30 + x16 + x15 + x + 1. |
Пример выполнения работы
Пусть требуется осуществить программную реализацию универсального ЛКГ и потокового шифра на его основе. Напишем следующую программу.
//----------------------------------------------------------------------------
#include <iostream.h> // Потоковый ввод/вывод
#include <conio.h> // getch
#include <windows.h> // CharToOem
#define SIZE_BUF 2500 // Размер (байты) буфера ввода/вывода
// итого 20000 бит
//-----------------------------------------------------------------------------
// Функция перекодировки для вывода сообщений на русском языке
char strdos[256];
char* dos(char* strw){
CharToOem(strw,strdos);
return strdos;
}
//------------------------------------------------------------------------------
// Линейный конгруэнтный генератор (LCG(m,a,b,g))
// g=(g*a+b) mod m
unsigned Lcg(unsigned m,unsigned a, unsigned b, unsigned g){
return (g*a + b)%m;
}
//------------------------------------------------------------------------------
// Программа генерации псевдослучайной последовательности
// и потокового шифрования данных
// argc=3,4
// argv[1] - режим работы
// (g - генерация псевдослучайной последовательности длиной 20000 бит
// e - потоковое шифрование)
// argv[2] - в режиме g - имя выходного файла,
// в режиме e - имя входного файла
// argv[3] - в режиме e - имя выходного файла
int main(int argc, char* argv[])
{
unsigned m,a,b,g0; // Параметры генератора
unsigned char* g_ptr=(unsigned char*)&g0;
unsigned char Buf[SIZE_BUF]; // Буфер чтения/записи
cout<<dos("Линейный рекуррентный генератор\n");
if(argc>=3 && (*argv[1]=='g' || *argv[1]=='e')){
cout<<dos("Введите параметры генератора (a*g+b) mod m\n");
cout<<"a="; cin>>a;
cout<<"b="; cin>>b;
cout<<"m="; cin>>m;
cout<<"g0="; cin>>g0;
if(*argv[1]=='g'){
// Генерация псевдослучайной последовательности с записью в файл
FILE* Out=fopen(argv[2],"wb");
if(Out==NULL){
cout<<dos("Ошибка открытия файла...\n");
getch(); return 1;
}
clearerr(Out);
// Генерация псевдослучайной последовательности
g0=Lcg(m,a,b,g0);
for(int i=0;i<SIZE_BUF;i+=4){
Buf[i]=*g_ptr;
Buf[i+1]=*(g_ptr+1);
Buf[i+2]=*(g_ptr+2);
Buf[i+3]=*(g_ptr+3);
g0=Lcg(m,a,b,g0);
}
fwrite(Buf,1,SIZE_BUF,Out); // Пишем в выходной файл
if(ferror(Out)){
fclose(Out);
cout<<dos("Ошибка записи...\n");
getch(); return 1;
}
else{
fclose(Out);
cout<<dos("Псевдослучайная последовательность создана в файле ");
cout<<argv[2]<<endl;
getch(); return 0;
}
}
else{
// Потоковое шифрование
FILE* In=fopen(argv[2],"rb");
if(In==NULL){
cout<<dos("Ошибка открытия файла...\n");
getch(); return 1;
}
FILE* Out=fopen(argv[3],"wb");
if(Out==NULL){
fclose(In);
cout<<dos("Ошибка открытия файла...\n");
getch(); return 1;
}
clearerr(In); clearerr(Out);
while(!feof(In)){ // Пока не конец входного файла
int LenBuf=fread(Buf,1,SIZE_BUF,In); // Читаем в буфер
if(ferror(In)){
fclose(In); fclose(Out);
cout<<dos("Ошибка чтения...\n");
getch(); return 1;
}
g0=Lcg(m,a,b,g0);
int i=0;
for(;i<(LenBuf-(LenBuf%4));i+=4){
Buf[i]^=*g_ptr;
Buf[i+1]^=*(g_ptr+1);
Buf[i+2]^=*(g_ptr+2);
Buf[i+3]^=*(g_ptr+3);
g0=Lcg(m,a,b,g0);
}
for(;i<LenBuf;i++) Buf[i]^=(unsigned char)*(g_ptr+i);
fwrite(Buf,1,LenBuf,Out); // Пишем в выходной файл
if(ferror(Out)){
fclose(In); fclose(Out);
cout<<dos("Ошибка записи...\n");
getch(); return 1;
}
}
fclose(In); fclose(Out);
cout<<dos("Файл ")<<argv[2];
cout<<dos(" зашифрован/расшифрован")<<endl;
cout<<dos("Результат в ")<<argv[3]<<endl;
getch(); return 0;
}
}
cout<<dos("Формат командной строки: ");
cout<<"Lcg g/e [infile] outfile\n";
cout<<dos("g - генерация последовательности, e - шифрование, \n");
cout<<dos("infile - имя входного файла, \n");
cout<<dos("outfile - имя выходного файла. \n");
getch(); return 0;
}
//--------------------------------------------------------------------------------------------
Эта программа реализует универсальный 32 битовый ЛКГ со значениями параметров a, b, m и g0, которые могут выбираться из диапазона от 0 до 232 – 1. Основу генератора составляет функция
unsigned Lcg(unsigned m,unsigned a, unsigned b, unsigned g){
return (g*a + b)%m;
}
Программа работает в двух режимах: генерации псевдослучайной последовательности длинной 20000 бит с записью результатов в указанный файл, и шифрования данных из заданного файла с записью результатов в другой указанный файл. Особенностью данного потокового шифра является то, что шифрование и расшифрование осуществляются одинаково.
Проведем статистический анализ выходной псевдослучайной последовательности для ЛКГ ANSIC из таблицы Л2.2. Его параметры:
a = 1103515245, b = 12345 m = 231–1 = 2147483647, g0 = 12345.
Запустим нашу программу на выполнение в режиме генерации гаммы: lcg g ansic.dat. На рис. Л2.1 приведена экранная форма программы.
|
Рис. Л2.1. Экранная форма программы генерации псевдослучайной последовательности. |
Для статистического анализа получившегося результата воспользуемся программой TestFIPS1401. На рис. Л2.2 приведены результаты ее работы.
Из анализа следует, что данный генератор не удовлетворяет всем критериям стандарта FIPS 140–1, в частности не пройден блочный тест.
|
Рис. Л2.2. Результаты статистического анализа. |
Применим нашу программу для шифрования и расшифрования данных:
lcg e file1.txt file2.txt
lcg e file2.txt file3.txt
На рис. Л2.3 приведена экранная форма программы в режиме шифрования/расшифрования, а на рис. Л2.4 – результаты ее работы.
|
Рис. Л2.3. Экранная форма программы шифрования/расшифрования данных. |
|
Рис. Л2.4. Результат потокового шифрования/расшифрования данных. |
Вывод. В ходе лабораторной работы был реализован универсальный 32 разрядный ЛКГ. В качестве примера были выбраны параметры LCG(231 – 1, 1103515245, 12345, 12345). Проведен статистический анализ 20000 битного выхода этого генератора в соответствии с требованиями стандарта FIPS 140 – 1, который показал, что тест не пройден, поскольку полученная псевдослучайная последовательность не удовлетворяет требованиям блочного теста. Тем не менее, с помощью данного ЛКГ было проведено потоковое шифрование и расшифрование данных, что подтверждает правильность реализации.
