Sunteți pe pagina 1din 15

Completare curs Criptografie şi securitatea informaţiei

Capitolul 1
Termeni Criptografici

Definiţia 1.1.1. Criptologia este ştiinţa care se ocupă cu studiul criptografiei şi


criptanalizei.

Definiţia 1.1.2. Criptografia este o ştiinţă matematică folosită pentru a asigura


confidenţialitatea datelor prin înlocuirea lor (textului în clar) cu o versiune schimbată,
obţinută în urma unui proces de criptare, şi din care versiune se pot obţine datele
iniţiale utilizând algoritmul criptografic potrivit şi cheia necesară decriptării.

Definiţia 1.1.3. Criptanaliza sau analiza criptografică este ştiinţa care se ocupă cu
regăsirea de informaţii valide din informaţii cifrate fără ca entitatea care doreşte
accesul la informaţie să aibă acest drept. În urma proceselor criptanalitice se pot
expune eventuale slăbiciuni ale algoritmului de criptare folosit sau ale cheii.

Criptarea informaţiei este făcută prin intermediul unei funcţii E care transformă
textul, sau informaţia pt folosind o cheie k în textul criptat tc (neinteligibil pentru
eventualii adversari). Altfel spus Alice pentru a trimite un mesaj către Bob va aplica
funcţia E de parametri pt şi k şi va obţine textul tc:

E ( pt , k ) = tc

Textul astfel obţinut va fi trimis prin intermediul canalului de comunicaţie si


prelucrat la primire de către Bob, care va utiliza o funcţie D pentru decriptare şi o
cheie k* astfel:
D(tc, k * ) = pt

Definiţia 1.1.4. Un criptosistem este un tuplu (P,C,K,E,D) care îndeplineşte


următoarele condiţii:
1. P este un set finit de posibile texte în clar
2. C este un set finit de posibile texte cifrate
3. K este un set finit de posibile chei de cifrare
4. Pentru fiecare k ∈ K există o regulă de criptare ek ∈ E şi o regulă
corespunzătoare de decriptare d k ∈ D . Fiecare ek : P → C şi dk : C → P
funcţionează astfel încât:
d k ( ek ( pt )) = pt
pentru oricare text în clar pt ∈ P .

Criptosistemele se deosebesc în funcţie de modul în care este folosită cheia


de criptare/decriptare, astfel putem distinge două sisteme criptografice:
1. Cu cheie simetrică unde se foloseşte aceeaşi cheie pentru ambele
proceduri, criptare şi decriptare. Adesea aceste sisteme sunt numite criptosisteme cu
cheie privata sau criptosisteme cu o singură cheie deoarece cheia folosită trebuie să
rămână cunoscută exclusiv părţilor comunicante si k = k * .
2. Cu cheie publică unde se folosesc două chei pentru criptare, respectiv
decriptare. Aceste criptosisteme mai sunt numite şi criptosisteme asimetrice. Cheile
folosite se numesc cheie publică şi respectiv cheie privată.

Criptosistemele cu cheie simetrică se împart în două categorii în funcţie de


modul în care se face criptarea: algoritmi de tip stream sau algoritmi de tip block.

Criptarea de tip stream presupune generarea unei secvenţe de biţi cu o


distribuţie statistică cât de aleatoare posibil pe baza unei chei. Secvenţa de biţi este
deci obţinută în urma criptării bit cu bit a textului în clar (biţii textului în clar sunt
adunaţi cu cei ai cheii).
Este esenţial pentru criptările de tip stream ca două mesaje să nu fie criptate
cu acelaşi stream al cheii de criptare, în acest sens se ia măsuri speciale. Exemple
de algoritmi de tip stream: SEAL (Software-optimised Encryption Algorithm), RC4,
A5, LEVIATHAN, Sober.
Algoritmii de tip block presupun impărţirea textului în clar în blocuri de biţi care
sunt criptate, criptarea blocurilor făcându-se în mai multe runde. Majoritatea
algoritmilor cu cheie simetrică sunt de tip block cipher şi folosesc diferite metode
pentru a opera criptarea textului:
• modul ECB (Electronic Code Book) presupune criptarea fiecărui bloc separat şi
independent de celelalte
• modurile CBC (Cipher Block Chaining) şi CFB (Cipher Feed Back ) presupun
dependenţe între blocurile criptate la runda anterioară şi cele de la runda curentă în
funcţie de un vector de iniţializare.
• modul OFB (Output Feedback Mode) poate fi interpretat că foloseşte o cifrare de tip
block pentru a genera un stream care este apoi adunat bit cu bit cu textul în clar.

Definiţia 1.1.7. Un atac este o cale generală pe care un criptanalist o poate urma
pentru a "sparge" sau descoperi secretele protejate de un cifru sau sistem
criptografic.

Atacurile nu sunt algoritmi precişi ci mai degrabă moduri de abordare pentru


