Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Топ:
Марксистская теория происхождения государства: По мнению Маркса и Энгельса, в основе развития общества, происходящих в нем изменений лежит...
Основы обеспечения единства измерений: Обеспечение единства измерений - деятельность метрологических служб, направленная на достижение...
Выпускная квалификационная работа: Основная часть ВКР, как правило, состоит из двух-трех глав, каждая из которых, в свою очередь...
Интересное:
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Дисциплины:
2018-01-29 | 324 |
5.00
из
|
Заказать работу |
|
|
ЛАБОРАТОРНАЯ РАБОТА № 1
Название работы. Реализация в среде Excel алгоритма RSA шифрования с открытым ключом.
Цель. Ознакомиться с аппаратом программирования на языке Visual Basic for Applications, примерами программ для решения простых задач. Разработать и написать в среде Excel программу выработки пар «открытый/закрытый» ключ по методу RSA. Выполнить шифрование конфиденциальных данных.
Программно-аппаратные средства. Компьютерная лаборатория, пакет Microsoft Office.
Задание на лабораторную работу
Указания к выполнению лабораторной работе.
Лабораторная работа 1 состоит из четырех частей, каждая из которых выполняется в одном и том же рабочем листе Excel.
ВАРИАНТЫ ЗАДАНИЙ
|
№ варианта | Алгоритм проверки простоты чисел | Диапазон выбора простых чисел (для 1-о и 2-о чисел) | Открытый ключ (N,E) и шифр сообщения для взлома |
Метод пробных делений | [50;100], [75; 125] | (N,e)=(78937, 19) M={44389, 31974, 50020, 41406, 29866} | |
Метод Ферма | [70;120], [90; 140] | (N,e)=(55357, 37) M={13389, 33602, 11685, 33602, 40522, 47755, 10459, 15507, 33602} | |
Тест Миллера-Рабина | [40;90], [80; 130] | (N,e)=(41869, 23) M={21618, 16457, 36520, 31771, 22233, 32135 } | |
Метод пробных делений | [70;120], [60; 110] | (N,e)=(111557, 113) M={49096, 63084, 8557, 3743, 4162, 63084, 8557} | |
Метод Ферма | [30;70], [70; 120] | (N,e)=(96091,113) M={61768, 80113, 95437, 80113, 53070, 75177, 82879} | |
Тест Миллера-Рабина | [60;100], [110; 150] | (N,e)=(139331, 113) M={84929, 101535, 89665, 31645, 48847, 48310, 101535, 89665} | |
Метод пробных делений | [70;120], [60; 110] | (N,e)=(85039, 113) M={30454, 11454, 54678, 37720, 28540, 13779, 22807, 63035} | |
Метод Ферма | [40;80], [70; 120] | (N,e)=(150737, 113) M={104318, 143945, 19327, 69783, 112451, 105094} | |
Тест Миллера-Рабина | [70;110], [120; 150] | (N,e)=(94697,113) M={10546, 67178, 84721, 4306, 78944, 1251, 27204} | |
Метод пробных делений | [75;110], [100; 130] | (N,e)=(156031,113) M={29152, 59889, 6814, 115388, 93780, 105567, 31230, 108149} | |
Метод Ферма | [35;70], [80; 120] | (N,e)=(157379, 113) M={113065, 45393, 45393, 77288, 102351, 90053, 4109, 122125} | |
Тест Миллера-Рабина | [75;100], [120; 160] | (N,e)=(65041, 113) M={11965, 10878, 61241, 39494, 43796, 59735, 10878} | |
Метод пробных делений | [60;90], [90; 140] | (N,e)=(95371, 113) M={73636, 91819, 93589, 82293, 75385, 63153, 27478} | |
Метод Ферма | [70;100], [1200; 150] | (N,e)=(103861, 113) M={31152, 63308, 38428, 91454, 4476, 10515, 70086, 63308, 84514, 83370} | |
Тест Миллера-Рабина | [65;100], [105; 140] | (N,e)=(169921, 113) M={39823, 108107, 55814, 75107, 158616, 145959, 18054} |
Теоретический материал
Односторонняя (однонаправленная) функция (one way function) - это функция f, осуществляющая отображение X -> Y, где X и Y - произвольные множества, и удовлетворяющая следующим условиям:
Задача разложения натурального числа N на простые множители (факторизация N) явлется задачей вычисления односторонней функции: зная сомножители p и q, нетрудно вычислить их произведение N=p • q, но обратная задача нахождения делителей p и q по известному N является сложной задачей, решение которой требует значительных вычислительных ресурсов.
|
На вычислительной сложности решения этой задачи построен один из самых известных асимметричных методов криптографии – метод RSA. В 1977 году, когда создатели этого метода Ривест, Шамир и Адлеман объявили о новом методе криптографии, основанном на задаче факторизации, наиболее длинные числа, разложимые на множители, имели длину 40 десятичных цифр, что соответствует, примерно, 132-битовому двоичному числу (число 40 надо домножить на ). Создатели RSA предложили широкой публике расшифровать некую фразу английского языка. Для этого предварительно требовалось факторизовать 129-значное десятичное число N (длины 428 в битовом представлении), про которое было известно, что оно представимо в виде произведения двух простых сомножителей p и q, которые имели длину 65 и 64 десятичных знака.
С тех пор был достигнут значительный прогресс в этой области. Число, предложенное создателями RSA, было разложено в 1994 году с помощью нового мощного метода факторизации – метода квадратичного решета (Quadratic Sieve Factoring), разработанного Карлом Померанцем и реализованного Аткинсом, Граффом, Ленстрой и Лейлендом. В работе участвовало около 600 добровольцев, задействовано в сети около 1700 компьютеров, которые работали в течение 7 месяцев.
Параллельно с этим методом Джоном Поллардом, известным специалистом по криптографии и теории алгоритмов, был разработан еще более быстрый метод, получивший название метода решета числового поля (Generalizad Number Field Sieve - GNFS), который является наиболее быстрым методом и на сегодняшний день. Текущий рекорд, установленный немецкими исследователями, на июнь 2008 года, составляет 1000-бит. Это делает небезопасными ключи RSA длины 1024, которые являются на сегодняшний день, самыми распространенными.
Генерация простых чисел
|
Для определения параметров RSA необходимо генерировать простые числа заданной длины. Известно, что на интервале [1; N ] число простых чисел равно примерно . Например, для N, равного 1 млн, число простых чисел в интервале от 1 до 106, равно примерно 50 тысяч. Для генерации простых чисел можно выбрать произвольное нечетное число T и проверить его на простоту с помощью одного из тестов, описанных ниже. Если T окажется составным, то надо заменить его на T+2 и проверить снова затем проверить T+4 и т.д. В среднем, через шагов простое число будет найдено. Для генерации числа из заданного интервала [A; B] в Visual Basic можно использовать следующий алгоритм:
Function Generator(A as Integer, B as integer) As Integer
Randomize
t = Rnd() * (B - A) + A
Generator = t
End Function
1. Перебор делителей числа Т. Если число Т – составное, то найдется число k, меньшее , которое делит Т. Поэтому простейшим тестом на простоту является проверка делителей числа Т от 2 до . Приведем программу на Visual Basic:
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, выполняется условие , то с вероятностью, не меньшей, чем , число a является простым.
К сожалению, полностью обратить теорему Ферма нельзя, т.к. существуют так называемые числа Кармайкла, для которых условие Ферма выполнено для всех a, меньших T, но числа являются составными. Однако, поскольку числа Кармайкла встречаются чрезвычайно редко, то в наших условиях можно ими пренебречь.
3. Тест Миллера Рабина. Пусть Т – произвольное число. Представим Т–1 в виде N–1=2s∙t, где t – нечетно. Будем говорить, что число a отвергает число Т, если выполнено одно из двух условий:
а) Т делится на a,
б) и для всех целых k, .
Если найдется число а, отвергающее Т, то Т является составным. Тест Миллера выполняется следующим образом:
Если какое-то из условий 1 и 2 не будет выполнено, то число Т – составное, иначе, ответ не известен. Повторим процедуру с новым а.
|
После k циклов вероятность того, что Т – составное, меньше 4-k, т.е. убывает очень быстро.
Разложение чисел на множители методом ρ-эвристики Полларда.
Этот метод факторизации натурального числа N был разработан известным криптографом Джоном Поллардом и является самым быстрым среди простых методов факторизации. Его идея состоит в том, что порождается случайная последовательность чисел {xi} (например, взяв x0=2, и продолжить вычисление по формуле ). Далее, вычисляются всевозможные разности . Для каждой такой пары (xi, xj) находятся с помощью алгоритма Евклида наибольший общий делитель НОД(N, |xi - xj|)). Если будет найдена пара (xi, xj) со свойством НОД(N, |xi - xj|))>1, то этот НОД и даст искомый делитель числа N.
Обоснование метода Полларда. Пусть p –делитель N. Среди членов последовательности {xi} рано или поздно попадутся числа xi и xj такие, что = (это равенство записывается более кратко ). Это условие означает, что для некоторого целого числа k. Т.к. p – делитель N, то для выбранной пары (xi, xj) НОД(N; |xi - xj|)= p.
Оценка сходимости метода Полларда. Т.к. меньший делитель числа N меньше , то элементы последовательности меньше . По парадоксу близнецов (см. [1]) среди первых членов последовательности с вероятностью, большем чем 0,5, попадутся два одинаковых члена, т.е. найдутся i, j, удовлетворяющие условию . Поэтому, с вероятностью, большей 0,5, мы найдем искомый делитель N, просмотрев не более , членов последовательности.
При практическом применении метода Полларда для сокращения объема вычисления рассматривают не все разности |xi - xj|, а только те, для которых номер j является степенью 2, т.е. принимает значения 2, 4, 8,...
Рассмотрим пример. Пусть N=1387. Зададим рекуррентную последовательность чисел {xi} следующим соотношением: =2, . Значения строки xj определим равными ближайшему слева xi, у которого i является степенью 2 (такие xi выделены красным). В следующей строке поместим их разность, а в последней строке – НОД(N; |xi - xj|), вычисленный с помощью алгоритма Евклида.
N | |||||||||||
xi | |||||||||||
yi | |||||||||||
|xi-yi| | |||||||||||
НОД |
Из таблицы видно, что уже на 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
КОНТРОЛЬНЫЕ ВОПРОСЫ
Лабораторная работа №2
|
ТЕОРЕТИЧЕСКИЙ МАТЕРИАЛ.
Последовательности, генерируемые с помощью сдвиговых регистров, широко используются как в теории кодирования, так и в криптографии. Теория таких регистров разработана достаточно давно еще в доэлектронное время, в период военной криптографии.
Сдвиговый регистр с обратной связью состоит из двух частей: сдвигового регистра и функции обратной связи. Сдвиговый регистр представляет собой последовательность битов фиксированной длины. Число битов называется длиной сдвигового регистра. Функция обратной связи является булевой функцией из множества L-мерных векторов с координатами из множества {0, 1} в множество {0, 1}, L – длина сдвигового регистра. В начальный момент работы сдвиговый регистр заполняется некоторым начальным значением. На каждом последующем шаге вычисляется значение , где xi – значение ячейки с номером si, содержимое регистра сдвигается вправо, а в освободившееся место помещается значение y.
Выходом регистра обычно бывает младший разряд s0. Иногда в качестве выхода берут все слово, помещающееся в регистре. Последовательность таких слов является периодичной. Периодом сдвигового регистра называется длины последовательности регистровых слов до начала ее повторения. Очевидно, что количество различных слов для регистра длины L равно , поэтому период любой последовательности регистровых слов не может превышать .
Простейшим видом сдвигового регистра с обратной связью является линейный сдвиговый регистр с обратной связью (linear feedback shift register LFSR). Функция обратной связи является в этом случае просто суммой по модулю 2 нескольких фиксированных разрядов .
Пример. Рассмотрим линейный сдвиговый регистр R длины L=4 и функцией обратной связи (отвод от первого и четвертого вывода).
Пусть исходное значение регистра равно <1,1,1,1>, тогда этот регистр будет порождать следующую последовательность
В этом примере период последовательности значений регистра равен . Это максимально возможное значение, т.к. слово, состоящее из одних нулей не может быть никогда достигнуто из ненулевой конфигурации (докажите это!).
Последовательность максимальной длины называется M-последовательностью. Не всякий регистр LFSR может обладать такой последовательностью. Проблема определения по заданному регистру LFSR, будет ли он обладать M-последовательностью, является нетривиальной. Для ее решения сопоставим произвольному регистру LFSR длины L следующий многочлен (*), где коэффициент принимает значение 1 или 0 в зависимости от того, присутствует ли соответствующее слагаемое в функции обратной связи. Например, регистру LFSR в рассмотренном выше примере соответствует многочлен .
Теорема. Произвольный LFSR регистр обладает M-последовательностью тогда и только тогда, когда соответствующий многочлен является неприводимым (неразложимым) над полем F2={0, 1}.
Пример приводимого многочлена можно взять из всем известной формулы сокращенного умножения . Поскольку, все значения берутся по модулю 2, то в вычисляя значения многочленов надо помнить, что а .
В общем случае, нет простого способа генерировать многочлены заданной степени по модулю 2, однако можно легко проверить, является ли заданный многочлен приводимым или нет над заданным конечным полем. Для этого используется алгоритм Берлекампа (Berlekamp) (см. Лидл, Нидеррайтер[7], т.1, гл.3.). В следующем разделе мы рассмотрим упрощенную ыерсию алгоритма Берленкамфа.
Лабораторная работа №3.
Название работы. Разработка клиент-серверного приложения в Delphi.
Цель работы: Изучить современные средства создания клиент-серверных приложений в системе Delphi. Научиться практической работе по организации и решению задач информационной безопасности в сети.
Задание на лабораторную работу. 1. Разработать, используя среду программирования Delphi (или любую среду Visual C++) клиент-серверное приложение для двустороннего обмена информацией между компьютерами в сети. Выполнить пробную передачу и прием данных.
2. Выработать секретный ключ по протоколу Диффи-Хелмана.
3. Провести аутентификацию пользователей по «слово-вызов».
Требования к выполнению задания. Клиентское приложение должно содержать форму, на которой содержатся поля для ввода IP-адреса компьютера – сервера, поле для ввода информации, передаваемое на сервер и поле для получения информации, возвращаемой с сервера.
Приложение должен содержать кнопки Старт/Стоп для запуска и остановки сервера, поле для вывода информации, передаваемой с сервера, и поля для вывода информации, передаваемой клиентами.
Приложение также должно содержать генератор ключей для протокола Диффи-Хелмана и вычисления секретного ключа.
При сдаче необходимо установить клиентскую часть на один компьютер, а серверную часть приложения на другой компьютер, и продемонстрировать диалог обмена данными.
Программно-аппаратные средства. Компьютерная лаборатория, состоящая из компьютеров, соединенных в локальную сеть, пакет Delphi 7 (Delphi 2005).
Задание на лабораторную работу
Теоретический материал.
Рассмотрим процедуры создания приложений для обмена сообщениями в сети по протоколам TCP/IP.
Приложение TCT-клиент в Delphi.
Procedure TForm1.Button1click(Sender: TObject);
Begin
IdTCPClient1.Connect;
IdTCPClient1.Writeln(Edit1.Text);
Edit2.Text:= IdTCPClient1.ReadLn;
IdTCPClient1.Disconnect;
End;
КОНТРОЛЬНЫЕ ВОПРОСЫ
ЛАБОРАТОРНАЯ РАБОТА № 4
Название работы. Решение в локальной сети задачи аутентификация пользователей.
Цель. Ознакомиться с основными алгоритмами аутентификации пользователей в сети, электронно- цифровой подписи, сертификации. Разработать комплекс программ в Delphi для пересылки и проверки идентификаторов пользователей, решения задачи распределения секретного ключа, идентификации посланий на основе электронно- цифровой подписи и сертификатов.
Программно-аппаратные средства. Компьютерная лаборатория, состоящая из компьютеров, соединенных в локальную сеть, пакет Delphi 7 (Delphi 2005).
Задание на лабораторную работу
Теоретический материал.
Одной из наиболее важных служб безопасности является аутентификация. Аутентификация – это подтверждение пользователем информационных услуг своего идентификатора. Аутентификация выполняется с помощью разных методов, из которых простейшим является предъявления пользователем серверу секретного слова – пароля, известного только пользователю и серверу.
Хеш-функции
Хеш-функции играют в информационной защите важную роль, создавая для электронного документа его «моментальный снимок» и тем самым защищая документ от дальнейшей модификации или подмены.
В широком смысле функцией хеширования называется функция H, удовлетворяющая следующим основным свойствам:
Термин вычислительно невозможно означает здесь, что в настоящее время решение этой задачи либо требует слишком большого интервала времени (например, более сотни лет), либо использования слишком больших вычислительных ресурсов, чтобы решение задачи имело смысл.
Первые три свойства требуют, чтобы хеш-функция создавала хеш-код для любого сообщения. Четвертое свойство определяет требование односторонности хеш-функции: легко создать хеш-код по данному сообщению, но невозможно восстановить сообщение по данному хеш-коду.
Схемы аутентификации.
Поскольку при передаче данных по сети никто не застрахован от возможности чтения данных на промежуточных узлах, то передача пароля по сети в открытом виде является опасным. Поэтому для надежной аутентификации и сохранения пароля от взлома используются разные схемы сетевой аутентификации. Здесь мы рассмотрим следующие три схемы:
ВАРИАНТЫ ЗАДАНИЙ
Четные варианты. Разработать приложение, осуществляющее аутентификацию пользователей на основе слова-вызова.
Нечетные варианты. Разработать приложение, осущеставляющее аутентификацию пользователей на основе электронно-цифровой подписи, генерируемой с помощью метода RSA.
КОНТРОЛЬНЫЕ ВОПРОСЫ
Приложение 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:= d + 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:= d + 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:= d + 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:= d + 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:= d + 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:= d + 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:= d + 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:= d + 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:= d + lrot32(c + (d xor a xor b) + data[11] + $6d9d6122,16);
b:= c + lrot32(b + (c xor d 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:= d + lrot32(c + (d xor a xor b) + data[ 7] + $f6bb4b60,16);
b:= c + lrot32(b + (c xor d 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:= d + lrot32(c + (d xor a xor b) + data[ 3] + $d4ef3085,16);
b:= c + lrot32(b + (c xor d 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:= d + lrot32(c + (d xor a xor b) + data[15] + $1fa27cf8,16);
b:= c + lrot32(b + (c xor d 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:= d + 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:= d + 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:= d + 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:= d + 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;
ЛИТЕРАТУРА:
http://www.morepc.ru/security/crypt/os200207010.html?print
14. В.Столлингс. Основы защиты сетей. Приложения и стандарты, М.: Вильямс, 2002, 429 с.
ЛАБОРАТОРНАЯ РАБОТА № 1
Название работы. Реализация в среде Excel алгоритма RSA шифрования с открытым ключом.
Цель. Ознакомиться с аппаратом программирования на языке Visual Basic for Applications, примерами программ для решения простых задач. Разработать и написать в среде Excel программу выработки пар «открытый/закрытый» ключ по методу RSA. Выполнить шифрование конфиденциальных данных.
Программно-аппаратные средства. Компьютерная лаборатория, пакет Microsoft Office.
Задание на лабораторную работу
Указания к выполнению лабораторной работе.
|
|
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!