Схема аутентификации на основе сертификата. — КиберПедия 

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Схема аутентификации на основе сертификата.



Данная схема предполагает наличие третьей стороны, называемой УЦ – удостоверяющим центром или ЦС – центром сертификации, которая выдает удостоверения (сертификаты) всем участникам сетевого домена, входящего в зону действия данного ЦС. При регистрации нового пользователя или сервера в домене ЦС выдает новому участнику сертификат, состоящий из открытой части, содержащий такие данные как:

  1. Идентификатор владельца сертификата,
  2. Адрес владельца сертификата,
  3. Открытый ключ владельца сертификата,
  4. Категория владельца сертификата (например, пользователь с ограниченными полномочиями или администратор проекта).
  5. Наименование ЦС и его адрес,
  6. Алгоритмы, используемые для генерации ключей и формирования ЭЦП, и их версии,

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

Обе части выдаются соискателю в электронном виде в виде одного файла. Закрытая часть служит для того, чтобы нельзя было подделать сертификат.

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

Кроме того, открытая часть сертификата может выдана в виде бумажного документа, подтвержденного печатью ЦС.

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

Программирование хеш-функций в Delphi

СистемаDelphiобращается к встроенным средствам операционной системы Windows для программирования различных функций хеширования, методов шифрования с использованием классической и двухключевой криптографии. Большинство этих средств содержится в библиотеках advapi32.dll и crypt32.dll, которые должны быть подключены к проекту Delphi. Для этого в проект приложения надо добавить модуль Wcrypt2.pas, который можно скачать по адресу



/zip/headerCryptoAPI.rar. Как воспользоваться этим модулем в проекте Delphi можно прочитать в статье Ю.Спектора

/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:= 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);

varpbuf: ^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. А.В.Беляев. "Методы и средства защиты информации" (курс лекций). /internet/infsecure/index.shtml
  3. А. А. Болотов, С. Б. Гашков, А. Б. Фролов, А. А. Часовских, «Алгоритмические основы эллиптической криптографии». Учебное пособие. М.: Изд-во МЭИ. 2000 г., 100 с.
  4. А.Володин. «Кто заверит ЭЦП», журнал «Банковские системы», ноябрь 2000, /system/2000-11/04.html
  5. Т.Илонен. Введение в криптографию (Ylonen Tatu. Introduction to Cryptography), /psw/crypto/intro.html
  6. Ш.Т. Ишмухаметов. Технологии защиты информации в сети, Казань, 2008, 91 с. /files/e9zxcqos9
  7. Н.Коблиц. Теория чисел и криптография, М.:, ТВР, 2001 http://gabro.ge/biblio/0708/0081/file/Cryptography/Koblic_-_Teoriya_Chisel_i_Cryptografiya.rar
  8. О.Р. Лапонина. Криптографические основы безопасности, курс Интернет-университета, /department/security/networksec
  9. Р.Лидл, Г.Нидеррайтер. Конечные поля, в 2 т., пер.с англ., М.: Мир, 1998, 438 с.
  10. А.А. Молдовян, Н.А. Молдовян, Б.Я. Советов. Криптография. М., Лань, 2001
  11. А.А. Молдовян, Н.А. Молдовян, Введение в криптосистемы с открытым ключом, БХВ-Петербург, 2005, с. 286 /vvedenie_v_kriptosistemy_s_otkrytym_klyuchom
  12. А.Г.Ростовцев. Алгебраические основы криптографии, СПб, Мир и Семья, 2000.
  13. А.Г.Ростовцев, Е.Б.Маховенко. Теоретическая криптография. – СПб.: АНО, ПО “Профессионал”, 2005,/index.php?newsid=1265
  14. Г.Семенов. «Цифровая подпись. Эллиптические кривые».

http://www.morepc.ru/security/crypt/os200207010.html?print

14. В.Столлингс. Основы защиты сетей. Приложения и стандарты, М.: Вильямс, 2002, 429 с.

  1. Брюс Шнайер. Прикладная криптография, 2-е издание: протоколы, алгоритмы и исходные тексты на языке С, /psw/crypto/appl_rus/appl_cryp.htm
  2. Dr. Michael Ganley, Thales eSecurity Ltd. Метод эллиптических кривых, /rsp/eliptic_curve_cryptography.htm
  3. В.М.Фомичев. Дискретная математика и криптология, Диалог-МИФИ, 2003, 399 с.
  4. Сайт Криптографический ликбез - http://www.ssl.stu.neva.ru/psw/crypto.html
  5. Jovan Dj. Golic. Cryptanalysis of Alleged A5 Stream Cipher, Beograd, Yugoslavia, /a5-hack.htm
  6. Ю. Спектор. Использование инструментов криптографии в Delphi-приложе-ниях, /asp/viewitem.asp?catalogID=1271

 

 






Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...





© cyberpedia.su 2017 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав

0.014 с.