«Взаимодействие с Cryptoapi. Криптопровайдеры» icon

«Взаимодействие с Cryptoapi. Криптопровайдеры»



Название«Взаимодействие с Cryptoapi. Криптопровайдеры»
Дата конвертации11.09.2012
Размер53.51 Kb.
ТипЛабораторная работа

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ РАДИОТЕХНИКИ, ЭЛЕКТРОНИКИ И АВТОМАТИКИ

(ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)


Кафедра «Математическое обеспечение вычислительных систем»


Лабораторная работа №4

По дисциплине: «ПО информационной безопасности сетей»


Тема: «Взаимодействие с CryptoAPI. Криптопровайдеры»

Вариант 1


Группа: ВСМУ 12-06

Студентка: Буланова Ю.В.

Руководитель: Федотова Д.Э.


Москва 2010

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

Задания:

Общее задание:

«Знакомство с учебной программой».

  1. Открыть в окне редактора текст учебной программы (прилагается) или взять себе копию листинга.

  2. Опираясь на комментарии в тексте программы, просмотреть его, представив себе пока еще общую картину алгоритма, разобраться в «крупных блоках» программы.

  3. Убедиться в наличии на рабочей машине файлов динамических библиотек advapi32.dll и crypt32.dll, в которых хранятся функции, связанные с криптооперациями.

  4. Выполнить программу (предварительно откомпилировав) и построчно проанализировать результат выполнения, сопоставляя его с текстом программы и отслеживая последовательное выполнение функций из библиотек.

Индивидуальные задания:

  1. Подробно и внимательно изучить теоретическое введение для данной лабораторной работы.

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

  3. Детально изучить данный фрагмент, применяемые в нем функции библиотеки и последовательность их выполнения (опираясь на комментарии).

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

  5. Составить алгоритм, соответствующий данному фрагменту программы.

  6. Составить краткий отчет по выполнению лабораторной работы и вместе с отображенными на бумаге результатами выполнения п. 5 и п. 6 и ответами на контрольные вопросы и предоставить и защитить преподавателю.

Вариант:

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

Создание цифровой подписи.

Алгоритм:

CertOpenStore - открывает хранилище сертификатов

CertFindCertificateInStore – находит нужный сертификат

CryptAcquireCertificatePrivateKey –получает дескриптор CSP провайдера соответствующего сертификату

CryptCreateHash – создает хэш

CryptSignHash – шифрует созданный хэш

// Создание цифровой подписи

// Необходимо подключить библиотеку crypt32.
lib

// Компиляция с использованием Visual Studio 7.0


#include

#include // exit(1)


#include

#include


//#include


#define MY_TYPE (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING)


//#define _WIN32_WINNT=0x0400 // или _CRYPT32_


// Наименование персонального хранилища

#define CERT_STORE_NAME L"MY"


// Наименование сертификата установленного в это хранилище

#define SIGNER_NAME L"EVGENY"


void print_signature(DWORD cbSigned, BYTE* pbSigned);

void HandleError(char *s);


int main(int argc, char* argv[])