construirea unor algoritmi care să spargă un sistem criptografic.
Atacurile criptografice pot beneficia de constrângeri informaţionale care pot
reduce strategiile de atac ce pot fi folosite, atacatorul dispune de unele din
informaţiile de mai jos şi poate alege strategia care se potriveşte cel mai bine
informaţiilor pe care le deţine:
• numai text criptat atacatorul dispune numai de text criptat, adesea informaţiile
statistice rezultate din textul criptat pot oferi detalii care pot conduce la spargerea
cifrului. Dacă o metodă criptografică nu poate rezista acestui tip de atac este complet
nesigură.
• text în clar cunoscut atacatorul dispune de un volum considerabil de text în clar şi
textul criptat corespunzător.
• text în clar definit atacatorul poate trimite text în clar arbitrar şi poate obţine textul
criptat corespunzător. Un text în clar bine ales poate dezvălui anumite detalii de
interes pentru atacator.
• text criptat definit atacatorul poate trimite text criptat şi apoi să obţină versiunea
decriptată.
• cheie aleasă atacatorul poate specifica schimbări ale unui bit din cheie sau
anumite relaţii intre cheile de criptare folosite.
• cronometrare atacatorul poate cronometra duratele operaţiilor de criptare si poate
folosii aceste informaţii pentru a afla detalii despre cheie sau datele criptate.
• man in the middle (intermediarul) se presupune că atacatorul poate intercepta
mesajele transmise şi poate pretinde că este destinatarul mesajelor venite de ambele
parţi.

Adeseori o strategie de atac este uşor de ales şi urmat dându-se


constrângerile informaţionale enunţate mai sus. Iată câteva strategii de atac:
• Brute Force sau căutarea exhaustivă a cheii presupune căutarea unei chei de
decriptare până atunci când textul rezultat în urma decriptării cu una dintre chei are
sens.
• CodeBook sau abordarea clasică a spargerii codurilor presupune colecţionarea de
transformări din text în clar în text cifrat şi reciproc.
• Criptanaliză diferenţială atacatorul trebuie să găsească diferente statistice între
valorile cheilor şi transformările asupra textului criptat, iar apoi trebuie să utilizeze
suficient text în clar pentru a putea recupera cheia de criptare.
• Criptanaliza liniară atacatorul trebuie să găsească o aproximaţie liniară a S-box-
urilor care au utilizat biţi din cheia unui cifru şi să o folosească pentru a descoperi
cheia.
• Programarea cheii atacatorul alege chei care produc efecte cunoscute în runde
diferite ale criptării.
• Birthday attack atacatorul foloseşte paradoxul zilei de naştere, ideea este că
atacatorul va găsi mai uşor 2 valori care se potrivesc decât o valoare care să se
potrivească unei valori date.
• Codificare formală atacatorul trebuie să construiască ecuaţii pentru cheie folosind
textul în clar şi pornind de la designul algoritmului. După ce ecuaţiile sunt construite
atacatorul trebuie să le rezolve.
• Corelaţii de obicei la cifrările de tip stream atacatorul trebuie să distingă datele de
elementele de confuzie.
• Dicţionar este o îmbunătăţire la atacul de tip brute force. Atacatorul trebuie să
formeze o listă de chei probabile şi să le testeze una câte una.
Capitolul 2
Criptosisteme clasice
2.1 Cifrul lui Caezar
2.1.1 Descriere generală
Pentru a putea comunica informaţii private, oamenii au găsit adesea metode
de la cele mai simple până la cele mai complexe. Pentru a face o astfel de metodă să
funcţioneze este nevoie ca partenerii de comunicaţie să se pună de acord asupra
unei metode de secretizare a informaţiei transmise.
Spre exemplu dacă un mesaj codificat ajunge la destinatar şi acesta nu
cunoaşte o metodă prin care să-l poată decodifica şi citi informaţia care îi este
transmisă, atunci mesajul îi este complet inutil.
Una dintre formele cele mai simple de codificare a mesajelor despre care se
spune că ar fi fost folosită de împăratul roman, Iulius Caesar, pentru a comunica cu
generalii săi este deplasarea la dreapta sau stânga a alfabetului cu un număr de
poziţii, fiecare literă fiind transformată în litera anterior existentă pe poziţia respectivă.
În cazul de faţă se spune că Iulius Caesar folosea o deplasare cu 3 poziţii la
dreapta a alfabetului, producând astfel o transformare care a fost foarte eficientă în
vremea aceea deoarece foarte puţini dintre inamicii săi puteau citi sau scrie, fără să
mai luăm în calcul metodele criptanalitice.
Presupunând că Caesar ar fi avut un duşman care nu ar fi fost analfabet,
acesta ar fi avut destul de puţine şanse pentru a rezolva cifrul fiindcă din câte se ştie
cele mai vechi metode criptanalitice descoperite în care se relatează despre metoda
analizei frecventei datează din jurul anului 1000 e.n. şi au fost descoperite în lumea
arabă.
În ciuda faptului că este un cifru relativ uşor de "spart" a supravieţuit o
perioadă destul de îndelungată, fiind folosit de armata rusă până în jurul anului 1915,
aceasta refuzând înlocuirea lui cu alte metode mai complexe datorită faptului că
soldaţii ruşi nu puteau stăpâni foarte bine aceste metode.
Desigur, criptanaliştii germani şi austrieci nu au întâmpinat dificultăţi deosebite
în descifrarea mesajelor secrete ale armatei ruse. O aplicare a acestui cifru ar putea
fi transformarea sa într-un cifru de tip substituţie poli-alfabetică în care după criptarea
unei litere alfabetul folosit să fie din nou deplasat cu un număr de poziţii.

