Ce este PGP?
Cerintele de securitate in posta electronicǎ au condus la realizarea mai multor pachete de programe destinate protectiei criptografice a scrisorilor trimise prin retele. Dintre acestea, cel mai popular este PGP (Pretty Good Privacy) dezvoltat de Philip Zimmermann in SUA. Acest pachet de programe a starnit serioase controverse, datoritǎ rǎspandirii sale pe Internet si a folosirii lui in toatǎ lumea, fǎrǎ sǎ se respecte drepturile de licentǎ si de export, destul de rigide in privinta algoritmilor criptografici. Zimmerman a fost anchetat, in 1994, de o comisie federalǎ, pentru acuzatia de nerespectare a legilor americane privind exportul de sisteme criptografice. FBI l-a invinuit pe Zimmerman de punerea pe Internet a PGP-ului, in arhive publice, ceea ce a condus la o rǎspandire necontrolabilǎ a utilizǎrii sale. PGP-ul este folosit astǎzi de categorii de utilizatori diverse, de la simpli studenti si particulari panǎ la organizatii nationale, internationale si agentii guvernamentale.
PGP este un pachet de programe destinat protectiei postei electronice si a fisierelor, prin cifrare clasicǎ si cu chei publice. Cu ajutorul sǎu se pot stabili modalitǎti sigure de comunicatie intre persoane, nefiind necesarǎ schimbarea prealabilǎ a unor chei de cifrare. PGP include un sistem sigur de gestiune a cheilor, autentificarea datelor prin semnǎturǎ digitalǎ si compresia datelor. El functioneazǎ pe diferite platforme: MS-DOS, UNIX, VAX/VMS si altele. PGP satisface trei cerinte fundamentale:
a) caracterul privat al postei electronice, ceea ce inseamnǎ cǎ doar destinatarul desemnat al scrisorii poate citi continutul acesteia;
b) autentificarea emitǎtorului;
c) autentificarea mesajelor.
Iatǎ ce poate face PGP-ul:
criptarea fisierelor: poate fi folosit pentru a cripta fisiere proprii, folosind algoritmul de criptare cu chei secrete IDEA; dupǎ criptare, fisierul poate fi decriptat doar de cineva care cunoaste parola de criptare a fisierului;
crearea de chei secrete si publice: aceste chei sunt necesare pentru a cripta si semna mesajele transmise sau pentru a decripta mesajele primite;
gestionarea cheilor: PGP-ul poate fi folosit pentru a crea si intretine o bazǎ de date care sǎ continǎ cheile publice ale persoanelor cu care vrem sǎ corespondǎm;
transmiterea si receptionarea de mesaje e-mail criptate: cu ajutorul PGP-ului se pot trimite scrisori criptate si decripta scrisorile primite;
folosirea semnǎturilor digitale: PGP-ul poate face o semnǎturǎ electronicǎ a documentelor sau poate verifica semnǎtura oricǎrei persoane;
certificarea cheilor: PGP-ul asigurǎ aceasta prin semnarea electronicǎ a cheilor publice;
revocarea, dezactivarea si custodia cheilor: dacǎ cheile sunt compromise, acestea pot fi revoate sau dezactivate; acestea pot fi tinute la loc sigur, folosind facilitǎtile de custodie;
configurarea dupǎ necesitǎti a PGP-ului: setǎrile variabilelor din fisierul de configurare a PGP-ului pot fi schimbate;
folosirea serverelor de chei PGP de pe Internet: vǎ puteti adǎuga cheia publicǎ la o bazǎ de date server sau puteti obtine alte chei publice care se aflǎ pe server.
Securitatea tuturor sistemelor criptografice se bazeazǎ pe o cheie criptograficǎ. Sistemul de criptare cu chei private, numit de PGP criptografie conventionalǎ, foloseste o singurǎ cheie, cheia privatǎ, atat pentru criptare cat si pentru decriptare. In sistemele cu chei publice, un proces matematic genereazǎ douǎ chei inrudite matematic. Un mesaj criptat cu o cheie poate fi decriptat doar cu perechea sa. PGP-ul nu reclamǎ un schimb prealabil de chei intre utilizatori. El foloseste o combintie a sistemelor criptografice simetrice si cu chei publice:
sistem simetric, bazat pe cifrul IDEA (International Data Encryption Standard) cu o singurǎ cheie K, pentru cifrarea continutului scrisorilor sau fisierelor;
sistem asimetric RSA (cu douǎ chei, E si D) pentru protectia si distributia cheii K de unicǎ intrebuintare (numitǎ si cheie de sesiune) cu care se face cifrarea simetricǎ a scrisorii, precum si pentru autentificarea prin semnǎturǎ digitalǎ a mesajului si a emitǎtorului.
PGP-ul foloseste urmǎtoarele elemente in asigurarea securitǎtii:
a) cheie publicǎ: cheia publicǎ a unei persoane este folositǎ pentru criptarea mesajelor destinate acelei persoane; doar acea persoanǎ va putea decripta si citi mesajele. Cheia se numeste publicǎ, deoarece proprietarul ei o face publicǎ fǎrǎ compromiterea securitǎtii sistemului;
b) cheie secretǎ: este folositǎ pentru decriptarea mesajelor care au fost cifrate cu o cheie publicǎ. Cheia se numeste secretǎ sau privatǎ deoarece pentru a asigura securitatea conversatiilor trebuie tinutǎ secretǎ; dacǎ cineva obtine cheia secretǎ a unei persoane, putea citi mesajele destinate acelei persoane;
c) cheie sesiune: aceastǎ cheie este generatǎ aleator, pentru fiecare mesaj. Cheia de sesiune PGP este o cheie pentru algoritmul IDEA, de 128 de biti. Pasii fǎcuti de PGP in criptarea unui mesaj si transmiterea sa prin e-mail sunt:
creeazǎ aleator o cheie de sesiune pentru mesaj;
foloseste algoritmul IDEA pentru criptarea mesajului cu cheia de sesiune;
foloseste un algoritm RSA pentru criptarea (anveloparea) cheii de sesiune cu cheia publicǎ a destinatarului;
leagǎ impreunǎ mesajul criptat si cheia de sesiune criptatǎ si le pregǎteste pentru transmitere.
PGP-ul trateazǎ automat cheile sesiune, fǎrǎ nici o interventie din partea utilizatorului.
d) certificate de chei: PGP-ul tine fiecare cheie publicǎ intr-un certficat al cheii. Fiecare astfel de certificat contine:
cheia publicǎ propriu-zisǎ;
unul sau mai multi identificatori de utilizator (user ID) pentru creatorul cheii (de obicei numele persoanei si adresa de e-mail);
data in care a fost creatǎ cheia;
optional, lista de semnǎturi digitale furnizate de persoane care confirmǎ corectitudinea cheii.
e) inele de chei: PGP-ul tine toate cheile publice ale persoanelor cu care comunicǎ un anumit utilizator intr-un singur fisier, numit keyring. Folosirea unui fisier, pentru toate cheile publice, este mult mai eficientǎ decat tinerea fiecǎrei chei in fisierul ei propriu. Majoritatea utilizatorilor folosesc douǎ fisiere keyring:
secring.pgp - inelul de chei secrete; in acest fisier utilizatorul isi tine toate cheile sale secrete;
pubring.pgp - inelul de chei publice; cu cheile persoanelor cu care utilizatorul comunicǎ.
f) parole (pass phrases): de fiecare datǎ cand este creatǎ o pereche de chei cheie publicǎ - cheie secretǎ, PGP-ul cere crearea si introducerea unei parole. Cea mai importantǎ functie a acestei parole este aceea de a decripta cheia secretǎ pe care PGP-ul o tine in secring.pgp. Dacǎ nu se cunoaste parola corespunzǎtoare, cheia secretǎ nu poate fi folositǎ. Se poate asocia cate o parolǎ pentru fiecare cheie secretǎ sau o parolǎ unicǎ, pentru toate cheile secrete. Parola este cerutǎ in urmǎtoarele situatii:
cand se incearcǎ decriptarea unui mesaj;
cand se incearcǎ semnarea unui mesaj cu cheia secretǎ;
dacǎ se incearcǎ criptarea unui fisier cu un sistem cu chei secrete (IDEA), PGP-ul va cere parola de acces la fisier.
g) semnǎturi digitale: reprezintǎ modalitatea prin care se confirmǎ autenticitatea mesajelor electronice in PGP. Pentru obtinerea unei semnǎturi digitale, PGP-ul proceseazǎ mesajul cu o functie, numitǎ functia rezumat a mesajului (hash), care va produce un numǎr pe 128 de biti. Acest numǎr este apoi semnat cu cheia privatǎ, obtinandu-se un bloc PGP semnat si care va fi plasat la sfarsitul mesajului. Cand receptionati un mesaj semnat, PGP-ul verificǎ semnǎtura, inspectand portiunea de mesaj cuprinsǎ intre "---BEGIN PGP SIGNED MESSAGE---" si "---BEGIN PGP SIGNATURE---" si aplicǎ aceeasi functie rezumat care a fost aplicatǎ mesajului original. PGP-ul va decripta apoi blocul semnǎturii digitale, folosind cheia publicǎ a expeditorului, si apoi va compara rezultatele obtinute. Dacǎ rezultatele se potrivesc, atunci mesajul nu a fost modificat dupǎ ce el a fost semnat.
h) semnǎturi pe certificate de chei: o dificultate in criptarea cu chei publice o reprezintǎ mecanismul de distribuire a insǎsi cheilor publice. Ideea ar fi ca fiecare cheie publicǎ sǎ poatǎ fi pusǎ intr-o listǎ asemǎnǎtoare unei cǎrti de telefon. Dar nu existǎ nici o cale de a verifica dacǎ o cheie publicǎ dintr-o astfel de listǎ apartine persoanei cǎreia se presunpune cǎ apartine. PGP-ul nu rezolvǎ aceastǎ problemǎ de distribuire, dar o face mai putin problematicǎ, permitand persoanelor sǎ semneze fiecare certificat de chei publice. Tehnica folositǎ de PGP la crearea bibliotecilor de chei publice valide se numeste "web of trust".
2.3 Prelucrarea unei scrisori PGP
La emisia unei scrisori, atunci cand sunt folosite atat serviciile de confidentialitate cat si de autenticitate, PGP executǎ urmǎtoarele prelucrǎri:
► Folosindu-se algoritmul de hash MD5, se creeazǎ un cod de autentificare MAC (Message Authentication Code), de 128 de biti, puternic dependent de corpul mesajului; codul va fi folosit in procesul de autentificare:
MAC = MD5 (Mesaj)
►Prin cifrare cu cheia secretǎ KprivatǎA a emitǎtorului A al scrisorii, folosindu-se algoritmul cu chei publice RSA, se creeazǎ semnǎtura digitalǎ pentru autentificarea mesajului si a originii sale:
Semnǎtura = RSA (MAC, KprivatǎA
►Scrisoarea este comprimatǎ, folosindu-se cunoscutul program pkzip. Acest lucru asigurǎ o reducere a volumului de date ce trebuie cifrate si apoi transmise:
Mesaj-comprimat = pkzip (Mesaj)
► Se genereazǎ pseudoaleator o cheie de cifrare K (folositǎ doar pentru acest mesaj), numitǎ cheie de sesiune. Ea reprezintǎ de fapt un numǎr pe 128 de biti:
Cheie-sesiune = random()
► Mesajul comprimat anterior este apoi cifrat cu ajutorul algoritmului IDEA, folosindu-se cheia generatǎ in pasul precedent:
Mesaj-cifrat = IDEA (Mesaj-comprimat, Cheie-sesiune)
► Folosind acelasi sistem cu chei publice (cheia publicǎ KpublicǎB a destinatarului B al scrisorii), se pune in anvelopǎ cheia de sesiune pentru a putea fi trimisǎ in mod sigur la receptor. Acest lucru inseamnǎ cifrarea cheii de sesiune cu cheia publicǎ a destinatarului.
Cheie-sesiune-anvelopatǎ = RSA (Cheie-sesiune, KpublicǎB
► Se creeazǎ scrisoarea protejatǎ, in vederea transmiterii ei la destinatie, folosind servicii obisnuite de e-mail:
Scrisoare-protejatǎ = [Key-ID, Semnǎturǎ, Data-semnǎturǎ, Cheie-sesiune-anvelopatǎ, Mesaj-cifrat]