Криптографический алгоритм защиты

Автор работы: Пользователь скрыл имя, 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

Работа состоит из  1 файл

Курсовая работа.doc

— 189.00 Кб (Скачать документ)

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

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

     Обмен информацией можно осуществлять следующим образом:

  1. получатель вычисляет открытый и секретный ключи, секретный ключ хранит в тайне, открытый же делает доступным;
  2. отправитель, используя открытый ключ получателя, зашифровывает сеансовый ключ, который пересылается получателю по незащищенному каналу;
  3. получатель получает сеансовый ключ и расшифровывает его, используя свой секретный ключ;
  4. отправитель зашифровывает сообщение сеансовым ключом и пересылает получателю;
  5. получатель получает сообщение и расшифровывает его.

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

     1.1.4 Проверка подлинности информации. Цифровая подпись

     При передаче информации должны быть обеспечены вместе или по отдельности:

  1. Конфиденциальность (privacy) - злоумышленник не должен иметь возможности узнать содержание передаваемого сообщения.
  2. Подлинность (authenticity), которая включает два понятия
    • целостность (integrity) - сообщение должно быть защищено от случайного или умышленного изменения;
    • идентификация отправителя (проверка авторства) - получатель должен иметь возможность проверить, кем отправлено сообщение.

     Шифрование  может обеспечить конфиденциальность, а в некоторых системах и целостность. Целостность сообщения проверяется вычислением контрольной функции (check function) от сообщения - некоего числа небольшой длины. Эта контрольная функция должна с высокой вероятностью изменяться даже при малых изменениях сообщения (удаление, включение, перестановки или переупорядочивание информации). Называют и вычисляют контрольную функцию по-разному:

  1. код подлинности сообщения (Message Authentical Code, MAC);
  2. квадратичный конгруэнтный алгоритм (Quadratic Congruentical Manipulation Detection Code, QCMDС);
  3. Manipulation Detection Code (MDС);
  4. Message Digest Algorithm (MD5);
  5. контрольная сумма;
  6. символ контроля блока (Block Check Character, BCC);
  7. циклический избыточный код (ЦИК, Cyclic Redundancy Check, CRC);
  8. хеш-функция (hash);
  9. имитовставка в ГОСТ 28147-89;
  10. алгоритм с усечением до n битов (n-bit Algorithm with Truncation).

     При вычислении контрольной функции  может использоваться какой-либо алгоритм шифрования. Возможно шифрование самой  контрольной суммы. Широко применяется  цифровая подпись (цифровое дополнение к передаваемой информации, гарантирующее целостность последней и позволяющее проверить ее авторство). Известны модели цифровой подписи (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)), i=16, 15, ..., 1.

       На  последнем шаге итерации будут получены последовательности 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(8)). Результат функции S(i)B(i) - 4 битовая последовательность, которую будем обозначать L(i). В результате конкатенации всех 8 полученных последовательностей L(i) имеем 32-битовую последовательность L=L(1)L(2)L(3)L(4)L(5)L(6)L(7)L(8). Наконец, для получения результат функции шифрования надо переставить биты последовательности L. Для этого применяется функция перестановки P(L).

       Функция расширения Е, выполняющая расширение 32 бит до 48, определяется таблицей 4. В соответствии с этой таблицей первые три бита Е(R) - это биты 32,1 и 2, а  последние - 31,32,1.

Информация о работе Криптографический алгоритм защиты