Взаимодействие с CryptoAPI
"Взаимодействие sCryptoAPI. крипто "
Цел: Въведение в CryptoAPI и криптата. Проучването на основни функции.
За изпълнение на удостоверяване и да се гарантира поверителността на информацията в незащитени мрежи (например интернет), той е длъжен да включва криптиране на данните и декриптиране означава или, с други думи, криптография, като част от системата за защита на софтуер.
Криптография и CryptoAPI.
Криптография - набор от методи за кодиране и съобщения за тяхната защита по време на съхранение и предаване. Този метод осигурява защита на незащитени съединения, дори среда (например предаване в Интернет). Криптография за криптиране на файлове също така позволяват на поверителна информация на компютъра си, за да атакуващият може да се запознае със съдържанието.
За да се насладите на всички софтуерни приложения
все по-сложни и разширяване на възможностите за
криптографски техники, от които се нуждаят интерфейс на приложение
програмиране, предоставяне на достъп до закрила и
криптиране.
Microsoft Криптографски API (CryptoAPI) - 32-битов интерфейс за приложно програмиране за Microsoft Windows, прилага набор от функции за защита на данните. Подкрепа CryptoAPI - компонент на Microsoft Windows NT сървър, и, следователно, на разположение на Internet Information Server фондове. Ако ние говорим за развитието на Windows-базирани приложения за съвместни групи потребители, интернет приложения или десктоп приложения, които изискват защита, това API е идеален за тази цел.
CryptoAPI се използва в различни области, включително:
средства за конференции в реално време;
средства за предаване на данни по глобалните мрежи:
Utilities криптиране и декриптиране на файлове;
приложение за електронна поща;
приложения за сътрудничество.
CryptoAPI е изградена на модулен мода. Всички криптографски операции се извършват елементи за поддръжка - т.нар
доставчици на криптографски услуги (доставчици на услуги, криптографската ДУУ). CSP от всяка проба на определен криптографски алгоритъм се използва. CSP не зависи от помощта на нейните приложения; така че приложението може да работи с много различни CSP. Това ви дава възможност, без да се променя приложението, изберете доставчик на криптографски услуги, който ще осигури необходимото ниво на защита.
така наречената криптиране ключ се използва за криптиране на съобщения, и, съответно, да се обърне на процедурата - ключ за декриптиране. Изключително важно е стриктно да се ограничи достъпът до късно, тъй като всеки, в чиито ръце ще получите ключ може да чете всички съобщения, които са били "затворен" съответния бутон криптиране.
Асиметрично криптиране се базира на използването на две различни клавиши: открит (публичен ключ) и частен (личен ключ). Последно съхраняват от собственика на двойката ключове, както и първият, разпределени към всички, които се нуждаят от нея (обикновено с цифров сертификат). Фигурата по-долу показва, че един от ключовите фактори, използвани за криптиране на съобщението, а вторият - за дешифриране

Цифровите подписи и цифровите пликове.
Цифровите подписи (цифрови подписи) и цифрови пликове (цифрови пликове) са създадени с помощта на две подобни процеси, но

