Interacțiunea cu CryptoAPI

„Interacțiunea sCryptoAPI. cripto "

Obiectiv: Introducere în CryptoAPI și cripta. Studiul funcțiilor de bază.

Pentru a pune în aplicare autentificare și pentru a asigura confidențialitatea informațiilor în rețelele neprotejate (de exemplu, Internetul), este necesar de a implica criptarea datelor și decriptare sau, cu alte cuvinte, criptografie ca parte a unui sistem de protecție a software-ului.

Criptografie și CryptoAPI.

Criptografia - un set de metode de criptare și mesaje pentru protecția lor în timpul depozitării și de transport. Această metodă oferă protecție compuși neprotejați chiar mediu (de exemplu, transmiterea prin Internet). Criptografie pentru a cripta fișiere permite, de asemenea, informații confidențiale de pe computer pentru un atacator ar putea citi conținutul.

Pentru a vă bucura de toate aplicațiile software
din ce în ce mai complexe și oportunități de expansiune
tehnici criptografice, au nevoie de o interfață de aplicație
programare, oferind acces la protecție și
criptare.

Microsoft criptografic API (CryptoAPI) - O aplicație de interfață de programare pe 32 de biți pentru Microsoft Windows, pune în aplicare un set de caracteristici de protecție a datelor. Suport CryptoAPI - o componentă a Microsoft Windows NT Server, și, în consecință, fondurile disponibile la Internet Information Server. Dacă vorbim despre dezvoltarea de aplicatii bazate pe Windows pentru grupuri de utilizatori de colaborare, aplicații de Internet sau aplicații desktop care necesită protecție, acest API este ideal pentru acest scop.

CryptoAPI este utilizat în diverse domenii, inclusiv:

înseamnă de conferințe în timp real;

mijloace de transmitere a datelor privind rețelele globale:

Utilități cripta și decripta fișiere;

cerere de e-mail;

aplicatii colaborative.

CryptoAPI este construit într-o manieră modulară. Toate operațiunile criptografice sunt efectuate lucrările de întreținere - așa-numitul

furnizorii de servicii criptografice (furnizori de servicii criptografice, DSN). CSP fiecărui nucleu al unui anumit algoritm criptografic este utilizat. CSP nu depinde de utilizarea aplicațiilor sale; astfel încât aplicația poate lucra cu mai multe CSP diferite. Acest lucru vă permite, fără a schimba aplicația, selectați furnizorul de servicii criptografice care va asigura nivelul necesar de protecție.

așa-numita cheie de criptare utilizată pentru criptarea mesajelor, și, respectiv, pentru a inversa procedura - o cheie de decriptare. Este extrem de important să se limiteze strict accesul la cele mai recente, ca oricine în a cărui mâini va primi cheia poate citi toate mesajele care au fost „închis“ cheia de criptare corespunzătoare.

criptare asimetrica se bazează pe utilizarea două chei diferite: (cheia publica) deschis și un (cheie privată) privată. Ultimul stocate de către proprietarul perechii de chei, iar primul distribuit tuturor celor care au nevoie de ea (de obicei, cu un certificat digital). Figura de mai jos arată că una dintre cheile folosite pentru a cripta mesajul, iar al doilea - pentru a decripta

Interacțiunea cu CryptoAPI

Semnăturile digitale și plicuri digitale.

semnături digitale (semnături digitale) și plicuri digitale (plicuri digitale) sunt create cu ajutorul a două procese similare, dar

Interacțiunea cu CryptoAPI

prima implică utilizarea cheii private a expeditorului, iar al doilea - cheia publică a destinatarului.

Scopul principal al criptografice - date hashes autentificare de control prin calcularea acestora dintr-o funcție H, care dă rezultatul fix (și lungime de obicei mai scurte) (.). (.) Funcția H trebuie să îndeplinească următoarele cerințe:

Pentru orice mesaj m, h = H (m) pot fi ușor evaluate.

Problema de a găsi acest u (diferit de m), astfel încât H (u) = h, trebuie să fie dificil, dacă necunoscut t.

Problema constatare și astfel încât h (u) = H (m) este dificil cu m cunoscută.

