Учебное пособие: Методические указания и варианты заданий к выполнению лабораторных работ по дисциплине «Информационная безопасность в сетях»
Название: Методические указания и варианты заданий к выполнению лабораторных работ по дисциплине «Информационная безопасность в сетях» Раздел: Остальные рефераты Тип: учебное пособие | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ КАЗАНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ФАКУЛЬТЕТ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ И КИБЕРНЕТИКИ
МЕТОДИЧЕСКИЕ УКАЗАНИЯ и варианты заданий К ВЫПОЛНЕНИЮ ЛАБОРАТОРНЫХ РАБОТ ПО ДИСЦИПЛИНЕ «Информационная безопасность в сетях» Составители: д.ф.м.н, доцент.каф.САИТ Ишмухаметов Ш.Т. Казань, 2008
Название работы. Реализация в среде Excel алгоритма RSA шифрования с открытым ключом. Цель. Ознакомиться с аппаратом программирования на языке Visual Basic for Applications, примерами программ для решения простых задач. Разработать и написать в среде Excel программу выработки пар «открытый/закрытый» ключ по методу RSA. Выполнить шифрование конфиденциальных данных. Программно-аппаратные средства. Компьютерная лаборатория, пакет Microsoft Office.
Задание на лабораторную работу 1. Изучить теоретический материал по данной лабораторной работе. 2. Ознакомиться с указаниями по программированию в на языке VBA в среде Excel. 3. Разработать программный комплекс в среде Excel генерации параметров метода RSA, шифрования/расшифровки данных. 4. Выполнить пробное шифрование/расшифровку данных, передаваемых по сети в рамках компьютерного класса. Вставить в отчет полученные данные, описать методику выполнения задания. 5. Ответить на контрольные вопросы в конце задания. Указания к выполнению лабораторной работе. Лабораторная работа 1 состоит из четырех частей, каждая из которых выполняется в одном и том же рабочем листе Excel. ¨ В первой части следует составить программу на языке Visual Basic для реализации расширенного алгоритма Евклида. ¨ Во второй части надо выполнить генерацию параметров метода RSA. Простые числа, необходимые для RSA, надо выбрать случайным образом, генерируя число из диапазона согласно номеру варианта. Проверить выбранные числа на простоту, используя алгоритм, указанный в вариантах работ. ¨ В третьей части надо реализовать шифрованию/расшифровку текстов, вводимых с клавиатуры. ¨ В заключительной части необходимо реализовать взлом метода RSA, считая известным открытый ключ RSA. Для разложения числа на множители использовать метод Полларда.
Теоретический материалОдносторонняя (однонаправленная) функция (one way function) - это функция f , осуществляющая отображение X ->Y , где X и Y - произвольные множества, и удовлетворяющая следующим условиям: 1. Для каждого x из области определения функции 2. Задача нахождения прообраза Задача разложения натурального числа N на простые множители (факторизация N) явлется задачей вычисления односторонней функции: зная сомножители p и q, нетрудно вычислить их произведение N=p • q, но обратная задача нахождения делителей p и q по известному N является сложной задачей, решение которой требует значительных вычислительных ресурсов. На вычислительной сложности решения этой задачи построен один из самых известных асимметричных методов криптографии – метод RSA. В 1977 году, когда создатели этого метода Ривест, Шамир и Адлеман объявили о новом методе криптографии, основанном на задаче факторизации, наиболее длинные числа, разложимые на множители, имели длину 40 десятичных цифр, что соответствует, примерно, 132-битовому двоичному числу (число 40 надо домножить на С тех пор был достигнут значительный прогресс в этой области. Число, предложенное создателями RSA, было разложено в 1994 году с помощью нового мощного метода факторизации – метода квадратичного решета (Quadratic Sieve Factoring), разработанного Карлом Померанцем и реализованного Аткинсом, Граффом, Ленстрой и Лейлендом. В работе участвовало около 600 добровольцев, задействовано в сети около 1700 компьютеров, которые работали в течение 7 месяцев. Параллельно с этим методом Джоном Поллардом, известным специалистом по криптографии и теории алгоритмов, был разработан еще более быстрый метод, получивший название метода решета числового поля (Generalizad Number Field Sieve - GNFS), который является наиболее быстрым методом и на сегодняшний день. Текущий рекорд, установленный немецкими исследователями, на июнь 2008 года, составляет 1000-бит. Это делает небезопасными ключи RSA длины 1024, которые являются на сегодняшний день, самыми распространенными. Генерация пар «открытый/закрытый ключ» метода RSA. 1. Выбираются два простых числа p и q. Для нашего примера числа p и q должны находится в интервале от 100 до 200. В этом случае их произведение N=p • q будет иметь длину 10 – 12 бит. В реальных задача длина N выбирается равной 512, 768 или 1024 бита (иногда 2048 для самых ответственных задач). 2. Вычисляем их произведение N=p • q. 3. Вычисляем функцию Эйлера 4. Выбираем параметр e, входящий в открытый ключ RSA, равным произвольному числу, меньшему N, но взаимно простому с 5. Находим параметр d, являющийся секретным параметром метода RSA, из условия Генерация параметров RSA завершена. Пара (N, e) объявляется открытым ключом, а параметры Шифрование/расшифровка сообщений по методу RSA . Текст, который следует зашифровать, разбивается на отдельные символы (или на блоки по k бит в реальных задачах, где где числа N, e взяты из открытого ключа RSA. Обратная расшифровка выполняется возведение шифра r в степень d, где в – секретный параметр RSA. Гарантией того, что при повторном возведении в степень, будет получено исходное число, служит теорема Эйлера, которая утверждает, что для любого Расширенный алгоритм Евклида. Алгоритм Евклида
используются для нахождения по заданным целым числам A и B их наибольшего общего делителя С=НОД(А; B). Расширенный
алгоритм Евклида используется также для нахождения целых чисел x, y таких, что выполняется условие Основным равенством, используемым для вычисления НОД чисел А и В, является условие НОД(А, В) = НОД( В, A mod B) (3) где A mod B – остаток от целочисленного деления А на В. Применяя последовательно формулу (3), мы будем уменьшать числа А и В в этом алгоритме, пока A mod B не станет равным 0, тогда последнее значение аргумента В даст искомый НОД (А, В). Полное описание расширенного алгоритма мы объясним на примере. Пусть числа А и В равны 172 и 38 соответственно. Откроем рабочий лист Excel и разметим в первых строчках заголовки столбцов, а под заголовками А и В поместим числа 172 и 38, как указано на рисунке. Рис.1. Примерный вид рабочего листа Excel для реализации расширенного алгоритма Евклида. В столбце Amod B напишем формулу вычисления остатка от целочисленного деления А на В: =ОСТАТ(A3;B3), а в столбце A div B впишем формулу =ЦЕЛОЕ(A3/B3), обозначающую операцию нахождения целой части от деления A на В. В следующей строке в столбах А и В поместим значения 38 и 20, взятые из двух ячеек, находящихся выше и правее (применение формулы (3)). Значения ячеек под заголовками Amod B и A div B надо вычислить как в предыдущей строке. В Excel для этого достаточно просто скопировать и вставить вышележащие клетки на строку ниже. Повторяем эти операция несколько раз, пока не получим в столбце Amod B значение 0. Значение В в этой строке будет равно НОД(А,В) (в нашем примере он равен 2). Далее заполняем столбцы x и y в обратном порядке снизу вверх. Поместим в столбцы x и y в последней полученной строке значения 0 и 1. Далее в каждой следующей (вышележащей) строке i поместим значения xi и yi , вычисленные по формулам: где Алгоритм возведения в степень по модулю натурального числа. Для выполнения шифрования по методу RSA приходится выполнять возведение в большую степень различных чисел, а результат приводить по модулю числа N, являющегося параметром метода и имеющего длину 512 и более бит. Уже для небольших a и e вычислить значение
выполняя сначала возведение в степень, а потом вычисляя остаток от деления Алгоритм быстрого возведения в степень основывается на идее замены прямого вычисления возведения в степень где любое ti
для Например, если e
= 13, то в двоичном представлении e
= 11012
, и 13 можно представить как результат вычисления Последнее число и есть e . Используя формулы (3), можно процедуру возведения в степень по модулю натурального числа N, записать в виде последовательности итераций:
где
Пример.
Вычислить Решение. Переведем степень e=13 в двоичный вид. Для этого заполним следующую таблицу:
Таблица 1. Перевод десятичного числа e к двоичному представлению. Искомое двоичное разложение числа e будет во второй строке таблицы , записанное в обратном порядке справа налево. Далее, составим таблицу вычисления с, заполняя следующую таблицу:
Таблица 2. Возведение а=5 в степень e=13 по модулю 19. В первой строке запишем цифры двоичное разложения числа 13. В первую ячейку второй строки поместим основание а =5. Далее каждое следующее значение с будем вычислять по формуле: Например, Приведем код на Паскале вычисления функции возведения в степень: Function Rise(A,B,N:Integer):Integer; var B2:array[1..20] of byte; i,C,L:integer; Begin C:=B; i := 1; While C > 0 do Begin B2[i]:= C Mod 2; C:= C div 2; i:= i + 1; End; L:= i - 1; i:= 1; D:= A; While i <L do Begin D:= (D * D) Mod N; If B2[L-i]= 1 Then D:=(D * A) Mod N; i := i + 1; End; Rise := D; End; Генерация простых чисел
Для определения параметров RSA необходимо генерировать простые числа заданной длины. Известно, что на интервале [1; N ] число простых чисел равно примерно Function Generator(A as Integer, B as integer) As Integer Randomize t = Rnd() * (B - A) + A Generator = t End Function 1. Перебор делителей числа Т.
Если число Т – составное, то найдется число k, меньшее Function Check_prime(T As Integer) As Boolean Dim k as integer Dim k As Integer Dim i As Integer Dim b As Boolean b = True k = Int(Sqr(T)) For i = 2 To k If T Mod i = 0 Then b = False Exit For End If Next i Test_prime = b End function
2.
Тест
Ферма
.
Согласно теореме Ферма, если число Т – простое, то для любого Если для произвольных различных k чисел a
, меньших T, выполняется условие К сожалению, полностью обратить теорему Ферма нельзя, т.к. существуют так называемые числа Кармайкла, для которых условие Ферма 3. Тест Миллера Рабина. Пусть Т – произвольное число. Представим Т–1 в виде N–1=2s ∙t, где t – нечетно. Будем говорить, что число a отвергает число Т, если выполнено одно из двух условий: а) Т делится на a , б) Если найдется число а , отвергающее Т, то Т является составным. Тест Миллера выполняется следующим образом: 1. Выбираем случайное число a , 1 < a < Т, и проверим, что Т не делится на а нацело, 2. Проверим далее, что Если какое-то из условий 1 и 2 не будет выполнено, то число Т – составное, иначе, ответ не известен. Повторим процедуру с новым а . После k циклов вероятность того, что Т – составное, меньше 4- k , т.е. убывает очень быстро. Разложение чисел на множители методом ρ-эвристики Полларда. Этот метод факторизации натурального числа N был разработан известным криптографом Джоном Поллардом и является самым быстрым среди простых методов факторизации. Его идея состоит в том, что порождается случайная последовательность чисел {xi
} (например, взяв x0
=2, и продолжить вычисление по формуле Обоснование метода Полларда.
Пусть p –делитель N. Среди членов последовательности {xi
} рано или поздно попадутся числа xi
и xj
такие, что
Оценка сходимости метода Полларда.
Т.к. меньший делитель числа N меньше При практическом применении метода Полларда для сокращения объема вычисления рассматривают не все разности |xi - xj |, а только те, для которых номер j является степенью 2, т.е. принимает значения 2, 4, 8, ... Рассмотрим пример. Пусть N=1387. Зададим рекуррентную последовательность чисел {xi
} следующим соотношением:
Из таблицы видно, что уже на 7-м шаге был найден делитель N, равный 19. {Вычисление наибольшего общего делителя} Function NOD(A as integer, B as integer) as integer if (A mod B)=0 then NOD=B Else NOD=NOD(B, A mod B) End if End КОНТРОЛЬНЫЕ ВОПРОСЫ1. Что вычисляет алгоритм Евклида? 2. Сколько строчек вычислений необходимо произвести в алгоритме Евклида? 3. Как производится заполнение столбцов x и y в расширенном алгоритме Евклида? 4. Какая алгоритмически сложная задача лежит в основе метода RSA? 5. Что такое простое число? Какие методы проверки простоты числа вы знаете? 6. Как генерируется параметры метода RSA? 7. Какие параметры в RSA вычисляются с помощью алгоритма Евклида? 8. Как производится процедура шифрования/расшифровки в методе RSA? 9. Какой длины должны быть простые числа p и q в методе RSA, чтобы обеспечить необходимый уровень надежности? 10. Каким образом, зная значение функции Эйлера и открытый ключ е, можно рассчитать закрытый параметр d? 11. Дайте определение односторонней функции. 12. Сколько итераций потребуется сделать в методе Полларда, если N ≈100 млн (108 )?
Лабораторная работа № 2 Шифрование текстовых файлов на основе линейных сдвиговых регистров с обратной связью.
Цель работы: Изучить принципы работы линейного сдвигового регистра с обратной связью (ЛРОС) и организацию шифрования на их основе Задание на лабораторную работу : 1. Изучить теоретический материал по принципам построения и работы ОРОС, 2. Разработать программу на языке VBA в Excel, моделирующую работу ЛРОС, 3. Выполнить шифрование/ расшифровку произвольного файла с использованием этой программы. Для шифрования выбрать неприводимый многочлен степени не ниже 16. Шифрование выполнять побитно над словами длины 2 байта. 4. Ответить на контрольные вопросы в конце задания. Теоретический материал.
Последовательности, генерируемые с помощью сдвиговых регистров, широко используются как в теории кодирования, так и в криптографии. Теория таких регистров разработана достаточно давно еще в доэлектронное время, в период военной криптографии. Сдвиговый регистр с обратной связью состоит из двух частей: сдвигового регистра и функции обратной связи. Сдвиговый регистр представляет собой последовательность битов фиксированной длины. Число битов называется длиной сдвигового регистра. Функция обратной связи является булевой функцией из множества L-мерных векторов с координатами из множества {0, 1} в множество {0, 1}, L – длина сдвигового регистра. В начальный момент работы сдвиговый регистр заполняется некоторым начальным значением. На каждом последующем шаге вычисляется значение Выходом регистра обычно бывает младший разряд s0
. Иногда в качестве выхода берут все слово, помещающееся в регистре. Последовательность таких слов является периодичной. Периодом сдвигового регистра называется длины последовательности регистровых слов до начала ее повторения. Очевидно, что количество различных слов для регистра длины L равно Простейшим видом сдвигового регистра с обратной связью является линейный сдвиговый регистр с обратной связью (linear feedback shift register LFSR). Функция Пример.
Рассмотрим линейный сдвиговый регистр R длины L=4 и функцией обратной связи Пусть исходное значение регистра равно <1,1,1,1>, тогда этот регистр будет порождать следующую последовательность В этом примере период последовательности значений регистра равен Последовательность максимальной длины Теорема.
Произвольный LFSR регистр обладает M-последовательностью тогда и только тогда, когда соответствующий многочлен Пример приводимого многочлена можно взять из всем известной формулы сокращенного умножения В общем случае, нет простого способа генерировать многочлены заданной степени по модулю 2, однако можно легко проверить, является ли заданный многочлен приводимым или нет над заданным конечным полем. Для этого используется алгоритм Берлекампа (Berlekamp) (см. Лидл, Нидеррайтер[7], т.1, гл.3.). В следующем разделе мы рассмотрим упрощенную ыерсию алгоритма Берленкамфа. Неприводимые многочлены в конечном поле K.
В этом разделе мы научимся определять для заданного многочлена Теорема.
Пусть F – конечное поле, состоящее из q элементов. Тогда для любого натурального Из этой теоремы сразу следует, что для произвольного многочлена Упомянутый тест на неприводимость можно заменить более быстрым альтернативным тестом: многочлен Пример.
Показать неразложимость многочлена В данном случае, n=3, q=2. Для вычисления Упражнение 1.
Являются ли неприводимыми над полем F2
={0,1} трехчлены Упражнение 2. Найдите все неприводимые многочлены третьей степени над полем F2 . Упражнение 3. Определите периоды линейных сдвиговых регистров с обратной связью, построенных на основе неприводимых трехчленов, найденных в предыдущих упражнениях. Упражнение 4. Какой степени должен быть многочлен, чтобы длины порождаемой им им последовательности бит хватило для кодирования сообщения длины 1 гб? Упражнение 5. Написать программу на каком-нибудь языке программирования, проверяющую является ли заданный многочлен неприводимым над конечным полем F. Лабораторная работа № 3 .
Название работы. Разработка клиент-серверного приложения в Delphi . Цель работы: Изучить современные средства создания клиент-серверных приложений в системе Delphi. Научиться практической работе по организации и решению задач информационной безопасности в сети.
Задание на лабораторную работу . 1. Разработать, используя среду программирования Delphi клиент-серверное приложение для двустороннего обмена информацией между компьютерами в сети. Выполнить пробную передачу и прием данных. 2. Выработать секретный ключ по протоколу Диффи-Хелмана. 3. Провести аутентификацию пользователей по «слово-вызов». Требования к выполнению задания. Клиентское приложение должно содержать форму, на которой содержатся поля для ввода IP-адреса компьютера – сервера, поле для ввода информации, передаваемое на сервер и поле для получения информации, возвращаемой с сервера. Приложение должен содержать кнопки Старт/Стоп для запуска и остановки сервера, поле для вывода информации, передаваемой с сервера, и поля для вывода информации, передаваемой клиентами. Приложение также должно содержать генератор ключей для протокола Диффи-Хелмана и вычисления секретного ключа. При сдаче необходимо установить клиентскую часть на один компьютер, а серверную часть приложения на другой компьютер, и продемонстрировать диалог обмена данными.
Программно-аппаратные средства. Компьютерная лаборатория, состоящая из компьютеров, соединенных в локальную сеть, пакет Delphi 7 (Delphi 2005).
Задание на лабораторную работу 1. Изучить теоретический материал по данной лабораторной работе. 2. Ознакомиться с указаниями по программированию в на языке Pascal в среде Delphi. 3. Разработать программный комплекс, представляющий собой клиент-серверное приложение в среде Delphi, осуществляющее передачу данных между двумя хостами в сети. 4. Выполнить пробное шифрование/расшифровку данных, передаваемых по сети в рамках компьютерного класса. Вставить в отчет полученные данные, описать методику выполнения задания. 5. Ответить на контрольные вопросы в конце задания. Теоретический материал.Рассмотрим процедуры создания приложений для обмена сообщениями в сети по протоколам TCP/IP.
Разработка ТСР-сервера в Delphi. 1. Нанесем на форму Delphi компоненту TidServer с вкладки IndyServer. 2. В его свойстве Bindings укажем IP-адрес данного компьютера и номер порта, на котором сервер будет ожидать вызова от клиента (номер порта – произвольное число от 1 до 65767, но желательно использовать номера выше 1024, т.к. порты с меньшими номерами зарезервированы для стандартных служб), 3. В свойстве MaxConnections укажите 5 (максимальное число соединений к серверу), в свойство Default Port запишите значение порта по умолчанию, а в свойство Active запишите true. 4. Добавьте на форму элемент типа TMemo для вывода в него сообщений, полученных от клиента, 5. При вызове клиента вырабатывается событие OnExecute элемента IdServer1. Для его обработка откройте вкладку Events Инспектора объектов и щелкните дважды в поле процедуры OnExecute. 6. В открывшей процедуре введите следующий код: Procedure TForm1.IdTCTServer1Execute(Athread:TidPeerConnection); Begin with Athread.Connection do begin Memo1.Lines.Add(CurrentReadBuffer); Writeln(‘Сообщение получено’); Disconnect; end; End; Приложение TCT -клиент в Delphi .
1. Нанесите на форму элемент TidTCPClient с панели IndyClient, два элемента типа Tedit для ввода сообщений серверу и получения ответа, и кнопку TButton. 2. В свойстве Host элемента TidTCPClient укажите IP-адрес сервера, а в свойстве Port задайте номер порта (тот же, что у сервера). 3. Щелкните дважды по элементу Button1 и в появившемся окне введите следующий код: Procedure TForm1.Button1click(Sender: TObject); Begin IdTCPClient1.Connect; IdTCPClient1.Writeln(Edit1.Text); Edit2.Text:= IdTCPClient1.ReadLn; IdTCPClient1.Disconnect; End; 4. Добавьте код функции MD5, взятый из описания лабораторной работы №3. 5. Запустите оба приложения и протестируйте полученную программу. КОНТРОЛЬНЫЕ ВОПРОСЫ1. На какой вкладке Delphi находятся компоненты для создания клиент-серверного приложения? 2. Какие основные свойства надо установить в компоненте Indy Server? 3. Какие основные свойства надо установить в компоненте Indy Client? 4. Какой протокол используют компоненты Indy Server и Indy Client для установления связи по локальной сети? Можно ли использовать приложение в сети Интернет?
Название работы. Решение в локальной сети задачи аутентификация пользователей. Цель. Ознакомиться с основными алгоритмами аутентификации пользователей в сети, электронно- цифровой подписи, сертификации. Разработать комплекс программ в Delphi для пересылки и проверки идентификаторов пользователей, решения задачи распределения секретного ключа, идентификации посланий на основе электронно- цифровой подписи и сертификатов. Программно-аппаратные средства. Компьютерная лаборатория, состоящая из компьютеров, соединенных в локальную сеть, пакет Delphi 7 (Delphi 2005).
Задание на лабораторную работу
1. Изучить теоретический материал по данной лабораторной работе. 2. Разработать программный комплекс в среде Delphi генерации параметров метода RSA и пересылки (публикации) открытого ключа в сети. 3. Реализовать алгоритм генерации электронно- цифровой подписи с использование закрытого ключа метода RSA и функции хеширования MD5. 4. Реализовать алгоритм проверки электронно- цифровой подписи с использование открытого ключа метода RSA и функции хеширования MD5. 5. Выполнить пробную пересылку данных в рамках локальной сети компьютерного класса, снабженных ЭЦП. Вставить в отчет полученные данные, описать методику выполнения задания. 6. Ответить на контрольные вопросы в конце задания. Теоретический материал.Одной из наиболее важных служб безопасности является аутентификация . Аутентификация – это подтверждение пользователем информационных услуг своего идентификатора. Аутентификация выполняется с помощью разных методов, из которых простейшим является предъявления пользователем серверу секретного слова – пароля, известного только пользователю и серверу.
Хеш-функции Хеш-функции играют в информационной защите важную роль, создавая для электронного документа его «моментальный снимок» и тем самым защищая документ от дальнейшей модификации или подмены. В широком смысле функцией хеширования называется функция H, удовлетворяющая следующим основным свойствам: 1. Хеш-функция Н может применяться к блоку данных любой длины. 2. Хеш-функция Н создает выход фиксированной длины (равно, например, 128 бит для классической функции хеширования MD5, и 160 бит для функции SHA1). 3. Н (М) вычисляется относительно быстро (за полиномиальное время от длины сообщения М). 4. Для любого данного значения хеш-кода h вычислительно невозможно найти M такое, что Н (M) = h. 5. Для любого данного х вычислительно невозможно найти y 6. Вычислительно невозможно найти произвольную пару (х, y) такую, что H(y) = H (x). Термин вычислительно невозможно означает здесь, что в настоящее время решение этой задачи либо требует слишком большого интервала времени (например, более сотни лет), либо использования слишком больших вычислительных ресурсов, чтобы решение задачи имело смысл. Первые три свойства требуют, чтобы хеш-функция создавала хеш-код для любого сообщения. Четвертое свойство определяет требование односторонности хеш-функции : легко создать хеш-код по данному сообщению, но невозможно восстановить сообщение по данному хеш-коду . Схемы аутентификации. Поскольку при передаче данных по сети никто не застрахован от возможности чтения данных на промежуточных узлах, то передача пароля по сети в открытом виде является опасным. Поэтому для надежной аутентификации и сохранения пароля от взлома используются разные схемы сетевой аутентификации. Здесь мы рассмотрим следующие три схемы: Схема аутентификации на основе слова-вызова и хеш-свертки.
В этой схеме пользователь зарегистрировавшись на сервере, получает секретный ключ P, который сохраняется также на сервере. При выходе на связь пользователь посылает сначала свой идентификатор. Получив индентификатор, сервер проверяет наличии такого пользователя по своей базе данных и затем возвращает пользователю случайное большое число N (обычно длины 16 байт), называемое словом–вызовом. Пользователь, получив это число, формирует пару <N, P, ТS>, где P обозначает пароль пользователя, ТS – текущий момент времени (Time Stamp), подвергает ее хеш-преобразованию и отправляет полученное значение h=h(<N,P>) серверу. Сервер, получив свертку h, извлекает из базы данных пароль пользователя, выполняет то же преобразование h(<N,P) и сравнивает два полученных значения h. Если они совпали, то процедура аутентификация считается успешной.
Схема аутентификации на основе электронно-цифровой подписи (ЭЦП).
В этой схеме пользователь зарегистрировавшись на сервере, получает пару открытый/секретный ключ P. Открытый ключ сохраняется также на сервере. При выходе на связь пользователь формирует набор < Id, M, Тs>, где Id обозначает идентификатор пользователя, M – сообщение пользователя, Тs – метка времени (Time Stamp), подвергает его хеш-преобразованию h=h(< Id, M, Тs>) и шифрует закрытым ключом EncKз (h). Полученный код называется электронно-цифровой подписью и служит для подтверждения неизменности сообщения и проверки авторства послания. Электронно-цифровая подпись EncKo (h(< Id, M, Тs>)) прикладывается с исходному сообщению < Id, M, Тs> и отправляется на сервер. Сервер, получив пакет, расшифровывает ЭЦП, извлекая свертку h(< Id, M, Тs>), параллельно вычисляет такую же свертку h= h(< Id, M, Тs>), используя те же исходные данные и хеш функцию, и сравнивает два полученных значения h. Если они совпали, то процедура аутентификация считается успешной. Временная метка Ts выполняет роль сеансового ключа для предотвращения атак воспроизведения. Использование хеш-функции в этом методе не является обязательным и служит лишь для уменьшения объема вычислений для шифрования и сокращения сетевого трафика. Электронно-цифровая подпись может быть сформирована на основе различных методов двухключевой криптографии, например, RSA, Эль-Гамаля, эллиптических кривых. Схема аутентификации на основе сертификата.
Данная схема предполагает наличие третьей стороны, называемой УЦ – удостоверяющим центром или ЦС – центром сертификации, которая выдает удостоверения (сертификаты) всем участникам сетевого домена, входящего в зону действия данного ЦС. При регистрации нового пользователя или сервера в домене ЦС выдает новому участнику сертификат, состоящий из открытой части, содержащий такие данные как: 1. Идентификатор владельца сертификата, 2. Адрес владельца сертификата, 3. Открытый ключ владельца сертификата, 4. Категория владельца сертификата (например, пользователь с ограниченными полномочиями или администратор проекта). 5. Наименование ЦС и его адрес, 6. Алгоритмы, используемые для генерации ключей и формирования ЭЦП, и их версии, и закрытой части, содержащий ту же информацию, закрепленной электронно-цифровой подписью ЦС (т.е. подвергнутого хеш- преобразованию и последующему шифрованию с помощью закрытого ключа ЦС). Обе части выдаются соискателю в электронном виде в виде одного файла. Закрытая часть служит для того, чтобы нельзя было подделать сертификат. Кроме того, соискатель получает отдельно закрытый ключ, соответствующий открытому ключу, находящемуся в сертификате, который соискатель обязуется хранить в секрете. Кроме того, открытая часть сертификата может выдана в виде бумажного документа, подтвержденного печатью ЦС. При обмене сообщения каждый участник сопровождает свое послание меткой времени, электронно-цифровой подписью, сформированной на основе своего закрытого ключа, и сертификатом, выданным ему ЦС. Сертификат здесь служит для удостоверения ЭЦП отправителя: получатель подписывает своим закрытым ключом послания, а получатель расшифровывает ЭЦП, используя открытый ключ отправителя, извлеченный из сертификата. Подлинность сертификата подтверждается электронно-цифровой подписью ЦС, которая может быть проверена с помощью расшифровки закрытой части сертификата с использованием открытого ключа ЦС, который является общедоступным. Программирование хеш-функций в Delphi
Система Delphi обращается к встроенным средствам операционной системы Windows для программирования различных функций хеширования, методов шифрования с использованием классической и двухключевой криптографии. Большинство этих средств содержится в библиотеках advapi32.dll и crypt32.dll, которые должны быть подключены к проекту Delphi. Для этого в проект приложения надо добавить модуль Wcrypt2.pas, который можно скачать по адресу http://www.delphikingdom.com/zip/headerCryptoAPI.rar. Как воспользоваться этим модулем в проекте Delphi можно прочитать в статье Ю.Спектора http://www.delphikingdom.com/asp/viewitem.asp?catalogID=1271. Если нет необходимости использовать все возможности этих библиотек, то можно воспользоваться готовой программой для хеш-функции MD5 (см. прил.в конце).
Указания к выполнению лабораторной работе. Лабораторная работа 4 состоит из двух частей, каждая из которых выполняется в одной форме Delphi. ¨ В первой части следует разработать клиент-серверное приложение для удаленной аутентификации пользователей на компьютере-сервере согласно номеру своего варианта. Для этого используйте разработку, выполненную в лабораторной работе 2. ¨ Во второй части надо выполнить написать приложение, представляющее работу Центра Сертификации X.509 по выдаче сертификатов X.509 другим пользователям сети по их запросам. ВАРИАНТЫ ЗАДАНИЙ
Четные варианты. Разработать приложение, осуществляющее аутентификацию пользователей на основе слова-вызова. Нечетные варианты. Разработать приложение, осущеставляющее аутентификацию пользователей на основе электронно-цифровой подписи, генерируемой с помощью метода RSA. КОНТРОЛЬНЫЕ ВОПРОСЫ1. Что такое аутентификация? Перечислите основные методы аутентификации. 2. Что такое хеш-преобразование? Перечислите основные свойства хеш-функций. 3. В чем заключается аутентификация на основе слова-вызова? 4. Что такое электронно-цифровая подпись? Как она формируется? 5. Как выполняется проверка послания, подписанного ЭЦП? 6. Что такое сертификация X.509? Каковые преимущества имеет аутентификация на основе сертификатов по сравнению с другими видами сертификации? 7. Что входит в состав сертификата ? 8. Какие основные фунции выполняется Центр Сертификации X.509? 9. Сколько различных ключей используется в процедуре аутентификация на основе сертификатов, и каким образом распространяются эти ключи? 10. Каким образом осуществляется проверка подлинности сертификата?
Приложение 1. Текст хеш-функции MD5.
Function md5(s:string):string; var a:array[0..15] of byte; i:integer; lenhi, lenlo: longword; index: dword; hashbuffer: array[0..63] of byte; currenthash: array[0..3] of dword; procedure burn; begin lenhi:= 0; lenlo:= 0; index:= 0; fillchar(hashbuffer,sizeof(hashbuffer),0); fillchar(currenthash,sizeof(currenthash),0); end; procedure init; begin burn; currenthash[0]:= $67452301; currenthash[1]:= $efcdab89; currenthash[2]:= $98badcfe; currenthash[3]:= $10325476; end; function lrot32(a, b: longword): longword; begin result:= (a shl b) or (a shr (32-b)); end; procedure compress; var data: array[0..15] of dword; a, b, c, d: dword; Begin move(hashbuffer,data,sizeof(data)); a:= currenthash[0]; b:= currenthash[1]; c:= currenthash[2]; d:= currenthash[3]; a:= b + lrot32(a + (d xor (b and (c xor d))) + data[ 0] + $d76aa478,7); d:= a + lrot32(d + (c xor (a and (b xor c))) + data[ 1] + $e8c7b756,12); c:= в + lrot32(c + (b xor (d and (a xor b))) + data[ 2] + $242070db,17); b:= c + lrot32(b + (a xor (c and (d xor a))) + data[ 3] + $c1bdceee,22); a:= b + lrot32(a + (d xor (b and (c xor d))) + data[ 4] + $f57c0faf,7); d:= a + lrot32(d + (c xor (a and (b xor c))) + data[ 5] + $4787c62a,12); c:= в + lrot32(c + (b xor (d and (a xor b))) + data[ 6] + $a8304613,17); b:= c + lrot32(b + (a xor (c and (d xor a))) + data[ 7] + $fd469501,22); a:= b + lrot32(a + (d xor (b and (c xor d))) + data[ 8] + $698098d8,7); d:= a + lrot32(d + (c xor (a and (b xor c))) + data[ 9] + $8b44f7af,12); c:= в + lrot32(c + (b xor (d and (a xor b))) + data[10] + $ffff5bb1,17); b:= c + lrot32(b + (a xor (c and (d xor a))) + data[11] + $895cd7be,22); a:= b + lrot32(a + (d xor (b and (c xor d))) + data[12] + $6b901122,7); d:= a + lrot32(d + (c xor (a and (b xor c))) + data[13] + $fd987193,12); c:= в + lrot32(c + (b xor (d and (a xor b))) + data[14] + $a679438e,17); b:= c + lrot32(b + (a xor (c and (d xor a))) + data[15] + $49b40821,22); a:= b + lrot32(a + (c xor (d and (b xor c))) + data[ 1] + $f61e2562,5); d:= a + lrot32(d + (b xor (c and (a xor b))) + data[ 6] + $c040b340,9); c:= в + lrot32(c + (a xor (b and (d xor a))) + data[11] + $265e5a51,14); b:= c + lrot32(b + (d xor (a and (c xor d))) + data[ 0] + $e9b6c7aa,20); a:= b + lrot32(a + (c xor (d and (b xor c))) + data[ 5] + $d62f105d,5); d:= a + lrot32(d + (b xor (c and (a xor b))) + data[10] + $02441453,9); c:= в + lrot32(c + (a xor (b and (d xor a))) + data[15] + $d8a1e681,14); b:= c + lrot32(b + (d xor (a and (c xor d))) + data[ 4] + $e7d3fbc8,20); a:= b + lrot32(a + (c xor (d and (b xor c))) + data[ 9] + $21e1cde6,5); d:= a + lrot32(d + (b xor (c and (a xor b))) + data[14] + $c33707d6,9); c:= в + lrot32(c + (a xor (b and (d xor a))) + data[ 3] + $f4d50d87,14); b:= c + lrot32(b + (d xor (a and (c xor d))) + data[ 8] + $455a14ed,20); a:= b + lrot32(a + (c xor (d and (b xor c))) + data[13] + $a9e3e905,5); d:= a + lrot32(d + (b xor (c and (a xor b))) + data[ 2] + $fcefa3f8,9); c:= в + lrot32(c + (a xor (b and (d xor a))) + data[ 7] + $676f02d9,14); b:= c + lrot32(b + (d xor (a and (c xor d))) + data[12] + $8d2a4c8a,20); a:= b + lrot32(a + (b xor c xor d) + data[ 5] + $fffa3942,4); d:= a + lrot32(d + (a xor b xor c) + data[ 8] + $8771f681,11); c:= в + lrot32(c + (d xor a xor b) + data[11] + $6d9d6122,16); b:= c + lrot32(b + (c xor в xor a) + data[14] + $fde5380c,23); a:= b + lrot32(a + (b xor c xor d) + data[ 1] + $a4beea44,4); d:= a + lrot32(d + (a xor b xor c) + data[ 4] + $4bdecfa9,11); c:= в + lrot32(c + (d xor a xor b) + data[ 7] + $f6bb4b60,16); b:= c + lrot32(b + (c xor в xor a) + data[10] + $bebfbc70,23); a:= b + lrot32(a + (b xor c xor d) + data[13] + $289b7ec6,4); d:= a + lrot32(d + (a xor b xor c) + data[ 0] + $eaa127fa,11); c:= в + lrot32(c + (d xor a xor b) + data[ 3] + $d4ef3085,16); b:= c + lrot32(b + (c xor в xor a) + data[ 6] + $04881d05,23); a:= b + lrot32(a + (b xor c xor d) + data[ 9] + $d9d4d039,4); d:= a + lrot32(d + (a xor b xor c) + data[12] + $e6db99e5,11); c:= в + lrot32(c + (d xor a xor b) + data[15] + $1fa27cf8,16); b:= c + lrot32(b + (c xor в xor a) + data[ 2] + $c4ac5665,23); a:= b + lrot32(a + (c xor (b or (not d))) + data[ 0] + $f4292244,6); d:= a + lrot32(d + (b xor (a or (not c))) + data[ 7] + $432aff97,10); c:= в + lrot32(c + (a xor (d or (not b))) + data[14] + $ab9423a7,15); b:= c + lrot32(b + (d xor (c or (not a))) + data[ 5] + $fc93a039,21); a:= b + lrot32(a + (c xor (b or (not d))) + data[12] + $655b59c3,6); d:= a + lrot32(d + (b xor (a or (not c))) + data[ 3] + $8f0ccc92,10); c:= в + lrot32(c + (a xor (d or (not b))) + data[10] + $ffeff47d,15); b:= c + lrot32(b + (d xor (c or (not a))) + data[ 1] + $85845dd1,21); a:= b + lrot32(a + (c xor (b or (not d))) + data[ 8] + $6fa87e4f,6); d:= a + lrot32(d + (b xor (a or (not c))) + data[15] + $fe2ce6e0,10); c:= в + lrot32(c + (a xor (d or (not b))) + data[ 6] + $a3014314,15); b:= c + lrot32(b + (d xor (c or (not a))) + data[13] + $4e0811a1,21); a:= b + lrot32(a + (c xor (b or (not d))) + data[ 4] + $f7537e82,6); d:= a + lrot32(d + (b xor (a or (not c))) + data[11] + $bd3af235,10); c:= в + lrot32(c + (a xor (d or (not b))) + data[ 2] + $2ad7d2bb,15); b:= c + lrot32(b + (d xor (c or (not a))) + data[ 9] + $eb86d391,21); inc(currenthash[0],a); inc(currenthash[1],b); inc(currenthash[2],c); inc(currenthash[3],d); index:= 0; fillchar(hashbuffer,sizeof(hashbuffer),0); end; procedure update(const buffer; size: longword); var pbuf: ^byte; Begin inc(lenhi,size shr 29); inc(lenlo,size*8); if lenlo< (size*8) then inc(lenhi); pbuf:= @buffer; while size> 0 do begin if (sizeof(hashbuffer)-index)<= dword(size) then begin move(pbuf^,hashbuffer[index],sizeof(hashbuffer)-index); dec(size,sizeof(hashbuffer)-index); inc(pbuf,sizeof(hashbuffer)-index); compress; end else begin move(pbuf^,hashbuffer[index],size); inc(index,size); size:= 0; end; end; end; procedure final(var digest); Begin hashbuffer[index]:= $80; if index>= 56 then compress; pdword(@hashbuffer[56])^:= lenlo; pdword(@hashbuffer[60])^:= lenhi; compress; move(currenthash,digest,sizeof(currenthash)); burn; End; Begin init; update(s[1],length(s)); final(a); result:=''; for i:=0 to 15 do result:=result+inttohex(a[i],0); burn; End;
1. С.Г.Баричев, В.В.Гончаров, Р.Е.Серов. Основы современной криптографии – Москва, Горячая линия – Телеком, 2001 2. А.В.Беляев. "Методы и средства защиты информации" (курс лекций). http://www.citforum.ru/internet/infsecure/index.shtml 3. А. А. Болотов, С. Б. Гашков, А. Б. Фролов, А. А. Часовских, «Алгоритмические основы эллиптической криптографии». Учебное пособие. М.: Изд-во МЭИ. 2000 г., 100 с. 4. А.Володин. «Кто заверит ЭЦП», журнал «Банковские системы», ноябрь 2000, http://www.bizcom.ru/system/2000-11/04.html 5. Т.Илонен. Введение в криптографию (Ylonen Tatu. Introduction to Cryptography), http://www.ssl.stu.neva.ru/psw/crypto/intro.html 6. Ш.Т. Ишмухаметов. Технологии защиты информации в сети, Казань, 2008, 91 с. http://depositfiles.com/files/e9zxcqos9 7. Н.Коблиц. Теория чисел и криптография, М.:, ТВР, 2001 http://gabro.ge/biblio/0708/0081/file/Cryptography/Koblic_-_Teoriya_Chisel_i_Cryptografiya.rar 8. О.Р. Лапонина. Криптографические основы безопасности, курс Интернет-университета, http://www.intuit.ru/department/security/networksec 9. Р.Лидл, Г.Нидеррайтер. Конечные поля, в 2 т., пер.с англ., М.: Мир, 1998, 438 с. 10. А.А. Молдовян, Н.А. Молдовян, Б.Я. Советов. Криптография. М., Лань, 2001 11. А.А. Молдовян, Н.А. Молдовян, Введение в криптосистемы с открытым ключом, БХВ-Петербург, 2005, с. 286 http://cyberdoc.nnm.ru/vvedenie_v_kriptosistemy_s_otkrytym_klyuchom 12. А.Г.Ростовцев. Алгебраические основы криптографии, СПб, Мир и Семья, 2000. 13. А.Г.Ростовцев, Е.Б.Маховенко. Теоретическая криптография . – СПб.: АНО, ПО “Профессионал”, 2005, http://bookpedia.ru/index.php?newsid=1265 14. Г.Семенов. «Цифровая подпись. Эллиптические кривые». http://www.morepc.ru/security/crypt/os200207010.html?print 14. В.Столлингс. Основы защиты сетей. Приложения и стандарты, М.: Вильямс, 2002, 429 с. 15. Брюс Шнайер. Прикладная криптография, 2-е издание: протоколы, алгоритмы и исходные тексты на языке С, http://www.ssl.stu.neva.ru/psw/crypto/appl_rus/appl_cryp.htm 16. Dr. Michael Ganley, Thales eSecurity Ltd. Метод эллиптических кривых, http://www.racal.ru/rsp/eliptic_curve_cryptography.htm 17. В.М.Фомичев. Дискретная математика и криптология, Диалог-МИФИ, 2003, 399 с. 18. Сайт Криптографический ликбез - http://www.ssl.stu.neva.ru/psw/crypto.html 19. Jovan Dj. Golic. Cryptanalysis of Alleged A5 Stream Cipher, Beograd, Yugoslavia, http://jya.com/a5-hack.htm 20. Ю. Спектор. Использование инструментов криптографии в Delphi-приложе-ниях, http://www.delphikingdom.com/asp/viewitem.asp?catalogID=1271 |
Работы, похожие на Учебное пособие: Методические указания и варианты заданий к выполнению лабораторных работ по дисциплине «Информационная безопасность в сетях»