първият включва използването на частния ключ на изпращача, а вторият - публичен ключ на получателя.
Основната цел на криптографски хешове - данни за контрол за удостоверяване, като ги изчисляване от функция Н, което дава резултат фиксирана (и обикновено по-малка дължина) (.). (.) Функция часа трябва да отговаря на следните изисквания:
За всеки m съобщение, з = H (т) могат лесно да бъдат оценени.
Проблемът за намиране на този ф (различен от т), така че Н (ф) = Н, трябва да бъде трудно, ако неизвестен т.
Проблемът за намиране и така, че з (ф) = H (т) е трудно с известна m.
Най-популярни хеш функция генериране на хеш от 128 бита или повече. Примери за най-често срещаните хеш функции са MD5 и SHA. Hash стойности често се използват в системи за електронно цифров подпис, за да генерира съобщение дайджест, който след това ще бъде подписан и един или друг начин алгоритъм. Също така, функцията хашиш, използвани в истинността на системи за проверка на парола - Отворете паролата на потребителя, не трябва да се съхраняват в системата, вместо да го има съхранена хашиш, която след това се сравнява с хеша на паролата, въведена от потребителя при вход.
Методи като цифрови подписи и пликове за писма, предполагат, че автентичността на публичен ключ собственик, който се използва за шифроване или дешифриране на съобщение, без съмнение.
Се гарантира автентичността на публичния ключ собственици са цифрови сертификати Microsoft сертификат на сървър - надеждно средство за обмен на отворени ключове по несигурна мрежи.
А цифров сертификат (цифров сертификат) - набор от данни, да се идентифицира напълно обект или субект. Сертифициращ орган (Certificate Authority, Калифорния) той дава само след като е установено, че обектът или субектът е точно това, което тя твърди. Съставът на сертификата включва откриването на криптографски ключ възлага на притежателя на сертификата. Когато подателят на съобщението подписва това означава, че вашият личен ключ, получателят на съобщение може да използва публичен ключ на изпращача (получен от сертификата, който бе изпратен с посланието, или е вече присъства в получателя на справочна услуга), за да се провери автентичността на изпращача.
РЛО.
Сертификати, както и най-използваните в различни области на средства за идентификация може да бъде с ограничена продължителност. Но това не е единствената причина, че "сертифициращия орган може да оттегли сертификат Всеки сертификат орган поддържа списък с прекратени удостоверения (списъка с анулирани сертификати, CRL) ;. го проучим, клиентите могат да проверят легитимността на всеки сертификат.