2.1.2 Descriere matematică


Acest mod de criptare poate fi definit şi reprezentat în aritmetica modulo n,
transformând mai întâi literele alfabetului în cifre după cum urmează:
A = 0,B = 1, . . . ,Z = 25.

Definiţia 2.1.1. Fie a şi b doi întregi şi n un întreg pozitiv. Atunci scriem a ≡ b(mod n)
dacă n (b − a ) . Fraza a ≡ b(mod n) este numită congruenţă şi va fi citită "a este
congruent cu b modulo n", întregul n fiind numit modul.

Dacă vom divide pe a şi b prin n, vom obţine un cât şi un rest, unde restul va fi
între 0, n − 1 , de aici stabilim următoarele relaţii a = q1 n + r1 şi b = q 2 n + r2 , unde r1 şi r2
între 0, n − 1 , iar conform definiţiei, trebuie să aibă loc relaţia r1 = r2.
Expresia a mod n este interpretată ca fiind reducerea lui a modulo n.
Aritmetica modulo n (adunarea(+), multiplicarea(*)) este definită analog ca în Z cu
diferenţa că rezultatul este redus modulo n. Următoarele proprietăţi pot fi
demonstrate foarte uşor:
1. ∀a, b ∈ Z n , a + b ∈ Z n
2. ∀a, b ∈ Z n , a + b = b + a
3. ∀a, b, c ∈ Z n , (a + b) + c = a + (b + c)
4. 0 este element neutru pentru adunare, adică ∀a ∈ Z n , a + 0 = 0 + a = a
5. există un invers pentru fiecare ∀a ∈ Z n care este m − a . Astfel:
a + (m − a) = (m − a) + a = 0
6. ∀a, b ∈ Z n , a ∗ b ∈ Z n
7. ∀a, b ∈ Z n , a ∗ b = b ∗ a
8. ∀a, b, c ∈ Z n , (a ∗ b) ∗ c = a ∗ (b ∗ c)
9. 1 este element neutru pentru multiplicare, adică ∀a ∈ Z n , a ∗ 1 = 1 ∗ a
10. multiplicarea este distributivă faţă de adunare
∀a, b, c ∈ Z n , (a + b) ∗ c = a ∗ c + b ∗ c

Pentru a defini codul lui Caesar vom considera cazul alfabetului englezesc
care conţine 26 de caractere şi din acest motiv se va lucra în Z26.

Definiţia 2.1.2. Un sistem criptografic bazat pe deplasare în Z26 este definit astfel:
P = C = K = Z 26 . Pentru 0 ≤ K ≤ 25 , definim:
ek ( x) = ( x + K ) mod 26
şi
d k ( y ) = ( y − K ) mod 26
unde x, y ∈ Z 26 şi x reprezintă textul în clar şi y textul criptat.
2.1.3 Algoritm
Pentru criptarea efectivă a unui text se va face mai întâi o conversie de forma
a ↔ 0, b ↔ 1, c ↔ 2,..., z ↔ 25 şi trecerea valorilor într-un vector de întregi care va
reprezenta mesajul, fie el în forma în clar sau forma criptată.

Algoritmul 2.1.1. Criptarea cu cifrul lui Caezar


1.criptare _ Caesar ( M n , k )
2.i ← 0
3.while(i ≤ n)
3.1.C i ← M i + k
3.2.i + +
4.return _ C i
Algoritmul 2.1.2. Decriptarea cu cifrul lui Caezar

1.decriptare _ Caesar (C n , k )
2.i ← 0
3.while(i ≤ n)
3.1.M i ← C i − k
3.2.i + +
4.return _ M i

2.1.4 Exemplu
Exemplul 2.1.1. Criptarea cu cifrul lui Caezar
Text în clar: ATACATI FLANCUL DREPT
Cheie +3
Text criptat: DWDFDWL IODQFXO GUHSW
Exemplul 2.1.2. Decriptarea cu cifrul lui Caezar

Text criptat: WULPLWH DUPDWD


Cheie -3
Text în clar: TRIMITE ARMATA