Cele mai multe funcții hash populare generează un hash de 128 biți sau mai mult. Exemple de funcții hash cele mai comune sunt MD5 și SHA. Valorile hash sunt adesea folosite în sistemele de semnătură electronică digitală pentru a genera un mesaj Digest, care va fi apoi semnat și într-un fel sau altul algoritm. De asemenea, funcția hash utilizată în autentificare pentru sistemele de verificare a parolei - Deschideți parola utilizatorului nu ar trebui să fie stocate în sistem, în schimb are un hash stocat, care este apoi comparat cu hash parola introdusă de către utilizator la conectare.

Metode, cum ar fi semnăturile digitale și plicuri, sugerează că autenticitatea proprietarului cheii publice, utilizate pentru a cripta sau decripta un mesaj, fără îndoială.

Garantează autenticitatea proprietarilor de chei publice sunt certificate Microsoft Digital Certificate Server - un instrument fiabil pentru schimbul de chei deschise prin rețele nesigure.

Un certificat digital (certificat digital) - un set de date, pentru a identifica pe deplin un obiect sau subiect. Autoritatea de Certificare (Autoritate de certificare, CA) dă numai după ce a constatat că obiectul sau subiectul este exact ceea ce se pretinde. Compoziția certificatului include deschiderea unei chei criptografice atribuit titularului certificatului. În cazul în care expeditorul mesajului semnează înseamnă cheia privată, destinatarul mesajului poate utiliza cheia publică a expeditorului (obținut din certificatul care a fost trimis cu mesajul, sau este deja prezentă în serviciul destinatarului director) pentru a verifica autenticitatea expeditorului.

CRLs.

Certificatele, precum și cele mai utilizate în diverse domenii de mijloace de identificare nu poate avea o durată limitată. Dar acest lucru nu este singurul motiv pentru care „organismul de certificare poate retrage un certificat Fiecare autoritate de certificare păstrează o listă de certificate revocate (Lista de revocare a certificatului, CRL) ;. Uită-te în ea, clienții pot verifica legitimitatea oricărui certificat.

Interacțiunea cu CryptoAPI

Caracteristici cod subsistem criptografică conținută în mai multe link-ul dinamic biblioteca Windows (advapi32.dll, crypt32.dll). Pentru a accesa această funcție din programul de aplicație în Object Pascal ar trebui să-l declare ca extern. Antetul funcție în interfața modulului va arata astfel:

dwFlags: DWORD): bool; stdcall;

și executat în locul funcțiilor corpului trebuie să introduceți directiva specificând biblioteca externă care conține funcția, și, eventual, numele său în bibliotecă (dacă este diferită de numele funcției în modulul generat), de exemplu:

CryptAcquireContext funcționa; externe 'advapi32.dll' numele 'CryptAcquireContextA';

Astfel, cu funcțiile CryptoAPI descriere pot fi colectate funcțiile antete într-un modul separat, care va interacționa cu programul aplicație subsistemului criptografic. Desigur, acest lucru a fost făcut de către programatorii Microsoft, iar fișierul antet corespunzător (wincrypt.h) a fost inclusă în livrarea de MS Visual C ++. Din fericire, a existat, de asemenea, un (wcrypt2.pas) Delphi-versiune. Prin conectarea modulului la proiect, puteți utiliza nu numai funcțiile CryptoAPI, dar, de asemenea, modul constant mnemonic, identificatorii algoritmi și alți parametri necesari în practică:

Funcții CryptoAPI permite aplicațiilor să acceseze capacitățile criptografice ale Windows. Cu toate acestea, ele sunt doar „link-ul de transmisie“ în lanțul de prelucrare a informațiilor complexe. Activitatea principală se face de către programator ascuns funcțiile ochi în software specializat (sau firmware) module - furnizori (furnizori) furnizor de servicii criptografice (CSP - Furnizorii de servicii criptografic) sau cripto (figura 1.).

Partea de software a CSP este fișierul DLL este semnat de Microsoft; Windows verifică periodic semnătura digitală, care elimină posibilitatea de CSP de substituție.

Crypto diferă unul de altul:

- compoziția de funcții (de exemplu, unele cripto nu efectuează criptare

date limitate la crearea și verificarea semnăturilor digitale);

