1
Curs 3
Atacuri asupra rețelelor de comunicații
O categorie aparte de atac asupra informațiilor stocate sau transmise în rețea o reprezintă
atacurile criptografice, prin care se încearcă extragerea informațiilor din mesajele criptate.
Când se transmite un mesaj, pentru asigurarea confidențialității, acesta este criptat cu
ajutorul unui algoritm, generându-se text cifrat (engl. ciphertext). Receptorul autorizat trebuie
să poată recupera textul clar aplicând un algoritm asupra textului cifrat. Adversarul, care
dispune de textul cifrat dar nu cunoaște anumite detalii ale algoritmului aplicat de emițător,
trebuie să nu fie capabil să reconstituie textul clar. Operația prin care emițătorul transformă
textul clar în text cifrat se numește criptare sau, uneori, cifrare (engl. encryption). Operația
prin care receptorul obține textul clar din textul cifrat se numește decriptare sau descifrare
(engl. decryption).
Atacurile criptografice se aplică direct mesajelor cifrate în vederea obţinerii informaţiei
originale în clar şi/sau a cheilor de criptare şi de decriptare. Ştiinţa care se ocupă cu studiul
metodelor de obținere a înțelesului informațiilor criptate, fără a avea acces la informația
secretă necesară în mod normal pentru aceasta estre criptanaliza iar criptanalistul este
persoana care se ocupă cu criptanaliza mesajelor cu caracter secret. Scopul metodelor de
criptanaliză este descoperirea mesajelor în clar (M) şi/sau a cheii (K) din mesajul criptat (C).
Atacurile criptografice pot fi de mai multe tipuri:
Brut (brute force), prin încercarea tuturor combinaţiilor posibile fie de chei de
criptare, fie de simboluri din text pentru deducerea textului în clar. Atacul devine
ineficient atunci când lungimea cheii este suficient de mare, astfel numărul de
încercări fiind foarte mare, depășindu-se capacitatea de procesare a celor mai
performante sisteme de calcul ori durata de procesare criptanalitică fiind mai mare
decât perioada de valabilitate a informațiilor transmise.
Asupra textului criptat (cipher text attack) interceptat, prin analiza căruia se încearcă
găsirea textului original sau a cheii de criptare.
Asupra unui text în clar cunoscut (known plain-text attack), pentru care s-a aflat
criptograma şi pe baza căruia se face o extrapolare pentru deducerea altor porţiuni din
mesaj.
Asupra unor texte criptate alese (chosen cipher-text attack), pentru care se obţin
criptogramele asociate unor texte folosind algoritmi de criptare cu chei publice şi se
urmăreste aflarea cheilor de decriptare.
Atacurilor sus amintite li se mai adaugă un alt tip de atac, și anume acțiunea de
“cumpărare” a cheii, adică aflarea cheii fără nici un efort de criptanaliză, prin alte mijloace
decât cele tehnice (santaj la adresa persoanelor care o dețin, furt sau scurgeri de informații de
la persoane sau din documente scrise sau în fomat electronic etc.). Acest procedeu este unul
dintre cele mai puternice atacuri lansate la adresa unor surse din interiorul rețelei. Pentru
2
preîntâmpinarea lui este utilă responsabilizarea personalului, eliminarea breselor de securitate
a documentelor, eventual dubla criptare a datelor astfel încât secretul lor să nu depindă de o
singură persoană.
Ca principalele metode de criptanaliză putem aminti metoda diferențială (are la bază
perechi de texte criptate, obținute prin criptarea unei perechi de texte în clar și analiza
diferențelor dintre acestea), metoda liniară (folosește texte în clar cunoscute și textele criptate
asociate, încercând pe baza lor aproximarea liniară a cheii de criptare) și metoda combinată
(aplică ambele procedee menționate anterior pentru spargerea cifrurilor).
Pentru protejarea împotriva atacurilor criptografice s-au creat algoritmi din ce în ce mai
complecși, ca regulă generală, un algoritm fiind considerat sigur dacă cea mai puțin
costisitoare metodă prin care poate fi atacat (ca timp de procesare, spațiu de memorie, preț)
este atacul brut. La crearea acestor algoritmi se au în vedere următoarele:
Asigurarea confidențialității, care are drept obiectiv împiedicarea înțelegerii mesajului
criptat interceptat de către adversar;
Asigurarea autenticității, care are ca obiectiv detectarea, de către receptor a mesajelor
create sau modificate de un adversar activ;
Asigurarea non-repudiabilității mesajelor, adică emitentul să nu poată nega faptul că a
transmis un anumit mesaj, iar receptorul să nu poată crea mesaje care să pară
autentice;
Verificarea prospețimii are ca obiectiv detectarea, de către receptor, a eventualelor
copii ale unui mesaj (autentic) mai vechi. Este posibil ca un adversar să intercepteze,
de exemplu, un ordin de transfer de bani în favoarea sa și apoi să transmită băncii
multiple copii ale ordinului respectiv iar fără a verifica prospețimea, banca va efectua
de mai multe ori transferul de bani. Doar verificarea autenticității mesajelor nu ar
rezolva problema deoarece fiecare copie este identică cu originalul, deci este
autentică.
Autentificarea entităților, care are drept obiectiv verificarea, de către o entitate, a
identității entității cu care comunică.
Stabilirea cheii are ca obiectiv obținerea, de către partenerii de comunicație legitimi, a
unui șir de biți, numit cheie, ce urmează a fi utilizată la asigurarea confidențiialității și
la verificarea autenticității mesajelor. Cheia obținută trebuie să fie cunoscută doar de
către partenerii care doresc să comunice. Autentificarea nu are sens decât dacă se
realizează și verificarea integrității mesajului.
Asigurarea confidențialității
Problema asigurării confidențialității unui mesaj constă în a transmite informații în așa fel
încât doar destinatarul dorit să le poată obține. Un adversar care ar intercepta comunicația nu
trebuie să fie capabil să obțină informația transmisă.
Pentru formalizarea scrierii vom folosi notațiile:
M - mulțimea mesajelor în clar;
E - mulțimea mesajelor criptate
o funcție de criptare;
o funcție de decriptare;
3
Perechea formează o pereche criptare-decriptare dacă sunt îndeplinite simultan
condițiile:
orice text cifrat poate fi decriptat corect prin , adică ;
un adversar care cunoaște textul cifrat dar nu dispune de informații despre funcțiile de
criptare sau decriptare, nu poate deduce informații despre mesajul în clar.
În practică, perechea de funcții trebuie să fie ușor de realizat, chiar și de către
persoane fără pregătire deosebită. Aceste funcții se realizează pe baza unor algoritmi care
necesită și o cheie de criptare. Fiecare valoare a cheii produce o pereche criptare-decriptare
distinctă. Cheia se presupune a fi ușor de generat la nevoie.
Vom nota prin mulțimea cheilor. În acest caz funcțiile de criptare și decriptare vor fi de
forma
o funcție de criptare;
o funcție de decriptare;
cheia apărând ca și parametru. Pentru o valoare fixată a cheii, , avem și
funcțiile de criptare și decriptare corespunzătoare.
Uneori , caz în care funcțiile de criptare respectiv decriptare sunt bijective
(permutări pe ). În aceste condiții, uneori, rolurile funcțiilor de criptare respectiv decriptare
pot fi interschimbate, adică să se folosească ca funcție de criptare și pentru decriptare.
Cele prezentate anterior pot fi urmărite în exemplele de mai jos:
1) Substituția monoalfabetică:
Fie un alfabet (finit) cu litere | |). De exemplu, ( = 26).
În acest caz textele clare sunt șiruri de litere din alfabet, mulțimea textelor cifrate este
identică cu mulțimea textelor clare iar cheile posibile sunt permutările lui | | .
Pentru un text clar
( )
textul cifrat va fi
.
Pentru decriptare avem
.
Se observă că atât criptarea cât și decriptarea sunt simplu de executat, chiar și manual.
Cheile sunt ușor de reprezentat, chiar prin înșiruirea literelor în ordinea dată de permutare
dacă alfabetul are o ordine cunoscută.
De exemplu, cheia poate fi reprezentată astfel:
4
ceea ce înseamnă că , etc. Cu această cheie, cuvântul "securitate"
devine, prin criptare "lmbxkozczm".
O cale de atac poate fi metoda prin forță brută (decriptarea textului cifrat cu fiecare cheie
posibilă). O astfel de încercare este ineficientă deoarece, dacă presupunem că adversarul
reușește să verifice un miliard de chei în fiecare secundă, cum numărul de chei este 26!,
adversarul ar avea nevoie de aproximativ 6,5 miliarde de ani pentru a găsi cheia corectă.
O analiză atentă asupra modului de criptare scoate în evidență o "slabiciune" mare a
acestuia și anume calea de atac prin analiza frecvențelor. Textul în clar fiind un text în limba
română, anumite litere (e, a, t, s) apar mai des decât altele, prin urmare, permutările acestora
prin funcția o să apară în textul cifrat cu frecvență mai mare decât permutările celorlalte. Un
adversar, care dispune de suficient text cifrat, va reuși în acest fel să reducă considerabil
numărul de încercări, un cifru putând fi spart în căteva minute.
2) Cifrul Vernam, numit și cheia acoperitoare
Textul în clar îl privim ca un șir de biți de lungime mai mică sau egală cu un ,
. Textul cifrat va fi de aceeași formă ( )
,
unde reprezintă operația xor. Decriptarea va coincide cu criptarea .
Din punctul de vedere al siguranței, criptarea cu cheie acoperitoare este un mecanism
perfect de criptare: adversarul nu poate deduce nimic din mesajul criptat (în afară de lungimea
textului clar), deoarece orice text clar putea fi, cu egală probabilitate, originea textului cifrat
recepționat.
Criptarea cu cheie acoperitoare este dificil de utilizat practic deoarece necesită o cheie la
fel de lungă ca și mesajul de transmis și, în plus, cheia nu poate fi refolosită (dacă se transmit
două mesaje folosind aceeași cheie, se pierde sigurantă metodei).
Uneori se folosește aceeași cheie de criptare pentru mai multe mesaje, ceea ce aduce unui
adversar noi posibilități de acțiune deoarece mesajele identice vor fi criptate identic. Acest
aspect poate fi exploatat în mai multe moduri, cum ar fi determinarea emițătorul de către
adversar să trimită mesaje conținând părți generate de acesta (fapt ce ajută mult în tentativa de
spargere) sau detectarera repetării unui mesaj. Anumite cifruri, de exemplu cifrul cu cheie
acoperitoare, sunt ușor de atacat de un adversar dispunând de două texte cifrate cu aceeași
cheie.
În cazul în care se dorește totuși utilizarea aceleiași chei pentru mai multe mesaje, ca
metodă de prevenție, funcția de criptare mai primește un element aleator care are rolul de a
face ca același text clar să fie cifrat în mod diferit în mesaje diferite. În acest caz, criptarea are
forma iar decriptarea va fi de forma , cu:
.
Pentru a fi posibilă decriptarea, informația corespunzătoare argumentului aleator trebuie
să se regăsească în textul cifrat, de aceea, lungimea textului cifrat trebuie să fie cel puțin egală
cu lungimea textului clar plus lungimea argumentului aleator. Adesea, argumentul aleator nu
este secret, deci poate fi transmis în clar. Trebuie avut însă în vedere ca adversarul să nu poată
5
controla generarea argumentului aleator utilizat de emițător și să nu i se permită să obțină
informații despre argumentul aleator ce urmează a fi folosit.
Un cifru (perechea criptare-decriptare) se consideră complet spart dacă un adversar care
nu cunoaște dinainte cheia poate decripta orice text cifrat. Dacă adversarul obține cheia,
înseamnă că cifrul este complet spart. Un cifru este parțial spart dacă un adversar care nu
cunoaște inițial cheia poate dobândi informații despre textul clar prin observarea textului
cifrat. Dacă adversarul poate decripta o parte din textul clar sau poate să verifice dacă un
anumit șir apare în textul clar, înseamnă că cifrul este parțial spart. Spre exemplul putem
considera că, din informațiile adversarului, textul clar este cu probabilitate de 30% ION, cu
probabilitate de 40% ANA și cu probabilitate de 30% DAN. De asemenea, presupunem că
adversarul știe că se utilizează substituție monoalfabetică. În momentul în care adversarul
intercepteză textul cifrat AZF, el calculează probabilitățile diverselor texte clare cunoscând
textul cifrat și găsește 50% ION, 0% ANA și 50% DAN (exclude ANA deoarece ar da aceeași
literă pe prima și pe ultima poziție în textul cifrat). Adversarul a dobândit astfel o informație
asupra textului clar, ceea ce înseamnă că cifrul a fost spart parțial.
În funcție de informațiile de care dispune adversarul ce încearcă spargerea cifurlui, există
trei nivele posibile de atac:
atac cu text cifrat când adversarul dispune doar de o anumită cantitate de text cifrat;
atac cu text clar cunoscut când adversarul dispune, pe lângă textul cifrat, de un număr
de perechi cu ;
atac cu text clar ales când adversarul dispune de perechi în care este la
alegerea adversarului.
Dificultatea spargerii unui cifru este de două feluri:
dificultatea probabilistică sau informațională;
dificultate computațională.
Dificultatea informațională constă în faptul că pot exista mai multe perechi text clar,
cheie, care ar fi putut produce textul cifrat interceptat. Un cifru este perfect dacă textul criptat
nu aduce nici o informație adversarului, adică s-ar fi putut folosi orice bijecție , cu
aceeași probabilitate, ca funcție de criptare. Un asemenea exemplu este cifrul , atâta timp cât
cheia nu este refolosită. Pentru a obține un cifru perfect, numărul de biți ai cheii trebuie să fie
mai mare sau egal cu numărul de biți de informație din mesaj. Cifrul Vernam este în același
timp perfect (sub aspectul dificultății informaționale a spargerii) și optim din punctul de
vedere al lungimii cheii.
Dificultatea computațională constă în imposibilitatea adversarului de a deduce informații
asupra textului clar cu un efort computațional rezonabil (dacă se dă un număr de perechi text
clar - text cifrat, să nu existe o metodă rapidă de a determina cheia).
Un atac prin forță brută constă în a decripta textul cifrat folosind toate cheile posibile și a
verifica dacă se obține textul clar (sau un text clar inteligibil, dacă textul clar adevărat nu este
cunoscut dinainte). Fezabilitatea unui atac prin forță brută depinde direct de lungimea cheii
(de fapt, de numărul de chei posibile). Pentru o cheie de 56 de biți, un atac prin forță brută
este perfect posibil, la viteza actuală necesitând un efort în jur de un an-calculator. Un atac
prin forță brută este nefezabil deocamdată de la 80 de biți în sus; se consideră că va fi fezabil
în jurul anului 2015. De la 128 de biți în sus atacul prin forță brută necesită, din cauza unor
6
limitări fizice teoretice, o cantitate de energie comparabilă cu producția mondială pe câteva
luni; o astfel de cheie este puțin probabil că va putea fi spartă vreodată prin forță brută.
Un cifru se consideră a fi vulnerabil în momentul în care se descoperă o metodă de
decriptare a unui mesaj semnificativ mai eficientă decât un atac prin forță brută. Inexistența
unei metode eficiente de spargere nu este niciodată demonstrată, în cel mai bun caz putându-
se demonstrea că spargerea unui cifru este cel puțin la fel de dificilă ca rezolvarea unei
anumite probleme de matematică, problemă cunoscută de multă vreme dar fără rezolvare
eficientă cunoscută. Exemple de asemenea probleme de matematică: descompunerea în factori
primi a unui număr mare (de ordinul sutelor de cifre) sau logaritmul discret (rezolvarea în
a ecuației , cu număr prim mare. Pentru un cifru bloc (un
cifru care criptează independent blocuri de text clar de o anumită lungime fixă), dimensiunea
blocului trebuie să fie mare pentru a face repetările blocurilor suficient de rare. Dacă
dimensiunea blocului este de biți, există posibilități pentru conținutul unui bloc, ceea ce
face ca în cazul unei distribuții uniforme a conținutului fiecărui bloc, un șir de
blocuri are
probabilitate cam 1/2 să aibă cel puțin două blocuri cu conținut identic. Ca o consecință,
dimensiunea a blocului trebuie să fie suficient de mare (minim 64 biți) și cheia să fie
schimbată suficient de des.
În practică se folosesc mai multe cifruri, acestea putând fi împărțite în două categorii:
cifruri bloc și cifruri flux. Cifrurile bloc criptează câte un bloc de date de lungime fixată (de
obicei 64, 128 sau, eventual, 256 de biți) iar cifrurile flux criptează mesaje de lungime
arbitrară și produc biții textului cifrat pe măsură ce primesc biții corespunzători din textul clar.
Pentru a cripta un text de lungime arbitrară se pot folosi și cifruri bloc, existând câteva
metode standard.
Electronic Code Book (ECB ) - textul în clar se împarte în blocuri de lungime . Ultimul
bloc se completează la lungimea , prin adăugarea unor biți care pot fi pot fi zerouri, biți
aleatori sau biți rezultați în urma utilizării altor scheme de completare. După împărțire, fiecare
bloc se criptează independent de celelalte. Metoda ECB nu se recomandă deoarece pentru o
cheie fixă același text clar se transformă în același text cifrat.
Cipher Block Chaining (CBC) - textul în clar se împarte în blocuri de lungime . Ultimul
bloc se completează cu biți aleatori apoi se alege un șir de biți aleatori numit vector de
inițializare. Vectorul de inițializare se transmite de obicei separat. Pentru criptare, se
efectuează xor pe biți între vectorul de inițializare și primul bloc de text clar, apoi se face xor
între fiecare bloc de text clar și blocul precedent de text cifrat. Rezultatul se cifrează și se
transmite destinatarului. Față de ECB, metoda CBC face ca un același bloc de text clar să se
cripteze diferit, în funcție de vectorul de inițializare utilizat. Dacă vectorul de inițializare este
ales aleator, repetările unui bloc de text cifrat vor fi extrem de rare (imposibil de exploatat de
adversar). Pentru alegerea vectorului de inițializare trebuie avute în vedere următoarele:
să fie distribuit uniform și independent de alți vectori de inițializare;
să nu poată fi controlat de adversar;
să nu poată fi aflat de adversar.
Pentru construirea vectorului de inițializare putem utiliza un generator de numere
aleatoare criptografic sau putem utiliza aceleași metode ca la alegerea cheilor ( a se vedea
cursul corespunzător). Dacă se transmit mai multe mesaje unul după altul, vectorul de
7
inițializare pentru un mesaj se poate lua ca fiind ultimul bloc al mesajului precedent (ca la
înlănțuirea blocurilor în cadrul aceluiași mesaj).
Există situații când mesajele sunt mult mai scurte decât dimensiunea blocului și nici nu se
pot grupa împreună mai multe mesaje (de exemplu, un mesaj depinde de răspunsul
receptorului la mesajul precedent, prin urmare, un mesaj nu este disponibil pentru criptare
înainte ca mesajul precedent să fie criptat în totalitate și trimis). În aceste cazuri se utilizează
CFB și OFB, prezentate în continuare.
Cipher Feedback (CFB) - criptează fragmente de text clar de dimensiune fixă.
Dimensiunea fragmentului trebuie să fie un divizor al dimensiunii blocului cifrului. Pentru
funcționare emițătorul generează aleator un vector de inițializare de biți, pe care îl transmite
receptorului și îl încarcă totodată într-un registru de deplasare. Apoi, pentru fiecare caracter de
criptat, emițătorul parcurge pașii:
- criptează conținutul registrului de deplasare utilizând cheia secretă;
- execută xor pe biți între următorii biți din textul clar și primii biți din rezultatul
criptării;
- transmite ca text cifrat rezultatul pasului precedent;
- deplasează conținutul registrului de deplasare cu biți spre stânga;
- introduce, pe pozițiile cele mai din dreapta ale registrului de deplasare, biți de text
cifrat produs.
CFB are o proprietate interesantă de autosincronizare: dacă la un moment dat, din cauza
unor erori de transmisie, se pierde sincronismul dintre emițător și receptor, sincronismul se
reface automat după biți. Pentru decriptare CFB utilizează tot funcția de criptare a cifrului
bloc.
Output Feedback (OFB ) - este un mecanism asemănător cu cifrul Vernam (cu cheie
acoperitoare) însă cheia este un șir pseudoaleator generat cu un algoritm de criptare. Primii
biți din șirul pseudoaleator se obțin criptând vectorul de inițializare, următorii biți
8
obținându-se criptând precedenții biți pseudoaleatori, ș. a. m. d. La OFB utilizarea unui
vector de inițializare aleator este chiar mai importantă decât la celelalte moduri de criptare,
deoarece refolosirea unui vector de inițializare conduce la repetarea șirului pseudoaleator
(cheia Vernam), rezultând un cifru relativ ușor de spart.
Counter (CTR) - se construiește similar cu OFB, însă șirul pseudoaleator se obține
criptând numerele , , , etc., reprezentate pe biți, unde este vectorul de
inițializare. Modul CTR este foarte asemănător cu OFB, însă are avantajul că destinatarul
poate decripta un fragment de mesaj fără a decripta tot mesajul până la fragmentul dorit.
Acest fapt îl face potrivit pentru criptarea fișierelor pe disc. Totuși, deoarece cifrul Vernam
aflat la bază este vulnerabil când se au la dispoziție două texte clare criptate cu aceeași cheie,
metoda este vulnerabilă dacă adversarul are posibilitatea de a obține două variante ale unui
fișier.
Dintre algoritmii cei mai cunoscuți utilizați în practică amintim:
Data Encryption Standard (DES) - se bazează pe un algoritm simetric care lucrează cu
blocuri de lungime 64 de biți iar lungimea cheii este de 56 biți. A fost utilizat pe scară destul
de largă, fiind susținut ca standard de către guvernul Statelor Unite ale Americii. În prezent
este nesigur datorită lungimii mici a cheii (a fost deja spart prin forță brută). În ianuarie 1999,
distributed.net şi Electronic Frontier Foundation au colaborat pentru a sparge public o cheie
DES în 22 de ore şi 15 minute. Există, de asemenea, unele rezultate analitice care
demonstrează slăbiciunile teoretice ale cifrului, deşi ele sunt imposibil de montat în practică.
Triple DES (3DES) - constă în aplicarea de 3 ori succesiv a cifrului DES, cu 2 sau 3 chei
distincte. A fost proiectat pentru a oferi o metodă relativ simplă de a creşte dimensiunea cheii
pentru DES, fără proiectarea unui sistem complet nou. Lucrează cu blocuri de lungime 64 de
biți iar lungimea cheii este de 112 sau 168 biți. Este imposibilă spargerea acestuia prin forță
brută.
Advanced Encryption Standard (AES) - se bazează pe un algoritm simetric care lucrează
cu blocuri de 128 biți iar lungimea cheii este de 128, 192 sau 256 biți. A fost proiectat de doi
belgieni, Joan Daemen și Vincent Rijmen și publicat sub numele Rijndael. În urma unui
concurs, a fost desemnat ca nou standard utilizat de guvernul american.
CAST 128 - Creat de Carlisle Adams și Stafiord Tavares în 1996, lucrează cu blocuri de
64 biți iar lungimea cheii este cuprinsă între 40 și 128 biți
Blowfish - se bazează pe un algoritm simetric care lucrează cu blocuri de 64 biți iar
lungimea cheii este de până la 448 biți. Creat de Bruce Schneier în 1993, a fost conceput ca
un algoritm de uz general, ca o alternativă la DES. Algoritmul este public şi poate fi utilizat în
mod liber de oricine.
Twofish - se bazează pe un algoritm simetric care lucrează cu blocuri de 128 biți iar
lungimea cheii este de până la 256 biți. Creat de Bruce Schneier, Kelsey John, Doug Whiting,
David Wagner, Chris Hall, şi Niels Ferguson, a fost unul dintre cei cinci finalisti ai
concursului Advanced Encryption Standard, dar nu a fost selectat pentru standardizare. Pe
majoritatea platformelor software Twofish este uşor mai lent decât Rijndael (algoritmul ales
pentru Advanced Encryption Standard) pentru chei de 128 biţi, dar oarecum mai rapid pentru
256 de biţi.
Serpent - lucrează cu blocuri de 128 biți iar lungimea cheii este de 128, 192 sau 256 biți.
A fost creat de Ross Anderson, Eli Biham și Lars Knudsen și a candidat pentru AES.
9
RC6 - se bazează pe un algoritm simetric care lucrează cu blocuri de 128 biți iar
lungimea cheii este de 128, 192 sau 256 biți. A fost proiectat de Ron Rivest, Robshaw Matt,
Sidney Ray şi Yiqun Yin Lisa și a candidat pentru AES, fiind unul dintre cei cinci finaliști. A
fost patentat de RSA Security.
RC4 - este cel mai utilizat cifru flux. Este utilizat în protocoalele populare, cum ar fi
Secure Sockets Layer (SSL) (pentru a proteja traficul Internet) şi WEP (pentru a asigura
reţelele wireless). Cheia are lungimea de până la 256 biți. A fost creat de Ronald Rivest în
1987. Este foarte rapid dar are câteva slăbiciuni, care pot fi contracarate prin artificii legate de
modul de utilizare.
Criptosistemelor simetrice li se adaugă cele asimetrice (cu cheie publică). Securitatea
acestora se bazează pe faptul că în realitate, există funcții de criptare (injective) a căror
cunoaștere nu permite decriptarea în timp rezonabil, adică deși este rezonabil de ușor de
calculat, determinarea lui din ecuația nu se poate face mult mai rapid decât prin
încercarea tuturor valorilor posibile pentru . Pentru ca destinatarul autorizat al mesajului să
poată decripta mesajul în timp rezonabil, trebuie ca funcția de criptare să poată fi inversată
ușor de către cineva care cunoaște o anumită informație, dificil de dedus din . Informația
respectivă va fi făcută cunoscută doar destinatarului mesajului criptat, care, în cazul
criptografiei asimetrice este chiar autorul acestei informații secrete și a funcției de criptare.
Similar criptosistemelor simetrice, funcția de criptare primește ca și parametru cheia ,
numită cheie de criptare sau cheie publică, pentru criptare calculându-se cantitatea .
Pentru decriptare, funcția de decriptare primește ca și parametru cheia , numită cheie de
decriptare sau cheie secretă și se va calcula cantitatea . Fiecare cheie secretă este
asociată unei anumite chei publice , putând servi la decriptarea mesajelor criptate doar cu
cheia publică pereche. Teoretic, dacă se cunoaște cheia publică este posibil să se calculeze
cheia secretă corespunzătoare, dar acest lucru trebuie să fie dificil din punct de vedere
computațional. Pentru ca un sistem de criptare să fie util trebuie să existe un procedeu eficient
din punct de vedere computațional pentru generarea unei perechi de chei ( , ) aleatoare.
În concluzie, un sistem criptografic asimetric (sau cifru asimetric sau cifru cu cheie
publică) este un ansamblu format din algoritmii de criptare și decriptare și dintr-un
algoritm de generare aleatoare a perechilor de chei ( , ). Pentru ca un sistem criptografic
să fie sigur trebuie ca rezolvarea ecuației cu necunoscuta și determinarea cheii
secrete corespunzătoare unei chei publice să fie dificile computațional.
Pentru transmiterea mesajelor, destinatarul generează o pereche de chei ( , ) și face
publică . Emițătorul poate cripta un mesaj, folosind , și numai posesorul lui îl va putea
decripta (odată criptat un mesaj, acesta nu mai poate fi decriptat nici măcar de autorul său).
Dacă se dorește comunicație bidirecțională, se utilizează câte o pereche de chei ( , )
distinctă pentru fiecare sens. O aceeași pereche de chei poate fi utilizată de o entitate pentru
toate mesajele pe care le primește, indiferent cu câți parteneri comunică. Astfel, fiecare
entitate își stabilește o pereche de chei din care cheia publică o transmite tuturor partenerilor
de comunicație și cheia secretă o folosește pentru a decripta mesajele trimise de toți către ea.
Pentru comparație, în criptografia simetrică, fiecare pereche de parteneri ce comunică trebuie
să aibă propria cheie secretă. Un sistem criptografic asimetric este în esență un cifru bloc.
Pentru a cripta o cantitate arbitrară de text clar, se pot utiliza modurile ECB sau CBC.
Modurile CFB, OFB și CTR nu sunt utilizabile deoarece utilizează doar funcția de criptare,
care în cazul criptografiei asimetrice este publică. Algoritmii criptografici asimetrici sunt mult
10
mai lenți decât cei simetrici ceea ce face ca de obicei datele să se criptează de obicei cu
algoritmi simetrici, iar cheia de criptare pentru date să se transmită utilizând algoritmi
criptografici asimetrici.
Unul din cele mai cunoscute criptosisteme cu cheie publică este RSA inventat de Rivest,
Shamir și Adelman în 1977. Numele RSA vine de la inițialele autorilor. Pentru început se
generează două numere prime p și q (de ordinul a 500 cifre zecimale fiecare) apoi se
calculează și . Mulțimea va reprezenta atât
spațiul textelor clare cât și a textelor criptate. Pentru alegerea cheilor se generează aleator un
număr prim în raport cu și se calculează cu proprietatea că , utilizându-se algoritmul lui Euclid. Cheia publică va fi iar cea secretă
va fi .
Pentru criptare și decriptare avem:
În cele prezentate anterior s-a văzut că la generarea cheilor sau a vectorilor de inițializare
sau a numerelor unice sistemele criptografice folosesc generatoare de numere aleatoare.
Numerele aleatoare generate trebuie să fie uniform distribuite și independente unul de altul.
Față de alte aplicații, în scopuri criptografice numerele aleatoare trebuie generate astfel încât
să nu poată fi prevăzute de un eventual adversar. Pentru generarea acestora se pot folosi
generatoare fizice (funcționează pe baza unor fenomene fizice suficient de aleatoare) sau
generatoare de numere pseudoaleatoare(produc numerele prin calcule, prin urmare, numerele
generate sunt deterministe, dar algoritmul de generare "amestecă" suficient de bine numerele
pentru ca șirul de numere rezultat să pară aleator). În practică sistemele de operare moderne
oferă utilizatorului generatoare criptografice de numere aleatoare gata implementate.
Intrebări de verificare
Cum pot fi clasificate atacurile asupra reţelelor de calculatoare?
Ce sunt atacurile criptografice?
Ce se înţelege prin „asigurarea confidenţialităţii”?
Ce este o cheie publică?
Ce este un sistem criprografic asimetric?