2.2 Cifrarea afină


2.2.1 Descriere generală
Cifrarea afină este un caz particular al cifrării prin substituţie, fiind o cifrare
monoalfabetică şi simetrică. Acest tip de cifrare este vulnerabil la toate tipurile de
atacuri care sunt posibile pentru cifrarea prin substituţie precum şi la alte tipuri de
atacuri. Principala slăbiciune a cifrului constă în faptul că dacă atacatorul poate
descoperi textul în clar a două caractere (prin analiza frecvenţei, brute force, sau pur
şi simplu ghicind) poate apoi obţine cheia rezolvând un sistem de două ecuaţii cu
două necunoscute.

2.2.2 Descriere matematică


Teorema 2.2.1. Congruenţa ax ≡ b(mod n) are soluţie unică pentru x ∈ Z n pentru
∀b ∈ Z n dacă şi numai dacă cmmdc(a, n) = 1 .

Definiţia 2.2.1. Fie a ≥ 1, m ≥ 2 două numere întregi. Dacă cmmdc(a, n) = 1 spunem că


a şi m sunt numere relativ prime între ele. Numărul de numere relativ prime între ele
din Zn este definit ca fiind φ (m) (funcţia Euler).

Definiţia 2.2.2. Fie a ∈ Z n , inversul lui a faţă de operaţia de multiplicare în Zn se


notează cu a −1 mod n şi este un element a ∗ care satisface relaţia
aa ∗ = a ∗ a = 1(mod n) . Pentru m fixat se foloseşte notaţia a ∗ care înlocuieşte a −1 mod n .
Definiţia 2.2.3. Un sistem criptografic afin cu n=26 (Z26) este definit ca fiind
P = C = Z26 şi
K = {(a, b ) ∈ Z 26 × Z 26 : cmmdc(a,26) = 1}

Pentru k = (a, b) ∈ Z 26 definim funcţia de criptare:


ek = (ax + b) mod 26
şi funcţia pentru decriptare
d k = a −1 ( y − b) mod 26
unde x, y ∈ Z 26

2.2.3 Algoritm
Algoritmul criptării afine este o modificare trivială a algoritmului criptării prin
metoda lui Caesar. Si in acest caz se cere o conversie prealabilă a textului identică
metodei de criptare a luCaesar.
Vom presupune implementată procedura cmmdc pentru calcularea celui mai
mare divizor comun, folosită pentru a verifica faptul că a şi lungimea alfabetului folosit
sunt numere prime între ele, în caz contrar mesajul criptat nu va putea fi decriptat.

Algoritmul 2.2.1. Criptare afină


1.criptare _ afina ( M n , k , lung _ alfabet )
2.if (cmmdc(a, lung _ alfabet > 1))
2.1. _ incheie _ procedura
3.i ← 0
4.while(i < n)
4.1.C i = a ∗ M i + b
4.2.i + +
5.return _ C i

Algoritmul 2.2.2. Decriptare afină


1.decriptare _ afina (C n , k , lung _ alfabet )
2. A ← 1 / a
3 B ← −b / a
4.k ← ( A, B)
5. _ criptare _ afina (C n , k , lung _ alfabet )
2.3 Codul Vigenere
2.3.1 Descriere generală
Cifrul a fost inventat de către Giovan Batista Belaso şi descris în cartea sa "La
cifra del. Sig. Giovan Batista Belaso" în 1553, fiind o versiune simplificată a unui cifru
de substituţie polialfabetică, inventat de Leon Batista Alberti în jurul anului 1465.
A fost atribuit eronat lui Blaise de Vigenere în secolul 19, care a inventat un
cifru asemănător cu o singură diferenţă insă, şi anume modul în care cheia de
criptare era generată. Aceasta începea cu un cuvânt scurt la care se adăuga textul în
clar iar apoi procedura de criptare se aseamănă cu cea a lui Giovan Batista Belaso.
Cifrul Vigenere aşa cum este el cunoscut a fost folosit din secolul 16 pentru a
dezvolta criptosisteme până în epoca modernă, el stând la baza maşinii criptografice
germane Enigma, folosită în cel de-al doilea război mondial. Combinat cu un sistem
de criptare prin deplasare codul Vigenere este un sistem criptografic puternic, dar
totuşi susceptibil la o analiză a frecventei codul poate fi spart. Puterea sa a stat în
faptul că, utilizându-se substituţii polialfabetice mai multe litere din textul în clar
puteau fi criptate cu aceeaşi literă în textul criptat. Aceasta a fost o trăsătură
puternică a acestui cifru de-a lungul secolului 16.
Codificarea prin acest cifru presupune existenţa unei chei de cifrare şi a unui
tabel ce conţine literele alfabetului aşezate pe linii, în total 26 de linii, literele de pe
linia n sunt deplasate cu o poziţie la dreapta faţă de literele de pe linia n−1. Criptarea
se realizează scriind textul în clar pe o linie, sub el se scrie cheia, repetând cheia
dacă este mai mică decât textul în clar. Fiecare literă din textul în clar va fi criptată
căutând în tabelul polialfabetic din figura următoare, litera care se află la intersecţia
liniei care începe cu litera din cheie şi coloanei care conţine ca primă literă, litera din
textul în clar.
Decriptarea mesajului se face găsind poziţia literei criptate pe linia indicată de
cheia de criptare, prima literă de pe acea coloană fiind considerată literă a textului în
clar.
2.3.2 Descriere matematică
Definiţia 2.3.1. Considerăm m un întreg pozitiv pentru care
definim P = C = K = ( Z 26 ) m , iar pentru o cheie k = (k1 , k 2, ..., k m ) funcţiile de criptare
respectiv decriptare au următoarea formă
ek ( x1 , x 2, ..., x m ) = Pi + K i (mod 26) = ( x1 + k1 , x 2 + k 2 ,..., x m + k m , )
şi
d k ( y1 , y 2, ..., y m ) = C i + K i (mod 26) = ( y1 − k1 , y 2 − k 2 ,..., y m − k m , )