- Cerințe hardware (cripto specializate pot necesita

- algoritmi de punere în aplicare pași de bază (crearea de chei, hashing, etc ..).

În compoziția, funcțiile și să asigure algoritmi criptografici sunt împărțite în tipuri. De exemplu, orice tip de CSP PROV_RSA_FULL suportă atât criptarea și semnăturile digitale sunt utilizate pentru schimbul de chei și de a crea RSA algoritm de semnare pentru criptare - algoritmi RC2 și RC4, și pentru hashing - MD5 și SHA.

În funcție de versiunea compoziției sistemului de operare cripto stabilit poate varia semnificativ. Cu toate acestea, pe orice calculator cu Windows, puteți găsi Provider Microsoft Base criptografică, referindu-se la deja cunoscut tipul PROV_RSA_FULL. Este acest furnizor implicit va angaja toate programele.

Primul pas, cel puțin din curiozitate la, afla ce sunt cripto instalate. Pentru aceasta avem nevoie de patru funcția CryptoAPI (parametrii de ieșire sunt cu caractere aldine, iar intrarea - cu caractere cursive):

- CryptEnuniProviders (. I, rezerva, steaguri, tastați numele dlina_imeni) - Returnează numele și tipul de ordinul i-lea CSP în sistem (pornind de la zero);

- CryptAcquireContext (furnizor de containere, nume, tip, steaguri) - se conectează la criptă cu tipul specificat și numele, și returnează un mâner (context). Pripodklyuchenii vom transfera funcția de pavilion CRYPT_VERIFYCONTEXT, care este folosit pentru a obține un context fără o conexiune la un container de chei;

- CryptGetProvParam (razmer_dannyh furnizor parametru de date, steaguri) - returnează valoarea parametrului furnizorului menționat, cum ar fi versiunea (un al doilea parametru în apelul funcției - PP_VERSION). implementari de tip (software, hardware, mixt - PP_IMPTYPE). Algoritmi suportate (PP_ENUMALGS). algoritmi acceptate care utilizează această funcție poate fi obținută după cum urmează: atunci când un apel de funcție returnează informații despre un algoritm: primul apel la funcția, trece un steag valoare CRYPT_FIRST. și ulterior de pavilion ar trebui să fie egal cu 0: - CryptReleaseContext (ISP, steaguri) - descriptor gratuit CSP.

Fiecare dintre aceste funcții, precum și majoritatea celorlalte funcții ale CryptoAPI, returnează o valoare booleană adevărat, dacă are succes, și fals - în cazul în care există erori. Codul de eroare poate fi obținut prin funcția GetLastError. Valorile posibile sunt coduri de eroare, consultați documentația menționată mai sus. De exemplu, atunci când apelați funcția pentru a obține versiunea CryptGetProvParam furnizor ar trebui să ia în considerare posibilitatea de erori, după cum urmează:

În cazul în care nu CryptGetProvParam (hProv, PP_VERSION, (@vers), @DataLen, 0) Apoi începe

Int64 caz (GetLastError) de

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'; ERR altceva: = 'Eroare necunoscută'; se încheie;

MessageDlg ( 'Eroare de Crypt GetProvParam;' + err, mtError [MBOK], 0.); ieșiți final;

Textul procedurii care duce afară, în memo-câmp sub formă de informații FileMemo stabilite în sistemul criptă este prezentat mai jos. Se presupune că procedura se numește atunci când se selectează elementul corespunzător sub formă de meniu principal. Din motive de concizie în fragmentele de program omise, efectuarea de eroare de manipulare.

Type algInfo = înregistrare

szName: array [0. 100] de char;

funcționa ProvTypeToStr (provType: DWORD): string;

caz de provType

PROV_RSA_FULL: ProvTypeToStr: = 'RSA furnizor de plin';

PROV_RSA_SIG: ProvTypeToStr: 'furnizor de semnătură RSA' =;

PROV_DSS: ProvTypeToStr: = 'furnizor de DSS'; PROV_DSS_DH: ProvTypeToStr: 'DSS și furnizor de Diffie-Hellman' =; PROV_FORTEZZA: ProvTypeToStr: = 'furnizor de Fortezza'; PROV_MS_EXCHANGE: ProvTypeToStr: = 'furnizor MS Exchange'; PROV_RSA_SCHANNEL: ProvTypeToStr: = 'furnizor RSA securizat canal', PROV_SSL: ProvTypeToStr: 'furnizor de SSL' =; ProvTypeToStr altceva: = 'furnizor necunoscut'; se încheie; se încheie;

CRYPT_MPL_HARDWARE: ImpTypeToStr: == 'hardware', CRYPT_IMPL_SOFTWARE: ImpTypeToStr: 'software' =; CRYPT_IMPL_MIXED: ImpTypeToStr: = 'mixt'; CRYPT_IMPL_UNKNOWN: ImpTypeToStr: = 'Necunoscut'; ImpTypeToStr altceva: = 'valoare nevalidă', final; se încheie;

dwProvType, cbName, DataLen: DWORD; provName: array [0..200] de char; Vers: array [0..3] de octet; impType: DWORD; ai: alginfo; err: string; începe i: = 0;

în timp ce (CryptEnumProviders (i, zero, 0, @dwProvType, zero, @cbName)) nu începe

ifCryptEnumProviders (i, zero, 0, @dwProvType, @provName, @cbName) apoi începe

FileMemo.Lines.Add ( 'cripto:' + provName); FileMemo.Lines.Add ( 'tip:' + IntToStr (dwProvType) + '-' + ProvTypeToStr (dwProvType));

În cazul în care nu CryptAcquireContext (@hProv, zero, provName, dwProvType, CRYPT_VERIFYCONTEXT) Atunci Începe

În cazul în care nu CryptGetProvParam (hProv, PP_VERSION, (@vers), @DataLen, 0) Atunci

FileMemo.Lines.Add ( 'Versiune:' '' + chr (Vers [1] +) + + de CHR (Vers [0] +));

În cazul în care nu CryptGetProvParam (hProv, PP_IMPTYPE, @impType, @DataLen, 0)

FileMemo.Lines.Add ( 'Tip realizare:' + lmpTypeToStr (impType));

În cazul în care nu CryptGetProvParam (hProv, PP_ENUMALGS, @ai, @DataLen, CRYPT_FIRST)

FileMemo.Lines.Add (szName + # 9 + 'lungime a cheii -' + IntToStr (dwBits) +

'Bits' + # 9 +“ID: IntToStr (AlgID));

în timp ce CryptGetProvParam (hProv, PP_ENUMALGS, @ai, @DataLen, 0) do

cu ai face FiieMemo.Lines.Add (szName + # 9 + 'lungime cheie -'

+IntToStr (dwBits) + # 'bit' + 9 + 'ID:' + IntToStr (AlgID));

Interacțiunea cu CryptoAPI

Fig. 2 prezintă un exemplu de un raport emis de codul de mai sus, executate sub Windows 98.

Orice sesiune cu CryptoAPl începe cu inițializarea (context de recepție). Inițializarea se realizează cu ajutorul funcției CryptAcquireContext. Ca parametri, această funcție are un nume-cheie recipient, numele furnizorului de criptare, tipul de furnizor și steaguri care specifică tipul și cheile de acțiune pentru container și funcționarea CSP:

BOOL WinAPI CryptAcquireContext (HCRYPTPROV * phProv, LPCTSTR pszContainer, LPCTSTR pszProvider, DWORD dwProvType, DWORD dwFlags);

Crypto - o entitate (de obicei, o bibliotecă), care pune în aplicare un anumit set de algoritmi de criptare și furnizarea de lucru cu ei. Există aproximativ șapte furnizori de standard presetate sistem. Avem nevoie de exemple pentru două dintre ele - MicrosoftBaseCryptographicProvider (MS_DEF_PROV) și MicrosoftEnhancedCryptographicProvider (MS_ENHANCED_PROV).

Fiecare criptare se referă la un anumit tip. Acest lucru permite sortarea prin toate instalate pe furnizorii de mașini, pentru a alege cele care susțin algoritmii dorite. Două sunt menționate tipul de furnizor PROV_RSA_FULL

Crypto sprijină zone sigure numite chei containere. Containerele permit aplicațiilor să stocheze și să utilizeze mai târziu, a generat o dată cheile cheii care oferă protecție împotriva unui atacator.

Documente conexe:

în scopuri de achiziție. achiziții de bunuri, lucrări. servicii pentru a oferi. gestiona o rețea securizată; interacțiunea cu alte criptografic. built-CSP. implementează interfața Microsoft CryptoAPI. construit.

CryptoAPI; în special cu funcția CryptoAPI; în special în sinteza lor proprii cripto înseamnă Microsoft CSPDK fi capabil să: lucreze cu funcțiile CryptoAPI. opune interacțiune informațională; - aplicatie. Scopul disciplinei Scopul.