{

//--------------------------------------------------------------------

// Сообщение, которое мы подписываем


BYTE* pbMessage = (BYTE*)"ВАО Интурист - Туроператор N1";

DWORD cbMessage = (DWORD)strlen((char*) pbMessage)+1;


// Открываем хранилище сертификатов


HCERTSTORE hStoreHandle;


if ( !( hStoreHandle = CertOpenStore(

CERT_STORE_PROV_SYSTEM, //Тип поставщика памяти

0, //Тип кодирования не нужен

NULL,

CERT_SYSTEM_STORE_CURRENT_USER,

//CERT_SYSTEM_STORE_LOCAL_MACHINE,

CERT_STORE_NAME)))

{

HandleError("Нельзя открыть хранилище MY.");

}


// Получаем указатель на наш сертификат


PCCERT_CONTEXT pSignerCert;


if(pSignerCert = CertFindCertificateInStore(

hStoreHandle,

MY_TYPE,

0,

CERT_FIND_SUBJECT_STR,

SIGNER_NAME,

NULL))

{

printf("Сертификат найден.\n");

}

else

{

HandleError( "Сертификат не найден.");

}


// через функцию CryptAcquireCertificatePrivateKey получаем доступ к CSP


HCRYPTPROV hProv;

DWORD dwKeySpec;

BOOL fCallerFreeProv;


if(CryptAcquireCertificatePrivateKey(

pSignerCert,

CRYPT_ACQUIRE_COMPARE_KEY_FLAG,

NULL,

&hProv,

&dwKeySpec,

&fCallerFreeProv

))

{

printf("CryptAcquireCertificatePrivateKey выполнилась успешно!\n");

}

else

{

HandleError(" Ошибка CryptAcquireCertificatePrivateKey.\n");

}


// Создаем пустой hash объект

HCRYPTHASH hHash;


if(CryptCreateHash(

hProv,

CALG_MD5,

0,

0,

&hHash))

{

printf("Hash объект создан.\n");

}

else

{

HandleError("Ошибка CryptCreateHash.");

}


// Вычисляем hash для нашего сообщения

if(CryptHashData(

hHash,

pbMessage,

cbMessage,

0))

{

printf("Hash объект вычислен.\n");

}

else

{

HandleError("Ошибка CryptHashData.");

}


// Переменные для указателя и длины подписи

BYTE *pbSignature;

DWORD dwSigLen;


if(CryptSignHash(

hHash,

dwKeySpec,

NULL,

0,

NULL,

&dwSigLen))

{

printf("Длина подписи %d .\n",dwSigLen);

}

else

{

HandleError("Ошибка CryptSignHash.");

}


if(pbSignature = new BYTE[dwSigLen])

{

printf("Память под подпись выделена.\n");

}

else

{

HandleError("Ошибка памяти.");

}


if(CryptSignHash(

hHash,

dwKeySpec,

NULL,

0,

pbSignature,

&dwSigLen))

{

printf("Подпись:\n");

print_signature(dwSigLen, pbSignature);

}

else

{

HandleError("Ошибка CryptSignHash.");

}


if(pbSignature)

delete pbSignature;


if(hHash)

CryptDestroyHash(hHash);


if(hProv)

CryptReleaseContext(hProv, 0);


if(pSignerCert)

CertFreeCertificateContext(pSignerCert);


if(CertCloseStore(hStoreHandle, CERT_CLOSE_STORE_CHECK_FLAG))

{

printf("\nХранилище закрыто. \n");

}

else

{

printf("Ошибка!");

}

Результат:

Сертификат найден.

CryptAcquireCertificatePrivateKey выполнилась успешно!

Hash объект создан.

Hash объект вычислен.

Длина подписи 128 .

Память под подпись выделена.

Подпись:

667387adc8449acabc3378df8225136f2e1cfca612d202e58476bde34b6251cd2ca3c9be22fbce27e504d69920266c8c4611f2d82384b7115894c1128b239e059a5d83af8b91ec82944fb4bf75d4d5a071afdd426b3670387f128d36250fb0ba493ca49747133f62d982e5c5b9d08b5e9e5c70db3d532950350803a8e937df71

Хранилище закрыто.

Функции:

CertOpenStore - открывает хранилище сертификатов

CertFindCertificateInStore – находит нужный сертификат

Открытие хранилища сертификатов:

Начало

Если CertOpenStore= NULL

Сообщение об ошибке

Иначе

получаем указатель на сертификат

Конец

Получаем указатель на сертификат:

Начало

Если CertFindCertificateInStore<> NULL

Сообщение «Сертификат найден»

Иначе

Сообщение «Сертификат не найден»

Конец




Похожие:

«Взаимодействие с Cryptoapi. Криптопровайдеры» iconЛабораторная работа «Взаимодействие с Cryptoapi. Криптопровайдеры»
Цель работы: Знакомство с Cryptoapi и криптопровайдерами Изучение базовых функций
«Взаимодействие с Cryptoapi. Криптопровайдеры» iconЛабораторная работа №5 Программирование под Cryptoapi
При обмене электронными документами по сети связи существенно снижаются затраты на обработку
«Взаимодействие с Cryptoapi. Криптопровайдеры» iconЕвразийство как социокультурный тип*
Конституирующее единый социокультурный тип взаимодействие субъектов рассматривается в качестве генетической единицы, которая развертывается,...
«Взаимодействие с Cryptoapi. Криптопровайдеры» iconИзучение гравитационного поля
Гравитационное поле (поле тяготения) осуществляет универсаль- ное гравитационное взаимодействие всех видов материи. Наряду с элект-...
«Взаимодействие с Cryptoapi. Криптопровайдеры» iconПрограмма методической конференции учителей моу сош №11 по теме: «Взаимодействие образовательных структур в рамках Школы полного дня» ( с 2008-2009 учебного года по 2010-2011учебный год)
Сетевое взаимодействие учреждений общего и дополнительного образования (упк, центры дополнительного образования)
«Взаимодействие с Cryptoapi. Криптопровайдеры» iconОпыт ученика Максимова Леонида Средне Кушкетская средняя школа Взаимодействие проводников с током
Цель опыта: обнаружить на опыте взаимодействие двух проводников по которым течёт ток. Установлено, что если в двух проводниках течёт...
«Взаимодействие с Cryptoapi. Криптопровайдеры» iconВ. А. Упоров
Южноосетинский конфликт наглядно показывает взаимодействие этих факторов на Кавказе
«Взаимодействие с Cryptoapi. Криптопровайдеры» iconДокументы
1. /11 марта 2004/11 марта 2004/Атомная магнитная структура/Атомная магнитная структура.doc
«Взаимодействие с Cryptoapi. Криптопровайдеры» iconВ. А. и Серавин А. И. 1 Серия практикум
Маркетинговый коммандос: взаимодействие сотрудников отдела маркетинга (семинар-тренинг, 2 дня) 3
«Взаимодействие с Cryptoapi. Криптопровайдеры» iconДокументы
1. /Делоне Н.Б. Взаимодействие лазерного излучения с веществом. 1989.djvu
Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©podelise.ru 2000-2014
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы

Разработка сайта — Веб студия Адаманов