Введение в MS Crypto API Материалы для выполнения









![Инициализация Криптопровайдера BOOL CRYPTFUNC CryptAcquireContext ( HCRYPTPROV* hCryptProvider, //дескриптор провайдера [out] LPCTSTR pszContainer, // Инициализация Криптопровайдера BOOL CRYPTFUNC CryptAcquireContext ( HCRYPTPROV* hCryptProvider, //дескриптор провайдера [out] LPCTSTR pszContainer, //](https://present5.com/customparser/102417327_266159244 --- 20._ms_crypto_api.ppt/slide_9.jpg)
![Инициализация Криптопровайдера BOOL CRYPTFUNC CryptAcquireContext ( HCRYPTPROV* hCryptProvider, //дескриптор провайдера [out] LPCTSTR pszContainer, // Инициализация Криптопровайдера BOOL CRYPTFUNC CryptAcquireContext ( HCRYPTPROV* hCryptProvider, //дескриптор провайдера [out] LPCTSTR pszContainer, //](https://present5.com/customparser/102417327_266159244 --- 20._ms_crypto_api.ppt/slide_10.jpg)




![Открытие хранилища сертификатов HCERTSTORE WINAPI CertOpenStore ( LPCSTR lpszStoreProvider, //[in] Тип хранилища DWORD dwMsgAndCertEncodingType, Открытие хранилища сертификатов HCERTSTORE WINAPI CertOpenStore ( LPCSTR lpszStoreProvider, //[in] Тип хранилища DWORD dwMsgAndCertEncodingType,](https://present5.com/customparser/102417327_266159244 --- 20._ms_crypto_api.ppt/slide_15.jpg)











20._ms_crypto_api.ppt
- Количество слайдов: 25
Введение в MS Crypto API Материалы для выполнения лабораторных работ 1 © Сергеев Антон Валерьевич Кафедра Безопасности Информационных Систем, 2009 - 2011 Санкт-Петербургского государственного университета аэрокосмического приборостроения
Функции криптопровайдера Low-level message functions Simplified message functions 2
Функции криптопровайдера Low-level message functions Simplified message functions 3
MS Crypto API Advapi32.dll Crypt32.dll 4
Типы криптопровайдеров Тип криптопровайдера определяет группу КСП с одинаковыми форматами данных и протоколами. Формат данных подразумевает механизмы выравнивания, длины ключей, режим работы по-умолчанию
Типы криптопровайдеров 6
MS Windows: криптопровайдеры и алгоритмы 7
Пример использования крипто примитивов: шифрование 8
Инициализация Криптопровайдера BOOL CRYPTFUNC CryptAcquireContext ( HCRYPTPROV* hCryptProvider, //дескриптор провайдера [out] LPCTSTR pszContainer, // имя контейнера ключей [in] LPCTSTR pszProvider, // имя провайдера [in] DWORD dwProvType, // тип провайдера [in] DWORD dwFlags // флаги [in] ) Пример 1: Стандартные типы криптопровайдеров: PROV_RSA_FULL PROV_RSA_AES PROV_RSA_SIG PROV_RSA_SCHANNEL PROV_DSS PROV_DSS_DH PROV_DH_SCHANNEL PROV_FORTEZZA PROV_MS_EXCHANGE PROV_SSL 9
Инициализация Криптопровайдера BOOL CRYPTFUNC CryptAcquireContext ( HCRYPTPROV* hCryptProvider, //дескриптор провайдера [out] LPCTSTR pszContainer, // имя контейнера ключей [in] LPCTSTR pszProvider, // имя провайдера DWORD [in] dwProvType, // тип провайдера DWORD [in] dwFlags // флаги [in] ) Пример 1: Создание ключевого контейнера LPCTSTR pszContainerName = TEXT("MySampleKeyContainer"); CryptAcquireContext( &hProv, pszContainerName , NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET); Пример 2: Цифровая подпись CryptAcquireContext( &hProv, (LPCTSTR ) pszContainerName , NULL, PROV_RSA_FULL, 0); Пример 3: Проверка цифровой подписи / Шифрование данных CryptAcquireContext( &hProv, pszContainerName , NULL, PROV_RSA_FULL, VERIFYCONTEXT); 10
Инициализация Криптопровайдера Пример 1: Стандартные типы криптопровайдеров: PROV_RSA_FULL PROV_RSA_AES PROV_RSA_SIG PROV_RSA_SCHANNEL PROV_DSS PROV_DSS_DH PROV_DH_SCHANNEL PROV_FORTEZZA PROV_MS_EXCHANGE PROV_SSL 11 MS Crypto API
Инициализация Криптопровайдера Пример 1: Стандартные типы криптопровайдеров: PROV_RSA_FULL PROV_RSA_AES PROV_RSA_SIG PROV_RSA_SCHANNEL PROV_DSS PROV_DSS_DH PROV_DH_SCHANNEL PROV_FORTEZZA PROV_MS_EXCHANGE PROV_SSL 12
Создание контекста сертификата PCCERT_CONTEXT WINAPI CertCreateCertificateContext ( DWORD dwCertEncodingType, // тип кодирования сертификата, т.н. кодировка const BYTE* pbCertEncoded, // массив с подгруженным сертификатом DWORD cbCertEncoded // длинна массива ); Пример 1: Отображение сертификата в структуру PCCERT_CONTEXT PCCERT_CONTEXT pRecipientCert = CertCreateCertificateContext (X509_ASN_ENCODING, (const byte*)pbCert, cbCertLen); 13
Дополнение и изменение контекста сертификата BOOL WINAPI CertSetCertificateContextProperty ( PCCERT_CONTEXT pCertContext, // указатель на структуру PCCERT_CONTEXT DWORD dwPropId, // задаваемое свойство DWORD dwFlags, // флаги const void* pvData // указатель на данные, задаваемые свойством dwPropId ); Пример 1: Дешифрование CERT_KEY_PROV_INFO kpi; ZeroMemory(&&kpi, sizeof(kpi)); kpi.pwszContainerName = szContainerName; kpi.pwszProvName = “Crypto-Pro GOST R34.10 -2001 Cryptographic Service Provider”; kpi.dwProvType = 75; kpi.dwFlags = 0; kpi.dwKeySpec = AT_KEYEXCHANGE; // AT_SIGNATURE – подпись, AT_KEYEXCHANGE – подпись/шифрование/экспорт CertSetCertificateContextProperty (pRecipintCert, CERT_KEY_PROV_INFO_PROP_ID, 0, &kpi); 14
Открытие хранилища сертификатов HCERTSTORE WINAPI CertOpenStore ( LPCSTR lpszStoreProvider, //[in] Тип хранилища DWORD dwMsgAndCertEncodingType, //[in] Тип кодировки, обычно NULL HCRYPTPROV_LEGACY hCryptProv, //[in] Дескриптор криптопровайдера DWORD dwFlags, //[in] Флаги const void *pvPara //[in] Дополнительная информация ); Пример 1: HCERTSTORE hMemStore = CertOpenStore (CERT_STORE_MEMORY, 0, hProv, 0, NULL); 15
Добавление сертификата в хранилище BOOL WINAPI CertAddCertificateContextToStore ( HCERTSTORE hCertStore, PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition, PCCERT_CONTEXT *ppStoreContext ); Пример 1: CertAddCertificateContextToStore( hMemStore, pRecipientCert, CERT_ADD_STORE_REPLACE_EXISTING, NULL); 16
MS Crypto API Работа с контейнерами ключей 17
Цифровой Контейнер Цифровой контейнер – один из основных криптографических объектов Часть базы данных ключей, которая содержит пару ключей для обмена ключами или формирования цифровой подписи Хранилище пар ключей область временной памяти участок реестра файл на диске смарт-карты 18
Цифровой Контейнер Контейнер существует только в контексте криптопровайдера Каждый криптопровайдер – собственный метод представления и хранения ключей в контейнере 19
Цифровой Контейнер Только открытый ключ пары может находиться вне контейнера Пары ключей и симметричные ключи могут находиться только в контейнере (сертификат – частный случай контейнера) 20
Типы контейнеров Контейнеры Пользовательские существуют в контексте работы текущего пользователя Системные Предназначены для обеспечения работы отдельных сервисов и системы в целом 21
Ключи Ключи Ключ шифрования и обмена Exchange key pair Предназначен для шифрования сессионных ключей, цифровой подписи, экспорта Ключ подписи Signature key pair Предназначен только для цифровой подписи 22
Шифрование данных и концепция цифрового конверта 23 симметричный алгоритм асимметричный алгоритм
Подпись и шифрование 24
Вопросы? 25