2.3.3 Algoritm
Algoritmul 2.3.1. Criptare prin metoda Vigenere
1. _ criptare _ Vigenere( P, K , lungime _ mesaj )
2.while(i < lungime _ mesaj )
2.1. for ( j = 0, lungime _ cheie)
2.1.2.C i ← Pi + K i
2.1.2.i + +
2.2.i + +
3.return _ C i
Algoritmul 2.3.2. Decriptare prin metoda Vigenere
1. _ decriptare _ Vigenere(C , K , lungime _ mesaj )
2.while(i < lungime _ mesaj )
2.1. for ( j = 0, lungime _ cheie)
2.1.2.Pi ← C i − K i
2.1.2.i + +
2.2.i + +
3.return _ C i

2.4 Codul Hill


2.4.1 Descriere generală
Există două metode de bază prin care se poate evita un atac criptanalitic prin
analiza frecvenţei supra unui text criptat. Prima metodă presupune criptarea
polialfabetică a textului, şi anume pentru aceeaşi literă a alfabetului textului în clar să
existe mai multe litere diferite în textul criptat. Această soluţie a fost oferită de
criptosistemul Vigenere şi alte criptosisteme polialfabetice.
A doua abordare este criptarea textului în clar prin împărţirea sa în grupuri de
n litere şi criptarea grupului spre deosebire de criptarea literă cu literă. Sistemul
Playfair ascunde relativ bine comportamentul specific al literelor, dar un sistem care
să fie capabil să cripteze un număr variabil de litere ar fi fost de preferat.
În 1929 Lester S. Hill a propus un sistem algebric capabil să cripteze grupuri
de câte n litere, unde n este un întreg pozitiv. La vremea respectivă calculele
aferente criptării şi decriptării ar fi putut fi făcute pe o foaie de hârtie fără prea multă
greutate pentru grupuri de până la 5 litere.
Dincolo de această cifră dificultatea calculelor ar fi devenit o povară. Odată cu
dificultatea efectuării calculelor creşte şi dificultatea spargerii cifrului, se pare că un
astfel de sistem care ar fi folosit grupuri de 10 litere ar fi destul de greu de spart. Se
pare ca Hill împreună cu un partener, Weisner au depus o cerere de brevetare a unei
maşini mecanice (denumită Message Protector) care folosea matrici involuntare
( A = A −1 ) pentru a uşura munca criptării şi decriptării mesajelor.
Dispozitivul inventat de ei este descris în specificaţiile tehnice ca fiind mai
degrabă un identificator de autenticitate. Împreună cu maşina venea o metodă prin
care inventatorii propuneau unităţilor bancare o modalitate prin care să verifice dacă
datele de pe cecuri au fost modificate.
Ideea lor nu a avut succes, majoritatea potenţialilor clienţi nefiind interesaţi de
o maşină care putea să multiplice matrici. Codul Hill implementat de maşina pe care
a brevetat-o presupune ca toate calculele să fie făcute modulo 26. Înainte de a
începe criptarea efectivă literele alfabetului vor fi numerotate, fiecare primind numere
de la 0 la 25 inclusiv.
Pentru criptarea textului se alege aleator o matrice inversabilă ( K n ∈ K ) de
dimensiune n × n care va reprezenta cheia de criptare. Textul în clar va fi împărţit în
grupuri de mărime n care vor fi considerate matrici ( M n ∈ M ) de dimensiune n × 1.
Pentru a cripta mesajul vom considera (C n ∈ C ) definită astfel: C n = An × M n (mod 26) .
Decriptarea se va face calculând inversa matricii An astfel Dn = An−1 × M n (mod 26) .

2.4.2 Descriere matematică


