Автор работы: Пользователь скрыл имя, 05 Декабря 2011 в 19:21, курсовая работа
Любая компьютерная система требует некоторого рода защиты. Уровни защиты включают в себя физическую защиту (центрального процессора, дисков и терминалов), защиту файлов, защиту процессов и всей работающей системы. В многопользовательской среде еще более важно усиливать защиту. Каждый пользователь имеет право засекречивать и защищать свою среду и свои файлы. Ни один компьютер не имеет стопроцентной защиты. Ваша среда лишь настолько защищена, насколько вы сделали ее таковой.
Введение 2
1. Методы защиты информации 4
Симметричные алгоритмы шифрования 4
1.1.1. Потоковые шифры 4
1.1.2. Блочные шифры 5
Ассиметричные алгоритмы шифрования 8
1.1.3. Сравнение симметричных и ассиметричных алгоритмов шифрования 8
1.1.4. Проверка подлинности информации. Цифровая подпись 9
Алгоритм CRYPT(3) 10
2. Реализация механизма защиты информации 12
3. Эффективность криптографического алгоритма защиты 20
Заключение 23
Список используемых источников 24
В симметричных алгоритмах используют более короткие ключи, т. е. шифрование происходит быстрее. Но в таких системах сложно распределение ключей.
Поэтому
при проектировании защищенной системы
часто применяют и cимметричные,
и аcимметричные алгоритмы. Так
как система с открытыми
Обмен информацией можно осуществлять следующим образом:
Надо
заметить, что в правительственных
и военных системах связи используют
лишь симметричные алгоритмы, так как
нет строго математического обоснования
стойкости систем с открытыми ключами,
как, впрочем, не доказано и обратное.
1.1.4 Проверка подлинности информации. Цифровая подпись
При передаче информации должны быть обеспечены вместе или по отдельности:
Шифрование может обеспечить конфиденциальность, а в некоторых системах и целостность. Целостность сообщения проверяется вычислением контрольной функции (check function) от сообщения - некоего числа небольшой длины. Эта контрольная функция должна с высокой вероятностью изменяться даже при малых изменениях сообщения (удаление, включение, перестановки или переупорядочивание информации). Называют и вычисляют контрольную функцию по-разному:
При
вычислении контрольной функции
может использоваться какой-либо алгоритм
шифрования. Возможно шифрование самой
контрольной суммы. Широко применяется
цифровая подпись (цифровое дополнение
к передаваемой информации, гарантирующее
целостность последней и позволяющее
проверить ее авторство). Известны модели
цифровой подписи (digital signature) на основе
алгоритмов симметричного шифрования,
но при использовании систем с открытыми
ключами цифровая подпись осуществляется
более удобно.
Алгоритм
CRYPT(3)
Алгоритм CRYPT(3) был произведен в США. CRYPT(3) представляет собой вариант DES, используемый в системах UNIX. Он в основном используется в качестве однонаправленной функции для паролей, но иногда может быть использован и для шифрования. Различие между CRYPT(3) и DES состоит в том, что в CRYPT(3) включена независимая от ключа перестановка с расширением с 212 вариантами. Это сделано для того, чтобы для создания аппаратного устройства вскрытия паролей нельзя было использовать промышленные микросхемы DES[6]
DES (точнее, DEA - алгоритм, а не DES - стандарт) выполняет операции над блоком данных размером 64 бит. Также необходимо задать ключ того же размера. Во входных данных сначала производится перестановка разрядов в соответствии с таблицей IP. Затем 16 раз выполняется следующая последовательность операций: данные делятся на 2 равные части; левая часть и i-е преобразование ключа (i-номер итерации, 1..16) обрабатываются функцией f; затем результат функции f поразрядно складывается по модулю 2 (xor) с правой частью и становится правой частью на следующую итерацию; левой частью на следующую итерацию становится правая часть текущей итерации. После этого производится инверсная перестановка разрядов по таблице FP (IP-1). Дальше нам понадобится знать внутреннее устройство функции f. Данные (та самая левая часть) расширяются до 48 бит с помощью вектора E; расширенные данные и i-е преобразование ключа xor'ируются; полученные 48 бит пропускаются через 8 S-матриц (результат будет иметь размер 32 бита); и, уже привычная, перестановка разрядов. В принципе, этого достаточно знать, чтобы понять, в чем разница между DEA и crypt().
Во многих мануалах написано, что хэш DES является всего лишь применением DEA к конкатенации строк salt и pass. На самом деле, все немного иначе. По значению salt изменяется вектор E, который используется в функции f. Сам процесс изменения проще привести в виде фрагмента кода. особенность реализации состоит в том, что вместо обработки битового поля производится обработка массива из 64 значений, что гораздо более удобно для восприятия.
/*начальный код*/
for(i = 0; i < 2; i++)
{
/* сохранение результатов salt */
c = *salt++;
iobuf[i] = c;
if(c > 'Z')
c -= 6;
if(c > '9')
c -= 7;
c -= '.';
/* использовать salt что бы произвести E-bit набор */
for(j = 0; j < 6; j++)
{
if((c >> j) & 01)
{
temp = E[6 * i + j];
E[6 * i +j] = E[6 * i + j + 24];
E[6 * i + j + 24] = temp;
}
}
}
/*последующий код*/
Пароль
становится ключом, а зашифровке подвергается
пустой информационный блок (64 бита, равных
0). Причем шифрование производится итеративно,
25 раз, т.е. к результату предыдущей итерации
опять применяется шифрование (всего 25
вызовов des_encrypt).
Далее формируется стандартный 13-символьный
вывод. Причем, правила формирования внешне
напоминают base64 с измененным алфавитом.
Так получаются 11 символов хеша, а перед
ними дописывается salt.
Так
как различия между CRYPT(3) и DES на этом
закончились, то я буду описывать алгоритм
DES, потому что в остальном они одинаковы.
2 РЕАЛИЗАЦИЯ МЕХАНИЗМА ЗАЩИТЫ ИНФОРМАЦИИ
СИНТАКСИС
#define _XOPEN_SOURCE
#include <unistd.h>
char *crypt(char *pw, char *salt)
crypt - это функция шифрования пароля. Она основана на алгоритме Data Encryption Standard с различными расширениями и вариациями, нацеленными на усложнение задачи поиска ключа.
pw - это задаваемый пользователем пароль.
salt
- это двухсимвольная строка, выбираемая
из набора [a-zA-Z0-9./].
Эта строка используется для направления
алгоритма по одному из 4096-и путей. Если
взять младшие 7 битов каждого из первых
8 символов key, то получается 56-битный
ключ. Этот ключ используется для многократного
шифрования константной строки
(обычно строки, состоящей из символов
"0"). Возвращаемое значение - указатель
на зашифрованный пароль, серия
из 13-и ASCII-символов (первые
два символа содержат salt).
Возвращаемое значение - указатель на
статические данные, которые записываются
вновь при каждом вызове crypt.
Теоретические
сведения о CRYPT(3)
Алгоритм
шифрования данных CRYPT(3) разработан для
зашифрования и расшифрования данных
разрядностью 64 бит на основе 64-битового
ключа. Расшифрование выполняется по тому
же ключу, что и зашифрование, но этот процесс
является инверсным по отношению к процессу
зашифрования данных. При описании алгоритма
шифрования используются следующие обозначения.
Если L и R - последовательности бит, то
через LR будем обозначать конкатенацию
последовательностей L и R, т.е. последовательность
бит, размерность которой равна сумме
размерностей L и R. В этой последовательности
биты последовательности R следуют за
битами последовательности L. Символом
+ будем обозначать операцию побитового
сложения по модулю 2.
Процесс
шифрования
Процесс шифрования данных поясняется рисунком 3. Сначала 64 бита входной последовательности перестанавливаются в соответствии с таблицей 2. Таким образом, бит 58 входной последовательности становится битом 1, бит 50 – 2 и т.д. Полученная последовательность бит разделяется на две последовательности: L(0) (биты 58, 50, 42, ..., 8) и R(0) (биты 57, 49, 41, ..., 7), каждая из которых содержит 32 бита. Затем выполняется итеративный процесс шифрования, который описывается следующими формулами:
L(i)=R(i-1), i=1,2,...,16.
R(i)=L(i-1) + F(R(i-1),K(i)), i=1,2,...,16.
Функция F называется функцией шифрования. Ее аргументами являются последовательность R, полученная на предыдущем шаге, и 48-битовый ключ K(i), который является результатом функции преобразования 64-битового ключа шифра. Подробно функция шифрования и алгоритм получения ключей K(i) описаны ниже.
На последнем шаге итерации будут получены последовательности L(16) и R(16), которые конкатенируются в 64-х битовую последовательность R(16)L(16). Видно, что в полученной последовательности 64 бита, перестанавливаются в соответствии с таблицей 3. Как легко видеть данная перестановка является обратной по отношению к начальной. Полученная последовательность из 64 бит и будет являться зашифрованной последовательностью.
Процесс
расшифрования
Процесс расшифрования данных является инверсным по отношению к процессу шифрования. Все действия должны быть выполнены в обратном порядке. Это означает, что расшифровываемые данные сначала переставляются в соответствии с таблицей 2, а затем над последовательностью бит R(16)L(16) выполняется те же действия, что и в процессе зашифрования, но в обратном порядке. Итеративный процесс расшифрования описан следующими формулами:
R(i-1)=L(i), i =16, 15, ..., 1
L(i-1)=R(i)+F(L(i),K(i)
На
последнем шаге итерации будут получены
последовательности L(0) и R(0), которые конкатенируются
в 64 битовую последовательность L(0)R(0).
В полученной последовательности 64 бита
перестанавливаются в соответствии с
таблицей 3. Результат преобразования
- исходная последовательность бит (расшифрованное
64-битовое значение).
Функция
шифрования
Функция
шифрования F(R,K) схематически показана
на рисунке 4. Для вычисления значения
функции F используется функция E (расширение
32 бит до 48), функции S(1), S(2),...,S(8) преобразование
6-битового числа в 4-битовое) и функция
P (перестановка бит в 32-битовой последовательности).
Приведем определения этих функций. Аргументами
функции шифрования являются R (32 бита)
и K (48 бит). Результат функции E(R) есть 48-битовое
число, которое складывается по модулю
2 с числом K. Таким образом, получается
48-битовая последовательность, которая
рассматривается, как конкатенация 8 строк
длиной по 6 бит (т.е. B(1)B(2)B(3)B(4)B(5)B(6)B(7)B(
Функция расширения Е, выполняющая расширение 32 бит до 48, определяется таблицей 4. В соответствии с этой таблицей первые три бита Е(R) - это биты 32,1 и 2, а последние - 31,32,1.