разполага криптографски код подсистема, съдържаща се в няколко динамичен звено библиотека Windows (advapi32.dll, crypt32.dll). За достъп до тази функция от приложната програма в Object Pascal трябва да го декларира като външен. Заглавието на функция в интерфейса на модула ще изглежда така:
dwFlags: DWORD): BOOL; stdcall;
и се изпълнява, а не на функциите на тялото трябва да въведете ученик директивата посочва библиотека, която съдържа функция, а вероятно и името си в библиотеката (ако е различен от името на функцията в генерирания модул), например:
функционира CryptAcquireContext; външни "advapi32.dll" име "CryptAcquireContextA";
По този начин, с функциите описание CryptoAPI могат да бъдат събрани и горните функции в отделен модул, който ще си взаимодействат с програмата за прилагане на криптографски подсистемата. Разбира се, тази работа се извършва от програмистите на Microsoft, както и съответната заглавния файл (wincrypt.h) е включен в доставката на MS Visual C ++. За щастие, е имало и Делфи-Version (wcrypt2.pas). Чрез свързването на модула на проекта, можете да използвате не само CryptoAPI функции, но също така помага на паметта постоянен режим, идентификаторите на алгоритми и други параметри, необходими в практиката:
CryptoAPI функции позволяват на приложенията достъп до криптографски възможности на Windows. Въпреки това, те са само "предаване връзка" във веригата на комплекс за обработка на информацията. Основната част от работата се извършва от програмист скрити от функциите на очите в специализиран софтуер (или фърмуер) модули - доставчици (доставчици) доставчик на криптографски услуга (CSP - Криптографски доставчиците на услуги), или Crypto (Фигура 1.).
софтуерната част на CSP е най-DLL файл е подписан от Microsoft; Windows периодично проверява цифровия подпис, което премахва възможността за смяна CSP.
Crypto различават един от друг:
- състав на функции (например, някои крипто не изпълнява криптиране
данни ограничават до създаване и проверка на цифрови подписи);
- хардуерни изисквания (специализирана крипто може да изискват
- алгоритми за прилагане на основни стъпки (създаване на ключове, хеширане и др ..).
В състав, функции и да гарантира техните криптографски алгоритми са разделени на видове. Например, всеки тип CSP PROV_RSA_FULL поддържа както криптиране и цифрови подписи се използват за обмен на ключове и създаване на RSA алгоритъм за криптиране на подпис - алгоритми RC2 и RC4, както и за хеширане - най-MD5 и SHA.
В зависимост от версията на състава на установената крипто операционната система може да варира значително. Въпреки това, на всеки компютър с Windows, можете да намерите на Доставчика Microsoft Base криптографската, позовавайки се на вече познатия тип PROV_RSA_FULL. Тя е с този доставчик по подразбиране ще се включат всички тези програми.
Първата стъпка, най-малкото от любопитство, да разберете какви са Crypto инсталиран. За това ние трябва четири CryptoAPI функция (изходни параметри са с удебелен шрифт, а на входа - в курсив):
- CryptEnuniProviders (. I, резерват, знамена, въведете името на dlina_imeni) - Връща името и вида на аз-ти ред на CSP в системата (като се започне от нулата);
- CryptAcquireContext (доставчик на контейнери, име, тип, знамена) - свързва към криптата с определения вид и име, и се връща манипулатор (контекст). Pripodklyuchenii ние предаваме функция CRYPT_VERIFYCONTEXT флаг, който се използва за получаване на контекст, без връзка с контейнер на ключове;
- CryptGetProvParam (razmer_dannyh доставчик параметър данни, знамена) - връща стойността на споменатия доставчик параметър, като версия (втори параметър като параметър на функцията - PP_VERSION). тип приложения (софтуер, хардуер, смесена - PP_IMPTYPE). Поддържаните алгоритми (PP_ENUMALGS). Поддържаните алгоритми, използващи тази функция може да се получи по следния начин: когато извикване на функция връща информация за алгоритъм: първото обаждане до функцията премине стойност CRYPT_FIRST флаг. и последващо флаг трябва да бъде равна на 0: - CryptReleaseContext (ISP, знамена) - безплатен ЕВРОВОК CSP.
Всяка една от тези функции, както и повечето от другите функции на CryptoAPI, връща булева стойност истина, ако е успешно, и невярно - ако има грешки. Кодът на грешка може да бъде получена чрез функция GetLastError. Възможните стойности са кодовете за грешка, вижте документацията споменато по-горе. Например, когато се обадите на функцията, за да получите CryptGetProvParam версия доставчик трябва да обмисли възможността за грешки, както следва:
Ако не CryptGetProvParam (hProv, PP_VERSION, (@vers), @DataLen, 0) След това започват
случай int64 (GetLastError) на
ERROR_INVALID_HANDLE: ERR: = 'ERROR_INVALID_HANDLE; ERROR_INVALID_PARAMETER: ERR: = 'ERROR_INVALID_PARAMETER; ERROR_MORE_DATA ERR: = 'ERROR_MORE_DATA; ERROR_NO_MORE_ITEMS: ERR: = 'ERROR_NO_MORE_ITEMS', NTE_BAD_FLAGS: ERR: = 'NTE_BAD_FLAGS; NTE_BAD_TYPE: ERR: = 'NTE_BAD_TYPE; NTE_BAD_UID: ERR: = 'NTE_BAD_UID; останало заблуждават: = "Неизвестна грешка"; приключи;
MessageDlg (Грешка на крипта GetProvParam; "+ ERR, mtError [mbOK], 0.); излезете край;
Текстът на процедурата, водеща в Мемо поле FileMemo информация под формата на определен в системата за крипта е показано по-долу. Предполага се, че процедурата се нарича, когато изберете съответния елемент в основната форма на менюто. За краткост в програмата пропусне фрагменти, извършване на обработка на грешки.
Въведете algInfo = рекорд
szName: масив [0. 100] на знак;
функционира ProvTypeToStr (provType: DWORD): низ;
При provType на
PROV_RSA_FULL: ProvTypeToStr: = 'RSA пълен доставчик ";
PROV_RSA_SIG: ProvTypeToStr: = 'RSA подпис доставчик ";
PROV_DSS: ProvTypeToStr: = "доставчик DSS; PROV_DSS_DH: ProvTypeToStr: "DSS и Diffie-Hellman доставчик '=; PROV_FORTEZZA: ProvTypeToStr: = 'Fortezza доставчик "; PROV_MS_EXCHANGE: ProvTypeToStr: = 'MS Exchange доставчик "; PROV_RSA_SCHANNEL: ProvTypeToStr: = "доставчик RSA сигурен канал", PROV_SSL: ProvTypeToStr: = "SSL доставчик"; останало ProvTypeToStr: = "Неизвестна доставчик"; приключи; приключи;
CRYPT_MPL_HARDWARE: ImpTypeToStr: == "хардуер", CRYPT_IMPL_SOFTWARE: ImpTypeToStr: "Софтуер" =; CRYPT_IMPL_MIXED: ImpTypeToStr: = "смесени"; CRYPT_IMPL_UNKNOWN: ImpTypeToStr: = "неизвестно"; останало ImpTypeToStr: = "невалидна стойност", край; приключи;
dwProvType, cbName, DataLen: DWORD; provName: масив [0..200] на знак; Vers: масив [0..3] на байт; impType: DWORD; AI: alginfo; заблуждават: низ; започне I: = 0;
докато (CryptEnumProviders (аз, нула, 0, @dwProvType, нула, @cbName)) да започнат
ifCryptEnumProviders (I, нула, 0, @dwProvType, @provName, @cbName) след това започват
FileMemo.Lines.Add ( "крипто: '+ provName); FileMemo.Lines.Add ( "тип: '+ IntToStr (dwProvType) +' - '+ ProvTypeToStr (dwProvType));
Ако не CryptAcquireContext (@hProv, нула, provName, dwProvType, CRYPT_VERIFYCONTEXT) след това да започне
Ако не CryptGetProvParam (hProv, PP_VERSION, (@vers), @DataLen, 0) След това
FileMemo.Lines.Add ( "версия: ''. '+ CHR (Vers [1] +) + + CHR (Vers [0] +));
Ако не CryptGetProvParam (hProv, PP_IMPTYPE, @impType, @DataLen, 0)
FileMemo.Lines.Add ( "реализация Тип: '+ lmpTypeToStr (impType));
Ако не CryptGetProvParam (hProv, PP_ENUMALGS, @ai, @DataLen, CRYPT_FIRST)
FileMemo.Lines.Add (szName + # 9 + "дължина на ключа -" + IntToStr (dwBits) +
"Бита" + # 9 + 'ID: IntToStr (студен));
докато CryptGetProvParam (hProv, PP_ENUMALGS, @ai, @DataLen, 0) направи
с ай направи FiieMemo.Lines.Add (szName + # 9 + "дължина на ключа -"
+IntToStr (dwBits) + 'малко' # + 9 + 'ID:' + IntToStr (студен));

Фиг. 2 показва пример на протокола, издаден от горния код, извършена в рамките на Windows 98.
Всяка сесия с CryptoAPl започва с инициализация (контекст рецепция). Инициализация се извършва с помощта CryptAcquireContext функция. Като параметри, тази функция може да отнеме име на ключ контейнер, името на доставчика на криптиране, тип доставчик и знамена, които се посочват видът и клавишите за действие до контейнера и експлоатацията на CSP:
BOOL WinAPI CryptAcquireContext (HCRYPTPROV * phProv, LPCTSTR pszContainer, LPCTSTR pszProvider, DWORD dwProvType, DWORD dwFlags);
Crypto - предприятието (обикновено библиотека), който реализира определен набор от криптографски алгоритми и осигуряване на работата с тях. Има около седем стандартни доставчици са предварително зададени в системата. Имаме нужда от примери за две от тях - MicrosoftBaseCryptographicProvider (MS_DEF_PROV) и MicrosoftEnhancedCryptographicProvider (MS_ENHANCED_PROV).
Всеки криптиране се отнася до конкретен вид. Това позволява сортиране на всички инсталирани на доставчиците на машини, изберете тези, които поддържат желаните алгоритми. Две споменато са от типа на доставчик PROV_RSA_FULL
Crypto поддържа безопасни зони, наречени ключове контейнери. Контейнерите позволяват приложения, за да съхранява и използва по-късно, генерирани след като ключовете на ключа осигуряване на защита срещу един нападател.
Свързани документи:
за целите на обществени поръчки. доставка на стоки, строителство. услуги, да предоставят. управление на защитена мрежа; взаимодействие с други криптографски. вграден CSP. изпълнява интерфейс Microsoft CryptoAPI. построена.
CryptoAPI; особено с CryptoAPI функция; особено синтеза на собствения си крипто означава Microsoft CSPDK да може да: работа с функциите на CryptoAPI. възражение информация взаимодействие; - приложение. Целта на дисциплината Целта.