Acest mod de criptare se bazează pe aritmetica modulo-n a matricelor
pătratice din Z26. În cadrul aritmeticii modulo-n a matricilor pătratice adunarea şi
multiplicarea (notate + şi respectiv, *) sunt definite analog operaţiilor din M m×m ( Z n ) .
Diferenţa constă în faptul că rezultatul este redus modulo-n.
La fel ca în cazul utilizării cifrului Caesar litere alfabetului trebuie transformate
în cifre din intervalul [0, 25]. Înainte de a defini acest tip de criptosistem trebuie
introduse câteva noţiuni din aritmetica matricilor modulo-n.

Definiţia 2.4.1. Fie matricile A şi B aparţinând de M m×m ( Z n ) spunem că A ≡ B dacă


între aij ∈ A, bij ∈ B există relaţia aij ≡ bij , cu, _ i, j = 1, m .

Definiţia 2.4.2. Fie A o matrice, A ∈ M m×m ( Z n ) spunem despre matricea A că este


inversabilă dacă există o matrice B ∈ M m×m ( Z n ) astfel încât:
AB = BA = 1
B se va numi inversa lui A şi vom nota acest lucru prin A −1 = B mod n .

Definiţia 2.4.3. Fie A o matrice, A ∈ M m×m ( Z n ) determinantul matricii A este


det( A) = a(mod n) .

Teorema 2.4.1. Daca A este o matrice aparţinând de A ∈ M m×m ( Z n ) , A este


inversabilă dacă şi numai dacă cmmdc(det( A), n) = 1 .
Definiţia 2.4.4. Un criptosistem bazat pe cifrul Hill, unde lungimea alfabetului este
n = 26( Z 26 ) , este definit pentru P = C = Z 26 şi
K = {A ∈ M m×m ( Z 26 ) : cmmdc(det( A),26) = 1}
pentru cheia k = A ∈ K , textul în clar p ∈ P scris sub formă de vector cu m
componente definim funcţia de criptare
ek ( x) = Ax mod(26)
şi funcţia pentru decriptare
d k ( y ) = A −1 y mod(26)
unde x, y ∈ M m×m ( Z n ) .

2.4.3 Algoritm
Pentru algoritmii de mai jos se presupune că literele textului în clar dar şi ale
textului criptat sunt puse intr-o corespondenţă cu cifrele de la 0 la 25 de forma:
a ↔ 0, b ↔ 1, c ↔ 2,..., z ↔ 25 . După crearea acestei corespondenţe textul în clar
trebuie scris sub forma a t vectori obţinuţi prin împărţirea textului în clar în grupuri de
câte m elemente.
Dacă pentru ultimul vector avem un număr de elemente mai mic decât m vom
repeta ultima literă pentru completarea vectorului. Algoritmul pentru criptare este
următorul, (toate operaţiile sunt modulo-n):

Algoritmul 2.4.1. Criptare Hill


1. _ criptare _ Hill ( M n , k , n)
2.if (cmmdc(det( M n ), n) > 1)
2.1 _ incheie _ procedura
3. for (i = 1, m)
3.1.while(col < t )
3.1.1. for ( j = 1, m)
3.1.1.1.C ij = Aij ∗ M j ,t
3.1.2.col + +
4. _ return _ C ij

Algoritmul pentru decriptare este asemănător cu cel pentru criptare cu singura


diferentă ca de data aceasta se foloseşte matricea A −1 care trebuie calculată apriori,
ea fiind înmulţită cu matricea Cn, matricea textului criptat.
Algoritmul 2.4.2. Decriptare Hill
1. _ decriptare _ Hill (C n , k , n)
2. for (i = 1, m)
2.1.while(col < t )
3.1.1. for ( j = 1, m)
3.1.1.1.M ij = Aij−1 ∗ C j ,t
3.2.col + +
4. _ return _ M ij

Capitolul 3
Criptosisteme simetrice
Criptosistemele bazate pe cheie simetrică asigură confidenţialitatea mesajelor
transmise între doi parteneri de comunicaţie prin folosirea aceleiaşi chei atât pentru
criptare cât şi pentru decriptare. Acest fapt este motivul pentru care aceste
criptosisteme sunt numite cu cheie simetrică.

Definiţia 3.0.5. Un criptosistem cu cheie simetrică este un tuplu de forma


( P, C , K , E , D) care îndeplineşte următoarele cerinţe:
1. P este un set finit de posibile texte în clar
2. C este un set finit de posibile texte criptate
3. K este un set finit de posibile chei de criptare
4. Pentru fiecare cheie k ∈ K există o regulă de criptare ek ∈ E
şi o regulă corespunzătoare de decriptare d k ∈ D . Fiecare ek : P → C şi
d k : C → P funţionează astfel încât:
d k ((ek )) = x
pentru orice text în clar x ∈ P .

3.1 Cifrare de tip flux (stream)


Un cifru de tip stream este un algoritm de criptare cu cheie simetrică. Astfel de
algoritmi pot fi concepuţi să fie extrem de rapizi, mult mai rapizi decât oricare alt
algoritm de tip bloc. În timp de algoritmii de tip bloc lucrează cu blocuri de biţi,
algoritmii de tip stream operează cu unităţi mai mici de date, de obicei la nivel de bit.
Criptarea anumitor porţiuni de text în clar cu un algoritm de tip bloc va avea ca
rezultat acelaşi text criptat atunci când se foloseşte aceeaşi cheie, cu un algoritm de
tip flux de date aceste subdiviziuni ale textului vor varia în textul criptat, acest lucru
depinzând de momentul în care vor fi întâlnite în textul în clar atunci când se
desfăşoară procesul de criptare.
Un cifru de tip flux generează ceea ce se cheamă un flux al cheii de criptare,
iar criptarea este obţinută prin combinarea fluxului cheii de criptare cu textul în clar.
De obicei se foloseşte operaţia XOR la nivel de bit. Generarea cheii de cifrare poate
fi făcută independent de textul în clar sau de textul criptat, în acest caz se spune că
cifrul de tip flux este sincron. În cazul în care generarea cheii de criptare se face
dependent de mesaj cifrul se numeşte asincron.
Majoritatea algoritmilor sunt de primul tip.

Definiţia 3.1.1. Fie K mulţimea de chei posibile şi P mulţimea mesajelor posibile.


În cazul prezent elementele lui P se vor numi caractere. Un cifru de tip stream este
definit prin ek : P × M → C unde ek are forma:
ek ( p, k ) = c = c1c 2 c3
funţia ek criptează mesajul p = p1 p 2 p3 ... ∈ P ca fiind un şir de caractere
c = c1c 2 c3 ... ∈ P folosind o cheie k = k1 k 2 k 3 ... ∈ K . Inversa funţiei ek este funcţia d k
definită astfel:
d (c, k ) = p1 p 2 p3 ... = p
care pentru aceleaşi elemente enumerate va avea ca rezultat textul în clar.
În mod tipic caracterele din P şi cheile din K sunt cifre binare sau octeţi, pentru
a păstra compatibilitatea cu sistemele de operare, unde intrările şi ieşirile sunt
realizate prin intermediul fluxurilor de date. Desigur fluxul cheii de criptare trebuie
păstrat secret. Adeseori nu cheia de criptare este cea care este cunoscută de
ambele părţi implicate în comunicaţie ci o cheie secretă din care se poate genera
cheia de criptare.

3.1.1 Codul Vernam sau One Time Pad


Descriere generală
Este poate unul dintre cele mai faimoase exemple de cifru care este teoretic
imposibil de "spart". Cifrul a fost inventat de Gilbert Vernam, inginer la AT&T, şi
perfecţionat împreună cu Joseph Mauborgne, căpitan în cadrul armatei S.U.A.
În acest cifru textul în clar este combinat cu o cheie obţinută aleator. Mai
precis fiecare caracter sau fiecare bit al mesajului, împreună cu fiecare bit al cheii,
este supus operaţiei XOR pe biţi. Astfel lungimea cheii trebuie să fie cel puţin egală
cu lungimea mesajului. Din punct de vedere teoretic nu exită nici o posibilitate de a
decripta mesajul fără a cunoaşte cheia. Cheia este deci un element de securitate
important în cadrul acestui cifru, ea poate fi folosită o singură dată şi obţinută în mod
complet aleator.
Altfel cifrul poate fi compromis foarte uşor. Dacă în generarea cheii se
foloseşte un algoritm care generează biţii cheii respectând o structură atunci
securitatea cifrului este redusă considerabil, deoarece în acest caz criptograma
rezultată respectă o structură şi poate fi supusă unor atacuri criptanalitice.
Cheia este folosită numai o singură dată pentru a cripta şi decripta un mesaj,
de aici numele de "one time pad". Spre exemplu dacă aceeaşi cheie ar fi folosită
pentru două mesaje atunci un atacator care se presupune ar fi interceptat cele două
mesaje ar putea foarte uşor calcula c _ c0 din cele două criptograme şi ar obţine
cheia, lucru care inevitabil conduce la obţinerea de informaţii despre textul în clar.
Pe lângă aceasta sunt dezavantaje evidente ale cifrului Vernam în ceea ce
priveşte generarea cheii de criptare şi transportul cheii între părţile comunicante.
Totuşi cele mai practice metode de criptare folosesc conceptele prezente în acest
cifru.
Generatorul aleator este înlocuit cu un generator pseudo-aleator, cheile
obţinute în urma utilizării unui astfel de generator sunt asemănătoare cu cele ale
generatoarelor aleatoare cu diferenţa că sunt obţinute în urma unui algoritm
determinist.
În practică astfel de generatoare se bazează pe modurile de operare ale
cifrurilor de tip bloc şi pe regiştrii de deplasare cu feedback sau revenire. Avantajul
acestui cifru constă în faptul ca poate fi dovedit a fi sigur.
Presupunând că un atacator poate intercepta un mesaj care conţine un bit.
Alice şi Bob vor să schimbe mesajul da=1, nu=0. Anterior transmiterii mesajului Alice
şi Bob au schimbat cheia k obţinută în urma unei experienţe aleatoare. Mai întâi se
presupune că oricare din mesaje poate fi transmis, fie da, fie nu.
Adversarul, Eve interceptează criptograma c care în mod evident criptează fie
da, fie nu. Din moment ce cheia a fost aleasă aleator Eve nu poate decât să
ghicească conţinutul mesajului deoarece exista 1 /2 şanse ca mesajul să fie da şi 1/2
şanse ca mesajul să fie nu. Însă Eve ştia aceste lucruri înainte să intercepteze
mesajul.
Deci nu a obtinut nici o informaţie semnificativă în urma interceptării mesajului.
Acest lucru rămâne valabil şi în cazul în care una din posibilităţi are probabilitate mai
mare de a se întâmpla.
Un mare dezavantaj al cifrului Vernam constă în faptul că nu protejează
mesajul împotriva eventualelor modificări survenite pe parcursul transmisiei. Dacă un
atacator va modifica mesajul astfel incât după decriptare să aibă sens, destinatarul
nu va putea observa acest lucru.

Descriere matematică
Definiţia 3.1.2. Un criptosistem bazat pe cifrul Vernam este un tuplu de forma
( P, C , K , E , D) care trebuie să îndeplinească următoarele condiţii:
1. P este un set finit de posibile texte în clar
2. C este un set finit de posibile texte criptate
3. K este un set finit de posibile chei de criptare
4. P = K = C = (0,1) şi funcţia de criptare este definită astfel
ek : {0,1}× {0,1} → {0,1}
e k ( p, k ) = p ⊕ k
unde p este un mesaj din P şi k este o cheie din K. Pentru funcţia de
decriptare d k : {0,1}× {0,1} → {0,1}considerăm c din C si avem:
d k ( c, k ) = c ⊕ k
pentru aceste operaţii p este de forma p = p1 p 2 p3 ... ∈ P ., k este de forma
k = k1 k 2 k 3 ... ∈ K şi c este de forma c = c1c 2 c3 ... ∈ P . Prin semnul ⊕ am simbolizat
XOR pe biţi(sau exclusiv).

Algoritm
Algoritmul 3.1.1. Algoritm criptare Vernam
1. _ criptare _ Vernam( p n , k n )
2.i ← 0
3.while(i <= n)
3.1.ci = pi ⊕ k i
4. _ return _ ci

Algoritmul 3.1.2. Algoritm decriptare Vernam


1. _ decriptare _ Vernam(c n , k n )
2.i ← 0
3.while(i <= n)
3.1. pi = ci ⊕ k i
4. _ return _ pi

Exemplu
Înainte de a prezenta un exemplu vom presupune că literele alfabetului suferă
o conversie de forma celor de la criptosistemele clasice:
a ↔ 0, b ↔ 1, c ↔ 2,..., z ↔ 25 .
Exemplul 3.1.1. Criptare Vernam
Presupunem că Alice doreşte să transmită mesajul "TRIMIT AJUTOR" folosind
un canal de comunicaţie nesigur. Atât ea cât şi Bob se presupune că au obţinut
printr-o metodă necunoscută un set de chei generate absolut aleator şi că una dintre
aceste chei este "AFVKGHOPERTS". Pentru a cripta mesajul ei vor proceda în felul
următor, operaţiile sunt în aritmetica modulo-26.
Text în clar: TRI M I TAJ UT OR
Cheie: AFVKGHOPE RT S
Text în clar: 19 17 8 12 8 19 0 9 10 19 14 17
Cheie 0 5 21 10 6 7 14 15 4 17 19 18
Criptograma: 19 22 3 22 14 0 14 24 14 10 7 9
Text criptat TWDW OAO Y O K HJ
Exemplul 3.1.2. Decriptare Vernam
Pentru a obţine textul în clar din textul criptat de mai sus pur şi simplu scădem din
valorile literelor criptogramei valorile literelor cheii. Acolo unde valorile vor fi negative,
ţinând cont de faptul că lucrăm în aritmetica modulo-26 aceste valori for semnifica
26−V , unde V este valoarea negativă.
Text criptat: T W D W O A O Y O K H J
Cheie: AF V K GH O PER TS
Criptograma: 19 22 3 22 14 0 14 24 14 10 7 9
Cheie: 0 5 21 10 6 7 14 15 4 17 19 18
Text în clar: 19 17 –18 12 8 -7 0 9 10 -7 -12 -9
Text în clar: T R I M I T A J U T O R