You are on page 1of 237

See discussions, stats, and author profiles for this publication at: https://www.researchgate.

net/publication/308791446

Securitatea Informatiei vol 1 (Criptografie)

Book · April 2007

CITATIONS READS

0 1,310

1 author:

Adrian Constantin Atanasiu


University of Bucharest
62 PUBLICATIONS   289 CITATIONS   

SEE PROFILE

Some of the authors of this publication are also working on these related projects:

Formal Linguistic View project

Parikh Matrices View project

All content following this page was uploaded by Adrian Constantin Atanasiu on 03 October 2016.

The user has requested enhancement of the downloaded file.


Securitatea Informaţiei

Vol. 1
(Criptografie)

Adrian Atanasiu

Editura INFODATA Cluj


3

Prefaţă
Criptografia este ştiinţa comunicării informaţiei sub o formă securizată. Istoria ei
este veche şi fascinantă. Mesaje ascunse sunt descoperite ı̂n Biblie; Herodot menţionează
o serie de procedee de steganografie folosite de vechii greci; Cezar foloseşte un sistem
de criptare care ı̂i poartă numele; decriptarea telegramei Zimmermann a dus la intrarea
Statelor Unite ı̂n conflictul din 1914-1918. Şi – ı̂n fine – cine nu a auzit de celebra maşină
de criptat Enigma ?
Societatea actuală, cu un volum de date care se multiplică rapid, a dat noi valenţe şi a
creat noi oportunităţi de dezvoltare a criptografiei. Utilizarea Internetului a sporit şi mai
mult importanţa asigurării securităţii informaţiei, dar şi a autentificării ei. Acum dome-
niul şi-a lărgit competenţele şi s-a extins atât de mult ı̂ncât a fost necesară redefinirea
sa. Criptografia a devenit numai un capitol a ceea ce se numeşte astăzi Securitatea
informaţiei. Alte capitole care merită fi menţionate sunt: protocoale de semnătură elec-
tronică, comerţ electronic (Digital Business), infrastructură cu chei publice(PKI), arhi-
tectura de securitate a sistemelor de calcul (hard şi soft), securitatea reţelelor, securitatea
fluxului informaţional, securitatea bazelor de date, standarde şi protocoale de gestiune
a cheilor, 0 - knowledge, partajarea secretelor, criptografie vizuală, watermarking, crip-
tografie nestandard (cuantum şi moleculară), standarde de testare şi certificare, protocoale
criptografice ı̂n medii juridice. Şi zona de interes nu este nici pe departe epuizată. Unele
subiecte se dezvoltă rapid şi generează la rândul lor domenii noi. De exemplu, reţelele
wireless sau smart-cardurile necesită abordări separate, datorită interesului tot mai mare
pe care ı̂l ridică ı̂n societatea actuală. Deci, aşa cum ı̂n anii 60 Knuth avea ı̂n vedere o
prezentare a artei programării calculatoarelor, aşa ar fi interesant de construit o enciclo-
pedie a artei securităţii informaţiei. O enciclopedie care se ı̂mbogăţeşte zilnic.
Lucrarea de bază este un suport de curs predat la Facultatea de Matematică şi Infor-
matică a Universităţii Bucureşti. Mult timp acest curs a fost opţional; după trecerea la
sistemul Bologna, s-a luat ı̂n considerare importanţa domeniului şi interesul permanent al
studenţilor, astfel ı̂ncât studiul criptografiei a fost trecut ı̂n curicula generală. Materia are
ı̂n vedere atât o prezentare structurată istoric, cât şi o abordare preponderent teoretică,
capabilă să asigure baza fundamentală de cunoştinţe absolvenţilor care ulterior vor lucra
ı̂n domeniul securităţii informaţiei.
După prezentarea sistemelor simple de criptare (monoa-lfabetice, polia-lfabetice, me-
4

canice, fluide), studiul sistemelor de criptare bloc se ı̂ncheie cu prezentarea principalelor


sisteme utilizate astăzi: DES (Data Encryption Standard) şi AES (Advanced Encryption
Standard). Toate sistemele sunt analizate din trei puncte de vedere: criptare, decriptare,
criptanaliză, un rol deosebit de important având acesta din urmă. Nici un sistem de
criptare nu este acceptat dacă nu se demonstrează (teoretic) că rezistă la principalele
tipuri de atac: criptanaliză liniară, criptanaliză diferenţială, compromis spaţiu - timp,
atac meet-in-the middle, atacuri bazate pe frecvenţă. De aceea, discuţiile asupra acestor
tipuri de atac sunt detaliate.
O parte importantă a lucrării se referă la criptografia cu chei publice, construită fun-
damental pe o conjectură: ”P versus NP”, tema primei probleme a mileniului. Mai exact,
sistemele de criptare din această zonă se bazează pe probleme N P - complete (problema
factorizării, problema logaritmului discret, problema rucsacului) care asigură construirea
de funcţii polinomial neinversabile. Sistemele prezentate aici – RSA, El Gamal, Merkle-
Hellman, McElliece – ı̂şi bazează securitatea pe dificultatea acestor probleme. În plus,
construirea unei aritmetici pe mulţimea punctelor unei curbe eliptice a dat posibilitatea
utilizării acestei baze pentru adaptarea de sisteme criptografice având o serie de avantaje:
lungime mică a cheilor, viteză mare de criptare/decriptare, securitate sporită.
Volumul se ı̂ncheie cu un capitol dedicat generatorilor de numere pseudo-aleatoare,
componentă care ı̂nsoţeşte toate sistemele de criptare cu cheie publică, precum şi unele
sisteme simetrice de criptare (DES de exemplu).
Acesta este conţinutul primului volum al lucrării – materia predată timp de un semes-
tru. Va urma un al doilea volum, dedicat unor protocoale criptografice cunoscute. Anume,
protocoale de semnătură electronică, de gestiune a cheilor, de partajare a secretelor, de
comerţ electronic, de vot electronic, de securitate a poştei electronice. Fiecare astfel de
subiect poate constitui tema unui curs separat. În plus, vor mai fi prezentate: modalitatea
de construcţie a funcţiilor de dispersie criptografică (hash) precum şi probleme N P -
complete care stau la baza noilor sisteme – problema reprezentării, problema dualităţii
(perechile Weil - Tate din domeniul curbelor eliptice).
Autorul roagă pe cei care s-au lăsat seduşi de domeniul acesta fascinant, au citit cartea
de faţă şi au de făcut observaţii, corecturi sau sugestii să i se adreseze direct pe adresa
aadrian@gmail.com. Orice propunere constructivă este bine venită.
Capitolul 1

Sisteme de criptare

1.1 Caracteristicile unui sistem de criptare


Criptografia este o componentă a unui domeniu mult mai larg, numit securitatea infor-
maţiei. Obiectivele generale pe care le are ı̂n vedere un serviciu de securitate a informaţiei
pot fi sumarizate ı̂n:

1. Confidenţialitate (privacy): proprietatea de a păstra secretul informaţiei, pentru ca


aceasta să fie folosită numai de persoanele autorizate.

2. Integritatea datelor: proprietatea de a evita orice modificare (inserare, ştergere,


substituţie) neautorizată a informaţiei.

3. Autentificare: Proprietatea de a identifica o entitate conform anumitor standarde.


Este compusă din

(a) Autentificarea unei entităţi;


(b) Autentificarea sursei informaţiei;

4. Non - repudierea: Proprietatea care previne negarea unor evenimente anterioare.

Celelalte obiective legate de securitatea informaţiei (autentificarea mesajelor, semnături,


autorizare, validare, controlul accesului, certificare, timestamping, confirmarea recepţiei,
anonimitate, revocare) pot fi derivate din acestea.

Definiţia 1.1. Criptografia este studiul metodelor matematice legate de securitatea infor-
maţiei, capabile să asigure confidenţialitatea, autentificarea şi non-repudierea mesajelor,
precum şi integritatea datelor vehiculate ([?]).

5
6 CAPITOLUL 1. SISTEME DE CRIPTARE

Termenul criptografie ı̂nseamnă scriere secretă1 . Domeniul cuprinde atât operaţia de


criptare (cifrare) a unui text, cât şi eventualele ı̂ncercări de descifrare şi de aflare a cheii
de criptare. În unele lucrări, cadrul general de lucru este numit criptologie, termenul de
criptografie desemnând numai operaţia de cifrare şi descifrare legală.
Situaţia generală de care se ocupă criptografia este următoarea:

Expeditor - Destinatar
6

Criptanalist

Expeditorul (personalizat ı̂n majoritatea lucrărilor cu apelativul Alice) doreşte să trimită
destinatarului (numit Bob) un mesaj printr-un canal de comunicaţie, canal cu un grad
ridicat de nesiguranţă2 . Această insecuritate o prezintă un adversar criptanalist (Oscar)
care doreşte – din diverse motive – să cunoască şi – eventual – să modifice conţinutul
mesajului, deşi acesta nu ı̂i este destinat.
Această confidenţialitate solicitată de Alice şi Bob se rezolvă de obicei prin rescrierea
mesajului sub o formă care să nu poată fi ı̂nţeleasă de nici o persoană care l-ar putea
intercepta. Transformarea respectivă se numeşte criptare.
În general, hackerul Oscar poate avea două tipuri de comportament:

• Pasiv: el se mulţumeşte să intercepteze mesajele şi să le citească, folosindu-le ı̂n
scop personal;

• Activ: doreşte să modifice mesajele, să le schimbe ordinea sau să introducă propriile
sale mesaje, ı̂n intenţia de a fi acceptat de Bob drept Alice. În acest caz, mesajul va
trebui să verifice – ı̂nafară de condiţia de confidenţialitate – şi pe cea de autenticitate:
Bob trebuie să fie sigur că mesajul primit a fost de la Alice.
În unele cazuri, problema se poate complica prin faptul că există anumite mesaje pe
care Alice neagă că ı̂i aparţin, deşi le-a trimis chiar ea. În acest caz trebuie prevăzute
anumite protocoale care să ı̂ntărească proprietăţile de autentificare; proprietăţi care
să o silească pe Alice să ı̂şi recunoască propriile mesaje (non-repudiere).

În toate aceste scenarii nu există personaje pozitive sau negative. Orice serviciu de
criptare/decriptare are şi o secţie de criptanaliză. Se pot da numeroase exemple din
istorie care să arate rolul pozitiv al lui Oscar ı̂n anumite situaţii. În general, ı̂ntr-un
1
Cuvântul – inventat ı̂n 1658 de fizicianul englez Thomas Browne – este format din cuvintele greceşti
cryptos – ascuns şi grafie – scriere.
2
Canalul de comunicaţie poate suferi şi perturbări de ordin fizic: zgomote, ştergeri, demodulări etc;
studiul detectării şi corectării erorilor de de transmitere a informaţiei constituie tema altui domeniu al
securităţii informaţiei, numit Teoria Codurilor.
1.1. CARACTERISTICILE UNUI SISTEM DE CRIPTARE 7

triplet (expeditor, destinatar, criptanalist) nimeni nu are ı̂ncredere ı̂n nimeni. Variantele
studiate ı̂n care Alice are ı̂ncredere ı̂n Bob sau invers, sunt mult mai simple şi – de aceea
– extrem de rare.
Pentru a ı̂ncepe un studiu sistematic al domeniului, să stabilim ı̂ntâi terminologia
folosită uzual:
Un mesaj ı̂n forma sa originară este numit text clar. Expeditorul rescrie acest mesaj
folosind o metodă cunoscută numai de el (eventual şi de destinatar); spunem că el criptează
(sau cifrează) mesajul, obţinând un text criptat. Destinatarul primeşte textul cifrat şi ı̂l
decriptează ştiind metoda folosită pentru criptare; deci Alice şi Bob trebuie să stabilească
ı̂ntr-o etapă preliminară detaliile modalităţii de criptare şi de decriptare.
Algoritmul care realizează operaţiile descrise se numeşte sistem de criptare. Formal,
Definiţia 1.2. Un sistem de criptare este o structură (P, C, K, E, D), unde:
• P= {w | w ∈ V ∗ } este mulţimea ”textelor clare”, scrise peste un alfabet nevid V
(uzual V = {0, 1}).
• C= {w | w ∈ W ∗ } este mulţimea ”textelor criptate”, scrise peste un alfabet nevid
W (uzual W = V ).
• K este o mulţime de elemente numite chei.
• Fiecare cheie K ∈ K determină o metodă de criptare eK ∈ E şi o metodă de
decriptare dK ∈ D. eK : P−→ C şi dK : C−→ P sunt funcţii cu proprietatea
dK (eK (w)) = w, ∀w ∈ P.
În general se consideră C= {α | ∃m ∈ P, ∃k ∈ K, α = eK (m)}.
Funcţia eK este evident injectivă (de remarcat că această condiţie de injectivitate nu
este obligatorie pentru funcţia de decriptare dK ).
Dacă eK este bijectivă (şi deci dK = e−1
K ), sistemul de criptare se numeşte ”simetric”
sau sistem de criptare bloc.
Observaţia 1.1. Într-un sistem de criptare simetric cu P = C, funcţia de criptare este o
permutare. Altfel spus, dacă mulţimea textelor clare coincide cu cea a textelor criptate, o
criptare cu un sistem simetric nu face altceva decât o rearanjare (permutare) a textelor.
Un mesaj de intrare x este descompus ı̂n
x = x 1 x 2 . . . xn , xi ∈ P.
Apoi fiecare xi este criptat folosind regula de criptare eK , specificată de o cheie fixată
K ∈ K.
Deci Alice calculează yi = eK (xi ) (1 ≤ i ≤ n) şi obţine textul criptat
y = y1 y2 . . . yn , yi ∈ C
pe care ı̂l trimite prin canalul de comunicaţie. Bob primeşte mesajul y = y1 y2 . . . yn ,
pe care ı̂l decriptează folosind funcţia dK : xi = dK (yi ) (1 ≤ i ≤ n).
8 CAPITOLUL 1. SISTEME DE CRIPTARE

Pentru ca un sistem de criptare să fie considerat bun, trebuie ı̂ndeplinite trei criterii
(enunţate de Francis Bacon ı̂n sec. XV II):

1. Fiind date eK şi α ∈ P, este uşor de determinat eK (α);

2. Fiind date dK şi w ∈ C, este uşor de determinat dK (w);

3. α este imposibil de determinat din w, fără a cunoaşte dK .

Ultimul criteriu defineşte – sub o formă vagă – ideea de ”securitate” a sistemului.


La aceste criterii, Bacon adăuga şi o a patra regulă:

4 Textul criptat trebuie să fie un text banal, fără suspiciuni.

Această ultimă condiţie este utilizată astăzi doar de unele subdomenii al criptografiei,
cum ar fi steganografie sau watermarking.
În termeni de complexitate, prin ”uşor” se ı̂nţelege folosirea unui algoritm polinomial
de grad mic – preferabil algoritm liniar; o problemă se consideră ”imposibilă” dacă pentru
rezolvarea ei nu se cunosc decât algoritmi de complexitate exponenţială.

Observaţia 1.2. Întreaga disciplină numită ”criptografie” se bazează pe o conjectură no-


tată prescurtat P6= N P 3 (pentru detalii a se vedea [?]). P reprezintă clasa problemelor
rezolvabile prin algoritmi a căror complexitate este mărginită superior de o funcţie poli-
nomială ı̂n lungimea datelor de intrare. Modelul standard de calculabilitate este maşina
Turing. N P este clasa problemelor rezolvabile prin algoritmi nedeterministic polinomiali
(care sunt incluşi ı̂n algoritmii de complexitate cel puţin exponenţială). Evident, P⊆ N P,
dar se pare că problema egalităţii este nedecidabilă (ı̂n termeni matematici). Oricum,
pentru cei interesaţi, site-ul [?] este dedicat unei informări actualizate permanent a rezul-
tatelor şi ı̂ncercărilor de rezolvare a acestei probleme.

Exemplul 1.1. Unul din primele sisteme de criptare cunoscute este sistemul de criptare
Cezar. Conform istoricului Suetoniu, el a fost folosit de Cezar ı̂n corespondenţa sa.
Să considerăm alfabetul latin scris, ı̂n ordine
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Fie k un număr ı̂ntreg din intervalul [0, 25]. El se va numi ”cheie de criptare”. Re-
scriem alfabetul latin permutat ciclic, ı̂ncepând ı̂nsă cu litera având numărul de ordine
k (litera A are numărul de ordine 0). Această nouă scriere o aşezăm sub prima scriere,
astfel (am presupus k = 2):
ABCDEFGHIJKLMNOPQRSTUVWXYZ
CDEFGHIJKLMNOPQRSTUVWXYZAB
3
Aceasta este prima din cele cinci probleme ale mileniului, pentru rezolvarea cărora se acordă premii
de câte un milion dolari.
1.1. CARACTERISTICILE UNUI SISTEM DE CRIPTARE 9

Dacă Alice are un text clar pe care vrea să-l cripteze cu sistemul Cezar, ea va proceda
astfel:
Să presupunem că mesajul care trebuie criptat este NIMIC NOU. Alice va aşeza sub
fiecare literă a acestui text, litera aflată pe linia a doua din tabelul de sus, astfel:
NIMICNOU
PKOKEPQW
Textul criptat obţinut este P KOKEP QW (din motive suplimentare de securitate,
spaţiile dintre cuvinte se ignoră de obicei).
La primirea textului, Bob – care ştie că este vorba de sistemul de criptare Cezar –
va proceda astfel: el cunoaşte (fiind destinatar legal) cheia de criptare ek . Cheia sa de
decriptare este dk = e26−k . Pe baza ei Bob va putea construi cele două linii ale tabelului,
după care va proceda ca Alice: scrie textul criptat pe prima linie, iar pe a doua linie
determină literele corespunzătoare, conform tabelului.
În cazul k = 2, Bob va folosi drept cheie numărul e26−2 = e24 , iar tabelul (litera 24
corespunde lui Y) este
ABCDEFGHIJKLMNOPQRSTUVWXYZ
YZABCDEFGHIJKLMNOPQRSTUVWX
Literele P KOKEP QW determină pe a doua linie textul N IM ICN OU .
Să rescriem sistemul Cezar ı̂n termenii Definiţiei ??. Deoarece textele clare şi cele
criptate folosesc alfabetul latin, vom efectua ı̂n prima etapă o operaţie de ”codificare”:
asociem literelor numere ı̂ntregi din intervalul [0, 25]:
A B C D E F G H I J K L M
0 1 2 3 4 5 6 7 8 9 10 11 12
N O P Q R S T U V W X Y Z
13 14 15 16 17 18 19 20 21 22 23 24 25

În acest fel putem opera matematic pe un inel finit foarte simplu: Z26 . Vom avea
P = C = K= Z26 . Pentru un K ∈ K ales arbitrar (şi m ∈ P, α ∈ C) ,
eK (m) = m + K (mod 26)
şi
dK (α) = α − K (mod 26)
La nivel conceptual, există două tehnici de construcţie a sistemelor de criptare, definite
de Claude Shannon ı̂n 1949:
• Confuzie: Scopul este de a bloca orice informaţie obţinută prin analize statistice
sau redondanţe ale textului criptat.
O modalitate simplă de a obţine un grad ridicat de confuzie se bazează pe utilizarea
de substituţii. De exemplu, ı̂n cazul secvenţelor binare, putem complementa unele
subsecvenţe folosind anumite formule predefinite.
10 CAPITOLUL 1. SISTEME DE CRIPTARE

• Difuzie: Această tehnică disipează redondanţa specifică textului clar prin gene-
ralizarea ei la tot textul criptat. Practic, o modificare a unui singur caracter din
textul clar provoacă multiple modificări ı̂n textul criptat. Deci pentru distingerea
unei redondanţe din textul clar este necesară studierea unei cantităţi apreciabile de
text criptat.
O rafinare a conceptelor de confuzie şi difuzie conduce la ideea de secret perfect (perfect
secrecy). Un sistem de criptare are proprietatea de secret perfect dacă din textul criptat,
Oscar nu poate obţine nici o informaţie referitoare la textul clar.
Această idee poate fi formulată matematic astfel:
Definiţia 1.3. Un sistem de criptare este perfect secret dacă

P r[x|y] = P r[x]

pentru orice x ∈ P, y ∈ C.
Altfel spus, probabilitatea aposteriori ca textul clar x să fie criptat ı̂n textul recepţionat
y este identică cu probabilitatea apriori ca textul clar să fie x.
Următoarea teoremă caracterizează proprietatea de secret perfect pentru majoritatea
sistemelor de criptare simetrice:
Teorema 1.1. Fie (P, C, K, E, D) un sistem de criptare cu card(K) = card(C) = card(P).
El asigură un secret perfect dacă şi numai dacă toate cheile sunt utilizate cu probabilităţi
egale şi ∀x ∈ P, ∀y ∈ C există o cheie unică K ∈ K cu y = eK (x).
Demonstraţia acestei teoreme poate fi găsită detaliat ı̂n [?].

1.2 Criptanaliza sistemelor de criptare


Definiţia 1.4. Procesul de determinare a unei chei K folosind un text criptat α (asociat
eventual cu alte informaţii auxiliare) se numeşte ”criptanaliză”.
Deci decriptarea şi criptanaliza au ı̂n final acelaşi scop: aflarea textului clar. Diferenţa
constă ı̂n faptul că ı̂n criptanaliză acesta trebuie aflat fără a şti cheia de decriptare.
Există o ”regulă de aur” a creatorilor de sisteme de criptare:
Nu subestimaţi niciodată pe criptanalist.
care s-a verificat din punct de vedere istoric pentru toate sistemele create până ı̂n prezent:
acestea sau au fost sparte sau trebuie să se revizuiască periodic pentru a rezista atacurilor
permanente ale intruşilor.
Să studiem puţin poziţia unui criptanalist (Oscar). Se presupune ı̂ntotdeauna că el
are la dispoziţie facilităţi de calcul excelente, adesea superioare celor de care dispun cei
doi parteneri Alice şi Bob.
1.2. CRIPTANALIZA SISTEMELOR DE CRIPTARE 11

În secolul XIX francezul Auguste Kerckhoffs lansează o ipoteză fundamentală (numită
”Principiul lui Kirkoff”):
Criptanalistul ştie toate detaliile sistemului de criptare folosit, inclusiv algoritmii şi
implementările lor.4
Ca o consecinţă, securitatea unui sistem de criptare se bazează ı̂n totalitate pe cheie.

Definiţia 1.5. Un atac este un algoritm eficient care – pentru un sistem de criptare
fixat – găseşte elemente protejate care pot fi determinate (mult mai) rapid decât au fost
specificate de autori.

Evident, unele atacuri pot să nu contrazică securitatea sistemului ci doar să prevadă
anumite slăbiciuni posibile, de care utilizatorii trebuie să ţină cont.
În general, scopul criptografiei este desemnarea de algoritmi (protocoale, scheme, ser-
vicii) de criptare siguri (din punct de vedere al complexităţii), ı̂n timp ce criptanaliza
se concentrează pe construirea de atacuri asupra sistemelor de criptare, având ca scop
determinarea cheilor de criptare.
Ulterior, atacurile potenţial reuşite furnizează criterii de construcţie a sistemelor de
criptare, şi vor face parte implicit din criptografie.
Criteriile de construcţie obţinute dintr-un atac permit realizarea de sisteme de criptare
imune (rezistente) la atacul respectiv.
Criptografia ı̂ncearcă să demonstreze că produsele obţinute sunt sigure, folosind toată
informaţia cunoscută despre atacurile posibile.
Criptanaliza examinează cu atenţie toate slăbiciunile (faliile) unui sistem şi ı̂ncearcă
să construiască atacuri bazate pe aceste slăbiciuni, pentru a demonstra că sistemul nu
este sigur (şi deci poate fi spart de Oscar).
În general este imposibil de demonstrat că un sistem rezistă la orice fel de atac, ı̂n
timp ce opusul său este totdeauna posibil: este suficient de descris un atac.
Se consideră că metodele de atac (cum ar fi furtul, mituirea, presiuni fizice şi psihice
asupra persoanelor implicate ı̂n construirea şi utilizarea sistemului de criptare) care nu
sunt legate direct de slăbiciunile sistemului de criptare, nu intră ı̂n domeniul criptanalizei.

În general un sistem de criptare poate fi necondiţionat sigur sau condiţionat sigur.
Un sistem necondiţionat sigur este imun la orice tip de atac. În acest caz, securitatea sa
depinde de dificultatea de a rezolva problema matematică pe care se bazează construirea
cheii (de criptare/decriptare).

4
Acesta este unul din cele şase principii enunţate de Kerckfoffs pentru domeniul militar. Pentru detalii,
se poate utiliza wikipedia.org/wiki/Kerckhoffsprinciple.
12 CAPITOLUL 1. SISTEME DE CRIPTARE

În general, un criptanalist este pus ı̂n faţa următoarelor situaţii, care ı̂i solicită strategii
diverse de urmat:

1. Ştie numai textul criptat w; ı̂n acest caz atacurile sunt direct legate de lungimea
textului.
Cel mai simplu atac ı̂n acest caz constă ı̂n parcurgerea tuturor cheilor posibile şi
verificarea textului criptat, până se găseşte cheia corectă. Este atacul prin forţă
brută şi el reuşeşte totdeauna, pentru că există ı̂ntotdeauna o cheie ı̂n K, care a fost
folosită la criptare.
Un atac prin forţă brută poate fi modelat foarte simplu sub forma unui oracol, care
pentru orice cheie K ∈ K, răspunde dacă este corectă sau nu.

Oracol

6
Da/Nu k
?

Atac - Cheie

Principala ı̂ntrebare care se pune ı̂n aceasta situaţie este: dacă ı̂ncercăm să ”ghicim”
una din n chei posibile, care este numărul mediu de ı̂ncercări până găsim cheia ?

Teorema 1.2. Pentru a ghici o cheie din n variante posibile sunt necesare ı̂n medie
(n + 1)/2 ı̂ncercări.

De exemplu, pentru un sistem de criptare cu card(K) = 256 , se folosesc aproximativ


255 ı̂ncercări până se găseşte cheia corectă.

Demonstraţie. Dacă sistemul are n chei posibile, atunci probabilitatea de a ghici


corect din prima ı̂ncercare este 1/n. Pentru a ghici din două ı̂ncercări trebuie să
fi dat greş cu prima ı̂ncercare şi apoi – eliminând cheia care nu este corectă – să
ı̂ncercăm altă cheie din restul
  n − 1 chei posibile. Deci probabilitatea de a ghici
de
1 1
din două ı̂ncercări este 1 − n n−1 = n1 . Similar, probabilitatea de a ghici cheia
corectă ı̂n exact 3, 4, . . . , n ı̂ncercări este 1/n.
1.2. CRIPTANALIZA SISTEMELOR DE CRIPTARE 13

Numărul mediu de ı̂ncercări se obţine prin ı̂nmulţirea numărului k de ı̂ncercări cu


probabilitatea de ghicire a cheii corecte ı̂n k ı̂ncercări şi apoi sumarea după k. Deci

1 1 1 1 n(n + 1) 1 n+1
1· + 2 · . . . + (n − 1) · + n · = · =
n n n n 2 n 2

Deci, ı̂n cazul când numărul cheilor posibile este mic (ı̂n Exemplul ?? sunt numai
26 chei), această cheie se poate afla foarte uşor după un număr mic de ı̂ncercări. De
aceea sunt folosite obligatoriu sisteme de criptare cu card(K) foarte mare. Pentru
o cheie care ocupă n biţi sunt necesare ı̂n medie 2n−1 ı̂ncercări (dacă nu există nici
o informaţie suplimentară). O extindere a lungimii cheii la n + 1 biţi dublează deci
spaţiul de căutare. În momentul de faţă, tehnica de calcul oferă atacuri prin forţă
brută eficiente pentru cheile de lungimi mai mici de 128 biţi; aşa că majoritatea
sistemelor de criptare actuale folosesc ı̂n general chei de 1024 biţi sau chiar mai
mult5 .

Atacul prin forţă brută poate fi ı̂mbunătăţit semnificativ cu alte informaţii legate
de sistem, informaţii care pot reduce numărul cheilor posibile.
Multe atacuri folosesc diverse strategii pentru a reduce semnificativ spaţiul cheilor
posibile, după care se foloseşte atacul prin forţă brută.

2. Ştie cel puţin o pereche de caractere (text clar, text criptat); din cunoaşterea câtorva
perechi (x, eK (x)) cu x ∈ P Oscar va ı̂ncearca să decripteze ı̂ntregul text criptat
interceptat.

Exemplul 1.2. La sistemul de criptare Cezar, o singură pereche (a, eK (a)), dezvă-
luie imediat cheia şi – implicit – duce la decriptare.

Exemplul 1.3. Aceasta a fost situaţia ı̂n care s-a aflat orientalistul francez Jean
François Champollion, când a descifrat hieroglifele folosind piatra de la Rosetta (vezi
[?]).

3. Oscar cunoaşte criptarea unor texte clare selectate de el; este atacul cu text clar
ales, luat ı̂n considerare de majoritatea studiilor de criptanaliză. Această situaţie
este adesea superioară celei din cazul precedent; să exemplificăm acest lucru.

Exemplul 1.4. Fie sistemul de criptare Hill, creat ı̂n 1929 de Lester Hill.
Definim un număr ı̂ntreg fixat d (d ≥ 2). Se construiesc mulţimile
5
Excepţii fac sistemele de criptare simetrice şi cele bazate pe curbe eliptice, datorită conceptelor
teoretice speciale pe baza cărora sunt construite.
14 CAPITOLUL 1. SISTEME DE CRIPTARE

P= C= (Z26 )d , K= {M | M ∈ Md (Z26 ), det(M ) 6= 0}.

Deci o cheie de criptare este o matrice M pătrată nesingulară de dimensiune d, cu


elemente din Z26 , iar M −1 formează cheia de decriptare.
Textul clar w se ı̂mparte ı̂n blocuri de lungime d : w = α1 α2 . . . αn , |αi | = d
(ultimul bloc se completează eventual cu 0 până ajunge la lungimea d).
Textul criptat va fi x = β1 β2 . . . βn unde βi = eM (αi ) = αi ·M (mod 26), (1 ≤ i ≤ n).
Pentru decriptare se foloseşte relaţia dM (βi ) = βi · M −1 (mod 26).
! !
3 3 −1 15 17
Să luăm de exemplu d = 2 şi cheia M = , cu inversa M = .
2 5 20 9
Dacă textul clar este w = F RAC, vom avea
α1 = (F R) = (5 17), α2 = (A C) = (0 2)
Din relaţiile
!
3 3
β1 = α1 · M (mod 26) = (5 17) · = (23 22) = (X W )
2 5
!
3 3
β2 = α2 · M (mod 26) = (0 2) · = (4 10) = (E K)
2 5
se obţine textul criptat x = XW EK.
Să ne situăm acum pe poziţia lui Oscar: presupunem că am găsit dimensiunea d = 2
şi ı̂ncercăm să aflăm matricea M (sau – echivalent – M −1 ), ştiind perechea (text
clar, text criptat)= (F RAC, XW EG).
Deci Oscar se află acum ı̂n faţa următoarei probleme: trebuie să determine matricea
!
a b
M= cu a, b, c, d ∈ {0, 1, . . . , 25}, astfel ca
c d
! ! !
5 17 a b 23 22
· = .
0 2 c d 4 10

!
5 17
Pentru a putea afla această matrice, Oscar trebuie să afle inversa lui A = .
0 2
Cum det(A) = 10 şi cmmdc(10, 26) > 1, rezultă că 10−1 (mod 26) nu există; deci A
nu este inversabilă.
Să presupunem acum că Oscar lucrează ı̂n ipoteza (3); alege un text clar a cărui
matrice este inversabilă şi ı̂i află criptarea.
1.3. EXERCIŢII 15

!
1 17
Fie BRAD acest text clar, a cărui matrice asociată este A = .
0 3
!
11 10
Oscar solicită criptarea lui BRAD şi primeşte LKGP , de matrice B = .
6 15
Deci el dispune de perechea (BRAD, LKGP ).
!
1 3
Oscar determină ı̂ntâi A−1 = . Apoi, din ecuaţia A · M = B, va găsi
0 9
soluţia ! ! !
−1 1 3 11 10 3 3
M =A ·B = · =
0 9 6 15 2 5

4. Ştie cheia de criptare; acum Oscar va cunoaşte cheia eK şi ı̂ncearcă să determine dK
ı̂nainte de interceptarea mesajelor criptate.
Aceasta este situaţia tipică sistemelor de criptare cu cheie publică: cheia de criptare
eK este cunoscută public cu mult ı̂nainte de a fi folosită pentru criptare. Deci
criptanalistul are la dispoziţie destul de mult timp pentru prelucrarea ei şi orice
clarificare ı̂n perioada de pre-atac (când timpul este ”ieftin”) are o valoare deosebită;
după ce se primesc mesaje criptate, timpul devine scump, şi el trebuie să fie scurtat
cât mai mult.

1.3 Exerciţii
1.1. Textul clar NUMAR este criptat ı̂n ”Orice vânt nu bate seara”. Să se descrie sistemul
de criptare folosit.
1.2. Folosind atacul prin forţă brută, decriptaţi mesajul WYPTBSJBYZ criptat cu un
sistem Cezar.
1.3. Să presupunem că Cezar trimite un mesaj criptat unuia din generalii săi, iar acest
mesaj este format dintr-o singură literă. Ce puteţi spune despre securitatea mesajului ?
1.4. Fie p un număr prim. Arătăţi că numărul matricilor 2 × 2 inversabile peste Zp este
(p2 − 1)(p2 − p).
1.5. Câte matrici 2 × 2 sunt inversabile peste Zn pentru n = 6, 9, 26 ?
1.6. Să se cripteze textul clar INAINTE SI LA DREAPTA folosind sistemul de xriptare
Hill cu matricea
   
17 17 5 11 2 19
M =  21 18 21 

 sau M =  5 23 25 


2 2 19 20 7 1
16 CAPITOLUL 1. SISTEME DE CRIPTARE

1.7. Câte auto-chei sunt ı̂ntr-un sistem de criptare Hill cu d = 2 ?

1.8. Determinaţi inversele matricilor (modulo 26):


   
! ! 10 5 12 1 11 12
2 5 11 8
, ,  3 14 21  ,  4 23 2 
   
9 5 3 7
8 9 11 17 15 9

1.9. Textul clar ”conversation” este criptat ı̂n ”HIARRTNUYTUS” folosind un sistem
de criptare Hill bazat pe o matrice neinversabilă n × n.
Determinaţi n şi apoi matricile de criptare şi decriptare.

1.10. Fie n (n ≥ 2) un număr ı̂ntreg. Un pătrat latin de ordin n este un tablou L de


dimensiune n × n, cu elemente din mulţimea {1, 2, . . . , n}, astfel că fiecare număr apare
o singură dată pe fiecare linie şi fiecare coloană din L. Arătaţi că el defineşte un sistem
de criptare cu P = C = K, ı̂n care criptarea lui x cu cheia k este L(k, x).
Asigură un astfel de sistem de criptare un secret perfect ?
Capitolul 2

Sisteme simetrice de criptare

În general, sistemele de criptare clasice se numesc şi sisteme simetrice. Motivul este acela
că Alice şi Bob deţin aceeaşi informaţie relativă la sistemul de criptare folosit. În plus,
odată cu aflarea cheii de criptare eK , cheia de decriptare dK se obţine imediat, fiind funcţia
inversă.
Sistemele de criptare simetrice se ı̂mpart ı̂n două clase mari: cifruri de permutare şi
cifruri de substituţie.

2.1 Cifruri de permutare


La aceste sisteme de criptare, textul clar se ı̂mparte ı̂n blocuri de n (n ≥ 2) caractere,
după care fiecărui bloc i se aplică o permutare π ∈ Sn (mulţimea permutărilor de n
elemente). Elementele n şi π sunt fixate. π este cheia de criptare, iar π −1 va fi cheia de
decriptare.
!
1 2 3
Exemplul 2.1. Să presupunem că avem cheia de criptare . Atunci un text
2 1 3
clar, de exemplu FLOARE ALBASTRA se ı̂mparte ı̂n grupuri de căte trei caractere (s-a
considerat şi caracterul spaţiu, notat )
FLO ARE AL BAS TRA
Textul criptat va fi
LFO RAE A L ABS RTA
sau – eliminând grupările, LFORAEA LABSRTA.

Exemplul 2.2. Un sistem celebru de criptare cu permutări este sistemul Richelieu (pre-
zentat şi ı̂n literatură de Jules Verne, ı̂n romanul Mathias Sandorf). Dăm un exemplu de
utilizare a unui astfel de sistem.
Fie cartonul 6 × 6, ı̂n care zonele haşurate constituie găuri.

17
18 CAPITOLUL 2. SISTEME SIMETRICE DE CRIPTARE

Vrem să criptăm textul clar


EMINESCU A FOST UN MARE POET NATIONAL
Vom scrie acest text sub forma unui tabel cu şase linii şi şase coloane, astfel:
E M I N E S
C U A F
O S T U N
M A R E P
O E T N A
T I O N A L
Aplicând cartonul peste acest text, vor rămâne vizibile 9 caractere: MNS TA AN (citite
de la stânga la dreapta şi de sus ı̂n jos).
Vom roti acum cartonul cu 90o ı̂n sensul acelor de ceasornic. El va arăta

Aşezând acum peste text, rămân vizibile caracterele F MPTNIL (primul caracter a fost
un spaţiu şi l-am marcat cu pentru a-l face vizibil).
La a treia rotire a cartonului se obţine similar textul ICSUEETOA, iar la a patra –
EEUAOURO
Deci textul criptat este
MNS TA AN F MPTNILICSUEETOAEEUAOURO
Operaţia de decriptare se realizează similar.
Să dăm o definiţie matematică acestei clase de sisteme de criptare.
Definiţia 2.1. Fie n un număr natural nenul. Un cifru de permutare este un sistem
(P, C, K, E, D) unde P= C= (Z26 )n , K= Sn .
Pentru o cheie (permutare) π ∈ Sn

eπ (a1 a2 . . . an ) = aπ(1) aπ(2) . . . aπ(n)

dπ (b1 b2 . . . bn ) = bπ−1 (1) bπ−1 (2) . . . bπ−1 (n)


2.2. CIFRURI DE SUBSTITUŢIE 19

Lema 2.1. Un cifru de permutare este un sistem de criptare Hill.

Demonstraţie. Pentru fiecare permutare π ∈ Sn putem construi o matrice de permutare


Mπ = (mi,j ) definită
mi,j = 1 ⇐⇒ i = π(j)
Se verifică uşor faptul că sistemul de criptare Hill cu matricea Mπ este echivalent cu un
cifru de permutare bazat pe cheia π. Mai mult, Mπ−1 = Mπ−1 .
!
1 2 3
Exemplul 2.3. Să reluăm Exemplul ??. Permutării ı̂i corespunde matricea
2 1 3
 
0 1 0
de permutare 1 0 0 

 .
0 0 1
Operaţia de criptare este imediată. De exemplu, criptarea textului F LO este
 
0 1 0
(5 11 14) ·  1 0 0  = (11 5 14)
 

0 0 1

adică LF O.

2.2 Cifruri de substituţie


Cifrurile de substituţie sunt cele mai utilizate sisteme de criptare simetrice; ele se ı̂ntâlnesc
şi azi, exemple standard fiind sistemele DES şi AES.
Un astfel de cifru constă ı̂n ı̂nlocuirea fiecărui caracter din V cu alt caracter (din W ).
Există două clase mari de cifruri de substituţie: sisteme monoalfabetice şi polialfabetice.

2.2.1 Sisteme de criptare monoalfabetice


Un astfel de sistem substituie fiecare caracter cu alt caracter – totdeauna acelaşi, indiferent
de poziţie. Atunci când cele două alfabete coincid (V = W ), sistemele monoalfabetice
sunt cazuri particulare de cifruri de permutare.
Vom trece ı̂n revistă câteva astfel de sisteme.

Sistemul de criptare Cezar


Sistemul de criptare Cezar este un sistem monoalfabetic: odată stabilită cheia de criptare
eK , fiecare caracter cod x se ı̂nlocuieşte prin caracterul cod x + k (mod 26) (a se vedea
Capitolul I). Decriptarea se realizează după formula dK (x) = x − k (mod 26).
20 CAPITOLUL 2. SISTEME SIMETRICE DE CRIPTARE

Observaţia 2.1. În cartea sa ”De bello gallico”, Cezar aminteşte de un sistem de criptare,
fără să dea detalii. Mai tarziu, Suetoniu – ı̂n ”Viata lui Iuliu Cezar” descrie sistemul.
Cezar folosea un sistem de criptare ı̂n care ı̂nlocuia literele romane cu cele greceşti şi aplica
deplasarea k = 3. Nepotul lui Cezar, ı̂mpăratul Augustus a folosit acelaşi sistem, bazat pe
deplasarea k = 1. Sistemul Cezar a fost utilizat mult timp. Armata rusă apela frecvent
la el ı̂n 1915, ca ı̂nlocuitor pentru sistemele sale proprii de criptare, prea sofisticate la
nivelul trupelor de câmp. Un sistem Cezar cu k = 13 este sistemul ROT 13, apărut ı̂n
comunitatea Internet ı̂n 1984 sau 1985 şi implementat pe sistemele UNIX ([?],[?],[?])
Evident, Cezar este un sistem generat de permutările ciclice din S26 . Fiind numai
26 chei posibile, el este extrem de vulnerabil la atacul prin forţă brută. Pentru a-i mări
rezistenţa, s-a utilizat şi o variantă, numită sistem Cezar cu cheie, definită astfel:
Se consideră un cuvânt (cheie), preferabil cu toate caracterele distincte (ı̂n caz contrar,
literele identice se folosesc doar la prima apariţie). Acest cuvânt se aşează la ı̂nceputul
alfabetului. După ce se termină, şirul se completează cu literele care nu existau ı̂n cuvântul
cheie, ı̂n ordine alfabetică.
Exemplul 2.4. Să presupunem că s-a ales cuvântul cheie M ART OR. Scriem
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
M A R T O B C D E F G H I J K L N P Q S U V W X Y Z

Pentru textul clar se vor folosi caracterele de pe primul rând, iar pentru criptare
– caracterele corespondente de pe rândul al doilea. Astfel, STUDENT se criptează ı̂n
QSUTOJS, ARGINT ı̂n MPCEJS etc.
Sistemul Cezar cu cheie rezistă mai bine la atacul cu forţă brută, numărul cheilor fiind
acum apropiat de card(S26 ) = 26!.

Sistemul de criptare afin


Sistemul de criptare afin este o generalizare a sistemului Cezar. Vom avea P = C= Z26 ,
K= {(a, b) | a, b ∈ Z26 , cmmdc(a, 26) = 1}, iar funcţiile de criptare şi decriptare (pentru
o cheie K = (a, b)) sunt

eK (x) = ax + b (mod 26), dK (y) = a−1 y + a−1 (26 − b) (mod 26)

Condiţia ca a să fie prim cu 26 asigură existenţa lui a−1 ı̂n Z26 .
Exemplul 2.5. De exemplu, pentru a = 3, b = 5 funcţia de criptare este eK (x) = 3x + 5,
care poate fi reprezentată prin tabelul:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
5 8 11 14 17 20 23 0 3 6 9 12 15 18 21 24 1 4 7 10 13 16 19 22 25 2

sau – scris direct pentru caractere


A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
F I L O R U X A D G J M P S V Y B E H K N Q T W Z C
2.2. CIFRURI DE SUBSTITUŢIE 21

Astfel, textul clar PRIMAVARA TARZIE se criptează ı̂n YEDPFQFEF KDECDR.


Deoarece 3−1 = 9 (mod 26), decriptarea se realizează matematic folosind funcţia
dK (x) = 9x + 7 (sau – practic – inversând cele două linii ale tabelului de mai sus).
Condiţia cmmdc(a, 26) = 1 asigură de asemenea injectivitatea aplicaţiei eK .
De exemplu, pentru eK (x) = 10x + 1, A şi N se transformă ambele ı̂n B, iar O nu apare
ca imagine ı̂n alfabetul substituţiei.

Să studiem spaţiul cheilor K. Orice cheie K ∈ K este determinată complet de valorile
ı̂ntregi (a, b) cu (a, 26) = 1. Sunt posibile 12 valori1 pentru a : 1, 3, 5, 7, 9, 11, 15, 19, 21, 23,
25. Pentru b sunt posibile 26 valori, care se iau independent de a, cu singura excepţie
a = 1, b = 0 (care se exclude deoarece nu conduce la nici o criptare). Deci card(K) = 311,
număr suficient de mic pentru reuşita unui atac prin forţă brută.

Sistemul de criptare Polybios


Sistemul Cezar nu este cel mai vechi sistem de criptare. Un sistem mai vechi a fost
descris de Polybios (istoric grec mort cu 30 ani ı̂naintea naşterii lui Cezar). Iniţial acesta
a fost doar un sistem maritim de semnalizare cu torţe; ulterior i s-a dat o semnificaţie
criptografică.
Să considerăm alfabetul latin, din care eliminam o literă de frecvenţă cât mai redusă2 ;
fie aceasta W . Cele 25 litere rămase le aşezăm ı̂ntr-un pătrat 5 × 5 (numit careu Polybios)
ı̂n felul următor:
A B C D E
A A B C D E
B F G H I J
C K L M N O
D P Q R S T
E U V X Y Z
În operaţia de criptare, fiecare caracter a va fi reprezentat printr-o pereche (x, y) (x, y ∈
{A, B, C, D, E}) care dau linia respectiv coloana pe care se află a.
Astfel, textul clar MERGEM ACASA este criptat ı̂n
CCAEDCBBAECCAAACAADDAA.
Deci sistemul de criptare Polybios este o substituţie monoalfabetică cu alfabetul W =
{AA, AB, AC, . . . , EE} de 25 caractere.
Sunt diverse variante ale sistemului Polybios. Astfel, dacă se folosesc drept coordonate
cifrele 1, 2, 3, 4, 5 ı̂n loc de A, B, C, D, E, sistemul a fost folosit ı̂n penitenciarele ruseşti3 ,
iar ulterior de către prizonierii americani din Vietnam. Este foarte simplu de ı̂nvăţat
1
Pentru un număr dat n există φ(n) numere mai mici decât n şi prime cu n, unde phi este funcţia
Euler. În particular φ(26) = 12.
2
În limba engleză litera eliminată este de obicei J.
3
Alfabetul cirilic are 33 litere, deci ı̂n acest caz s-a utilizat un careu 6 × 6.
22 CAPITOLUL 2. SISTEME SIMETRICE DE CRIPTARE

şi poate fi aplicat folosind diverse semne drept coordonate (cifre, puncte, figuri, bătăi
de tobă etc). A fost utilizat de asemenea ı̂n cadrul altor sisteme de criptare, cum ar fi
sistemul nihilist, cifrul ADFGVX (utilizat de armata germană ı̂n primul război mondial)
sau sistemul Bifid, inventat de Dellastell ı̂n 1901 (pentru detalii, se vedea [?]).

Sistemul cavalerilor de Malta

Ordinul cavalerilor de Malta folosea un sistem de criptare monoalfabetic bazat pe stilizarea


unei cruci. Astfel, să considerăm careurile:

A: B: C: J. K. L. S T U
D: E: F : M. N. O. V W X
G: H: I: P. Q. R. Y Z

Liniile care ı̂ncadrează fiecare caracter (inclusiv spaţiul), ı̂mpreună cu punctele (două, unul
sau zero) indică substituţia caracterului respectiv. Astfel, textul clar DUPA DOUAZECI
DE ANI se criptează ı̂n

: . : : . : : : : : : : . :

2.2.2 Criptanaliza sistemelor de criptare monoalfabetice

Punctul slab al sistemelor de criptare monoalfabetice constă ı̂n frecvenţa de apariţie a


caracterelor ı̂n text. Dacă un text criptat este suficient de lung şi se cunoaşte limba
ı̂n care este scris textul clar, sistemul poate fi spart printr-un atac bazat pe frecvenţa
apariţiei literelor ı̂ntr-o limbă.
Sunt construite diverse structuri de ordine relative la frecvenţa apariţiei literelor ı̂n
fiecare limbă europeană. De obicei, cu cât un text criptat este mai lung, cu atât frecvenţa
literelor folosite se apropie de această ordonare generală. O comparare ı̂ntre cele două
relaţii de ordine (cea a caracterelor din textul criptat şi cea a lterelor din alfabetul limbii
curente) conduce la realizarea câtorva corespondenţe (literă text clar – literă text criptat),
ceea ce stabileşte ı̂n mod univoc cheia de criptare. Pentru sistemul Cezar este suficientă
stabilirea unei singure perechi; pentru sistemul afin trebuiesc două perechi etc.
Pentru limba română, un tabel al literelor cele mai frecvent ı̂ntâlnite este
2.2. CIFRURI DE SUBSTITUŢIE 23

Literă Frecvenţă
A 13, 04 % Literă Frecvenţă
I 12, 89 % L 4, 58 %
E 11, 75 % O 3, 85 %
R 7, 39 % D 3, 68 %
T 6, 62 % M 3, 33 %
N 6, 44 % P 2, 91 %
U 6, 44 % F 1, 50 %
S 5, 50 % V 1, 26%
C 5, 47 %
(restul caracterelor au o ı̂n mod normal o frecvenţă de apariţie sub 1 %).
Exemplul 2.6. Să considerăm că s-a interceptat următorul text, criptat cu un sistem
monoalfabetic (nu se ştie exact ce sistem a fost utilizat).
lqakc sp gcxk aca pcmgqb kq kxc pkersmpqsb vk vsmgxkbc mkacpc tcacpbqlqs
vk cgele cmtxq ms nocxgsb mbxcsp vk exsgk oxcbqsbcbk texbslk spclbk gcxk
cmgqpvkcq bxkgcbexslk gqxbslk xktxknkpbcq tkpbxq mbxcsps qp cfkxbsmakpb
mqtcxcbex vcx lsatkvk pq bxkrqscq mc zsk txkc gqxsems psgs mc mk cmbktbk
mc czlk acxk lqgxq vk lc gkl gq gcxk fkpkcq sp gepbcgb
În prima etapă, vom număra de câte ori apare ı̂n text fiecare caracter. se obţine tabelul
Caracter c k x b s q g p m l e p a v b n o f z
Frecvenţă 39 38 27 25 23 20 19 18 18 11 9 8 7 7 2 2 2 2 2

Deci caracterele cele mai frecvente sunt c şi k. Pe de-altă parte, cele mai frecvente
caractere din limba română sunt A, I şi E (textul nu este suficient de mare pentru a putea
face o distincţie netă). În mod cert, A ∈ {c, k}. Sunt patru opţiuni posibile, din care trei
se elimină rapid. Rămâne de abordat c ←− A, k ←− E.
Vom nota cu litere mari caracterele din textul clar; prin ı̂nlocuirea lui c cu A, a lui k
cu E, textul devine
lqaEA sp gAxE aAa pAmgqb Eq ExA pEersmpqsb vE vsmgxEbA mEaApA tAaApbqlqs
vE Agele Amtxq ms noAxgsb mbxAsp vE exsgE oxAbqsbAbE texbslE spAlbE gAxE
AmgqpvEAq bxEgAbexslk gqxbslE xEtxEnEpbAq tEpbxq mbxAsps qp AfExbsmaEpb
mqtAxAbex vAx lsatEvE pq bxErqsAq mA zsE txEA gqxsems psgs mA mE AmbEtbE
mA AzlE aAxE lqgxq vE lA gEs gq gAxE fEpEAq sp gepbAgb
Cuvântul ExA de pe primul rând are caracterul din mijloc (x) de frecvenţă ridicată (27
apariţii); deci el trebuie să corespundă unei litere frecvente din limba română şi – ı̂n plus –
să aibă semnificaţie semantică. Concluzie: acest cuvânt este ERA. Deci x ←− R. Facem
substituţia şi se obţine textul
lqaEA sp gARE aAa pAmgqb Eq ERA pEersmpqsb vE vsmgREbA mEaApA tAaApbqlqs
vE Agele AmtRq ms noARgsb mbRAsp vE eRsgE oRAbqsbAbE teRbslE spAlbE gARE
AmgqpvEAq bREgAbeRsleR gqRbslE REtREnEpbAq tEpbRq mbRAsps qp AfERbsmaEpb
mqtARAbeR vAR lsatEvE pq bRErqsAq mA zsE tREA gqRsems psgs mA mE AmbEtbE
mA AzlE aARE lqgRq vE lA gEs gq gARE fEpEAq sp gepbAgb
24 CAPITOLUL 2. SISTEME SIMETRICE DE CRIPTARE

În acest text, cuvântul REtREnEpbAq are corespondent ı̂n limba română numai pe
REP REZEN T A{I, M, U }. De aici se obţin corespondenţele t ←− P, n ←− Z, p ←− N
şi b ←− T (pentru ultimul caracter - q, nu facem deocamdată nici o opţiune). Noul text
va fi
lqaEA sp gARE aAa NAmgqT Eq ERA NEersmNqsT vE vsmgRETA mEaANA PAaANTqlqs
vE Agele AmPRq ms ZoARgsT mTRAsN vE eRsgE oRATqsTATE PeRTslE sNAlTE gARE
AmgqNvEAq TREgATeRsleR gqRTslE REPREZENTAq PENTRq mTRAsNs qN AfERTsmaENT
mqPARATeR vAR lsaPEvE Nq bRErqsAq mA zsE PREA gqRsems Nsgs mA mE AmTEPTE
mA AzlE aARE lqgRq vE lA gEs gq gARE fENEAq sN geNTAgT
Lucrurile ı̂ncep acum să se simplifice: P EN T Rq este corect numai pentru q ←− U ,
AmT EP T E pentru m ←− S. Apoi N ASgU T dă g ←− C, SU P ARAT eR dă e ←− O,
iar din f EN EAU deducem f ←− V . Făcând aceste ı̂nlocuiri, se obţine textul
lUaEA sp CARE MAM NASCUT EU ERA NEOrsSNUsT DE vsSCRETA SEaANA PAaANTUlUs
DE ACOlO ASPRU Ss ZoARCsT STRAsN vE ORsCE oRATUsTATE PORTslE sNAlTE CARE
ASCUNvEAU TRECATORslOR CURTslE REPREZENTAU PENTRU STRAsNs UN AfERTsSaENT
SUPARATOR vAR lsaPEvE NU bRErqsAU SA zsE PREA CURsOms NsCs SA SE ASTEPTE
mA AzlE aARE lUCRU vE lA CEs CU CARE VENEAU sN CONTACT
Ultimele caractere se deduc imediat: l ←− L, a ←− M, r ←− B, s ←− I, v ←− D.
Textul clar final este:
LUMEA IN CARE MAM NASCUT EU ERA NEOBISNUIT DE DISCRETA SEMANA PAMANTULUI
DE ACOLO ASPRU SI ZGARCIT STRAIN DE ORICE GRATUITATE PORTILE INALTE CARE
ASCUNDEAU TRECATORILOR CURTILE REPREZENTAU PENTRU STRAINI UN AVERTISMENT
SUPARATOR DAR LIMPEDE NU TREBUIAU SA FIE PREA CURIOSI NICI SA SE ASTEPTE
SA AFLE MARE lUCRU DE LA CEI CU CARE VENEAU IN CONTACT
(textul provine din romanul ”Viaţa ca o coridă” de Octavian Paler).
Evident, dacă se ştia sistemul de criptare (afin, Cezar etc) criptanaliza se simplifică
mult.
Pentru alte aplicaţii, oferim tabelele de frecvenţă a literelor pentru principalele limbi
europene4 (am reţinut din fiecare limbă numai cele mai frecvente nouă litere):
Engleză Frecvenţă Germană Frecvenţă Franceză Frecvenţă Spaniolă Frecvenţă
E 12, 31 % E 18, 46 % E 15, 87 % E 13, 15 %
T 9, 59 % N 11, 42 % A 9, 42 % A 12, 69 %
A 8, 05 % I 8, 02 % I 8, 41 % O 9, 49 %
O 7, 94 % R 7, 14 % S 7, 90 % S 7, 60 %
N 7, 19 % S 7, 04 % T 7, 26 % N 6, 95 %
I 7, 18 % A 5, 38 % N 7, 15 % R 6, 25 %
S 6, 59 % T 5, 22% R 6, 46 % I 6, 25 %
R 6, 03 % U 5, 01% U 6, 24 % L 5, 94 %
H 5, 14 % D 4, 94% L 5, 34 % D 5, 58 %

4
Datele statistice pentru toate tabelele – inclusiv limba română – sunt din anul 1994.
2.2. CIFRURI DE SUBSTITUŢIE 25

Există o situaţie ipotetică ı̂n care criptanaliza unui sistem monoalfabetic este imposibilă:
atunci când P= V ∗ şi nu dispunem de nici o altă informaţie (decât eventual sistemul de
criptare). Acest caz corespunde ı̂nsă unei codificări; adevărata criptare a avut loc atunci
când mesajele inteligibile au fost translatate ı̂n cuvinte din V ∗ .

2.2.3 Sisteme de criptare polialfabetice


Diferenţa dintre aceste sisteme de criptare şi cele monoalfabetice constă ı̂n faptul că
substituţia unui caracter variază ı̂n text, ı̂n funcţie de diverşi parametri (poziţie, context
etc.). Aceasta conduce bineı̂nţeles la un număr mult mai mare de chei posibile. Se
consideră că primul sistem de criptare polialfabetic a fost creat de Leon Battista ı̂n 1568
([?]). Unele aplicaţii actuale folosesc ı̂ncă pentru anumite secţiuni astfel de sisteme de
criptare.

Sistemul homofonic
Sistemul de criptare homofonic este un sistem intermediar ı̂ntre sistemele mono şi cele
polialfabetice. Principalul lui scop este de a evita atacul prin frecvenţa de apariţie a
caracterelor. Se pare că a fost utilizat prima oară ı̂n 1401 de către ducele de Mantua.
Fiecărui caracter a ∈ P i se asociază o mulţime H(a) ⊂ C astfel ı̂ncât:
1. H(a) ∩ H(b) = ∅ ⇐⇒ a 6= b;
2. Dacă a apare mai frecvent ı̂n textele clare, atunci card((H(a)) ≥ card(H(b)).
Criptarea unui caracter a ∈ P se face cu un element ales aleator din H(a). Pentru
decriptarea lui y ∈ C se caută o mulţime H(a) astfel ca y ∈ H(a).
Exemplul 2.7. Să considerăm P= {a, b} şi H(a) = {001, 010}, H(b) = {000, 011, 101,
111}. Pentru criptarea textului ab se poate folosi oricare din secvenţele
001000, 001011, 001101, 001111, 010000, 010011, 010101, 010111.
Sistemul homofonic este mult mai rezistent la un atac bazat numai pe textul criptat,
dar cedează uşor la un atac cu text clar ales.

Sistemul de criptare Playfair


Sistemul a fost inventat 1854 de Sir Charles Wheatstone. Cel care ı̂l promovează şi ı̂l
susţine pentru a fi adoptat ca cifru oficial al Marii Britanii este baronul Lyon Playfair de
St. Andrews. Guvernul preferă altă variantă, dar acest sistem de criptare capătă numele
baronului.
Ideea de bază este următoarea:
Din cele 26 litere ale alfabetului se elimină una de frecvenţă minimă; să spunem Q.
Restul literelor se aranjează arbitrar sub forma unui pătrat 5 × 5.
Să exemplificăm sistemul pentru tabloul
26 CAPITOLUL 2. SISTEME SIMETRICE DE CRIPTARE

S Y D W Z
R I P U L
H C A X F
T N O G E
B K M J V
Acest tabel va forma atât cheia de criptare cât şi cea de decriptare.
Regulile de criptare/decriptare sunt:
• Textul clar este separat ı̂n blocuri de câte două caractere (ignorând spaţiile). Condi-
ţia este ca nici un bloc să nu conţină aceiaşi literă, iar textul să fie de lungime pară.
Aceste deziderate se realizează uşor modificând puţin textul clar (se introduce o
literă de frecvenţă mică ı̂ntre cele două litere egale, respectiv ca ultim caracter).
• Fiecare bloc se criptează astfel: dacă cele două litere nu sunt plasate ı̂n tabel pe
aceeaşi linie sau aceeaşi coloană (de exemplu A şi E), se cercetează colţurile drep-
tunghiului determinat de cele două litere (ı̂n cazul nostru A, F, O, E). Perechea AE
este criptată ı̂n F O. Ordinea este determinată de ordinea liniilor pe care se află
literele din textul clar. Astfel, EA se criptează ı̂n OF , SF ı̂n ZB etc.
Dacă cele două litere se găsesc pe aceeaşi linie (coloană), se merge ciclic cu o poziţie
la dreapta (respectiv jos). Deci CA se criptează ı̂n AX, W X ı̂n U G, CA ı̂n AX
etc.
De exemplu, textul clar AFARA PLOUA se criptează ı̂n XHHPPDPEPX. Se observă că
cele patru apariţii ale caracterului A au fost criptate cu X, H, P şi din nou X.
O permutare ciclică a liniilor şi coloanelor tabloului nu modifică criptarea. De exemplu,
pătratul
P U L R I
A X F H C
O G E T N
M J V B K
D W Z S Y
obţinut prin deplasarea cu două poziţii spre stânga şi o poziţie ı̂n sus, este echivalent cu
cel iniţial (ambele asigură aceiaşi cheie de criptare).
Regulile de bază pot fi modificate sau completate după necesităţi. Astfel, se poate
adăuga din loc ı̂n loc câte o literă falsă (cu frecvenţă foarte redusă, cum ar fi X, Y ) care
să modifice textul criptat. Pătratul 5 × 5 poate fi ı̂nlocuit cu un dreptunghi 4 × 6 sau
3 × 8, cu schimbările corespunzătoare ı̂n alegerea literelor care se elimină.
Pentru a păstra cheia ı̂n siguranţă, se recomandă memorarea acesteia. Cum o astfel
de cheie este extrem de greu de memorat, se foloseşte un cuvânt cheie sau o propoziţie cu
toate literele distincte. Acesta cuvânt este scris la ı̂nceputul tabloului. Spaţiile rămase
sunt completate cu restul literelor alfabetului, scrise ı̂n ordinea apariţiei lor5 .
5
În definiţia iniţială a sistemului, Wheatstone pleca de la cuvântul Holmes.
2.2. CIFRURI DE SUBSTITUŢIE 27

Astfel, ı̂n preajma primului război mondial, armata română folosea un dreptunghi
3 × 8 din care lipseau literele Q şi K. Cuvântul cheie era ROM AN ESC. Un astfel de
tablou putea avea de exemplu forma

R O M A N E S C
B D F G H I J L
P T U V W X Y Z

Ca şi sistemul anterior, Playfair rezistă la atacuri bazate pe frecvenţa apariţiei, dar
nu şi la cele prin text clar ales.
Implementări actuale folosesc reprezentarea binară a literelor şi fac un pas suplimentar:
după ce s-a obţinut o pereche criptată, aceasta se combină printr-un XOR (adunare
modulo 2) cu perechea criptată anterior.
O variantă a sistemului de criptare Playfair este Playfair dublu, sistem folosit de Ger-
mania ı̂n al doilea război mondial. Regulile sunt următoarele:

1. Se folosesc două careuri 5 × 5 alipite.

2. Textul clar se scrie pe două rânduri (completând eventual ultimul rând cu un ca-
racter de frecvenţă mică). Fiecare coloană va furniza o pereche de două litere.

3. Intr-o pereche de litere (X, Y ), X este un element din primul careu, iar Y – un
element din al doilea careu.

4. Dacă X şi Y sunt vârfurile unui dreptunghi, se ia ca rezultat perechea formată


din celelalte două vârfuri. Dacă X şi Y se află pe aceeaşi linie, se iau următoarele
caractere (din fiecare careu) – similar sistemului Playfair simplu. Fie (Z, U ) perechea
obţinută (Z este din al doilea careu, iar U – din primul careu).

5. Se consideră perechea (U, Z) şi se reia pasul (4), obţinându-se ı̂n final textul criptat
(P, Q).

Exemplul 2.8. Să considerăm careurile Playfair definite de cuvintele ROM AN ESC şi
respectiv P REDOM IN AN T (s-a eliminat litera K):

R O M A N P R E D O
E S C B D M I N A T
F G H I J B C F G H
L P Q T U J L Q S U
V W X Y Z V W X Y Z

Să criptăm textul clar


DOAR O VORBA SA ITI SPUN
28 CAPITOLUL 2. SISTEME SIMETRICE DE CRIPTARE

În prima fază, el va fi scris pe două linii (Q este caracter de completare):

D O A R O V O R B A
S A I T I S P U N Q

Fiecare pereche de litere este criptată ı̂n două etape:


DS −→ AU −→ OT, OA −→ DS −→ AU, AI −→ RB −→ P F,
RT −→ OE −→ DM, OI −→ RS −→ DL, V S −→ Y L −→ W T,
OP −→ RM −→ P E, RU −→ OL −→ RP, BN −→ AD −→ ON,
AQ −→ ET −→ M S.
Mesajul criptat este deci
OAPDDWPROMTUFMLTEPNS

Sistemul Playfair dublu asigură o securitate sporită – comparativ cu cel simplu. Mo-
tivul: sunt folosite două careuri (ı̂n loc de unul), plus un parametru suplimentar (lungimea
textului clar).

Sistemul de criptare Vigenere


Numele sistemului6 vine de la baronul francez Blaise de Vigenere (1523 − 1596) diplomat
la curtea regelui Henry III. A fost considerat mult timp unul din cele mai bune sisteme
de criptare.
Prezentarea sistemului
Considerăm – ca şi la sistemele anterioare – cele 26 litere ale alfabetului, numerotate
de la 0 (pentru A) până la 25 (pentru Z), conform tabelului:
A B C D E F G H I J K L M
0 1 2 3 4 5 6 7 8 9 10 11 12

N O P Q R S T U V W X Y Z
13 14 15 16 17 18 19 20 21 22 23 24 25
+
Definim P = C= Z26 , K= Z26 .
O cheie K ∈ K este un cuvânt având codificarea numerică k0 k1 . . . kp−1 .
Fie a = a0 a1 . . . an codificarea textului clar care trebuie transmis. Textul criptat va fi
eK (a) = x = x0 x1 . . . xn , unde
xi = ai + ki (mod p) (mod 26) (∗)

Exemplul 2.9. Să considerăm cuvântul cheie F OCAR; deci p = 5 şi K = 5 14 2 0 17.
Dacă vrem să criptăm cu această cheie textul clar NU POT VENI AZI, vom proceda
astfel:
6
Sursa [?] indică drept real inventator al sistemului pe Giovan Batista Belaso ı̂n 1553.
2.2. CIFRURI DE SUBSTITUŢIE 29

Codificarea textului este a = 13 20 15 14 19 21 4 13 8 0 25 8.


Sub fiecare număr din a se aşează câte un număr din K; când cheia se termină, ea
se reia ciclic, până se termină a. Deci vom avea
13 20 15 14 19 21 4 13 8 0 25 8
5 14 2 0 17 5 14 2 0 17 5 14
18 8 17 14 10 0 18 15 8 17 4 22
S I R O K A S P I R E W
Linia a treia conţine suma modulo 26 a numerelor de pe primele două linii; acesta este
textul criptat rezultat.
Decriptarea se realizează similar, scăzând (modulo 26) din codul caracterului criptat,
codul caracterului corespunzător din cheie.
O variantă a sistemul Vigenere este sistemul Beaufort (amiral englez, de asemenea
autorul unei scale a vânturilor care ı̂i poartă numele); aici relaţia de criptare (∗) este
ı̂nlocuită cu
xi = ki (mod p) − ai (mod 26), (i ≥ 0)
Avantajul sistemului Beaufort constă ı̂n faptul că ecuaţia de criptare se aplică şi la
decriptare (ai = ki (mod p) − xi ).
Altă variantă este sistemul Autoclave, atribuit matematicianului Cardano (autorul
formulelor de rezolvare pentru ecuaţiile de gradul 3 şi 4). Aici cheia se foloseşte o singură
dată, la ı̂nceput, după care este utilizat drept cheie textul clar.
Exemplul 2.10. Să luăm cuvântul cheie COV OR şi textul clar A VENIT TOAMNA.
Putem aranja sistemul de criptare sub forma unui tabel (s-au trecut doar caracterele, nu
şi codificările lor):
Text clar: A V E N I T T O A M N A
Cheie: C O V O R A V E N I T T
Text criptat C J Z B Z T O S N U G T
Sistemul Vigenere a fost utilizat secole de-a rândul, fiind considerat ca fiind unul din
cele mai sigure sisteme de criptare. În 1917 de exemplu, prestigioasa revistă ”Scientific
American” ı̂l considera imposibil de atacat. Numai că acest sistem a fost spart de Kasiski
ı̂ncă din 1863 (şi – independent – de Babbage ı̂n 1854).

Criptanaliza sistemului Vigenere


Fie x = x0 x1 . . . xn−1 textul criptat cu cheia K = k0 k1 . . . kp−1 . Putem aranja acest text
sub forma unei matrici cu p linii şi dn/pe coloane, astfel
x0 xp x2p . . .
x1 xp+1 x2p+1 . . .
..
.
xp−1 x2p−1 x3p−1 ...
30 CAPITOLUL 2. SISTEME SIMETRICE DE CRIPTARE

Elementele de pe prima linie au fost criptate după formula

xpr = apr + k0 (mod 26), (k ≥ 0)

adică folosind un sistem Cezar (k0 fiind o valoare fixată din Z26 ). În mod similar şi
celelalte linii.
Deci, dacă s-ar cunoaşte lungimea p a cheii, problema s-ar reduce la criptanaliza a p
texte criptate cu Cezar – sistem de criptare monoalfabetic.
Sunt cunoscute două metode pentru aflarea lungimii cheii: testul lui Kasiski şi indexul
de coincidenţe.
Prima metodă constă ı̂n studiul textului criptat şi aflarea de perechi de segmente de
cel puţin 3 caractere (această lungime este propusă de Kasiski) identice. Pentru fiecare
astfel de pereche, se determină distanţa dintre segmente.
După ce s-au găsit mai multe astfel de distanţe, valoarea lui p va fi cel mai mare divizor
comun al lor (sau – eventual un divizor al acestuia).

Exemplul 2.11. Oscar interceptează următorul text criptat, despre care bănuie că s-a
folosit Vigenere:

D V L O E G O G L C G I W W A F R S C K A R V S S R A A K R S T U H D A
Q L N C J T S R U J V C W E A W K O H Z T I E U A R I Q L N C J C I K A
Q V A G K A S J T S G R W D A G K R C W A O L N S Z P C V Z W Z C S C E
P I E R V M W Y A W V M W E E G T U

Textul este destul de scurt (146 litere) şi nu se mai ştie nici un text trimis anterior.
Folosind metoda Kasiski, Oscar găseşte secvenţa QLN CJ care apare pe rândul al doilea.
Distanţa dintre cele două apariţii este 27. De asemenea, apar două cuvinte foarte asemă-
nătoare: AQLN şi AOLN , având ı̂ntre ele distanţa 57.
Deci putem bănui că avem de-a face cu un cuvânt cheie de lungime cmmdc(27, 57) = 3.
Rescriem textul pe coloane, fiecare coloană având trei elemente. Anume:
D O O C W F C R S A S H Q C S J W W H I A Q C I Q G S S W G C O S C W S P R W W W G
V E G G W R K V R K T D L J R V E K Z E R L J K V K J G D K W L Z V Z C I V Y V E T
L G L I A S A S A R U A N T U C A O T U I N C A A A T R A R A N P Z C E E M A M E U

Numărând frecvenţa apariţiei literelor pe fiecare linie, obţinem tabelul


A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Linia 1 2 0 6 1 0 1 3 2 2 1 0 0 0 0 3 1 3 2 7 0 0 1 8 0 0 0
Linia 2 0 0 1 2 4 0 3 0 1 3 6 3 0 0 0 0 0 4 0 2 0 6 2 0 1 3
Linia 3 11 0 3 0 3 0 1 0 2 0 0 2 2 3 1 1 0 3 2 3 4 0 0 0 0 1

În limba română, primele litere ca frecvenţă sunt A−E −I, aflate la distanţă egală una
de alta. Deci vom căuta pe fiecare linie tripletele de litere situate pe poziţiile (k, k+4, k+8)
având frecvenţă semnificativ de mare (maximă ı̂n cazul unui text lung). Pentru linia 3,
alegerea este simplă: ea este chiar A − E − I (16 apariţii din 49 posibile), deci o deplasare
0 ı̂n sistemul de criptare Cezar.
2.2. CIFRURI DE SUBSTITUŢIE 31

Pentru prima linie, sunt două posibilităţi: O − S − W (deplasare 14) sau S − W − A


(deplasare 18), ambele cu câte 18 apariţii.
Tot două variante apar şi pentru a doua linie: C − G − K (deplasare 2) cu 10 apariţii,
sau R − V − Z (deplasare 14) cu 13 apariţii.
Deplasările dau exact codificările cheii. Deci trebuie luate ı̂n considerare patru vari-
ante de cuvânt cheie: OCA, ORA, SCA sau SRA. Cum de obicei cuvântul cheie are
o semnificaţie semantică (pentru a putea fi reţinut mental uşor), putem presupune că el
este OCA sau ORA.
O simplă verificare reţine drept cuvânt cheie ORA, care conduce la decriptarea corectă
a textului (spaţiile şi semnele de punctuaţie se pun corespunzător):
PELANGAPLOPIIFARASOTADESEAAMTRECUTMACUNOSTEAUVECINIITOTITUNUMAICUNOSCUT
ACEASTAESTEPRIMASTROFAAUNEINPOEZIICELEBREDEMIHAIEMINESCU

A doua metodă de aflare a lungimii cheii de criptare ı̂ntr-un sistem Vigenere se bazează
pe un concept definit ı̂n 1920 de Wolfe Friedman: indexul de coincidenţe ([?]).
Definiţia 2.2. Dacă x = x1 x2 . . . xn este o secvenţă de n caractere alfabetice, se numeşte
”index de coincidenţe” al lui x probabilitatea ca două caractere din x, alese aleator, să fie
identice. Această valoare se notează Ic (x).
Să notăm cu fi frecvenţa de apariţie ı̂n x a caracterului literal codificat i (0 ≤ i ≤ 25).
Două litere din x pot fi alese ı̂n Cn2 moduri. Din acestea, sunt Cf2i moduri ca ambele să
aibă aceiaşi codificare i (0 ≤ i ≤ 25). Putem atunci să deducem formula
25 25
Cf2i
X X
fi (fi − 1)
i=0 i=0
Ic (x) = =
Cn2 n(n − 1)
Să presupunem că x este un text ı̂n limba română. Din tabelul frecvenţelor de apariţie ale
literelor, notând pi probabilitatea de apariţie a caracterului codificat cu i (0 ≤ i ≤ 25),
valoarea pe care o putem estima pentru indexul de coincidenţe este
25
p2i = 0, 0788
X
Ic (x) ≈
i=0
Motivaţie: Probabilitatea ca două elemente aleatoare să fie ambele egale cu caracterul de
cod i este p2i (0 ≤ i ≤ 25). Afirmaţia este valabilă pentru orice criptare cu un sistem
monoalfabetic.
Să presupunem acum că am aranjat textul criptat x = x0 x1 . . . xn−1 ı̂ntr-o matrice cu
p linii şi dn/pe coloane (unde p este un număr ı̂ntreg pozitiv arbitrar), astfel
x 0 = x0 xp x2p . . .
x 1 = x1 xp+1 x2p+1 . . .
..
.
xp−1 = xp−1 x2p−1 x3p−1 ...
32 CAPITOLUL 2. SISTEME SIMETRICE DE CRIPTARE

Dacă p este chiar lungimea cheii, atunci fiecare valoare Ic (xi ) trebuie să fie apropiată de
0, 0788. În caz contrar, şirul xi va arăta mult mai aleator, fiind obţinut prin amestecul
unei secvenţe de caractere criptate cu chei diferite. Pentru o secvenţă complet aleatoare,
valoarea indexului de coincidenţe este
2
1 1

Ic ≈ 26 = = 0, 0384
26 26
Valorile 0, 0788 şi 0, 0384 vor constitui punctele de extrem pe care le poate lua Ic . Vom lua
deci diverse valori pentru p, până vom găsi una care să se apropie cât mai mult de 0, 788 şi
nu de 0, 384. Aceea poate fi considerată – cu suficientă siguranţă – drept lungimea cheii.
În etapa a doua, vom ı̂ncerca să aflăm efectiv cheia K = k0 k1 . . . kp−1 .
Dacă notăm n1 = bn/pc lungimea secvenţei xi , atunci distribuţia de probabilitate ale
celor 26 litere ı̂n xi este
f0 f1 f25
, ,...,
n1 n1 n1
Secvenţa xi a fost obţinută printr-o criptare Cezar cu o deplasare ki . Deci, situaţia ideală
este când distribuţia de probabilitate a deplasării
fki fki +1 (mod 26) fk +25 (mod 26)
, ,..., i
n1 n1 n1
este cât mai apropiată de distribuţia de probabilitate p0 , p1 , . . . , p25 a limbii române.
Fie un ı̂ntreg m (0 ≤ m ≤ 25); definim expresia
25
X pi · fi+m
Fm =
i=0 n1
25
p2i = 0, 0788.
X
Dacă m = kj (0 ≤ j ≤ p − 1), ne putem aştepta ca Fm ≈
i=0
Dacă m 6= kj , atunci Fm va fi semnificativ mai mic decât această valoare. Deci, după
cel mult 25 ı̂ncercări, se poate afla deplasarea kj şi deci a j-a literă din cheie.
2.3. EXERCIŢII 33

2.3 Exerciţii
2.1. Folosind atacul prin forţă brută, decriptaţi mesajul WYPTBSJBYZ criptat cu un
sistem Cezar.
2.2. O cheie K este ”auto-cheie” dacă dK = eK . Găsiţi toate auto-cheile sistemului de
criptare Cezar.
2.3. Demonstraţi că ı̂ntr-un cifru de permutare, π este o auto-cheie dacă şi numai dacă

(∀i, j) [π(i) = j =⇒ π(j) = i]

Găsiţi toate auto-cheile unui cifru de permutare cu n = 2, 3, 4, 5, 6.


2.4. Considerăm următorul cifru de permutare: Se fixează numerele naturale p, q. Textul
clar se ı̂mparte ı̂n blocuri de câte p · q caractere. Fiecare astfel de bloc se scrie pe liniile
unei matrici de p linii şi q coloane. Criptarea blocului se realizează scriind aceste matrici
pe coloane.
M A I N
De exemplu, pentru p = 3, q = 4, textul clar MAINI CURATE se scrie I C U R
A T E X
(textul s-a completat cu litera X). Textul criptat va fi MIAACTIUENRX.
Decriptaţi următorul text DJNOUDNAINPAPANONZ criptat ı̂ntr-un mod similar.
2.5. Să se decripteze mesajul
N T I N I I I D D N R I R T E E A D
U M I I G R A D V O B E M C I I I E
Z S R U A U C M L T A I T U I T N I
D A A L E A R A C R I A S Z T E E E
I G P S A D E A P R E Z S T C A O
A E R I D R E D D E I E S E E P E L
ştiind că a fost criptat cu matricea Richelieu definită ı̂n Exemplul ??.
2.6. Demonstraţi că funcţia de criptare afină eK (x) = ax + b (mod 26) este injectivă dacă
şi numai dacă cmmdc(a, 26) = 1.
2.7. Textul clar este scris peste alfabetul V = {a, b, c, d}. Se foloseşte un sistem de criptare
monoalfabetic dat de regulile a −→ bb, b −→ aab, c −→ bab, d −→ a. Să se arate că
funcţia de criptare este injectivă.
Dar pentru: a −→ ab, b −→ ba, c −→ a, d −→ c ?
2.8. Se definesc două sisteme de criptare cu P= {a, b}, C= {c, d} şi regulile
a −→ ccd, b −→ c pentru primul sistem,
a −→ c, b −→ dcc la al doilea sistem.
Ce cuvinte sunt criptate la fel ı̂n cele două sisteme ?
34 CAPITOLUL 2. SISTEME SIMETRICE DE CRIPTARE

2.9. S-a recepţionat mesajul


ARAU RIRU IT AA U RIR EESU U RAP IU T E IRI
Despre el, criptanalistul are următoarele informaţii: s-a folosit un careu de criptare
tip Polybios, precum şi cuvântul cheie ST ROP .
Să se decripteze mesajul.

2.10. În sistemele de criptare simple, orice cheie de criptare poate fi reprezentată ca o
compunere de câteva chei generatoare. La sistemul Cezar, o astfel de cheie este e1 . Arătaţi
că la sistemul afin sunt necesare cel puţin două chei generatoare.

2.11. Decriptaţi următorul mesaj

TKLCP OCTLE TSSZC XCMEB CVKMK CCSBX KGQBA CGQPE MBKCQ FKGSP
SSBEB SBQPQ ACSGQ PEMGQ BLCOK CAQLB CQGKM BXCLQ GKCTX SFKCA
CBCBV KVKME LQAKP BXXCO CPBKL KOKCB QPQAC SSPBK LKM

criptat cu un sistem afin.

2.12. O variantă a sistemului AUTOCLAVE este utilizarea textului criptat (ı̂n loc de text
clar) după prima aplicare a cheii. La care din cele două variante de AUTOCLAVE este
criptanaliza mai uşoară ?

2.13. Câte chei are un sistem de criptare afin ı̂n care card(V ) = 30, 100 sau 1225 ?

2.14. Fie K = (5, 21) o cheie ı̂ntr-un sistem de criptare afin peste Z29 .
(a) Exprimaţi funcţia de decriptare sub forma dK (y) = ay + b unde a, b ∈ Z29 ;
(b) Arătaţi că eK (dK (x)) = x, ∀x ∈ Z29 .

2.15. Fie K = (a, b) o cheie ı̂ntr-un sistem afin peste Zn . Demonstraţi afirmaţia:
”K este auto-cheie dacă şi numai dacă a−1 ≡ a (mod n) şi b · (a + 1) ≡ 0 (mod n)”.
Aflaţi toate auto-cheile dintr-un sistem afin peste Z15 .
Să presupunem că n = pq unde p şi q sunt numere prime distincte. Arătaţi că numărul
auto-cheilor din sistemul afin peste Zn este n + p + q + 1.

2.16. Fiind dat unn număr ı̂ntreg n (n ≥ 1), să se arate că mulţimea tuturor funcţiilor de
criptare Vigenere (definite pentru toate cheile de lungime fixată n) formează o structură
algebrică de grup.

2.17. Fiind date două sisteme de criptare (P, C, K, E, D) şi (P 0 , C 0 , K0 , E 0 , D0 ) cu P 0 = C,


definim ”produsul” lor ca fiind sistemul (P, C 0 , K × K0 , E ◦ E 0 , D0 ◦ D), unde criptarea unui
text clar m ∈ P este eK2 (eK1 (m)) (K1 ∈ K, K2 ∈ K0 ), iar decriptarea unui mesaj y ∈ C 0
este dK1 (dK2 (y)).
Care este produsul a două sisteme de criptare Vigenere cu chei de lungimi diferite ?
Capitolul 3

Sisteme mecanice de criptare

Sistemele de criptare pot fi aduse la un grad mai mare de complexitate şi securitate dacă
se folosesc mijloace mecanice de criptare. Astfel de mecanisme special construite vor uşura
– pe de-o parte – operaţiile de criptare/decriptare, iar pe de-altă parte vor fi capabile să
creeze un număr mult mai mare de chei posibile.

3.1 Sistemul Skitala


Skitala (”baston” ı̂n greceşte) este o unealtă folosită pentru realizarea unui sistem de
criptare cu permutări. El este sub formă aproximativ cilindrică, ı̂n jurul lui fiind ı̂nfăşurată
o bandă de hârtie. Mesajul se scrie ı̂n mod normal pe această bandă, după care hârtia
este desfăcută. La primire se foloseşte un băţ asemănător pe care se ı̂nfăşoară sulul de
hârtie, mesajul devenind din nou inteligibil (pentru detalii, a se vedea [?], [?]). Conform
istoricilor greci, spartanii foloseau – ı̂ncepând cu sec. V ı̂.H. – acest mod de comunicare,
ı̂n timpul campaniilor militare1 . El avea avantajul de a fi rapid şi nu comportă erori de
transmitere. Dezavantajul este acela că este uşor de spart.

Exemplul 3.1. Să presupunem că dimensiunile băţului permit scrierea a 4 rânduri, cu
5 caractere pe fiecare rând. Fie ”VINO MAINE LA INTALNIRE” textul care trebuie
criptat. Ignorând spaţiile, mesajul va apare scris sub forma

1
Skitala a fost menţionată prima oară de poetul grec Archilochus (sec. VII ı̂.H). Deşi apare ulterior
şi ı̂n alte texte, abia la mijlocul secolului III ı̂.H. Apollonius din Rhodos specifică limpede utilizarea lui
ca mijloc de criptare. De remarcat că pentru perioada respectivă, sistemele de criptare folosite de greci
erau de tip steganografic. O descriere a modului de operare este dată apoi de Plutarh (50-120 A.D.).

35
36 CAPITOLUL 3. SISTEME MECANICE DE CRIPTARE

________________________
| | V | I | N | O | M |
|__| A | I | N | E | L |__
| A | I | N | T | A | |
| L | N | I | R | E | |
|___|___|___|___|___|__|
După derularea de pe skitala, mesajul scris pe banda de hârtie este:
VAALIIINNNNIOETRMLAE.
La decriptare, banda va fi rulată din nou şi fiecare a patra literă va fi pe aceeaşi linie.
Criptanaliza este foarte simplă. Se iau pe rând valorile n = 2, 3, 4, . . .. Pentru o astfel
de valoare fixată, se formează n rânduri de tipul
i, n + i, 2n + i, 3n + i, . . . (i = 1, 2, . . . , n)
care ulterior se concatenează. Există o valoare a lui n pentru care textul astfel format este
inteligibil.

3.2 Cilindrul Jefferson


Ideea de maşină de criptare apare clar prima dată la Thomas Jefferson, primul secretar
de Stat al Statelor Unite; acesta a inventat un aparat de criptat numit roată de criptare,
folosit pentru securitatea corespondenţei cu aliaţii – ı̂n special cei francezi2 .
Un cilindru Jefferson este format din n discuri de dimensiuni egale (iniţial n = 26
sau n = 36, dar valoarea este nerelevantă pentru descrierea sistemului) aşezate pe un ax.
Discurile se pot roti independent pe ax, iar pe muchea fiecăruia sunt inscrise cele 26 litere
ale alfabetului, ı̂ntr-o ordine aleatoare (dar diferită pentru fiecare disc).
La criptare, textul clar se ı̂mparte ı̂n blocuri de n caractere. Fiecare astfel de bloc
se scrie pe o linie (generatoare) a cilindrului, rotind corespunzător fiecare disc pentru a
aduce pe linie caracterul căutat. Oricare din celelalte 25 linii va constitui blocul de text
criptat.
Pentru decriptare este necesar un cilindru identic, ı̂n care se scrie pe o linie textul
criptat (de n caractere) şi apoi se caută printre celelalte 25 linii un text cu semnificaţie
semantică. Probabilitatea de a avea un singur astfel de text creşte cu numărul de discuri
din cilindru.
O mică diferenţă apare dacă textul clar nu are nici o semnificaţie semantică (s-a
folosit o dublă criptare). Atunci trebuie convenită dinainte o anumită distanţă de criptare
s (1 ≤ s ≤ 25).
2
Thomas Jefferson a folosit acest aparat ı̂n perioada 1790 − 1802, după care se pare că ideea s-a
pierdut. Devenit preşedinte, Jefferson a fost atras de sistemul Vigenere, pe care ı̂l consideră mai sigur
şi-l recomandă secretarului său de stat James Madison ca ı̂nlocuitor al sistemului pe care ı̂l inventase
anterior.
3.2. CILINDRUL JEFFERSON 37

Ordinea discurilor poate fi de asemenea schimbată. De exemplu, un cilindru cu n = 10


discuri poate realiza 10! = 3.628.800 texte criptate diferite pentru acelaşi text clar.
Cilindrul Jefferson realizează o substituţie polialfabetică de perioadă n. Dacă ar fi
privit ca un sistem de criptare Vigenere, lungimea cheii este enormă (de multe ori nn , ı̂n
funcţie de modalităţile de aranjare a alfabetelor pe discuri), şi deci metoda de atac a lui
Kasiski este inaplicabilă.

Exemplul 3.2. Să considerăm n = 10 şi fie cilindrul, ı̂n care am desfăşurat literele de
pe cele 10 discuri:

1 2 3 4 5 6 7 8 9 10
1 A A A A A A A A A A
2 R R P N V S P E I I
3 I O S I O O U S R H
4 E S Y M T R H U E E
5 K U L O Y P I P S T
6 O V U C L M S B L O
7 B I K U E U E L B M
8 C J B L B B N C C U
9 U L R T C D R D D C
10 D B C Y D Y Y H F D
11 J V D B G E D I N F
12 T C T F F C B J Y G
13 L G F G K V F F T J
14 N K G S N H G O G P
15 P N O H H F V G H Q
16 W P N J U K J K J B
17 Q Q E D P L K M K N
18 M T H E Q Q M N M V
19 S H M K R I T Q P W
20 V E Q P S J O R Q X
21 X D V Q W N L V V L
22 Z Y W V X G W W W Y
23 G W X X M T Q Y O K
24 H X Z R I W X X U R
25 Y Z I Z J X Z T X S
26 F M J W Z Z C Z Z Z

Cu ajutorul lui, textul clar TREI CULORI construit pe una din liniile generatoare ale
cilindrului va genera următoarele linii (oricare din ele putând fi folosit drept text criptat):
38 CAPITOLUL 3. SISTEME MECANICE DE CRIPTARE

T R E I C U L O R I
L O H M D B W G E H
N S M O G D Q K S E
P U Q C F Y X M L T
W V V U K E Z N B O
Q I W L N C C Q C M
M J X T H V A R D U
S L Z Y U H P V F C
V B I B P F U W N D
X F J F Q K H Y Y F
Z C A G R L I X T G
G G P S S Q S T G J
H K S H W I E Z H P
Y N Y J X J N A J Q
F P L D M N R E K B
A Q U E I G Y S M N
R T K K J T D U P V
I H B P Z W B P Q W
E E R Q A X F B V X
K D C V V Z G L W L
O Y D X O A V C O Y
B W T R T S J D U K
C X F Z Y O K H X R
U Z G W L R M I Z S
D M O A E P T J A Z
J A N N B M O F I A
Dacă se consideră o dublă criptare cu distanţa s = 3, atunci textul clar AAAAAAAAAA
va fi criptat cu cilindrul anterior ı̂n ESYMTRHUEE.
Cilindrul Jefferson a fost reinventat ulterior de mai multe ori, cea mai notabilă fiind
se pare maşina de criptat M − 94, care a fost utilizată până la ı̂nceputul celui de al doilea
război mondial.

3.3 Maşini de criptat


Prima jumătate a secolului XX este dominată de maşinile de criptat, o combinaţie ı̂ntre
maşinile de scris şi sisteme de criptare mecanice bazate pe discuri.

3.3.1 Enigma
Poate cea mai celebră maşină de criptat a fost maşina germană Enigma. Sub acest nume
se află o varietate largă de modele de maşini de criptat electro-mecanice, care asigură o
criptare polialfabetică de tip Vigenere sau Beaufort.
3.3. MAŞINI DE CRIPTAT 39

Ea a fost proiectată la Berlin ı̂n 1918, de inginerul german Arthur Scherbius. Primul
model (A) este prezentat la Congresele Uniunii Poştale Internaţionale din 1923 şi 1924.
Modele ulterioare sunt folosite ı̂n mai multe ţări europene şi asiatice (Suedia, Olanda,
Marea Britanie, Japonia, Italia, Spania, SUA, Polonia, Elveţia) ı̂n scopuri comerciale,
militare sau diplomatice. Din 1926 ı̂ncepe să fie preluată şi de armata germană, care
după 1928 ı̂şi defineşte propriile modele (G, I, K).
În total au fost construite circa 100.000 maşini Enigma, din care 40.000 ı̂n timpul
războiului. După 1945 aliaţii au capturat toate maşinile de pe teritoriul german, acestea
fiind ı̂ncă mult timp considerate sigure. Abia ı̂n 1970 au apărut primele informaţii despre
decriptarea de către aliaţi (Biuro Szyfrow - Polonia şi Bletchley Park - Anglia) a unui
mare număr de mesaje criptate prin modelul militar Enigma şi transmise prin radio ı̂n
timpul războiului.
O descriere completă a maşinii este destul de lungă; recomand pentru detalii [?], [?].
În linii mari, ea are următoarele componente:
• Tastatură: Este o componentă mecanică formată din:
– Un pupitru de taste (similar unei maşini de scris);
– n discuri adiacente, care se rotesc ı̂n jurul unui ax. La marea majoritate a
modelelor Enigma, n = 3; sunt ı̂nsă şi versiuni cu n = 5, 6 sau n = 7 discuri.
Pe fiecare disc sunt scrise cele 26 caractere alfabetice (la care uneori se mai
adaugă trei caractere speciale);
– Un mecanism de avans (similar ceasurilor mecanice) care permite – la apăsarea
unei taste – rotirea unuia sau mai multor discuri cu un număr de poziţii. Sunt
folosite mai multe variante; cea mai frecventă constă ı̂n rotirea cu o poziţie a
discului din dreapta, la fiecare apăsare a unei taste, acompaniată ı̂n anumite
situaţii de rotirea discurilor vecine.
• Circuite electrice: Criptarea unui caracter se realizează electric. Componenta meca-
nică este concepută ı̂n aşa fel ı̂ncât să formeze un circuit electric. La apăsarea unei
taste circuitul se ı̂nchide şi luminează una sau mai multe lămpi, indicând litera de
ieşire.
• Reflector (Umkehrwalze): Este o componentă specifică maşinilor de criptat Enigma
(introdusă ı̂n 1926 la sugestia lui Willy Korn). Scopul ei este de a realiza un sistem
de criptare Beaufort (maşina să poată fi capabilă de a cripta şi decripta mesaje).
În majoritatea variantelor, reflectorul este aşezat pe ax după ultimul disc (din
stânga); el realizează o substituţie (fixată), după care reintroduce noul caracter
prin discuri ı̂n sens invers, dar pe alt drum. Deci o maşină Enigma cu n discuri va
realiza criptarea unui caracter prin 2n + 1 substituţii.
O consecinţă a acestei proprietăţi este aceea că un caracter nu va fi niciodată criptat
ı̂n el ı̂nsuşi, slăbiciune exploatată adesea cu succes de criptanalişti.
40 CAPITOLUL 3. SISTEME MECANICE DE CRIPTARE

• Tabela de conexiuni (Steckerbrett)3 : Este o componentă (poziţionată ı̂n faţă, sub


tastele literelor) ı̂n care se pot face conexiuni ı̂ntre perechi de litere, prin intermediul
unor cabluri (similar centralelor telefonice vechi). Deci la un mesaj sunt posibile
maxim 13 conexiuni. De exemplu, dacă printr-un cablu sunt conectate literele S
şi W , de câte ori este tastat S, semnalul este comutat pe W ı̂nainte de a intra pe
discuri.
Introdusă ı̂n 1930, această componentă asigură un plus de securitate şi a fost prin-
cipalul obstacol ı̂n criptanaliză.

Starea iniţială a unei maşini Enigma se referă la:

• Ordinea discurilor (Walzenlage): alegerea numărului de discuri şi ordinea lor de


utilizare;

• Poziţia iniţială a discurilor: poziţionarea ı̂n mod independent a fiecărui disc, diferită
pentru fiecare mesaj;

• Iniţializarea inelului de caractere (Ringstellung): poziţionarea alfabetului relativ la


primul disc.

• Iniţializarea conexiunilor (Steckerverbindungen): conexiunile dintre litere ı̂n cadrul


tabelei de conexiuni.

Matematic, Enigma criptează fiecare literă după o procedură care poate fi exprimată prin
produs de permutări. Să presupunem că avem o maşină Enigma cu 3 discuri şi fie P
transformarea tabelei de conexiuni, U – reflectorul, S, M, D – acţiunile celor 3 discuri
(din stânga, mijloc şi respectiv dreapta). Atunci criptarea e poate fi scrisă sub forma:

e = P DM SU S −1 M −1 D−1 P −1

După fiecare apăsare a unei taste, discurile se rotesc schimbând transformarea. De exem-
plu, dacă discul din dreapta se roteşte cu i poziţii, atunci transformarea devine ρi Dρ−i ,
where ρ este permutarea ciclică stânga a vectorului (A, B, C, . . . , Z). Similar, discurile
din mijloc şi stânga pot fi reprezentate prin j respectiv k rotiri ale lui M respectiv S.
Atunci funcţia de criptare poate fi descrisă astfel:

e = P (ρi Dρ−i )(ρj M ρ−j )(ρj Sρ−k )U (ρj S −1 ρ−k )(ρj M −1 ρ−j )(ρi D−1 ρ−i )P −1

Decriptarea se efectuează după aceeaşi formulă.


Să calculăm numărul de variante posibile pentru criptarea unui mesaj. Vom considera
o maşină Enigma cu 3 discuri. Atunci numărul de situaţii iniţiale posibile este 26·26·26 =
3
plugboard ı̂n engleză.
3.3. MAŞINI DE CRIPTAT 41

17.576. Cum cele 3 discuri pot fi permutate ı̂n 6 moduri, numărul variantelor se ridică la
6 · 17.576 = 105.456.
Pentru fiecare din acestea, o tabelă de conexiuni cu 13 perechi de litere conectate
ridică numărul variantelor la 150.738.274.937.250.
La acestea se adaugă şi modul de poziţionare al inelului de caractere la mecanismul
discurilor, care mai ridică ordinul de mărime al variantelor cu aproximativ 105 . Aceste
estimări arată că Enigma era cea mai sigură maşină de criptat a momentului respectiv.
Să detaliem funcţionarea unei maşini Enigma (din punct de vedere matematic):
• Fiecare disc poate fi reprezentat ca un set de permmutări pentru litere – codificate
cu valori ı̂ntre 0 şi 25; fie α1 , α2 , α3 permutările de pe cele trei discuri (de la dreapta
spre stânga).
• Fie r1 , r2 , r3 setările iniţiale de pe cele trei discuri (caracterele situate iniţial pe
poziţiile accesibile ale discurilor).
• Pentru simplificare, vom ignora rolul tabelei de conexiuni.
• Vom nota cu β substituţia reflectorului (reprezentată ca un set de permutări ı̂ntre
perechi de caractere.
Să urmărim – pe un exemplu – un traseu care pleacă de la semnalul de intrare (un caracter
din textul clar), trece prin cele trei discuri şi reflector şi dă ca rezultat caracterul criptat
(a se vedea figura).
Reflector
Disc 3 Disc 2 Disc 1
0
b- Tabelă de
e- Text
6 Q >


H
HH conexiuni 
>
Q  HH 0 criptat
c0- a
Q  j -
QQ
s a0

c  HH
Y
  a aHH

 HH
Y
HH 
 Text clar
d  H b 

=
 +


Exemplul 3.3. Să presupunem că cele permutările celor trei discuri sunt:
α1 = (0 15 6 10 14 8 19 17 22 18 11)(1 2 9 13 21 25)(3 4 23 5 24 7 12 16 20)
α2 = (0 7 9 4 6 18 23 25 8)(1 17 19)(2 20 10)(3 12)(5 11 13 21)(14 22 15 16 24)
α3 = (0 2 4 7 16 17 19 5)(1 6 3 8 21 24 11 13 9 10 25 12 14 15)(18 23 20 22)
Substituţia β este definită
β = (0 4)(1 7)(2 9)(3 16)(5 20)(6 8)(10 19)(11 17)(12 25)(13 18)(14 24)(15 22)(21 23).
42 CAPITOLUL 3. SISTEME MECANICE DE CRIPTARE

Deci, cu α1 , 0 este mutat ı̂n 15, 15 este mutat ı̂n 6, 25 este mutat ı̂n 1 etc.
Inversele celor trei permutări (folosite ”pe drumul de ı̂ntoarcere”) sunt:
α1−1 = (11 18 22 17 19 8 14 10 6 15 0)(25 21 13 9 2 1)(20 16 12 7 24 5 23 4 3)
α2−1 = (8 25 23 18 6 4 9 7 0)(19 17 1)(10 20 2)(12 3)(21 13 11 5)(24 16 15 22 14)
α3−1 = (5 19 17 16 7 4 2 0)(15 14 12 25 10 9 13 11 24 21 8 3 6 1)(22 20 23 18)
Setările iniţiale sunt r1 = 22 (deci primul rotor are ”vizibilă” litera V ), r2 = 7, r3 = 12.
Substituţiile celor trei discuri sunt date – matematic – de formulele

b = [a + r1 (mod 26)]α1 , c = [b + r2 (mod 26)]α2 , d = [c + r3 (mod 26)]α3 ,

unde xα = y, y fiind elementul care urmează lui x ı̂n permutarea α. Astfel, de exemplu
3α1 = 4, 8α2 = 0 etc.
Această notaţie permite să scriem de asemenea

e = dβ .

În continuare, semnalul parcurge cele trei discuri ı̂n sens invers:
−1 −1 −1
c0 = eα3 − r3 (mod 26), b0 = (c0 )α2 − r2 (mod 26), a0 = (b0 )α1 − r1 (mod 26).

După criptarea unui caracter, cele trei discuri sunt resetate după regula:
r1 := r1 + 1 (mod 26); dacă noua valoare r1 = 0 atunci r2 := r2 + 1 (mod 26); dacă
noua valoare r2 = 0, atunci r3 := r3 + 1 (mod 26).
Pentru exemplificare, să criptăm litera K (al cărei cod numeric este 10).
a = 10;
b = [a + r1 (mod 26)]α1 = [10 + 22 (mod 26)]α1 = 6α1 = 10;
c = [b + r2 (mod 26)]α2 = [10 + 7 (mod 26)]α2 = 17α2 = 22;
d = [c + r3 (mod 26)]α3 = [22 + 12 (mod 26)]α3 = 8α3 = 21.
Trecerea prin reflector dă e = dβ = 21β = 23.
Acum se parcurg cele trei discuri ı̂n sens invers:
−1 −1
c0 = eα3 − r3 (mod 26) = 23α3 − 12 (mod 26) = 18 − 12 (mod 26) = 6;
−1 −1
b0 = (c0 )α2 − r2 (mod 26) = 6α2 − 7 (mod 26) = 4 − 7 (mod 26) = 23;
−1 −1
a0 = (b0 )α1 − r1 (mod 26) = 23α1 − 22 (mod 26) = 4 − 22 (mod 26) = 8.
Deci criptarea caracterului K este I (litera corespunzătoare codului 8).
Setările pentru criptarea următorului caracter sunt r1 := 23, r2 = 7, r3 = 12.

Detalii despre modul de construcţie al maşinii de criptat Enigma se pot găsi ı̂n [?], [?] şi
– mai ales din punct de vedere al criptanalizei – ı̂n [?].
3.3. MAŞINI DE CRIPTAT 43

3.3.2 C − 36 (M − 209 C)
Maşina C − 36 este concepută de inginerul suedez Boris Hagelin, la solicitarea armatei
americane de a avea o maşină de criptat portabilă, uşor de mânuit, care să poată fi folosită
după un instructaj sumar. Este cunoscută şi sub numele de M − 209 C, la bază fiind
un model creat de Hagelin ı̂n Suedia la sfârşitul anilor 0 30. Ea ı̂ncepe să fie produsă –
după câteva modificări legate de design – ı̂n 1940 şi ı̂nlocuieşte treptat maşina de criptat
M − 94. Se apreciază că ı̂n timpul războiului au fost produse circa 140.000 maşini de
criptat C − 36.
Nu au fost specificate măsuri speciale de securitate; C − 36 nu a fost realizată pentru
a fi criptografic sigură, ea fiind destinată zonelor militare tactice, unde era nevoie doar de
o siguranţă de câteva ore faţă de o eventuală criptanaliză.
Vom da o prezentare matematică a principiilor sale de construcţie; pentru alte detalii,
a se vedea [?] şi [?].

Definiţia 3.1. Se numeşte matrice lug o matrice binară M6×27 ı̂n care fiecare din cele 27
coloane conţine cel mult doi de 1.

Exemplul 3.4. ([?]). Toate exemplificările referitoare la M − 209 vor fi făcute pentru
matricea
 
0 0 0 1 0 0 0 0 1 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1
 1 0 0 0 1 0 0 0 1 0 0 1 1 0 0 0 1 0 0 1 0 0 1 0 1 0 0
 

 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 

M = 0 0

 1 1 0 0 0 1 0 1 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 1 1 

 0 0 1 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0
 

0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0

Fie v un vector binar de dimensiune 6. Atunci c · M este un vector cu 27 componente


având elemente din mulţimea {0, 1, 2}. Numărul de elemente nenule din v · M se numeşte
ponderea lui v ı̂n raport cu M .
O configuraţie de ı̂nceput se obţine prin aşezarea unul sub altul (aliniaţi la stânga) a
şase vectori binari de lungimi 17, 19, 21, 23, 25, 26.

Exemplul 3.5. Structura


0 1 1 0 0 0 1 0 0 0 0 0 0 0 1 1 0
0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 1
1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1
formează o posibilă configuraţie de ı̂nceput.
Spre deosebire de matricea lug, la configuraţia de ı̂nceput nu există restricţii privind
numărul de 1.
44 CAPITOLUL 3. SISTEME MECANICE DE CRIPTARE

Plecând de la o configuraţie de ı̂nceput, se pot genera o infinitate de vectori de dimen-


siune 6 ı̂n felul următor:
1. Primii 17 vectori sunt coloanele complete ale configuraţiei de ı̂nceput.
2. Fiecare vector linie se repetă ciclic din momentul când s-a terminat.
Pe baza acestor elemente se poate descrie sistemul de criptare al maşinii C − 36. Rea-
mintim, codificarea numerică a literelor este de la A − 0 până la Z − 25; toate calculele
se vor face modulo 26.
Fie x codul celui de-al i-lea caracter din textul clar şi h ponderea celui de-al i-lea
vector generat de configuraţia de ı̂nceput ı̂n raport cu matricea lug. Atunci
y = h − x − 1.
Exemplul 3.6. Să considerăm textul clar
NU PUTEM REUSI DECAT IMPREUNA
ı̂mpreună cu matricea lug şi configuraţia de ı̂nceput din exemplele anterioare. Codifi-
carea numerică a textului este
13 20 15 20 19 4 12 17 4 20 18 8 3 4 2 0 19 8 12 15 17 4 20 13 0.
După ignorarea spaţiilor libere4 , lungimea textului clar este 25.
Vom calcula ponderile primilor 25 vectori şi vom aranja totul sub forma unui tablou:

h 10 17 16 9 9 9 7 0 0 0 0 12 0
x 13 20 15 20 19 4 12 17 4 20 18 8 3
h − x − 1 22 20 0 14 15 4 20 8 21 5 7 3 22
W W A O P E U I V F H D W
h 0 18 7 0 0 18 7 9 9 19 14 9
x 4 2 0 19 8 12 15 17 4 20 13 0
h − x − 1 21 15 6 6 17 5 17 17 4 24 0 8
V P G G R F R R E Y A I
Deci textul criptat este
WWAOPEUIVFHDWVPGGRFRREYAI
Matricea lug şi configuraţia de ı̂nceput formează cheia pentru maşina C − 36. De
fapt, maşina ı̂nsăşi este o realizare fizică a acestui sistem: ea operează conform cu o cheie
stabilită anterior prin fixarea unor roţi dinţate şi a unui disc (pentru detalii vezi [?]).
Observaţia 3.1. Ecuaţia de decriptare este identică cu cea de criptare:
x = h − y − 1.
Deci din acest punct de vedere sistemul de criptare este de tip Beaufort şi maşina C − 36
poate fi folosită atât pentru criptare cât şi pentru decriptare.
4
În aplicaţiile practice, spaţiul se ı̂nlocuieşte uneori cu o literă de frecvenţă redusă.
3.4. EXERCIŢII 45

Deoarece liniile din configuraţia de ı̂nceput au lungimi numere prime ı̂ntre ele, vectorii
generaţi ı̂ncep să se repete sigur după 17·19·21·23·25·26 = 101.405.850 paşi; deci cuvântul
cheie poate fi considerat mai lung decât orice text clar. Sunt ı̂nsă cazuri când această
perioadă poate fi mai scurtă. De exemplu, dacă configuraţia de ı̂nceput conţine numai 1,
se va genera un singur vector, deci perioada este 1. De asemenea se obţin perioade scurte
pentru matrici lug cu foarte puţini 1 sau configuraţii de ı̂nceput ı̂n care raportul dintre
numărul de 0 şi 1 este disproporţionat.
Nu există o condiţie matematică pentru existenţa a exact 6 linii ı̂n configuraţia de
ı̂nceput. Acest număr a fost ales ca un compromis ı̂ntre securitatea criptografică şi
uşurinţa de a cripta. În general perioada creşte cu numărul de linii.
Maşina de criptat M − 209 avea şi ea o serie de slăbiciuni (un atac cu texte clare alese
care au anumite componente comune poate duce la informaţii asupra matricii lug), astfel
că ı̂n 1943 criptanaliştii germani puteau decripta mesajele. Totuşi – din punct de vedere
militar tactic – ea a fost considerată perfect adaptată necesităţilor şi a fost folosită de
armata americană până după războiul din Coreea (1953 − 1956).
Ulterior, Hagelin a elaborat un model ı̂mbunătăţit: maşina C − 52. Aceasta avea o
perioadă de 2.756.205.443; discurile puteau şi scoase şi reinserate ı̂n altă ordine; exista un
disc al cărui alfabet putea fi permutat.
C − 52 a făcut parte din ultima generaţie de maşini de criptat clasice, noua tehnologie
(cea a computerelor) permiţând dezvoltarea altor mecanisme cu o putere de calcul mult
mai mare.

3.4 Exerciţii
3.1. Să se cripteze, folosind sistemul skitala pe 6 rânduri, primul vers din Iliada:
CANTA ZEITA MANIA CE-APRINSE PE-AHIL PELEIANUL

3.2. Se interceptează trei zile la rând câte un mesaj:


(a) U KM V U IEE LBIM KP HN KGM R M V U I EV M I KHKN KM N K RI;
(b) DOSX DEKK N CES OW Y P OHSI SXDE KXSE OY OP OSP O IE;
(c) JBV Z JKOO P U KV BQF W BY V E V ZJK OZV K BF BW BV W B EK.
Despre aceste mesaje ştim că:
- Reprezintă acelaşi text clar;
- Sunt criptate folosind un cilindru Jefferson având trei discuri identice;
- Criptarea s-a făcut ı̂n prima zi cu deplasarea 1, ı̂n a doua zi cu deplasarea 2, iar ı̂n
a treia zi cu deplasarea 3.
Să se decripteze mesajul iniţial şi să se reconstituie cilindrul Jefferson cu care s-a făcut
criptarea.

3.3. Se dă matricea


46 CAPITOLUL 3. SISTEME MECANICE DE CRIPTARE

0 0 1 1 0 0 0 0 1 1 0 0 0 1 0 1 1
0 1 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0
1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 0 0 1 0
0 0 1 0 0 0 1 0 1 0 0 0 1 1 0 0 1 1 0 0 0 1 0
1 0 0 1 0 0 0 1 0 1 0 0 0 0 1 0 0 0 1 0 0 0 1 1 0
0 1 0 0 0 0 1 0 0 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 0 1
Nu se cunoaşte matricea lug, dar din textul criptat
CSDZ RGGV P SLA BCBU P T EU SHDO HBN O CDT O Y BM S
N U KD GAAY W ZRS W P V
s-au putut decripta primele 20 caractere:
CU M QIT IQAST ERN IQASAQV EIQST A
Să se decripteze restul textului.

3.4. Maşina Enigma asigură un cifru de substituţie sau un cifru de transpoziţie ?


De ce ?

3.5. Utilizând discurile, reflectorul şi setările iniţiale din Exemplul ??, să se cripteze
textul clar
MASINA DE CRIPTARE.

3.6. Utilizând discurile, reflectorul şi setările iniţiale din Exemplul ??, să se decripteze
textul
YDDMYU.
Capitolul 4

Sisteme fluide de criptare

4.1 Sisteme sincrone şi auto-sincronizabile


În sistemele de criptare prezentate până acum, elementele succesive ale textului clar erau
criptate folosind aceeaşi cheie K. Deci, dacă

x = x1 x2 x3 . . .

este textul clar, textul criptat este

y = y1 y2 y3 . . . = eK (x1 )eK (x2 )eK (x3 ) . . .

Sistemele de criptare de acest tip se numesc sisteme de criptare bloc (block cyphers).
Altă manieră utilizată este aceea a sistemelor de criptare fluide (stream cyphers).
Definiţia 4.1. Fie M= (P, C, K, E, D) un sistem de criptare. O secvenţă de simboluri
k1 k2 k3 . . . ∈ K+ se numeşte cheie fluidă.
Definiţia 4.2. M= (P, C, K, E, D) este un sistem fluid de criptare dacă cifrează un text
clar
x = x1 x2 x3 . . .
ı̂n
y = y1 y2 y3 . . . = ek1 (x1 )ek2 (x2 )ek3 (x3 ) . . .
unde
k = k1 k2 k3 . . .
este o cheie fluidă din K+ .
Problema principală este de a genera o cheie de criptare fluidă (teoretic infinit).
Aceasta se poate realiza fie aleator, fie pe baza unui algoritm care pleacă de la o secvenţă
mică de chei de criptare. Un astfel de algoritm se numeşte generator de chei fluide.

47
48 CAPITOLUL 4. SISTEME FLUIDE DE CRIPTARE

Exemplul 4.1. (sistemul de criptare Vernam):


În acest sistem xi , ki , yi ∈ {0, 1}. Criptarea se realizează conform formulei

yi = xi ⊕ ki (i ≥ 1).

Dacă cheia fluidă este aleasă aleator şi nu mai este folosită ulterior, sistemul de
criptare Vernam se numeşte ”one - time pad”.
Un sistem de criptare one-time pad este teoretic imposibil de spart1 (deci asigură un
secret perfect). Într-adevăr, fiind dat un text criptat cu un astfel de sistem, Oscar nu
are nici o informaţie privind cheia fluidă sau textul clar. Dificultatea constă ı̂nsă atât ı̂n
lungimea cheii (egală cu cea a textului clar), cât şi ı̂n modalitatea de transmitere a ei ı̂ntre
Alice şi Bob.
Pentru sistemul Vernam există o modalitate de atac cunoscută sub numele de ”crip-
tanaliză diferenţială” (noţiunea va fi prezentată detaliat ı̂n Capitolul 6). Anume:
Dacă y1 y2 . . . yn şi y 01 y 02 . . . y 0n sunt două texte criptate cu aceiaşi chee fluidă k1 k2 . . . kn ,
atunci
yi = xi ⊕ ki , y 0i = x0i ⊕ ki (1 ≤ i ≤ n)
deci yi ⊕ y 0i = xi ⊕ x0i , şi cheia nu mai este necesară, ci doar informaţia privind lungimea
sa; redundanţa ultimei relaţii va permite criptanaliza.
Sistemele de criptare fluide sunt clasificate ı̂n sisteme sincrone şi auto-sincronizabile.
Definiţia 4.3. Un sistem de criptare fluid sincron este o structură (P, C, K, L, E, D),
unde:
• P, C, K sunt mulţimi finite nevide ale căror elemente se numesc ”texte clare”, ”texte
criptate” şi respectiv ”chei”;
• L este o mulţime finită nevidă numită ”alfabet de chei”;
• g : K−→ L+ este un generator de chei fluide: pentru
∀k ∈ K, g(k) = k1 k2 k3 . . . ∈ L+
este o cheie fluidă (teoretic infinită);
• ∀z ∈ L există o regulă de criptare ez ∈ E şi o regulă de decriptare dz ∈ D astfel ca
∀x ∈ P, dk (ek (x)) = x
Exemplul 4.2. Sistemul de criptare Vigenere poate fi definit ca un sistem de criptare
fluid sincron. Fie m lungimea cuvântului cheie din sistemul Vigenere. Definim
P = C = L =Z26 , K =(Z26 )m ,
ez (x) = x + z (mod 26), dz (y) = y − z (mod 26)
În anii 0 90 comunicarea ı̂ntre Moscova şi Washington era securizată ı̂n acest mod, transportul cheii
1

de criptare fiind asigurat de curieri diplomatici.


4.1. SISTEME SINCRONE ŞI AUTO-SINCRONIZABILE 49

Cheia z1 z2 z3 . . . este definită


(
ki dacă 1≤i≤m
zi =
zi−m dacă i≥m+1
Ea va genera din cheia fixă K = (k1 , k2 , . . . , km ), cheia fluidă
k1 k2 . . . km k1 k2 . . . km k1 k2 . . .

Procesul de criptare cu un sistem fluid sincron poate fi reprezentat ca un automat


descris de relaţiile

qi+1 = δ(qi , K), zi = g(qi , K), yi = h(zi , xi )

unde q0 este starea iniţială – care poate fi determinată din cheia K, δ este funcţia de
tranziţie a stărilor, g este funcţia care produce cheia fluidă zi , iar h este funcţia de ieşire
care produce textul criptat yi pe baza textului clar xi şi a cheii fluide zi .
- qi - qi
qi+1 6 qi+1 6
 xi  yi
δ 
  δ 

?  ? 
? 
?
6 - g - h - yi g - h−1 - xi
K  6 zi 
K 6 -

6 zi 

(a) Criptare (b) Decriptare

Observaţia 4.1.

• Un sistem de criptare bloc poate fi privit ca un caz particular de sistem de criptare


fluid, ı̂n care ∀i ≥ 1, zi = K.

• (sincronizare): În sistemele de criptare fluide sincrone, Alice şi Bob trebuie să-şi
sincronizeze cheia fluidă pentru a putea obţine o criptare/decriptare corectă. Dacă
ı̂n timpul transmisiei sunt inseraţi sau eliminaţi biţi din textul criptat, atunci de-
criptarea eşuează şi ea poate fi reluată numai pe baza unor tehnici de resincronizare
(cum ar fi de exemplu reiniţializarea sau plasarea unor marcatori speciali la intervale
regulate ı̂n textul transmis).

• Modificarea unui bit din textul criptat (fără a se elimina sau adăuga nimic) nu va
afecta decriptarea altor caractere (nepropagarea erorii).

• Un adversar activ care elimină, inserează sau retrimite componente ale mesajului
criptat, va provoca desincronizări şi deci va fi detectat la recepţie. De asemenea, el
poate face modificări ı̂n textul criptat şi să observe cum vor afecta ele textul clar.
Rezultă că un text criptat cu un sistem fluid sincron necesită mecanisme separate
de autentificare şi de garantare a integrităţii datelor.
50 CAPITOLUL 4. SISTEME FLUIDE DE CRIPTARE

Definiţia 4.4. Un sistem aditiv fluid binar de criptare este un sistem fluid sincron ı̂n
care P = C = L =Z2 iar funcţia de ieşire h este ⊕ (XOR).

Un astfel de sistem este reprezentat mai jos:


xi yi

K - Generator zi- ? - y
⊕ i K - Generator zi- ? - x
⊕ i
chei fluide chei fluide

(a) Criptare (b) Decriptare

Definiţia 4.5. Un sistem de criptare fluid este auto-sincronizabil (sau ”asincron”) dacă
funcţia de generare a cheii fluide depinde de un număr fixat de caractere criptate anterior.

Deci comportamentul unui astfel de sistem poate fi descris de ecuaţiile

qi = (yi−t , yi−t+1 , . . . , yi−1 ), zi = g(qi , K), yi = h(zi , xi )

unde q0 = (y−t , y−t+1 , . . . , y−1 ) este starea iniţială (cunoscută), K este cheia, g este funcţia
de generare a cheii fluide, iar h este funcţia de ieşire care criptează textul clar xi . Cele mai
cunoscute sisteme auto-sincronizabile sunt regiştrii liniari cu feedback (LF SR), utilizaţi la
generarea secvenţelor de numere pseudo-aleatoare (ı̂n criptografie) şi la generarea codurilor
ciclice (ı̂n teoria codurilor). Mai multe informaţii despre LF SR pot fi găsite ı̂n Capitolul
12.

Exemplul 4.3. (Criptare cu auto-cheie)2 :


Fie P = C = L =Z26 . Se defineşte cheia fluidă astfel:

z1 = K, zi = yi−1 = ezi−1 (xi−1 ) (i ≥ 2).

Pentru un element oarecare al cheii z ∈ Z26 , se defineşte


ez (x) = x + z (mod 26)
dz (y) = y − z (mod 26)
Să considerăm K = 13 şi să criptăm textul clar BU CU REST I.
Transformat ı̂n secvenţă numerică vom avea

(x1 , x2 , x3 , x4 , x5 , x6 , x7 , x8 , x9 ) = (1, 20, 2, 20, 17, 4, 18, 19, 8)

În faza de criptare, vom calcula pe rând:


y1 = e13 (x1 ) = 1 + 13 (mod 26) = 14; y2 = e14 (x2 ) = 20 + 14 (mod 26) = 8;
y3 = e8 (x3 ) = 2 + 8 (mod 26) = 10; y4 = e10 (x4 ) = 20 + 10 (mod 26) = 4;
2
Se pare că sistemul este atribuit lui Vigenere.
4.1. SISTEME SINCRONE ŞI AUTO-SINCRONIZABILE 51

y5 = e4 (x5 ) = 17 + 4 (mod 26) = 21; y6 = e21 (x6 ) = 4 + 21 (mod 26) = 25;


y7 = e25 (x7 ) = 18 + 25 (mod 26) = 17; y8 = e17 (x8 ) = 19 + 17 (mod 26) = 10;
y9 = e10 (x9 ) = 8 + 10 (mod 26) = 18;
Deci textul criptat este (14, 8, 10, 4, 21, 25, 17, 10, 18) sau – ı̂n litere: OIKEV ZRKS.
Pentru decriptare, vom avea:
x1 = d13 (y1 ) = 14 − 13 (mod 26) = 1; x2 = d14 (y2 ) = 8 − 14 (mod 26) = 20; ş.a.m.d.
Se observă că textul decriptat poate fi obţinut de oricine, aproape ı̂n totalitate, fără a
cunoaşte nici o cheie (aceasta fiind necesară doar pentru decriptarea primului caracter).
Deci gradul său de securitate este nul.
Ceva mai dificil este sistemul ı̂n care generarea cheii fluide se realizează cu ecuaţia
zi = xi−1 (i ≥ 2).
În acest caz, BU CU REST I se criptează ı̂n OV W W LV W LB (pentru K = 13).
Nici acest sistem de criptare cu auto-cheie nu este sigur, deoarece – evident – sunt
posibile doar 26 chei.

Proprietăţi ale sistemelor de criptare fluide auto-sincronizabile:

1. Auto-sincronizare: Deoarece funcţia de decriptare h−1 depinde numai de un număr


fixat de caractere criptate anterior, desincronizarea – rezultată eventual prin ı̂nsera-
rea sau ştergerea de caractere criptate – se poate evita. Astfel de sisteme de criptare
pot restabili proprietatea de sincronizare, afectând (eventual) doar un număr finit
de caractere din textul clar.

2. Propagarea limitată a erorii: Dacă starea unui sistem fluid auto-sincronizabil de-
pinde de s caractere anterioare, atunci modificarea (eventual ştergerea sau ı̂nse-
rarea) unui caracter din textul criptat poate duce la decriptarea incorectă a maxim
s caractere; după aceea decriptarea redevine corectă.

3. Difuzia textelor clare: Deoarece fiecare caracter din textul clar influenţează ı̂ntregul
text criptat care urmează, eventualele proprietăţi statistice ale textului clar sunt
dispersate prin textul criptat. Deci, din acest punct de vedere, sistemele de criptare
auto-sincronizabile sunt mai rezistente decât cele sincronizabile, la atacurile bazate
pe redondanţa textului clar.

4. Rezistenţa la criptanaliză activă: Din proprietăţile de mai sus rezultă că este destul
de dificil de depistat un atac venit din partea unui adversar activ (care poate modi-
fica, ı̂nsera sau şterge caractere) auto-sincronizarea readucând decriptarea ı̂n faza
normală. De aceea sunt necesare mecanisme suplimentare pentru a asigura auten-
tificarea şi integritatea datelor.
52 CAPITOLUL 4. SISTEME FLUIDE DE CRIPTARE

4.2 Exemple de sisteme fluide de criptare


4.2.1 SEAL
SEAL (Software - optimized Encryption ALgorithm) este un sistem de criptare aditiv
binar (Definiţia ??), definit ı̂n 1993 de Don Coppersmith şi Philip Rogaway. Este unul
din cele mai eficiente sisteme implementabile pe procesoare de 32 biţi.
La un astfel de sistem este importantă descrierea generatorului de chei fluide (care se
adună modulo 2 cu textul clar). SEAL este o funcţie pseudo-aleatoare care scoate o cheie
fluidă de L biţi folosind un număr n de 32 biţi şi o cheie secretă a de 160 biţi.
Fie A, B, C, D, Xi , Yj cuvinte de 32 biţi. Vom folosi următoarele notaţii:

1. A: complementul lui A (bit cu bit);

2. A ∨ B, A ∧ B, A ⊕ B: operaţiile OR, AN D şi XOR (definite pe biţi);

3. A << s: rotirea ciclică a lui A spre stânga cu s poziţii;

4. A >> s: rotirea ciclică a lui A spre dreapta cu s poziţii;

5. A + B (mod 232 ): suma lui A şi B (considerate ca numere ı̂ntregi fără semn);

6. f (B, C, D) = (B ∧ C) ∨ (B ∧ D);
g(B, C, D) = (B ∧ C) ∨ (B ∧ D) ∨ (C ∧ D)
h(B, C, D) = B ⊕ C ⊕ D.

7. A||B: concatenarea (alăturarea) lui A cu B;

8. (X1 , X2 , . . . , Xn ) ←− (Y1 , Y2 , . . . , Yn ): atribuire simultană (variabila Yi ia valoarea


Xi simultan pentru toate valorile lui i = 1, 2, . . . , n).
4.2. EXEMPLE DE SISTEME FLUIDE DE CRIPTARE 53

Algoritmul de generare a tabelei G pentru SEAL 2.03 :


Intrare: Un şir a de 160 biţi şi un ı̂ntreg i (0 ≤ i < 232 ).
Ieşire: Ga (i) – şir de 160 biţi.
Algoritm 1:

1. Se definesc constantele (de 32 biţi):


y1 = 5A827999, y2 = 6ED9EBA1, y3 = 8F 1BBCDC, y4 = CA62C1D6

2. a. X0 ←− i;
b. for j ←− 1 to 15 do Xj ←− 00000000;
c. for j ←− 16 to 79 do Xj ←− ((Xj−3 ⊕ Xj−8 ⊕ Xj−14 ⊕ Xj−16 ) << 1);
d. (M0 , M1 , M2 , M3 , M4 ) ←− (H0 , H1 , H2 , H3 , H4 ) where a = H0 H1 H2 H3 H4 ;
e. (Runda 1): for j ←− 0 to 19 do
t ←− ((M0 << 5) + f (M1 , M2 , M3 ) + M4 + Xj + y1 );
(M0 , M1 , M2 , M3 , M4 ) ←− (t, M0 , M1 << 30, M2 , M3 );
f. (Runda 2): for j ←− 20 to 39 do
t ←− ((M0 << 5) + h(M1 , M2 , M3 ) + M4 + Xj + y2 );
(M0 , M1 , M2 , M3 , M4 ) ←− (t, M0 , M1 << 30, M2 , M3 );
g. (Runda 3): for j ←− 40 to 59 do
t ←− ((M0 << 5) + g(M1 , M2 , M3 ) + M4 + Xj + y3 );
(M0 , M1 , M2 , M3 , M4 ) ←− (t, M0 , M1 << 30, M2 , M3 );
h. (Runda 4): for j ←− 60 to 79 do
t ←− ((M0 << 5) + h(M1 , M2 , M3 ) + M4 + Xj + y4 );
(M0 , M1 , M2 , M3 , M4 ) ←− (t, M0 , M1 << 30, M2 , M3 );
i. (H0 , H1 , H2 , H3 , H4 ) ←− (H0 + M0 , H1 + M1 , H2 + M2 , H3 + M3 , H4 + M4 );

Ga (i) = H0 ||H1 ||H2 ||H3 ||H4 .

3
Algoritmul SEAL 1.0 este bazat pe funcţia de dispersie SHA, iar SEAL 2.0 – pe funcţia SHA − 1.
54 CAPITOLUL 4. SISTEME FLUIDE DE CRIPTARE

SEAL(a, n) (Generatorul de chei fluide pentru SEAL 2.0):

Intrare: a – cheia secretă (160 biţi), n ∈ [0, 232 ) ı̂ntreg, L - lungimea solicitată
pentru cheia fluidă.
Ieşire: cheia fluidă y, |y| = L0 , unde L0 este primul multiplu de 128 din [L, ∞).

1. Se generează tabelele T, S, R având ca elemente cuvinte de 32 biţi.


Fie constanta Y = 000007F C şi funcţia
Fa (i) = Hii (mod 5) unde H0i H1i H2i H3i H4i = Ga (bi/5c).
a. for i ←− 0 to 511 do T [i] ←− Fa (i);
b. for j ←− 0 to 255 do S[j] ←− Fa (00001000 + j);
c. for k ←− 0 to 4 · d(L − 1)/8192e − 1 do R[k] ←− Fa (00002000 + k);

2. Descrierea procedurii Initialize(n, l, M1 , M2 , M3 , M4 , n1 , n2 , n3 , n4 ) cu intrările


n (cuvânt) şi l (ı̂ntreg). Ieşirile sunt M1 , M2 , M3 , M4 , n1 , n2 , n3 , n4 (cuvinte).
M1 ←− n ⊕ R[4 · l], M2 ←− (n >> 8) ⊕ R[4 · l + 1],
a.
M3 ←− (n >> 16) ⊕ R[4 · l + 2], M4 ←− (n >> 24) ⊕ R[4 · l + 3].
b. for j ←− 1 to 2 do
P ←− M1 ∧ Y, M2 ←− M2 + T [P/4], M1 ←− (M1 >> 9),
P ←− M2 ∧ Y, M3 ←− M3 + T [P/4], M2 ←− (M2 >> 9),
P ←− M3 ∧ Y, M4 ←− M4 + T [P/4], M3 ←− (M3 >> 9),
P ←− M4 ∧ Y, M1 ←− M1 + T [P/4], M4 ←− (M4 >> 9),
(n1 , n2 , n3 , n4 ) ←− (M4 , M1 , M2 , M3 );
P ←− M1 ∧ Y, M2 ←− M2 + T [P/4], M1 ←− (M1 >> 9),
P ←− M2 ∧ Y, M3 ←− M3 + T [P/4], M2 ←− (M2 >> 9),
P ←− M3 ∧ Y, M4 ←− M4 + T [P/4], M3 ←− (M3 >> 9),
P ←− M4 ∧ Y, M1 ←− M1 + T [P/4], M4 ←− (M4 >> 9),

3. l ←− 0, y ←−  (şirul vid);

4. repeat
a. Initialize(n, l, M1 , M2 , M3 , M4 , n1 , n2 , n3 , n4 );
b. for i ←− 1 to 64 do
P ←− M1 ∧ Y, M2 ←− M2 + T [P/4], M1 ←− (M1 >> 9), M2 ←− M2 ⊕ M1 ;
Q ←− M2 ∧ Y, M3 ←− M3 + T [Q/4], M2 ←− (M2 >> 9), M3 ←− M3 ⊕ M2 ;
4.2. EXEMPLE DE SISTEME FLUIDE DE CRIPTARE 55

P ←− (P + M3 ) ∧ Y, M4 ←− M4 + T [P/4], M3 ←− (M3 >> 9), M4 ←− M4 ⊕ M3 ;


Q ←− (Q + M4 ) ∧ Y, M1 ←− M1 + T [Q/4], M4 ←− (M4 >> 9), M1 ←− M1 ⊕ M4 ;
P ←− (P + M1 ) ∧ Y, M2 ←− M2 + T [P/4], M1 ←− (M1 >> 9);
Q ←− (Q + M2 ) ∧ Y, M3 ←− M3 + T [Q/4], M2 ←− (M2 >> 9);
P ←− (P + M3 ) ∧ Y, M4 ←− M4 + T [P/4], M3 ←− (M3 >> 9);
Q ←− (Q + M4 ) ∧ Y, M1 ←− M1 + T [Q/4], M4 ←− (M4 >> 9);
y ←− y||(M2 + S[4 · i − 4])||(M3 ⊕ S[4 · i − 3])||(M4 + S[4 · i − 2])||(M1 ⊕ S[·i − 1]).
if |y| ≥ L then return(y) STOP
else if i (mod 2) = 1 then (M1 , M3 ) ←− (M1 + n1 , M3 + n2 )
else (M1 , M3 ) ←− (M1 + n3 , M3 + n4 )
c. l ←− l + 1.

Observaţia 4.2. ([?]) În majoritatea aplicaţiilor pentru SEAL 2.0 se foloseşte L ≤ 219 .
Algoritmul funcţionează şi pentru valori mai mari, dar devine ineficient deoarece creşte
mult dimensiunea tabelei R. O variantă este concatenarea cheilor fluide
SEAL(a, 0)||SEAL(a, 1)||SEAL(a, 2)|| . . .
Deoarece n < 2 , se pot obţine astfel chei fluide de lungimi până la 251 , păstrând
32

L = 219 .

4.2.2 RC4
Sistemul RC4 (Rivest Code #4) a fost creat ı̂n 1987 de Ron Rivest pentru societatea RSA
Data Security Inc (astăzi RSA Security). Destinat scopurilor comerciale, el a fost secret,
fiind accesibil numai după semnarea unui protocol de confidenţialitate. În septembrie
1994 ı̂nsă, un anonim publică codul său sursă pe o listă de discuţii, după care RC4 se
răspândeşte rapid, stârnind o serie de polemici referitor la drepturile intelectuale. Se
consideră că astăzi există mai multe implementări ilegale.
RC4 este un sistem aditiv fluid de criptare.
Printre sistemele care folosesc RC4 se pot aminti SQL (Oracle), Lotus Notes, AOCE
(Apple Computer), WEP WPA CipherSaber Secure Sockets Layer (opţional) sau Secure
Shell (opţional)4 RC4 este utilizat pentru criptarea fişierelor ı̂n protocoale cum ar fi RSA
SecurPC sau ı̂n standarde de comunicaţii (WEP, WPA pentru carduri, criptarea traficului
de date sau a site-urilor de web bazate pe protocolul SSL). De asemenea, el face parte
din Cellular Digital Packet Data specification.
La acest sistem, pentru generarea cheii fluide se foloseşte o stare internă (secretă)
formată din două componente:

• Un tablou de 256 octeţi: S[0], S[1], . . . S[255], numit S − box.


4
Când un sistem de criptare este marcat opţional, ı̂nsemnă că el este una din variantele oferite pentru
implementare.
56 CAPITOLUL 4. SISTEME FLUIDE DE CRIPTARE

• Doi pointeri de câte 8-biţi (notaţi ”i” respectiv ”j”).


S − boxul este iniţializat cu o cheie de lungime variabilă – de obicei ı̂ntre 40 şi 256
biţi, folosind un algoritm numit KSA (key - sheduling algorithm).
În faza a doua, cheia fluidă este generată folosind algoritmul P RGA (pseudo-random
generation algorithm).

Algoritmul PRGA de generare a cheii fluide


i j
0 1 2 S[i]+S[j] ? ? 254 255

S ...  ... ... ...


6
?-⊕ ?
?
K  ?

Conţinuturile S[i] şi S[j] (unde i, j sunt date de cei doi pointeri) se adună modulo 256,
iar octetul K de la adresa S[i] + S[j] este introdus ı̂n cheia fluidă. În plus cei doi octeţi
sunt interschimbaţi.
Procedeul este reluat atât timp cât este nevoie. La fiecare reluare, starea celor doi
pointeri se modifică (i este incrementat cu 1 iar j este incrementat cu S[i]). În acest fel,
fiecare locaţie din S − box este modificată cel puţin odată la 256 iteraţii.
Formal:
i := 0
j := 0
while GeneratingOutput:
i := (i + 1) mod 256
j := (j + S[i]) mod 256
swap(S[i],S[j])
output S[(S[i] + S[j]) mod 256]

Algoritmul KSA de iniţializare


KSA este utilizat pentru iniţializarea S − boxului. Fie n (1 ≤ n ≤ 255) numărul de
octeţi din cheie5 . Iniţial ı̂n S se introduce permutarea identică. Ulterior se realizează 256
transpoziţii. Formal
for i := 0 to 255 do S[i] := i
j := 0
for i := 0 to 255 do
j := (j + S[i] + key[i mod n]) mod 256
swap(S[i],S[j])
5
În majoritatea implementărilor n este ı̂n intervalul [5, 16].
4.2. EXEMPLE DE SISTEME FLUIDE DE CRIPTARE 57

Implementarea sistemului RC4 este foarte simplă: se lucrează cu octeţi şi sunt necesari
256 octeţi pentru S − box, n octeţi de memorie pentru cheie, plus trei variabile ı̂ntregi
i, j, k. Operaţiile folosite sunt XOR şi AN D (sau – pe unele platforme – simpla adunare
pe biţi, fără transport).

Securitatea RC4
Conform cu Bruce Schneier ([?]), sistemul are circa 256! × 2562 = 21700 stări posibile; el
este rezistent la criptanaliza diferenţială şi liniară, iar ciclurile sunt mai mari de 10.100.
Totuşi, securitatea RC4 este slabă din mai multe puncte de vedere şi criptografii nu
recomandă sistemul pentru aplicaţiile actuale.
Cheia fluidă generată are o uşoară preferinţă pentru anumite secvenţe de octeţi.
Aceasta a permis construirea unui atac (Fluhrer şi McGrew), care separă cheia fluidă
dintr-o secvenţă aleatoare de maxim 1 GB.
În 2001, Fluhrer, Mantin şi Shamir descoperă că din toate cheile RC4 posibile, primii
octeţi de ieşire nu sunt aleatori, oferind informaţii importante despre cheie.
La majoritatea sistemelor de criptare, o măsură de securitate necesară este alegerea
unui număr aleator nou6 care să fie folosit pentru criptarea fiecărui mesaj. În acest fel,
criptarea de două ori a aceluiaşi mesaj va genera texte diferite.
O soluţie sigură (care funcţionează pentru orice sistem de criptare) este de a folosi o
cheie pe termen lung din care, prin amestec cu un nonce (după un algoritm prestabilit), se
obţine cheia necesară unei criptări. Multe aplicaţii ı̂nsă – care folosesc RC4 – fac o simplă
concatenare a cheii cu nonce. Această slăbiciune este exploatată de Fluhrer, Mantin şi
Shamir pentru a sparge ulterior sistemul de criptare W EP (wired equivalent privacy)
folosit pe reţelele fără fir 802.11.
Ulterior implementările sistemului RC4 s-au apărat eliminând primii octeţi (uzual
1024) din cheia fluidă, ı̂nainte de a o folosi.

4.2.3 Sistemul A5/1


A5/1 este un sistem de criptare fluid utilizat pe scară largă ı̂n reţelele de telefonie mobilă
GSM 7 . Construit ı̂n 1987 special pentru Europa şi SUA (o versiune intenţionat mai slabă
– A5/2 – a fost definită ı̂n 1989 pentru export ı̂n alte zone geografice), el a fost făcut public
după ce ı̂n 2000 s-a demonstrat vulnerabilitatea sa ([?]).
A5/1 este un automat finit bazat pe trei regiştri seriali cu feedback (LF SR) sincroni.
Cei trei regiştri R1 , R2 , R3 conţin 19, 22 şi respectiv 23 flip - flopuri de date (unităţi de
memorie de un bit). La un tact, fiecare registru poate rămâne pe loc sau ı̂şi poate deplasa
conţinutul spre stânga, aducând pe ultima poziţie o combinaţie liniară de alţi biţi. Cele
6
Un astfel de număr poartă numele de nonce (new number)
7
Înafara algoritmului de criptare A5/1, reţelele GSM folosesc şi un algoritm de autentificare A3/8.
58 CAPITOLUL 4. SISTEME FLUIDE DE CRIPTARE

trei combinaţii liniare sunt definite astfel:


R1 [0] ←− R1 [13] ⊕ R1 [16] ⊕ R1 [17] ⊕ R1 [18]
R2 [0] ←− R2 [20] ⊕ R2 [21]
R3 [0] ←− R3 [17] ⊕ R3 [20] ⊕ R3 [21] ⊕ R3 [22]

 × 
6
h-+?
?+?
- h -+?
h -

+h ×
 ? 
6
h
6 ?
-+
? -

 × 
6
h-+?
?+?
- h h
-+? -
Automatul A5/1
Pentru a decide ce regiştri se deplasează la un tact, se folosesc trei biţi de tact (cei
notati ×). La fiecare tact se determina valoarea majoritară din acesti biţi; un registru se
deplasează (şi scoate o valoare) dacă bitul său de tact are aceeaşi valoare cu cea majoritară.
Deci, la fiecare pas, cel puţin doi regiştri vor suferi o deplasare.
La fiecare tact, valoarea emisă de automat este
k = R1 [18] ⊕ R2 [21] ⊕ R3 [22]
Apoi y se combină prin XOR cu bitul curent din mesajul de informaţie (similar sistemului
one-time-pad).
Exemplul 4.4. Să presupunem că cei trei regiştri sunt (biţii de tact au fost marcaţi):
R1 = 0110 1011 1010 1001 011,
R2 = 1010 1100 0010 1101 1001 11,
R3 = 1100 0101 1011 0010 1010 010
Să urmărim comportarea automatului câţiva tacţi:
1. Tact 1: Ieşire: y ←− 0 ⊕ 1 ⊕ 1 = 0.
Bit majoritar: 0. Se deplasează R2 şi R3 . Noua stare este:
R1 = 0110 1011 1010 1001 011,
R2 = 0101 1000 0101 1011 0011 11,
R3 = 1000 1011 0110 0101 0100 100
2. Tact 2: Ieşire: y ←− 0 ⊕ 0 ⊕ 1 = 1.
Bit majoritar: 1. Se deplasează R1 şi R2 . Noua stare este:
R1 = 1101 0111 0101 0010 110,
R2 = 1011 0000 1011 0110 0111 11,
R3 = 1000 1011 0110 0101 0100 100
4.2. EXEMPLE DE SISTEME FLUIDE DE CRIPTARE 59

3. Tact 3: Ieşire: y ←− 1 ⊕ 1 ⊕ 1 = 1.
Bit majoritar: 0. Se deplasează R1 şi R3 . Noua stare este:
R1 = 1010 1110 1010 0101 101,
R2 = 1011 0000 1011 0110 0111 11,
R3 = 0001 0110 1100 1010 1001 000

4. Tact 4: Ieşire: y ←− 1 ⊕ 1 ⊕ 0 = 0.
Bit majoritar: 1. Se deplasează toţi regiştrii. Noua stare este:
R1 = 0101 1101 0100 1011 011,
R2 = 0110 0001 0110 1100 1111 11,
R3 = 0010 1101 1001 0101 0010 000

Deci cheia fluidă de criptare este z = 01100 . . .

A5/1 necesită deci şi o inţializare a stării interne, bazată pe o cheie de criptare K de
64 biţi şi anumiţi parametri GSM stocaţi ı̂ntr-o constantă Count de 22 biţi. Deoarece
sistemul GSM transmite mesajele ı̂n pachete de câte 114 biţi, A5/1 va genera chei fluide
de 114 biţi; deci este necesară o iniţializare a automatului la fiecare pachet nou primit.
Algoritmul de iniţializare este:

1. Se resetează toţi regiştrii.

2. for i ←− 0 to 63 do

2.1. R1 [0] ←− R1 [0] ⊕ K[i];


2.2. R2 [0] ←− R2 [0] ⊕ K[i];
2.3. R3 [0] ←− R3 [0] ⊕ K[i];
2.4. Deplasare stânga toţi regiştrii;

3. for i ←− 0 to 21 do

3.1. R1 [0] ←− R1 [0] ⊕ Count[i];


3.2. R2 [0] ←− R2 [0] ⊕ Count[i];
3.3. R3 [0] ←− R3 [0] ⊕ Count[i];
3.4. Deplasare stânga toţi regiştrii;

4. for i ←− 0 to 99 do
Funcţionează un tact automatul A5/1, cu ignorarea ieşirii.
60 CAPITOLUL 4. SISTEME FLUIDE DE CRIPTARE

4.3 Exerciţii
4.1. Presupunem că definim o cheie fluidă ı̂ntr-un sistem sincronizabil ı̂n felul următor:
Fie K ∈ K, L un alfabet al cheilor şi Σ o mulţime finită de stări. Se defineşte o stare
iniţială q0 ∈ Σ. Apoi, pentru i ≥ 1, se defineşte recursiv
qi = f (qi−1 , K)
unde f : Σ × K−→ Σ. De asemenea, ∀i ≥ 1, elementul zi din cheia fluidă este definit
prin
zi = g(qi , K)
unde g : Σ × K−→ L.
Arătaţi că orice cheie fluidă rezultată ı̂n acest mod are o perioadă de lungime maxim
card(Σ).

4.2. Criptaţi mesajul 10110101 folosind automatul A5/1 din Exemplul ?? (considerând
starea iniţială cea dinaintea Tactului 1).

4.3. Construim următorul sistem de criptare cu cheie fluidă:


Fie π ∈ S26 o permutare fixată; cheia este K ∈ Z26 .
Secvenţa de chei fluide este definită zi = (K + i − 1) mod 26 (i ≥ 1)
Funcţia de criptare este ez (x) = π((x + z) mod 26)
iar cea de decriptare dz (y) = (π −1 (y) − z) mod 26.
Să presupunem că permutarea fixată este
 
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
π=
23 13 24 0 7 15 14 6 25 16 22 1 19 18 5 11 17 2 21 12 20 4 10 9 3 8

Folosind un atac prin forţă brută, să se decripteze mesajul BST KXOU XM W JK
Capitolul 5

Sisteme simetrice de criptare


moderne

5.1 Sistemul de criptare DES


5.1.1 Reţele Feistel
În cadrul firmei IBM, Horst Feistel descrie ı̂n anii 0 60 principiile unei structuri pentru
sistemele de criptare, cu influenţe majore asupra sistemelor ulterioare. Structura este
cunoscută sub numele de reţea Feistel. Avantajul major al unei astfel de de structuri
este acela că operaţiile de criptare şi decriptare sunt similare, (chiar identice ı̂n unele
cazuri); aceasta permite o reducere substanţială a mărimii codului (sau circuitelor) care
implementează sistemul de criptare.
După cum s-a văzut o cerinţă solicitată de securitatea faţă de atacuri bazate pe analiza
textului criptat este aceea ca textul criptat să creeze ”difuzie şi confuzie”. Problema constă
ı̂n faptul că, deşi se ştie de mult cum să se construiască funcţii cu caracter aleator, până la
reţelele Feistel nu se cunoşteau algoritmi de construcţie pentru funcţii bijective aleatoare.
Soluţia adusă de acesta este foarte elegantă:

S D
s

fn
  ?
?
XX
XX 
XX
  XX
z⊕
XX ?


? ?
L R

61
62 CAPITOLUL 5. SISTEME SIMETRICE DE CRIPTARE MODERNE

Să presupunem că avem o funcţie f : {0, 1}n −→ {0, 1}n ”aproape aleatoare” (care dă
impresia că cei n biţi din imaginea lui f sunt aleşi fără nici o regulă). Algoritmul de
criptare va opera cu blocuri de 2n biţi, pe care ı̂i ı̂mparte ı̂n două jumătăţi, sub forma
(S, D). Imaginea criptată a unui bloc printr-o reţea Feistel este tot un bloc de 2n biţi:
(L, R), unde L = D şi R = S ⊕ f (D).
Această transformare este bijectivă: din perechea (L, R) se poate regăsi (S, D) prin
D = L, S = R ⊕ f (L).
De remarcat că funcţia f nu este obligatoriu inversabilă. De cele mai multe ori ea se
compune din operaţii simple care sunt executate rapid de calculator.
Exemple de astfel de operaţii folosite:
• Permutări de biţi (adesea implementate sub forma unor tabele de permutare, numite
P − box).

• Funcţii simple neliniare (implementate sub forma unor tabele de substituţie, numite
S − box).

• Operaţii liniare (deplasări, adunări, XOR)


Toate aceste operaţii pot fi implementate direct pe structuri hardware, ceea ce le face
extrem de rapide.
Cum după criptare, jumătatea din dreapta a blocului nu a suferit nici o transformare
(doar o deplasare spre stânga), reţeaua Feistel se aplică de mai multe ori – fiecare aplicaţie
fiind numită rundă.
Reţelele Feistel apar prima oară la sistemul de criptare Lucifer, construit pentru IBM
de o echipă condusă de Horst Feistel şi Don Coppersmith. Succesul a fost asigurat odată
cu desemnarea sistemului DES ca standard oficial de criptare.
Multe sisteme de criptare moderne sunt bazate pe acest gen de reţele, structura şi
proprietăţile lor fiind intens exploatate de comunitatea criptografică.
O listă a celor mai cunoscute sisteme de criptare bazate pe structurile Feistel cuprinde:
Blowfish, Camellia, CAST-128, DES, FEAL, KASUMI, LOKI97, Lucifer, MAGENTA,
MISTY1, RC5, TEA, Triple DES, Twofish, XTEA. În plus, CAST-256, MacGuffin, RC2,
RC6, Skipjack utilizează diverse generalizări ale reţelelor Feistel.
Abia după afirmarea sistemului AES a inceput o perioadă de declin a dominaţiei
structurilor de tip Feistel ı̂n construirea sistemelor de criptare.

5.1.2 Consideraţii generale privind sistemul de criptare DES


În mai 1973, Biroul Naţional de Standarde din SUA a lansat ı̂n Registrul Federal (jurnalul
oficial al guvernului) un apel la construirea unui sistem de criptare oficial care să se
numească Data Encryption Standard (DES). Firma IBM a construit acest sistem –
publicat ı̂n Registrul Federal la 17 martie 1975, modificând sistemul Lucif er, pe care
5.1. SISTEMUL DE CRIPTARE DES 63

deja ı̂l testa. După dezbateri publice, DES a fost adoptat oficial la 17 ianuarie 1977 ca
standard de criptare. De atunci, el a fost re-evaluat la fiecare 5 ani, fiind ı̂n acest moment
cel mai popular sistem de criptare cu cheie simetrică. Spargerea sa ı̂n iulie 1998 a coincis
(ı̂ntâmplător ?) cu durata sa oficială de utilizare pe teritoriul SU A.

5.1.3 Descrierea sistemului DES


Sistemul DES criptează un bloc de text clar de 64 biţi ı̂ntr-un text criptat tot de 64 biţi,
utilizând o cheie de 56 biţi. Algoritmul cuprinde 3 etape:

1. Fie α textul clar iniţial, de 64 biţi. Lui i se aplică o permutare IP iniţială


fixată, obţinându-se α0 = IP (α) = L0 R0 . L0 este format din primii 32 biţi ai
lui α0 , iar R0 – din ultimii 32 biţi.

2. Se efectuează 16 runde (iteraţii) ale unei funcţii care se va preciza. La fiecare


rundă se calculează Li Ri (1 ≤ i ≤ 16) după regula

Li = Ri−1
Ri = Li−1 ⊕ f (Ri−1 , Ki )

unde f este o funcţie care se va preciza, iar K1 , K2 , . . . , K16 sunt secvenţe de


48 biţi calculaţi din cheia K. Se spune că K1 , K2 , . . . , K16 sunt obţinuţi prin
diversificarea cheii (key shedule).

3. Blocului R16 L16 i se aplică inversa permutării iniţiale pentru a obţine textul
criptat β = IP −1 (R16 L16 ).

Observaţia 5.1. Sistemul de ecuaţii care definesc criptarea la fiecare rundă poate fi in-
versat imediat, pentru a obţine ecuaţiile rundelor de decriptare. Acestea sunt:

Ri−1 = Li , Li−1 = Ri ⊕ f (Li , Ki )

Funcţia de criptare f (A, J) are ca argumente două secvenţe binare: una de 32 biţi,
iar a doua de 48 biţi. Rezultatul este o secvenţă de 32 biţi. Etapele de calcul ale funcţiei
sunt:

1. Argumentul A este extins la 48 biţi folosind o funcţie de expansiune E. E(A)


cuprinde biţii lui A aşezaţi ı̂ntr-o anumită ordine, unii biţii fiind scrişi de două ori.

2. Se calculează B = E(A) ⊕ J; rezultatul se descompune ı̂n 8 subsecvenţe de câte 6


biţi fiecare: B = B1 B2 B3 B4 B5 B6 B7 B8 .
64 CAPITOLUL 5. SISTEME SIMETRICE DE CRIPTARE MODERNE

3. Se folosesc 8 S − boxuri S1 , S2 , . . . , S8 , fiecare din ele fiind un tablou de dimensiuni


4 × 16 cu elemente numere ı̂ntregi din intervalul [0, 15]. Pentru o secvenţă Bj =
b1 b2 b3 b4 b5 b6 se calculează un şir de 4 biţi Sj (Bj ) astfel: biţii b1 b6 dau reprezentarea
binară a indicelui unei linii r (0 ≤ r ≤ 3) din Sj ; ceilalţi patru biţi b2 b3 b4 b5 dau
reprezentarea binară a indicelui unei coloane c (0 ≤ c ≤ 15) din tablou. Atunci
Cj = Sj (Bj ) = [Sj (r, c)]2 (1 ≤ j ≤ 8). ([x]2 este reprezentarea ı̂n baza 2 a numărului
ı̂ntreg x).
4. Secvenţa C = C1 C2 C3 C4 C5 C6 C7 C8 – de lungime 32 – se rearanjează folosind o
permutare fixată P . Rezultatul final este f (A, J) = P (C).
Mai rămâne să specificăm funcţiile particulare folosite de sistemul DES:
• Permutarea iniţială IP este:
58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7

• Permutarea inversă IP −1 este:


40 8 48 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30
37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28
35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26
33 1 41 9 49 17 57 25
• Funcţia de expansiune E este definită de tabloul:
32 1 2 3 4 5
4 5 6 7 8 9
8 9 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 1
5.1. SISTEMUL DE CRIPTARE DES 65

• Cele opt cutii S (S − boxuri) sunt:

S1
14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
S2
15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
S3
10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
S4
7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
S5
2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6
4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
S6
12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
S7
4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
66 CAPITOLUL 5. SISTEME SIMETRICE DE CRIPTARE MODERNE

S8
13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11

• Permutarea fixată P este:


16 7 20 21
29 12 28 17
1 15 23 26
5 18 31 10
2 8 24 14
32 27 3 9
19 13 30 6
22 11 4 25

Mai rămâne de prezentat procesul de diversificare al cheii K. De fapt, K este o secvenţă


de 64 biţi, din care 56 definesc cheia, iar 8 (biţii de pe poziţiile 8, 16, 24, . . . , 64) sunt biţi
de paritate, aranjaţi ı̂n aşa fel ı̂ncât fiecare octet să conţină un număr impar de 1. Aceşti
8 biţi sunt ignoraţi ı̂n procesul de diversificare.
1. Din cheie se elimină biţii de paritate, iar asupra celorlalţi se aplică o permutare
P C1 , obţinându-se P C1 (K) = C0 D0 (C0 sunt primii 28 biţi din secvenţă, iar D0 –
ceilalţi 28 biţi). Permutarea P C1 este

57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4

2. Pentru i = 1, 2, . . . , 16 se calculează

Ci = LSi (Ci−1 )
Di = LSi (Di−1 )

şi Ki = P C2 (Ci Di ).
LSi este o rotaţie circulară la stânga cu una sau două poziţii, ı̂n funcţie de valoarea
lui i: o poziţie dacă i = 1, 2, 9, 16, altfel rotirea este de două poziţii.
P C2 elimină biţii 9, 18, 22, 25, 35, 38, 43, 54 şi rearanjează ceilalţi biţi sub forma:
5.1. SISTEMUL DE CRIPTARE DES 67

14 17 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53
46 42 50 36 29 32

Decriptarea se realizează plecând de la textul criptat β şi utilizând acelaşi algoritm, ı̂n
ordine inversă; se vor folosi ı̂n ordine cheile K16 , . . . , K1 .

Exemplul 5.1. ([?]) Să considerăm textul clar ”Now is time for all” reprezentat ca o
secvenţă de caractere ASCII scrise ı̂n hexazecimal. Dacă se face o criptare DES folosind
cheia K = 0123456789ABCDEF , se obţine
α = 4E6F 772069732074 68652074696D6520 666F 7220616C6C20
β = 3F A40E8A984D4815 6A271787AB8883F 9 893D51EC4B563B53

5.1.4 Chei slabe


În cazul K1 = K16 , algoritmul de generare va genera o secvenţă de chei palindromice:
Ki = K17−i (1 ≤ i ≤ 8). Acestea sunt chei slabe.

Definiţia 5.1. O cheie DES slabă este o cheie K cu proprietatea eK (eK (α)) = α, ∀α ∈ P.
O pereche de chei (K1 , K2 ) este semi-slabă DES dacă eK1 (eK2 (α)) = α, ∀α ∈ P.

În DES sunt 4 chei slabe şi 6 perechi de chei semi-slabe, date de tabelele următoare:

Chei slabe (hex) C0 D0


0101010101010101 028 028
F EF EF EF EF EF EF EF E 128 128
1F 1F 1F 1F 0E0E0E0E 028 128
E0E0E0E0F 1F 1F 1F 1 128 028

C0 D0 P erechi de chei semi − slabe (hex) C0 D0


(01)14 (01)14 01F E01F E01F E01F E, F E01F E01F E01F E01 (10)14 (10)14
(01)14 (10)14 1F E01F E00EF 10EF 1, E01F E01F F 10EF 10E (10)14 (01)14
(01)14 0 28
01E001E001F 101F 1, E001E001F 101F 101 (10)14 028
(01)14 128 1F F E1F F E0EF E0EF E, F E1F F E1F F E0EF E0E (10)14 128
028 (01)14 011F 011F 010E010E, 1F 011F 010E010E01 028 (10)14
128 (01)14 E0F EE0F EF 1F EF 1F E, F EE0F EE0F EF 1F EF 1 128 (10)14

Posibilitatea ca printr-o alegere aleatoare a cheii să se obţină o cheie slabă sau semi-slabă
este deci 2−52 . Mulţi utilizatori solicită un test pentru depistarea cheilor slabe, test care
nu afectează semnificativ timpul de criptare.
68 CAPITOLUL 5. SISTEME SIMETRICE DE CRIPTARE MODERNE

De remarcat că fiind dată o cheie semi-slabă K, cealaltă cheie din pereche poate fi
obţinută secţionând K ı̂n două părţi egale şi rotind fiecare jumătate cu 8 biţi.
Pentru fiecare cheie slabă K există 232 puncte fixe: texte clare α cu proprietatea
eK (α) = α.
Pentru fiecare cheie semi-slabă K din partea superioară a tabelului există 232 puncte
anti-fixe: texte clare α cu eK (α) = α. Aceste patru chei semi-slabe se numesc şi chei anti
- palindromice, deoarece subcheile generate sunt complementare: K1 = K 16 , K2 = K 15
etc.

5.1.5 Controverse legate de DES


Încă de la lansarea sa, DES a fost supus la numeroase critici. O primă obiecţie a fost
legată de folosirea S −boxurilor. Toate calculele din DES sunt liniare, cu excepţia acestor
S − boxuri. Deci, de fapt toată securitatea sistemului se bazează pe acestea. Dar, nimeni
(cu excepţia autorilor) nu ştie cum sunt concepute cutiile. Multe persoane au fost convinse
că ele ascund diverse trape secrete care permit celor de la Agenţia Naţională de Securitate
(N SA - serviciul american care răspunde de problemele legate de securitatea naţională)
să decripteze orice mesaj.
Ca urmare, N SA afirmă ı̂n 1976 că S−boxurile au fost construite pe baza următoarelor
criterii:

1. Fiecare linie este o permutare a numerelor 0, . . . , 15 ;

2. Nici un S − box nu este o funcţie liniară sau afină;

3. La modificarea unui bit din operand, un S − box provoacă modificarea cel puţin a
doi biţi din rezultat;

4. Pentru fiecare cutie S şi α (secvenţă de lungime 6), S(α) şi S(α ⊕ 001100) diferă
prin cel puţin doi biţi.

Alte două proprietăţi au fost menţionate ca fiind ”consecinţe ale criteriilor de construcţie”:

5. Pentru orice cutie S şi orice α, S(α) 6= S(α ⊕ 11ab00), oricare ar fi a, b ∈ {0, 1};

6. Pentru orice cutie S, dacă un bit din operand este menţinut constant şi se urmărşte
un bit al rezultatului, numărul de valori care produc 0 este ”apropiat” de numărul
de valori care produc 1. Într-adevăr, dacă bitul fixat este unul din cei doi biţi care
determină linia cutiei S, există – conform criteriului 1. – 16 valori care produc 0 şi
16 valori care produc 1; pentru ceilalţi biţi, aceasta nu este adevărat, dar numărul
de valori care produc 0 (sau 1) este cuprins totdeauna ı̂ntre 13 şi 19.
5.1. SISTEMUL DE CRIPTARE DES 69

Nici un alt criteriu referitor la S − boxuri nu a mai fost recunoscut public.


Cea mai pertinentă critică referitoare la DES se referă la mărimea prea mică (numai
256 ) a spaţiului cheilor. Ca urmare s-au conceput numeroase maşini dedicate atacurilor
prin forţă brută, care să caute cheia. Fiind dat un text clar α de 64 biţi şi textul său
criptat β, se verifică toate cheile K posibile (aproximativ 255 ), până se obţine eK (α) = β
(de remarcat că soluţia există totdeauna, dar nu este unică).

5.1.6 Moduri de implementare ale DES -ului


În istoria sa, sistemul de criptare DES a cunoscut patru moduri de implementare, moduri
extinse ulterior la toate sistemele de criptare:

• Modul ECB (Electronic Codebook Mode) corespunde metodei descrise anterior: fiind
dat un text clar x = α1 α2 . . ., fiecare bloc αi de 64 biţi este criptat cu cheia K după
formula
βi = eK (αi ), (i ≥ 1)
procedeul conducând la textul criptat y = β1 β2 . . .

• În modul CBC (Cypher Block Chaining Mode), fiecare bloc de text criptat βi este
combinat printr-un XOR cu textul clar următor αi+1 , ı̂nainte de criptarea acestuia.
Operaţia decurge conform schemei:

α1 α2 Decriptare β1 - β2 -
- +j - +j
? -...
?
V I = β0 ? ?
6 6 dK dK
? ?
eK eK - +j ?- +j ?
? ?
...
V I = β0 -

? ? ? ?
Criptare β1 - β -
2 α1 α2

Se defineşte un bloc cu valoarea iniţială V I = β0 , după care blocurile se criptează


după formula
βi = eK (βi−1 ⊕ αi ) (i ≥ 1)

Funcţia de decriptare
αi = βi−1 ⊕ dK (βi ) (i ≥ 1)
nu mai este recursivă. De aceea, decriptarea se poate efectua mai rapid (comparativ
cu operaţia de criptare), printr-un proces de calcul paralel.
70 CAPITOLUL 5. SISTEME SIMETRICE DE CRIPTARE MODERNE

• Modurile OF B şi CF B sunt construite conform sistemelor de criptare cu chei fluide:


se generează cheia fluidă, care se combină apoi cu textul clar (similar sistemului
one-time-pad). OF B (Output Feedback Mode) este o criptare sincronizabilă aditivă:
componentele cheii fluide sunt obţinute prin criptarea iterativă a unui bloc iniţial
V I de 64 biţi; se defineşte γ0 = V I şi se calculează γ1 , γ2 , . . . după formula

γi = eK (γi−1 ), (i ≥ 1)

Secvenţa blocurilor de text clar x = α1 , α2 , . . . este criptată apoi conform relaţiei

βi = αi ⊕ γi , (i ≥ 1)

• În modul CF B (Cypher Feedback Mode) se ı̂ncepe cu β0 = V I (bloc iniţial de 64


biţi) şi se calculează cheia fluidă γi criptând din nou blocul de text criptat obţinut
anterior:
γi = eK (βi−1 ) (i ≥ 1)
Ca şi la modul OF B, ı̂n faza a doua avem

βi = αi ⊕ γi (i ≥ 1)

De remarcat că funcţia de criptare eK este folosită aici atât la procesul de criptare
cât şi la cel de decriptare.
α1 α2 β1 - β2 -

? 
? 
? 
?
V I = β0 - eK -  + -. . .
+ - eK - V I = β0 - eK -  ?. . .
? eK - + -
+ - 
6 6
? ? ? ?
Criptare β1 - β2 - Decriptare α1 α2

Şi ı̂n modul de implementare CF B este posibilă o decriptare ı̂n paralel, datorită
formulei
αi = βi ⊕ eK (βi−1 ) (i ≥ 1)

Deşi descrierile au fost gândite pentru blocuri de mărime 64, modurile OF B şi CF B
pot fi extinse imediat la blocuri de k biţi (1 ≤ k ≤ 64).

Cele patru moduri de implementare prezintă diverse avantaje şi dezavantaje. Astfel,
la ECB şi OF B, modificarea unui bloc de text clar αi provoacă modificarea unui singur
bloc de text criptat, βi . În anumite situaţii, acest fapt constituie un defect. Modul OF B
este utilizat adesea pentru transmisiile prin satelit.
5.1. SISTEMUL DE CRIPTARE DES 71

În modurile CBC şi CF B dimpotrivă, modificarea unui bloc αi de text clar antrenează
modificări ı̂n toate blocurile de texte criptate, ı̂ncepând cu βi . De aceea, aceste moduri
sunt adaptate ı̂n particular problemelor de autentificare a mesajelor (M AC - Message
Authentication Code). Un M AC este adăugat la un text clar cu scopul de a-l convinge
pe Bob că textul primit a fost scris de Alice şi nu a fost alterat de Oscar. El garantează
astfel integritatea (sau autenticitatea) mesajului, dar nu şi confidenţialitatea sa.
Să descriem cum este utilizat modul CBC la construcţia unui M AC. Se pleacă de la
blocul iniţial V I ı̂n care toţi biţii sunt 0. Se construieşte textul criptat β1 , β2 , . . . , βn
cu cheia K, ı̂n modul CBC, iar M AC este blocul βn . Alice va transmite mesajul
α1 , α2 , . . . , αn , asociat cu M AC-ul βn . Când Bob primeşte mesajul α1 , α2 , . . . , αn , el
generează β1 , . . . , βn folosind cheia (secretă) K şi verifică dacă βn este identic cu mesajul
M AC primit.
De remarcat că Oscar nu poate construi un M AC deoarece nu cunoaşte cheia K
utilizată de Alice şi Bob; orice modificare a mesajelor clare este depistată astfel uşor.
Se poate realiza şi o combinare a integrităţii cu confidenţialitatea, ı̂n felul următor:
Alice utilizează cheia K1 pentru a calcula un M AC bazat pe α1 , . . . , αn ; fie αn+1 acest
M AC. Apoi, ea criptează mesajul α1 , . . . , αn+1 ı̂n β1 , . . . , βn+1 folosind o a doua cheie
K2 . Când Bob primeşte mesajul, el decriptează ı̂n prima fază (cu cheia K2 ), apoi verifică
cu cheia K1 dacă αn+1 este M AC-ul lui α1 , . . . , αn .
Sau – ca altă variantă – Alice poate utiliza K1 pentru criptarea mesajului α1 , . . . , αn ;
apoi, pentru β1 , . . . , βn determină M AC-ul βn+1 folosind cheia K2 . Bob va face ı̂ntâi veri-
ficarea corectitudinii dată de M AC şi – dacă totul este ı̂n ordine – va trece la decriptare.

5.1.7 Parole U N IX
O aplicaţie interesantă a sistemului de criptare DES este algoritmul de criptare al paro-
lelor din sistemul U N IX 1 , algoritm numit UNIX crypt.
w
56
 ? -

? ? ? 88
0 0
0 - DES -
DES - ... -
DES
- -
64 64 64 64 64
/etc/passwrd
6 6 6 6
 - 12
12
6
-
Salt
1
Sistem dezvoltat de compania Bell Laboratories.
72 CAPITOLUL 5. SISTEME SIMETRICE DE CRIPTARE MODERNE

Versiunea criptată a unei parole este stocată ı̂ntr-o bază de date /etc/passwrd (a
cărei confidenţialitate nu este obligatoriu asigurată). Atunci când un utilizator dă parola,
sistemul o criptează şi o compară cu varianta din baza de date. Modul de criptare este
format din următoarele etape:
1. Parola este trunchiată la primele opt caractere ASCII (sau completată cu 0 dacă
parola are mai puţin de 8 caractere). Fiecare caracter dă 7 biţi, formând o cheie
DES de 56 biţi.
2. Se realizează o criptare ı̂n serie prin 25 sisteme DES, textul clar iniţial fiind 00 . . . 0.
3. Cei 64 biţi obţinuţi după ultima criptare se combină cu 12 biţi daţi de Salt şi cu
un bit suplimentar, formând 11 caractere printabile de câte 7 biţi. Biţii de paritate
completează parola criptată până la 88 biţi.
Sistemul U N IX oferă pentru criptare un pachet de 12 biţi – numit Salt – generat de
sistemul de ceas al sistemului la momentul creerii parolei şi stocat ı̂n baza de date, ı̂n
cadrul parolei criptate. Aceşti biţi sunt folosiţi pentru modificarea funcţiei de expansiune
E din DES, oferind 212 = 4096 variante. Anume: fiecare bit din Salt este asociat cu o
pereche fixată din blocul de 48 biţi din E. Dacă el este 1, atunci biţii din E asociaţi lui
sunt interschimbaţi; altfel, sunt lăsaţi pe loc.
Această modificare previne utilizarea de implementări ale sistemului DES externe
sistemului U N IX.

5.1.8 Sisteme de criptare ı̂nrudite cu DES


Triplu DES (3DES)
Triplu DES (cunoscut şi sub numele 3DES sau – mai rar – DES − ede) este un sistem
derivat din DES, propus de Walter Tuchman (şeful echipei IBM care a construit DES).
Numele oficial este F IP S Pub 46 − 3.
Formal, 3DES este definit prin formula

c = DESk3 (DESk−1
2
(DESk1 (m))),

unde:
m este un bloc de text clar (64 biţi),
c este blocul de text criptat rezultat,
k1 , k2 , k3 sunt chei DES (de 56 biţi),
DESk : criptarea DES cu cheia k,
DESk−1 : decriptarea DES cu cheia k.
Introducerea la pasul 2 a decriptării nu afectează securitatea algoritmului. Avantajul
constă ı̂n utilizarea pentru 3DES a unei implementări DES (astfel, cele două sisteme pot
inter-opera).
5.1. SISTEMUL DE CRIPTARE DES 73

Uneori – dar destul de rar – se foloseşte pentru Triplu DES o criptare ı̂n lanţ de trei
criptări DES (numită şi DES − eee):

c = DESk3 (DESk2 (DESk1 (m))).

Criptarea ı̂n trei paşi (ede sau eee) este esenţială pentru protejarea contra unui atac
de tipul meet-in-the-middle. În cazul unei duble criptări, acest atac este destul de eficient.
Într-adevăr, să considerăm un sistem de criptare bloc unde mărimea cheii este n. O
criptare dublă cu două chei diferite va folosi de fapt o cheie de lungime 2n. Pentru un
text clar dat m, să presupunem că putem stoca eK (m), pentru toate cheile K posibile.
Fie x un text criptat după formula x = ek2 (ek1 (m)), unde cheile k1 şi k2 sunt secrete.
Pentru fiecare cheie p există o cheie unică q astfel ca dp (x) = eq (m). În particular există
exact 2n chei posibile determinate de perechea (m, x), chei care pot fi găsite ı̂n aproximativ
O(2n ) paşi.
Dacă numărul cheilor care pot fi stocate este de ordinul 2p < 2n , algoritmul poate fi
modificat pentru a afla toate cheile posibile, ı̂n circa O(22n−p ) paşi.

Observaţia 5.2. Pentru oricare din situaţiile


k1 = k2 , k2 = k3 , k1 = k2 = k3 ,
DES − ede se reduce la un simplu DES, lucru utilizat frecvent pentru a verifica
compatibilitatea sistemului.

Cheia pentru Triplu DES are 3 ∗ 56 = 168 biţi, la care se adaugă 3 ∗ 8 = 24 biţi de
paritate; ı̂n total sunt 192 biţi.
O variantă, numită ”3DES cu două chei” foloseşte k1 = k3 ; aici mărimea de stocare
a cheii va fi de numai 128 biţi (din care 16 biţi de paritate). Acest mod este ı̂nsă sensibil
la anumite atacuri cu text clar ales, propuse de Merkle şi Hellman (1981) şi – mai târziu
– de Van Oorschot şi Wiener (1991).
Sistemul de criptare 3DES nu este ı̂ncă spart, dar utilizarea sa este ı̂ngreunată din
cauza vitezei mici de criptare. Totuşi multe sisteme continuă să folosească 3DES; ca
exemple mai recente sunt cardurile bancare (Mastercard şi parţial – Visa) care din 2002
sunt configurate pe baza acestui sistem de criptare. De asemenea, sistemul de telefonie
mobilă Zapp foloseşte 3DES ca sistem de criptare.

DES − X
DES − X (sau – mai simplu – DESX) este o variantă a sistemului de criptare DES,
dezvoltată pentru a rezista mai bine unui atac prin forţă brută.
După cum am văzut, sistemul DES operează cu o cheie de 56 biţi; deci sunt numai
256 chei posibile, unele din acestea fiind chei slabe. Pentru a evita un atac direct, in 1984
Rivest propune creşterea mărimii cheii K fără a modifica substanţial algoritmul.
74 CAPITOLUL 5. SISTEME SIMETRICE DE CRIPTARE MODERNE

DES−X foloseşte două chei suplimentare K1 , K2 de câte 64 biţi şi efectuează criptarea
unui bloc de text clar x după formula

DESXK,K1 ,K2 (x) = K2 ⊕ DESK (x ⊕ K1 )

Mărimea cheii creşte deci la 56 + 2 ∗ 64 = 184 biţi.

IDEA
Prima apariţie a sistemului IDEA are loc ı̂n 1990, sub denumirea P ES (Proposed En-
cryption Standard). Deoarece ı̂n acelaşi an, Biham şi Shamir publică sistemul de atac
al DES-ului prin criptanaliză diferenţială, ı̂n 1991 autorii (Xuejia Lai şi James Massey)
modifică sistemul de criptare pentru a rezista acestui gen de atac. Noul sistem este numit
IP ES (Improved Proposed Encryption Standard), nume care ı̂n 1992 se schimbă ı̂n IDEA
(International Data Encryption Standard Algorithm).
În opinia lui Bruce Schneider, ı̂n 1996 IDEA constituia cel mai sigur sistem de criptare
utilizabil fără restricţii. Este o componentă a sistemului de securitate prin poşta elec-
tronică P GP , unde asigură criptarea datelor.
Sistemul este foarte asemănător cu DES. Astfel, el este un sistem simetric care
operează cu blocuri de texte clare de 64 biţi, folosind o cheie de 128 biţi.
Textul clar de 64 biţi este despărţit ı̂n 4 sublocuri X1 , X2 , X3 , X4 , de câte 16 biţi
fiecare. Aceste patru componente formează intrarea la prima rundă a algoritmului. În
total sunt 8 runde, care folosesc operaţiile de adunare, ı̂nmulţire (modulo 216 ) şi XOR;
toate pe 16 biţi. De asemenea sunt implicate şi 16 subchei a câte 16 biţi fiecare. Între
runde, subblocurile 2 şi 3 sunt schimbate ı̂ntre ele. După runda 8, cele patru subblocuri
sunt combinate cu 4 subchei, formând ieşirea.
O rundă conţine 14 operaţii, anume:

1. Se ı̂nmulţeşte X1 cu prima subcheie;


2. Se adună X2 cu a doua subcheie;
3. Se adună X3 cu a treia subcheie;
4. Se ı̂nmulţeşte X4 cu a patra subcheie;
5. Ce s-a obţinut la paşii 1 şi 3 se combină prin XOR;
6. Ce s-a obţinut la paşii 2 şi 4 se combină prin XOR;
7. Se ı̂nmulţeşte rezultatul pasului 5 cu subcheia 5;
8. Se adună rezultatele paşilor 6 şi 7;
9. Se ı̂nmulţeşte rezultatul pasului 8 cu subcheia 6;
10. Se adună rezultatele paşilor 7 şi 9;
11. Ce s-a obţinut la paşii 1 şi 9 se combină prin XOR;
12. Ce s-a obţinut la paşii 3 şi 9 se combină prin XOR;
13. Ce s-a obţinut la paşii 2 şi 10 se combină prin XOR;
14. Ce s-a obţinut la paşii 4 şi 10 se combină prin XOR.
5.2. ALTE SISTEME DE CRIPTARE ULTERIOARE DES 75

Rezultatele paşilor 11 − 14 formează ieşirea dintr-o rundă; cele patru subblocuri (după ce
subblocurile 2 şi 3 sunt interschimbate) formează intrarea ı̂n runda următoare.
După ultima rundă, are loc o transformare finală:
1. Se ı̂nmulţeşte X1 cu prima subcheie;
2. Se adună X2 cu a doua subcheie;
3. Se adună X3 cu a treia subcheie;
4. Se ı̂nmulţeşte X4 cu a patra subcheie.
Cela patru subblocuri obţinute ı̂n final formează textul criptat.
Prelucrarea subcheilor se face după următorul algoritm:
1. Cheia de 128 biţi este desfăcută ı̂n 8 subchei a câte 16 biţi fiecare;
2. Primele 6 subchei sunt folosite la prima rundă, iar următoarele două, la runda
a doua;
3. Cheia este rotită spre stânga cu 25 biţi şi se desface din nou ı̂n 8 subchei, folosite
la rundele 2 şi 3 (câte patru subchei);
4. Se repetă pasul 3 cât timp este necesar.
Operaţia de decriptare se realizează urmând aceiaşi paşi, cu singura diferenţă că subcheile
se introduc ı̂n ordine inversă.
Comparativ cu DES, IDEA prezintă unele avantaje. Astfel, implementările realizate
permit o viteză dublă de criptare ı̂n IDEA faţă de DES.
Lungimea cheii (128) biţi, asigură o securitate sporită la atacurile prin forţă brută:
pentru a găsi cheia prin ı̂ncercări, ar fi necesare cam 2127 teste; deci cu un chip care
testează un miliard de chei pe secundă, ar trebui cam 1013 ani – o perioadă mai lungă
decât vârsta Pământului.
Autorii au afirmat (fără să demonstreze) că IDEA rezistă atacurilor prin criptanaliza
diferenţială. Un studiu al subcheilor a arătat că există unele chei slabe, care permit spar-
gerea sistemului de criptare ı̂ntr-un timp mai scurt. O asigurare contra alegerii (aleatoare)
a acestor chei slabe ar fi completarea algoritmului de generare a subcheilor prin operarea
fiecărei subchei generate printr-un XOR cu 0x0D, unde ”x” este o cifră hexazecimală
aleasă aleator.

5.2 Alte sisteme de criptare ulterioare DES


La sfârşitul anilor 0 90 se decide ı̂nlocuirea sistemului de criptare DES. Motivele sunt
multiple, dar menţionăm numai două:
• În iulie 1998 sistemul DES pe 56 biţi este spart de către organizaţia Electronic
Frontier Foundation; s-a folosit un calculator construit special ı̂n acest scop, iar
timpul necesar spargerii a fost de 3 zile.
76 CAPITOLUL 5. SISTEME SIMETRICE DE CRIPTARE MODERNE

• În luna septembrie a aceluiaşi an, administraţia americană acordă companiilor pro-
ducătoare de soft de securitate permisiunea de a exporta implementări ale algorit-
mului DES bazate pe chei de criptare de 56 biţi.
În legătură cu aceste evenimente, pe 20 august 1998 N IST (National Institute of Stan-
dards and Technology) anunţă (ı̂n cadrul unei conferinţe speciale) un set de 15 algoritmi
candidaţi să ı̂nlocuiască DES 2 . Este ales şi numele noului sistem de criptare: AES
(Advanced Encryption Standard). Cei 15 algoritmi au fost trimişi de membri din co-
munitatea criptografică mondială. Criteriile stabilite de N IST pentru noul sistem au
fost:
• Să fie un sistem de criptare simetric pe blocuri de 128 biţi.
• Să accepte chei de lungime 128, 192 şi 256 biţi;
• Să nu aibă chei slabe;
• Să fie eficient atât pe platforme Intel Pentium Pro cât şi pe alte platforme software
sau hardware;
• Să poată fi implementat atât pe procesoare de 32 biţi cât şi pe smart - carduri
(procesoare de 8 biţi);
• Să fie cât mai simplu.
• Să fie mai rapid decât DES şi să ofere o securitate mai mare decât 3DES.
A doua conferinţă AES are loc ı̂n martie 1999; după analiza rezultatelor algoritmilor
propuşi, N IST selectează 5 algoritmi: M ars, RC6, Rijndael, Serpent şi T wof ish. Aceş-
tia sunt supuşi testelor şi discuţiilor publice, folosind drept criterii de evaluare: securitate,
cost, implementare.
În mai 2000 N IST anunţă drept sistem ”câştigător” sistemul de criptare Rijndael,
care devine oficial AES.
Înainte de a prezenta sistemul AES vom face o scurtă trecere ı̂n revistă a sistemelor
de criptare finaliste ı̂n această competiţie.

5.2.1 Mars
Sistemul M ARS este propus de firma IBM , autorii săi fiind un grup condus de Don
Coppersmith. Câteva detalii de construcţie:
• Algoritmul este format din trei componente, fiecare din ele asigurând protecţie pen-
tru anumite tipuri de atac.
2
Aceştia sunt (ı̂n ordine alfabetică) CAST − 256, CRY P T ON, DEAL, DF C, E2, F ROG, HP C,
LOKI97, M AGEN T A, M ARS, RC6, Rijndael, SAF ER+, Serpent, T wof ish.
5.2. ALTE SISTEME DE CRIPTARE ULTERIOARE DES 77

• Lucrează pe procesoare de 32 biţi, putând fi implementat atât ı̂n format big-endian,


cât şi ı̂n little endian3 .

• La intrare textul clar este ”spart” ı̂n grupuri de 128 biţi (4 cuvinte de câte 32 biţi).
Prima şi a treia parte a algoritmului amestecă aceşti biţi folosind o cheie de dimen-
siune variabilă (ı̂ntre 128 şi 448 biţi) şi un S − box de 512 elemente. Componenta
din mijloc este formată din 16 runde şi foloseşte ı̂n plus o o funcţie de expandare E.

• Operaţiile folosite sunt: adunări, scăderi, XOR-uri, rotaţii (fixe sau dependente de
date) şi ı̂nmulţiri; toate calculele se fac modulo 32. Construcţia S − boxului s-a
făcut pe baza unui algoritm public, plecând de la o serie de condiţii iniţiale clare.

Notaţiile folosite ı̂n algoritm:

• D[0], D[1], D[2], D[3] – cuvinte (de 32 biţi), iniţializate cu textul clar; ı̂n final aici
va fi blocul de text criptat; se notează D[i : j] octetul j din D[i] (j = 0, 1, 2, 3).

• K[·] – cheia expandată; secvenţă de 40 cuvinte;

• S[·] – S − box de 512 cuvinte; S0[] va conţine primele 256 elemente, iar S1[] –
ultimele 256 cuvinte.

Faza I (Mixare preliminară):


1. for i ←− 0 to 3 do D[i] ←− D[i] + K[i];
2. for i ←− 0 to 7 do
2.1. D[1] ←− D[1] ⊕ S0[D[0, 0]];
2.2. D[1] ←− D[1] + S1[D[0, 1]];
2.3. D[2] ←− D[2] + S0[D[0, 2]];
2.4. D[3] ←− D[3] ⊕ S1[D[0, 3]];
2.5. D[0] ←− D[0] >>> 24;
2.6. if i ∈ {0, 4} then D[0] ←− D[0] + D[3];
2.6. if i ∈ {1, 5} then D[0] ←− D[0] + D[1];
2.7. (D[0], D[1], D[2], D[3]) −→ (D[3], D[0], D[1], D[2]).

3
Fie a1 a2 a3 a4 un cuvânt pe 4 octeţi, unde ai este un număr ı̂ntreg din intervalul [0, 255].
1. În arhitectura big-endian (o staţie SPARK de exemplu), un cuvânt reprezintă ı̂ntregul a1 224 +
a2 216 + a3 28 + a4 .
2. În arhitctura little-endian (cum este familia Intel 80xxx) un cuvânt reprezintă ı̂ntregul a4 224 +
a3 216 + a2 28 + a1 .
78 CAPITOLUL 5. SISTEME SIMETRICE DE CRIPTARE MODERNE

Faza II (Transformări bazate pe cheie):


1. for i ←− 0 to 15 do
1.1. (o1, o2, o3) ←− E(D[0], K[2i + 4], K[2i + 5]);
1.2. D[0] <<< 13;
1.3. D[2] ←− D[2] + o2;
1.4. if i < 8 then
1.4.1. D[1] ←− D[1] + o1;
1.4.2. D[3] ←− D[3] ⊕ o3;
else
1.4.3. D[3] ←− D[3] + o1;
1.4.4. D[1] ←− D[1] ⊕ o3;
1..5. (D[0], D[1], D[2], D[3]) ←− (D[3], D[0], D[1], D[2]).
Faza III (Mixare finală):
1. for i ←− 0 to 7 do
1.1. if i ∈ {2, 6} then D[0] ←− D[0] − D[3];
1.2. if i ∈ {3, 7} then D[0] ←− D[0] − D[1];
1.3. D[1] ←− D[1] ⊕ S1[D[0, 0]];
1.4. D[2] ←− D[2] − S0[D[0, 3]];
1.5. D[3] ←− D[3] − S1[D[0, 2]];
1.6. D[3] ←− D[3] ⊕ S0[D[0, 1]];
2.5. D[0] ←− D[0] <<< 24;
2.7. (D[0], D[1], D[2], D[3]) −→ (D[3], D[0], D[1], D[2]).
2. for i ←− 0 to 3 do D[i] ←− D[i] − K[36 + i];
3. Output(D[0], D[1], D[2], D[3]).

Mai trebuie precizate funcţia E şi modalitatea de expandare a cheii K.


E(inp, cheie1, cheie2);
1. M ←− inp + cheie1; (M este variabilă auxiliară)
2. R ←− (inp <<< 13) · cheie2; (R este variabilă auxiliară)
3. i ←− cei mai mici nouă biţi din M ;
4. L ←− S[i]; (L este variabilă auxiliară)
5. R ←− (R <<< 5);
6. r ←− cei mai mici cinci biţi din R;
7. M ←− (M <<< r);
8. L ←− L ⊕ R;
9. R ←− (R <<< 5);
10. L ←− L ⊕ R;
11. r ←− cei mai mici cinci biţi din R;
12. L ←− (L <<< r);
13. output(L, M, R).
5.2. ALTE SISTEME DE CRIPTARE ULTERIOARE DES 79

Expandarea cheii:
Această procedură expandează o cheie k[0, . . . , n − 1] de n cuvinte (4 ≤ n ≤ 14) ı̂ntr-o
cheie K de 40 cuvinte, folosind un vector temporar T de 15 cuvinte şi un vector fixat Z
de 4 cuvinte.
1. Z ←− A4A8D57B 5B5D193B C8A8309B 73F 9A978;
2. T [0, . . . , n − 1] ←− k[0, . . . , n − 1], T [n] ←− n, T [n + 1, . . . , 14] ←− 0;
3. for j ←− 0 to 3 do
3.1. for i ←− 0 to 14 do
T [i] ←− T [i] ⊕ ((T [(i − 7) mod 15] ⊕ T [(i − 2) mod 15] <<< 3) ⊕ (4 · i + j);
3.2. for m ←− 1 to 4 to
for i ←− 0 to 14 do
T [i] ←− (T [i] + S[cei mai mici nouă biţi dinT [(i − 10) mod 15]]) <<< 9;
3.3. for i ←− 0 to 9 do K[10 · j + i] ←− T [4 · i mod 15];
4. for i ←− 5, 7, . . . , 33, 35 do
4.1. j ←− cei mai din dreapta doi biţi din K[i];
4.2. w ←− K[i] cu cei mai din dreapta doi biţi setaţi pe 1;
4.3. for p ←− 2 to 30 do
if (w[p − 1] = w[p] = w[p + 1]) ∨ (w[p] e ı̂ntr-o secvenţă de 10 biţi consecutivi egali)
then M [p] ←− 1;
4.4. r ←− cei mai din dreapta cinci biţi din K[i − 1];
4.5. X ←− (Z[j] <<< r);
4.6. K[i] ←− w ⊕ (X ∧ M ).
5. output(K[·]).
Cele 512 cuvinte ale S − boxului au fost generate ı̂n aşa fel ı̂ncât să verifice condiţiile:
- Nu are valorile 00000000 şi F F F F F F F F ;
- Orice două valori diferă prin cel puţin 4 biţi;
- Nu există două valori a, b astfel ca a = b sau a = −b;
- Diferenţele de scădere sau XOR ı̂ntre orice două valori sunt maxime.
Pentru alte detalii privind securitatea sistemului M ARS (algoritmul de decriptare,
moduri de implementare, componentele S − boxului etc), a se vedea [?].

5.2.2 RC6
Sistemul de criptare RC6 este o versiune a lui RC5, elaborată de laboratoarele RSA
(sub coordonarea lui Ron Rivest) cu scopul de a ı̂ndeplini criteriile AES. Este un sistem
simplu, fără atacuri practice cunoscute (sunt elaborate doar câteva atacuri teoretice),
complet parametrizat: versiunea generală este RC6−w/r/b unde mărimea cuvintelor este
w, numărul de runde este r, iar b este mărimea (ı̂n octeţi) a cheii de criptare. Versiunea
pentru AES are w = 32, r = 20.

Algoritmul lucrează pe blocuri de lungime w folosind şase operaţii:


80 CAPITOLUL 5. SISTEME SIMETRICE DE CRIPTARE MODERNE

• +, −, · (toate modulo 2w ),

• ⊕,

• a <<< b (rotirea lui a spre stânga cu un număr de poziţii dat cei mai puţin semni-
ficativi log2 w biţi din b),

• a >>> b (operaţie similară spre dreapta).

Algoritmul de criptare:
Intrare:
- Textul clar stocat ı̂n cuvintele A, B, C, D;
- Numărul r de runde;
- Cheia S[0, . . . 2r + 3];
Ieşire: Textul criptat stocat ı̂n A, B, C, D.
Algoritm:
1. B ←− B + S[0];
2. D ←− D + S[1];
3. for i ←− 1 to r do
3.1. t ←− (B · (2 · B + 1)) <<< log2 w;
3.2. u ←− (D · (2 · D + 1)) <<< log2 w;
3.3 A ←− ((A ⊕ t) <<< u) + S[2i];
3.3 C ←− ((C ⊕ u) <<< t) + S[2i + 1];
3.4. (A, B, C, D) ←− (B, C, D, A);
4. A ←− A + S[2r + 2];
5. C ←− C + S[2r + 3].
Detalii privind securitatea şi modalităţi de implementare pot fi găsite ı̂n [?].
Algoritmul de diversificare a cheii S este identic cu cel de la RC5. În [?] acesta este
prezentat ı̂mpreună cu un cod pentru RC5, scris ı̂n C + +.
Cheia iniţială are b octeţi (0 ≤ b ≤ 255) şi este stocată ı̂ntr-un tablou L cu c = db/4e
cuvinte (completând ultimul cuvânt cu 0 dacă este necesar).
În prima fază tabloul S este iniţializat folosind un generator liniar congruenţial4 :
1. S[0] ←− P ;
2. for i ←− 1 to 2(r + 1) − 1 do S[i] ←− (S[i − 1] + Q) mod 232
P = B7E15163 şi Q = 9E3779B9 sunt constante bazate pe reprezentarea binară a
lui e şi π.

În etapa a doua se efectuează un amestec ı̂ntre L şi S:


4
A se vedea Capitolul 12 dedicat generatorilor de numere pseudoaleatoare.
5.2. ALTE SISTEME DE CRIPTARE ULTERIOARE DES 81

3. i ←− 0, j ←− 0;
4. A ←− 0, B ←− 0;
5. for s ←− 1 to 3 · max{c, 2(r + 1)} do
5.1. S[i] ←− (S[i] + A + B) <<< 3, A ←− S[i];
5.2. L[i] ←− (L[i] + A + B) <<< (A + B), B ←− L[i];
5.3. i ←− (i + 1) (mod 2(r + 1));
5.4. j ←− (j + 1) mod c

5.2.3 Serpent
Sistemul de criptare Serpent a fost propus de Ross Anderson (Universitatea Cambridge),
Eli Biham (Institutul Tehnion, Haifa) şi Lars Knudsen (Universitea Bergen). El criptează
texte clare de 128 biţi ı̂n blocuri de aceeaşi lungime, ı̂n 32 runde, folosind 33 chei de
criptare de rundă, de lungime 128 biţi 5 . Ea se extinde la 256 biţi punând ı̂n faţă 1 pentru
primul bit, apoi 0 pentru ceilalţi biţi – atât cât este necesar.
Algoritmul de criptare cuprinde 3 paşi:
Intrare: P (textul clar)
Ieşire: C (Textul criptat)
Algoritm:

1. B̂0 ←− IP (P ) (IP - permutare iniţială);

2. for i ←− 0 to 31 do B̂i+1 ←− Ri (B̂i );


where Ri (X) ←− L(Ŝi (Xi ⊕ K̂i )), 0 ≤ i ≤ 30,
R31 (X) ←− Ŝ7 (X31 ⊕ K̂31 ) ⊕ K32 .
Se aplică 32 runde formate din: un XOR cu cheia de rundă Ki , o trecere
printr-un S − box şi o transformare liniară L; ı̂n ultima rundă, transformarea
liniară este ı̂nlocuită cu ı̂ncă o combinare cu o a doua cheie de rundă;
Ŝ reprezintă aplicarea ı̂n paralel a 32 copii ale S − boxului Si mod 8 .

3. C ←− F P (B̂32 ) (F P – permutare finală).

Observaţia 5.3. S − boxurile lucrează pe 4 biţi, ca şi la DES 6 . Fiecare rundă foloseşte
un singur S − box ı̂n 32 copii. De exemplu, runda R0 foloseşte S0 ı̂n 32 exemplare; o copie
pentru biţii 0 − 3 din B0 ⊕ K0 ı̂ntorcând primii patru biţi dintr-un tablou intermediar,
a doua copie pentru biţii 4 − 7 din B0 ⊕ K0 ı̂ntoarce biţii 4 − 7 din vectorul intermediar
ş.a.m.d.
5
Lungimea cheii date de utilizator este variabilă, ı̂nsă algoritmul descris foloseşte chei de lungime
128, 192 sau 256 biţi.
6
O variantă iniţială, Serpent0 folosea aceleaşi S − boxuri ca DES.
82 CAPITOLUL 5. SISTEME SIMETRICE DE CRIPTARE MODERNE

Apoi vectorul intermediar obţinut trece prin transformarea liniară, producând B1 .


Analog, R1 foloseşte 32 S − boxuri identice S1 pentru biţii din B1 ⊕ K1 produând un
vector intermediar care după trecerea prin L dă B2 etc.
Detalii asupra IP, F P , conţinutul şi modul de generare al S − boxurilor, precum şi o
criptanaliză amănunţită pot fi găsite ı̂n [?], [?].
De remarcat că la fiecare etapă IP (Bi ) = B̂i , IP (Ki ) = K̂i .

Transformarea liniară L:
Blocul de 128 biţi dintr-o rundă este spart ı̂n patru cuvinte (X0 , X1 , X2 , X3 ) = Si (Bi ⊕Ki ).
Se aplică apoi următorii paşi:

1. X0 ←− (X0 <<< 13); 2. X2 ←− (X2 <<< 13);


3. X1 ←− X1 ⊕ X0 ⊕ X2 ; 4. X3 ←− X3 ⊕ X2 ⊕ (X0 << 3);
5. X1 ←− (X1 <<< 1); 6. X3 ←− (X3 <<< 7)
7. X0 ←− X0 ⊕ X1 ⊕ X3 ; 8. X2 ←− X2 ⊕ X3 ⊕ (X1 << 7);
9. X0 ←− (X0 <<< 5); 10. Bi+1 ←− (X0 , X1 , X2 , X3 ).

unde <<< ı̂nseamnă rotire spre stânga, iar << este deplasare spre stânga.
În ultima rundă, transformarea L este ı̂nlocuită cu B32 ←− S7 (B31 ⊕ K31 ) ⊕ K32 .

Generarea cheilor de rundă:


Fiecare rundă necesită 132 fragmente de câte 32 biţi. În prima fază se completează cheia
furnizată de utilizator până la 256 biţi. Apoi ea se extinde până la 33 subchei de câte 128
biţi K0 , K1 , . . . , K32 ı̂n modul următor:
Cheia K se descompune ı̂n opt cuvinte w−8 , . . . , w−1 care se extind la o cheie interme-
diară w0 , . . . , w131 prin formula
wi ←− (wi−8 ⊕ wi−5 ⊕ wi−3 ⊕ wi−1 ⊕ φ ⊕ i) <<< 11
unde φ este partea fracţionară a raportului de aur (constanta 9E3779B9).
Cheile de rundă sunt calculate din cheia intermediară folosind S − boxurile:
(k0 , k1 , k2 , k3 ) ←− S3 (w0 , w1 , w2 , w3 )
(k4 , k5 , k6 , k7 ) ←− S2 (w4 , w5 , w6 , w7 )
(k8 , k9 , k10 , k11 ) ←− S1 (w8 , w9 , w10 , w11 )
(k12 , k13 , k14 , k15 ) ←− S0 (w12 , w13 , w14 , w15 )
(k16 , k17 , k18 , k19 ) ←− S7 (w16 , w17 , w18 , w19 )
......
(k124 , k125 , k126 , k127 ) ←− S4 (w124 , w125 , w126 , w127 )
(k128 , k129 , k130 , k131 ) ←− S3 (w128 , w129 , w130 , w131 )
5.2. ALTE SISTEME DE CRIPTARE ULTERIOARE DES 83

Cheile de rundă se regrupează ı̂n

Ki ←− (k4i , k4i+1 , k4i+2 , k4i+3 )

5.2.4 Twofish
Sistemul Twofish este propus de un colectiv condus de Bruce Schneier, fiind unul din
puţinele sisteme free (implementarea este disponibilă la adresa [?]).
Algoritmul criptează blocuri de 128 biţi, folosind o cheie de lungime variabilă.
Algoritmul de criptare:
Intrare: P = p0 p1 . . . p15 un bloc de text clar de 128 biţi (pi - octeţi)
Ieşire: C - bloc text criptat, de 128 biţi.
Algoritm:
1. P se sparge ı̂n patru cuvinte P0 , P1 , P2 , P3 după sistemul little-endian:
3
p4i+j · 28j ,
X
Pi ←− (0 ≤ j ≤ 3)
j=0
2. R0,i ←− Pi ⊕ Ki , (0 ≤ i ≤ 3)
3. for r ←− 0 to 15 do
3.1. (Fr,0 , Fr,1 ) ←− F (Rr,0 , Rr,1 , r);
3.2. Rr+1,0 ←− (Rr,2 ⊕ Fr,0 ) >>> 1;
3.3. Rr+1,1 ←− (Rr,3 <<< 1) ⊕ Fr,1 ;
3.4. Rr+1,2 ←− Rr,0
3.5. Rr+1,3 ←− Rr,1
4. Ci ←− R16,(i+2) mod 4 ⊕ Ki+4 , (0 ≤ i ≤ 3)
Cb i c
$ %
5. ci ←− 8·(i mod 4) mod 28 , (0 ≤ i ≤ 15)
4

2
(cele patru cuvinte din textul criptat sunt scrise ca o secvenţă de 16 octeţi ı̂n sistemul
little-endian: C = c0 c1 . . . c15 ).
De remarcat că operaţia de la pasul 2 este numită whitening şi a fost introdusă ı̂n mod
independent de Merkle pentru Khuf u/Khaf re, respectiv Rivest pentru DES − X.

Funcţia F
F (R0 , R1 , r) este o funcţie ternară care ı̂ntoarce două valori (F0 , F1 ). Varianta propusă
este bazată la rândul ei pe o altă funcţie g.
1. T0 ←− g(R0 ) 2. T1 ←− g(R1 <<< 8)
3. F0 ←− (T0 + T1 + K2r+8 ) mod 232 4. F1 ←− (T0 + 2 · T1 + K2r+9 ) mod 232

Funcţia unară g constituie esenţa sistemului de criptare Twofish:


84 CAPITOLUL 5. SISTEME SIMETRICE DE CRIPTARE MODERNE

1. xi ←− bX/28i c mod 28 (0 ≤ i ≤ 3)
(cuvântul de intrare X este spart ı̂n patru octeţi)
2. yi ←− si [xi ], (0 ≤ i ≤ 3)
(octeţii sunt trecuţi prin patru S − boxuri dependente de cheie)
z0 01 EF 5B 5B y0
     
 z   5B EF EF 01 
  y1 
 
3.  1  ←−  ·
  
 z2   EF 5B 01 EF   y2 

z3 EF 01 EF 5B y3
3
zi 28i .
X
4. Z ←− (Z este valoarea rezultată).
i=0

Observaţia 5.4. La pasul 3 se face o corespondenţă ı̂ntre octeţi şi elementele corpului
GF (28 ), unde s-a ţinut cont de izomorfismul GF (28 ) ≡ GF (2)[X]/v(X)
(v(X) = X 8 + X 6 + X 5 + X 3 + 1 este un polinom primitiv peste Z2 ).
7 7
i 8
ai 2i .
X X
Elementul a = ai X ∈ GF (2 ) se identifică cu octetul
i=0 i=0
Elementele matricii 4 × 4 au fost scrise ca valori hexazecimale ale octeţilor, folosind
această corespondenţă.

Diversificarea cheii
Sistemul Twofish este definit pentru chei de lungime N unde standardul este N = 128, 192
sau 256. Se pot folosi ı̂nsă chei de orice lungime mai mică de 256; dacă se dă o astfel de
cheie, ea este extinsă prin completare cu 0 la cea mai apropiată lungime standard.
Din cheia M a utilizatorului, prin diversificare se obţin 40 cuvinte K0 , K1 , . . . , K39 şi
patru S-cutii folosite la funcţia g.
Fie k ←− N/64. Cheia M constă din 8k octeţi m0 , m1 , . . . , m8k−1 . Se calculează
vectorii Me , Mo , S astfel:
3
m4i+j · 28j ,
X
1. Mi ←− (0 ≤ j ≤ 2k − 1)
j=0
2. Me ←− (M0 , M2 , . . . , M2k−2 ), Mo = (M1 , M3 , . . . , M2k−1 );
3
si,j · 28j ,
X
3. S = (Sk−1 , Sk−2 , . . . , S0 ) unde Si ←− (0 ≤ i ≤ k − 1)
j=0

Octeţii si,j se obţin printr-o codificare cu un cod Reed-Solomon, pe baza formulei


5.2. ALTE SISTEME DE CRIPTARE ULTERIOARE DES 85
 
m8i

 m8i+1 

  
si,0 01 A4 55 87 5A 58 DB 9E m8i+2
  
 
 
 si,1   A4 56 82 F 3 1E C6 68 E5   m8i+3 
= ·
     
si,2 02 A1 F C C1 47 AE 3D 19 m8i+4
   
     
 
si,3 A4 55 87 5A 58 DB 9E 03 
 m8i+5 

m8i+6
 
 
m8i+7
Pentru generarea S − boxurilor şi a cuvintelor cheii expandate se foloseşte funcţia h,
definită astfel:
Argumente: X (cuvânt) şi L = (L0 , L1 , . . . , Lk−1 ) – o listă de k cuvinte.
Rezultatul: Z (cuvânt).
1. li,j ←− bLi /28j c mod 28 , (0 ≤ i ≤ k − 1)
xj ←− bX/28j c mod 28 , (0 ≤ j ≤ 3) (cuvintele sunt sparte ı̂n octeţi)
2. yk,j ←− xj , (0 ≤ j ≤ 3)
3. if k = 4 then
y3,0 ←− q1 [y4,0 ] ⊕ l3,0 , y3,1 ←− q1 [y4,1 ] ⊕ l3,1 ,
y3,2 ←− q1 [y4,2 ] ⊕ l3,2 , y3,3 ←− q1 [y4,3 ] ⊕ l3,3
4. if k ≥ 3 then
y2,0 ←− q1 [y3,0 ] ⊕ l2,0 , y2,1 ←− q1 [y3,1 ] ⊕ l2,1 ,
y2,2 ←− q1 [y3,2 ] ⊕ l2,2 , y2,3 ←− q1 [y3,3 ] ⊕ l2,3
y0 ←− q1 [q0 [q0 [y2,0 ] ⊕ l1,0 ] ⊕ l0,0 , y1 ←− q0 [q0 [q1 [y2,1 ] ⊕ l1,1 ] ⊕ l0,1 ,
5.
y2 ←− q1 [q1 [q0 [y2,2 ] ⊕ l1,2 ] ⊕ l0,2 , y3 ←− q0 [q1 [q1 [y2,3 ] ⊕ l1,3 ] ⊕ l0,3
unde q0 şi q1 sunt permutări pe 8 biţi, definite detaliat ı̂n [?].
6. Z se obţine aplicând paşii 3 şi 4 din definiţia funcţiei g.

În acest moment putem defini:

• S − boxurile din funcţia g sub forma

g(X) = h(X, S)

Pentru i = 0, 1, 2, 3, S − boxul si (dependent de cheie) se formează prin aplicarea


lui h de la xi la yi , ı̂n care lista L este vectorul S derivat din cheie.

• Cuvintele cheii expandate:


Fie ρ ←− 224 +216 +28 +20 , Ai ←− h(2i·ρ, Me ), Bi ←− (h((2i+1)·ρ, Mo ) <<< 8
Atunci

K2i ←− (A + i + Bi ) mod 232 , K2i+1 ←− ((Ai + 2Bi ) mod 232 ) <<< 9


86 CAPITOLUL 5. SISTEME SIMETRICE DE CRIPTARE MODERNE

5.3 Sistemul de criptare AES


Din 2000, sistemul de criptare Rijndael creat de olandezii Joan Daemen şi Vincent Rijman
devine oficial sistemul AES.7 Similar sistemulelor anterioare (inclusiv DES), şi acest
sistem criptează blocuri de text clar de lungime fixă, folosind subchei ale unei chei generate
aleator. Lungimile folosite sunt de 128, 192 sau 256 biţi.

5.3.1 Descrierea sistemului AES


Definiţia 5.2. Un rezultat intermediar al sistemului de criptare se numeşte ”stare”.

Vom reprezenta starea unui bloc sub forma unui tablou cu 4 linii şi Nb coloane, ale
cărui elemente sunt octeţi; deci valoarea lui Nb se determină uşor: Nb = N/32, unde N
este lungimea blocului text care se criptează.
Similar, o cheie de criptare se va reprezenta printr-un tablou 4 × Nk , unde Nk = K/32
(K fiind lungimea cheii).

Exemplul 5.2. O stare cu Nb = 6 şi o cheie cu Nk = 4 au forma următoare:

a0,0 a0,1 a0,2 a0,3 a0,4 a0,5 k0,0 k0,1 k0,2 k0,3
a1,0 a1,1 a1,2 a1,3 a1,4 a1,5 k1,0 k1,1 k1,2 k1,3
a2,0 a2,1 a2,2 a2,3 a2,4 a2,5 k2,0 k2,1 k2,2 k2,3
a3,0 a3,1 a3,2 a3,3 a3,4 a3,5 k3,0 k3,1 k3,2 k3,3

Uneori, aceste blocuri se reprezintă grupate sub forma unui vector ı̂n care fiecare
element este coloana unei stări (deci, având o lungime de 4 octeţi). În funcţie de mărimea
N a blocului de criptare (respectiv K a cheii), un astfel de vector are 4, 6 sau 8 cuvinte.
Octeţii unui cuvânt se notează cu a, b, c şi respectiv d; astfel, octetul 0 este a, octetul 1
este b ş.a.m.d.
Intrarea şi ieşirea din sistemul AES sunt definite sub forma unor vectori având drept
componente octeţi, numerotaţi de la 0 la 4Nb − 1. Un vector de intrare/ieşire are deci
16, 24 sau respectiv 32 componente, numerotate 0 . . . 15, 0 . . . 23 sau 0 . . . 31.
Similar, cheia de criptare este definită ca un vector de 16, 24 sau 32 octeţi, numerotaţi
de la 0 la 4Nk − 1 (unde Nk = 128, 192 şi respectiv 256).
Octeţii care formează intrarea ı̂n sistem (textul clar, dacă se foloseşte modul de criptare
ECB) completează pe coloane un tablou ca ı̂n Exemplul ??, numit starea iniţială. Similar
se procedează cu cheia de criptare.
Procedeul este identic la sfârşit, când se obţine blocul criptat prin liniarizarea pe
coloane a stării finale rezultate după criptare.
7
Rijndael a câştigat obţinând 86 voturi, contra Serpent cu 59, Twofish cu 31, RC6 cu 23 şi Mars cu
13 voturi. Principalul atu: deşi Serpent este considerat mai sigur, Rijndael are mai puţine transformări
şi este mai rapid.
5.3. SISTEMUL DE CRIPTARE AES 87

Relaţiile dintre indexul n al unui element (octet) din reprezentarea liniară şi coordo-
natele (i, j) ale aceluiaşi octet din reprezentarea matricială sunt
i = n (mod 4); j = bn/4c; n = i + 4 ∗ j.
În plus, i este indicele octetului ı̂n cadrul unui cuvânt care conţine acel octet, iar j
este indicele cuvântului ı̂n cadrul blocului care ı̂l conţine.
Criptarea se realizează ı̂n Nr runde, unde Nr depinde de Nb şi Nk . Valorile lui Nr sunt
date ı̂n tabelul:
Nr Nb = 4 Nb = 6 Nb = 8
Nk = 4 10 12 14
Nk = 6 12 12 14
Nk = 8 14 14 14
Fiecare rundă are la intrare o stare şi foloseşte o cheie de rundă. Cu excepţia rundei finale,
o rundă este formată din patru transformări, notate pe scurt:

• ByteSub(Stare);

• ShiftRow(Stare);

• MixColumn(Stare);

• AddRoundKey(Stare, Cheie).

Ultima rundă conţine numai trei transformări, fiind eliminată MixColumn(Stare). Să
vedem cum sunt definite aceste transformări:
• ByteSub(Stare): Este o substituţie neliniară care operează pe octeţi. Tabela de
substituţie (S - box, dacă folosim termenul consacrat din DES) este o matrice
inversabilă formată din compunerea a două transformări:
1. Fiecare octet nenul α este ı̂nlocuit cu inversul său α−1 ∈ GF (28 ); octetul 00
este lăsat nemodificat.
2. Rezultatul este modificat printr-o transformare afină peste Z2 :
      
y0 1 0 0 0 1 1 1 1 x0 1

 y1 


 1 1 0 0 0 1 1 1 
 x1  
  1 

      

 y2 


 1 1 1 0 0 0 1 1 
 x2  
  0 

 y3   1 1 1 1 0 0 0 1  x3   0 
 
=  
+
  
y4 1 1 1 1 1 0 0 0 x4 0
    
      
      

 y5 


 0 1 1 1 1 1 0 0 
 x5  
  1 

y6 0 0 1 1 1 1 1 0 x6 1
      
      
y7 0 0 0 1 1 1 1 1 x7 0
88 CAPITOLUL 5. SISTEME SIMETRICE DE CRIPTARE MODERNE

Transformarea ByteSub se aplică tuturor octeţilor stării de intrare ı̂n rundă, rezul-
tatul fiind o altă stare de ieşire din rundă.
Inversa transformării se obţine aplicând fiecărui octet transformarea afină inversă,
după care se ia inversul multiplicativ din GF (28 ) (dacă octetul nu este nul).

• ShiftRow(Stare): La acest pas, liniile stării sunt permutate ciclic spre stânga. Numă-
rul de octeţi cu care se face ciclarea sunt: 0 pentru linia 0, Ci pentru linia i (1 ≤
i ≤ 3). Valorile Ci depind de lungimea Nb a blocului şi sunt date de tabelul

Nb C1 C2 C3
4 1 2 3
6 1 2 3
8 1 3 4

Exemplul 5.3. Aplicând transformarea ShiftRow stării din Exemplul ?? (unde


Nb = 6), se obţine starea

a0,0 a0,1 a0,2 a0,3 a0,4 a0,5


a1,1 a1,2 a1,3 a1,4 a1,5 a1,0
a2,2 a2,3 a2,4 a2,5 a2,0 a2,1
a3,3 a3,4 a3,5 a3,0 a3,1 a3,2

Inversa transformării ShiftRow constă ı̂n permutarea ciclică spre stânga cu Nb − Ci


octeţi pentru linia i (1 ≤ i ≤ 3); ı̂n acest fel, fiecare octet aflat pe poziţia j ı̂n linia
i se deplasează pe poziţia j + Nb − Ci (mod Nb ).

• MixColumn(Stare): În această transformare, coloanele stării sunt considerate sub


forma unor polinoame de gradul 3 cu coeficienţi ı̂n GF (28 ).
Fiecare astfel de polinom este ı̂nmulţit cu

c(X) = 0 030 X 3 + 0 010 X 2 + 0 010 X + 0 020

ı̂n algebra polinoamelor modulo X 4 + 1; polinomul c(X) este prim cu X 4 + 1, deci


va fi inversabil.
Această transformare poate fi reprezentată şi sub forma unei ı̂nmulţiri matriciale,
care transformă starea coloană cu coloană; anume:

b0 02 03 01 01 a0
    
 b1   01 02 03 01  a1 
=
    
b2 01 01 02 03 a2
   
    
b3 03 01 01 02 a3
5.3. SISTEMUL DE CRIPTARE AES 89

Operaţia inversă este similară: fiecare coloană este transformată prin ı̂nmulţire cu
polinomul invers lui c(X) modulo X 4 + 1. Acesta este

d(X) = 0 0B 0 X 3 + 0 0D0 X 2 + 0 090 X + 0 0E 0

• AddRoundKey(Stare, Cheie): Această transformare constă ı̂n aplicarea unui XOR


ı̂ntre starea curentă şi cheia de rundă. Cheia de rundă are lungimea Nb şi este
dedusă din cheia de criptare pe baza unui procedeu pe care ı̂l descriem mai jos.
Formal, transformarea are loc conform figurii (pentru Nb = 6):

a0,0 a0,1 a0,2 a0,3 a0,4 a0,5 k0,0 k0,1 k0,2 k0,3 k0,4 k0,5
a1,0 a1,1 a1,2 a1,3 a1,4 a1,5 k k1,1 k1,2 k1,3 k1,4 k1,5
⊕ 1,0 =
a2,0 a2,1 a2,2 a2,3 a2,4 a2,5 k2,0 k2,1 k2,2 k2,3 k2,4 k2,5
a3,0 a3,1 a3,2 a3,3 a3,4 a3,5 k3,0 k3,1 k3,2 k3,3 k3,4 k3,5
b0,0 b0,1 b0,2 b0,3 b0,4 b0,5
b1,0 b1,1 b1,2 b1,3 b1,4 b1,5
b2,0 b2,1 b2,2 b2,3 b2,4 b2,5
b3,0 b3,1 b3,2 b3,3 b3,4 b3,5

unde bi,j = ai,j ⊕ ki,j (0 ≤ i ≤ 3, 0 ≤ j ≤ 5).


Transformarea AddRoundKey şi inversa ei sunt identice.

Algoritmul de criptare AES este format din:

1. O transformare AddRoundKey iniţială;

2. Nr − 1 runde;

3. O rundă finală.

Înainte de aplicarea acestui algoritm (sau – eventual – ı̂n paralel) se foloseşte un


algoritm de obţinere a cheilor de rundă.

5.3.2 Prelucrarea cheii de criptare


Toate cheile de rundă se obţin din cheia de criptare printr-o prelucrare separată, formată
din două componente: extinderea cheii şi alegerea cheii de rundă.
Principiile de bază ale prelucrării sunt:

• Numărul total al biţilor din toate cheile de rundă este Nb (Nr + 1).
90 CAPITOLUL 5. SISTEME SIMETRICE DE CRIPTARE MODERNE

• Cheia de criptare este extinsă ı̂ntr-o Cheie Expandată.

• Cheia de rundă se obţine luând primii Nb octeţi din Cheia Expandată, care nu au
fost folosiţi pentru alte chei.

Extinderea cheii
Cheia expandată (notată W [Nb (Nr + 1)]) este un tablou liniar ale cărui elemente sunt
cuvinte. Primele Nk cuvinte sunt cheia de criptare; celelalte cuvinte se obţin recursiv din
cuvintele definite anterior. Funcţia de extindere a cheii depinde de valoarea lui Nk ; există
o versiune pentru Nk ≤ 6 şi o alta pentru Nk > 6.
Pentru Nk ≤ 6 avem:
KeyExpansion(byte Key[4 ∗ Nk ] word W [Nb ∗ (Nr + 1)])
{
f or (i = 0; i < Nk ; i + +)
W [i] = (Key[4 ∗ i], Key[4 ∗ i + 1], Key[4 ∗ i + 2], Key[4 ∗ i + 3]);
f or (i = Nk ; i < Nb ∗ (Nr + 1); i + +)
{
temp = W [i − 1];
if (i % Nk == 0)
temp = SubByte(RotByte(temp)) ˆ Rcon(i/Nk );
W [i] = W [i − Nk ] ˆ temp;
}
}
În acest algoritm (scris ı̂n C + +), SubByte(W ) este o funcţie care ı̂ntoarce un cuvânt
ı̂n care fiecare octet este rezultatul aplicării S − boxului definit la transformarea ByteSub
fiecărui octet din cuvântul de intrare. RotByte(w) ı̂ntoarce un cuvânt ı̂n care octeţii sunt
rotiţi ciclic la stânga (pentru intrarea (a, b, c, d) ieşirea este (b, c, d, a)).
Esenţa algoritmului este următoarea: primele Nk cuvinte sunt completate cu cheia de
criptare. În continuare, fiecare cuvânt W [i] este egal cu W [i − 1] ⊕ W [i − Nk ]. Pentru
cuvintele care sunt pe poziţii multipli de Nk , ı̂nainte de această operaţie, lui W [i − 1] i se
aplică o permutare ciclică spre stânga a octeţilor, urmată de aplicarea unui S − box. În
plus, rezultatul este XOR - at ı̂ncă odată, cu o constantă de rundă.
Pentru Nk > 6, algoritmul este:
KeyExpansion(byte Key[4 ∗ Nk ] word W [Nb ∗ (Nr + 1)])
{
f or (i = 0; i < Nk ; i + +)
W [i] = (Key[4 ∗ i], Key[4 ∗ i + 1], Key[4 ∗ i + 2], Key[4 ∗ i + 3]);
f or (i = Nk ; i < Nb ∗ (Nr + 1); i + +)
{
5.4. EXERCIŢII 91

temp = W [i − 1];
if (i % Nk == 0)
temp = SubByte(RotByte(temp)) ˆ Rcon(i/Nk );
else if (i % Nk == 4)
temp = SubByte(temp)
W [i] = W [i − Nk ] ˆ temp;
}
}
La această schemă apare condiţia suplimentară: dacă i − 4 este multiplu de Nk , pro-
cedura SubByte este aplicată lui W [i − 1] ı̂nainte de XOR.
Constantele de rundă sunt independente de Nk şi sunt definite prin
Rcon[i] = (RC[i], 0 000 , 0 000 , 0 000 )
unde RC[i] = αi−1 unde α este un element generator al lui GF (28 ).

Selectarea cheii de rundă


Cheia rundei i este formată din secvenţa de cuvinte
W [Nb ∗ i] . . . W [Nb ∗ (i + 1) − 1].
Ca o remarcă, această cheie poate fi calculată treptat, pe măsură ce se ajunge la runda
respectivă.
Pentru alte detalii privind securitatea sistemului, a se vedea [?], [?]

5.4 Exerciţii
5.1. Să se arate că procesul de decriptare folosind DES se realizează folosind tot sistemul
de criptare, dar inversând ordinea de aplicare a subcheilor.
5.2. Să notăm DES(α, K) textul α criptat cu cheia K. Dacă β = DES(α, K) şi β 0 =
DES(c(α), c(K)), unde c(i1 i2 . . . in ) = in in−1 . . . i1 , să se arate că β 0 = c(β).
5.3. Să presupunem că cheia (de 56 biţi) a unui algoritm DES este
11011001 01111101 01100101 00010011 01010110 01100110 00110100
Determinaţi cheia K1 pentru prima rundă.
5.4. Presupunem că R1 = 10011100011010111101001010100011 Găsiţi primii 4 biţi din
R2 , dacă subcheia pentru runda a doua este
K2 = 011101010111001011100101010001010010001101010110.
5.5. Se poate defini un cod de autentificare al mesajului (M AC) utilizând un mod CF B
sau CBC. Fiind dată o secvenţă de blocuri α1 , α2 , . . . , αm de texte clare, se defineşte valoa-
rea iniţială IV = α1 . Criptarea lui α2 , . . . , αn cu cheia K ı̂n modul CF B dă β1 , . . . , βn−1
(sunt numai n − 1 blocuri de text criptat). Se defineşte M AC ca fiind eK (βn−1 ). Să se
arate că el coincide cu rezultatul M AC prezentat anterior, folosind modul CBC.
92 CAPITOLUL 5. SISTEME SIMETRICE DE CRIPTARE MODERNE

5.6. Dacă o secvenţă de texte clare α1 , α2 , . . . , αn produce prin criptare β1 , β2 , . . . , βn , iar


blocul βi este transmis greşit (apar erori de canal), să se arate că numărul de blocuri care
vor fi decriptate greşit este 1 ı̂n modul ECB sau OF B şi 2 ı̂n modul CBC sau CF B.

5.7. Alice transmite mesajul format din 6 blocuri de cate 64 biţi: c1 , c2 , c3 , c4 , c5 , c6 ,


criptate cu DES implementat ı̂n modul CF B. Oscar schimbă ordinea blocurilor ı̂n
c1 , c2 , c4 , c3 , c5 , c6 . Ce mesaje va putea decripta corect Bob ?

5.8. Construiţi coduri de autentificare a mesajelor (M AC) capabile să autentifice mesajele
primite printr-un sistem fluid de criptare. (Indicaţie: a se vedea [?], paragraf 9.5.4)

5.9. În urma aplicării transformării ByteSub din algoritmul AES s-a obţinut octetul
10010111. Ce octet a intrat ı̂n transformarea ByteSub ?

5.10. După transformarea Shif tRow s-a obţinut matricea

00000001 00000000 00000001 00000010


 
 00000000 00000100 00000010 00000001 
C= 
00000010 00000000 00000000 00000001
 
 
00000100 00000001 00000001 00000001

Această matrice este introdusă ı̂n transformarea M ixColumn. Ce matrice se obţine ?

5.11. Primele patru coloane ale matricii cheii expandate W sunt

00110001 01011010 01101001 00000010


 

 01100010 00110100 01110010 00000001 

10110010 00110010 11100011 00000001
 
 
01000100 00110001 10110011 00000000

Calculaţi a cincea coloană din W .

5.12. Fie b un octet şi b̂ = b + 11111111 (complementul lui b). Pentru o cheie fixată, dacă
AES criptează b ı̂n g, va cripta el b̂ ı̂n ĝ ?
Capitolul 6

Atacuri asupra sistemelor de criptare


bloc

6.1 Consideraţii generale


În acest capitol vom trece ı̂n revistă principalele tipuri de atac dezvoltate asupra sistemelor
de criptare bloc. Majoritatea lor au fost create iniţial pentru criptanaliza sistemului DES,
devenind ulterior standarde de securitate pentru toate sistemele de criptare. Tipuri de
criptanaliză mai vechi – cum sunt criptanaliza diferenţială sau liniară – au generat ulterior
modalităţi noi de atac (mixt, boomerang, rectangle etc) pentru anumite tipuri de cripto-
sisteme, adesea semnificativ mai puternice.

6.2 Compromisul spaţiu - timp


Este un tip de atac bazat pe un compromis ı̂ntre complexitatea spaţiu şi complexitatea
timp a atacurilor prin forţă brută, care poate fi utilizat destul de eficient ı̂n unele atacuri
cu text clar ales.
Aici Oscar va dispune de o pereche (α, β) cu β = eK (α), şi caută să determine cheia
K.
Nu vom folosi o structură particulară de implementare a unui sistem, dar ne vom referi
ı̂n mod implicit la sistemul DES; mai exact, ştim că textele clare şi cele criptate sunt de
64 biţi, iar cheia are 56 biţi.
O căutare exhaustivă constă ı̂n a ı̂ncerca toate cele 256 chei posibile. Această operaţie
nu necesită memorie, dar sunt necesare ı̂n medie 255 chei pentru a o găsi pe cea bună.
Sau, fiind dat un text clar α, Oscar poate forma anterior (ı̂n faza de precalcul) o tabelă
cu 256 perechi (βk , K), ordonată după βK = eK (α). Atunci când Oscar obţine mesajul β
(criptat din textul clar α), el va căuta ı̂n tabelă şi va afla imediat cheia K. Astfel, aflarea
cheii va necesita un timp de calcul neglijabil (complexitate logaritmică), dar un spaţiu de

93
94 CAPITOLUL 6. ATACURI ASUPRA SISTEMELOR DE CRIPTARE BLOC

memorie gigantic şi un timp de precalcul important. Această variantă nu aduce nici un
avantaj din punct de vedere al timpului total, pentru aflarea unei singure chei. Avantajul
apare atunci când este necesară căutarea mai multor chei, deoarece tabela precalculată a
fost construită o singură dată.
Compromisul spaţiu - timp permite obţinerea unui timp de calcul (precalculul nu se
include) inferior celui unei căutări exhaustive, cu un spaţiu de memorie inferior celui nece-
sar reţinerii tuturor cheilor. Algoritmul foloseşte o funcţie de reducere R, care micşorează
o secvenţă de 64 biţi la una de 56 biţi (de exemplu, R poate şterge pur şi simplu 8 biţi
din secvenţa iniţială).
Fie α un text clar de 64 biţi; se defineşte g(K0 ) = R(eK0 (α)) pentru orice secvenţă K0
de 56 biţi (rezultatul g(K0 ) este de asemenea de lungime 56).
Algoritmul mai foloseşte doi parametri ı̂ntregi pozitivi m, t. În faza de precalcul, Oscar
defineşte m secvenţe arbitrare de 56 biţi fiecare, notate X(i, 0), 1 ≤ i ≤ m. Apoi, folosind
relaţia de recurenţă
X(i, j) = g(X(i, j − 1)), 1 ≤ i ≤ m, 1 ≤ j ≤ t,
Oscar determină valorile X(i, j), 1 ≤ j ≤ t, formând cu ele o matrice Xm×t .
Din aceste valori, Oscar păstrează ı̂ntr-o tabelă T numai 2m perechi
(X(i, 0), X(i, t)), 1≤i≤m
(deci sunt memorate numai prima şi ultima coloană a matricii X).
În momentul atacului, Oscar obţine textul criptat β al textului clar α ales de el
(reamintim, este vorba de un atac cu text clar ales). El va căuta cheia K ı̂n cele t coloane
ale matricii X, consultând tabela T .
Să presupunem K = X(i, t − j) pentru un j (1 ≤ j ≤ t) dat (K este ı̂n una din cele t
coloane ale lui X). Vom avea g j (K) = X(i, t), şi
g j (K) = g j−1 (g(K)) = g j−1 (R(eK (α))) = g j−1 (R(β)).
Să calculăm şirul βj (1 ≤ j ≤ t) definit prin relaţia de recurenţă
(
R(β) dacă j = 1
βj =
g(βj−1 ) dacă 2 ≤ j ≤ t
Dacă K = X(i, t − j), vom avea βj = X(i, t).
De remarcat că reciproca nu este adevărată: nu este suficient ca βj = X(i, t) pentru a
avea K = X(i, t−j), deoarece funcţia de reducere R nu este injectivă (R reduce un spaţiu
de 264 valori ı̂n unul de 256 valori, deci fiecare valoare provine ı̂n general din 28 = 256
elemente). Trebuie verificată egalitatea β = eX(i,t−j) (α), pentru a decide dacă X(i, t − j)
este ı̂ntr-adevăr cheia.
Valoarea X(i, t − j) nu este disponibilă ı̂n memorie, dar ea se poate recalcula ı̂n t − j
paşi, plecând de la X(i, 0).
Oscar va folosi deci următorul algoritm:
6.3. ATACUL MEET-IN-THE-MIDDLE 95

1. β1 ← R(β)
2. for j ←− 1 to t do
2.1. if ∃ i cu βj = X(i, t) then
2.1.1. calculează X(i, t − j) = g t−j (X(i, 0))
2.1.2. if β = eX(i,t−j) (α) then K ← X(i, t − j), ST OP
2.2. βj+1 ← g(βj )

Analizând probabilitatea de succes a algoritmului, se poate arăta că dacă mt2 ≈ N =


256 , atunci probabilitatea să găsim cheia K ı̂n cele t coloane ale matricii X este de circa
0, 8mt/N . Coeficientul 0, 8 provine din faptul că valorile X(i, t) pot să nu fie distincte. O
sugestie este de a alege m ≈ t ≈ N 1/3 şi de a construi N 1/3 tabele, fiecare cu altă funcţie
de reducere R. Astfel, spaţiul de memorie necesar este de 112 · N 2/3 biţi (trebuie păstraţi
2N 2/3 valori de 56 biţi). Timpul de precalcul este liniar O(N ).
Timpul de calcul al atacului este mai dificil de evaluat. De remarcat că pasul 2.1
poate fi implementat ı̂n cel mai rău caz ı̂ntr-un timp O(log m), utilizând arbori binari de
căutare. Dacă acest pas eşuează (deci nu se găseşte nici o valoare), timpul de calcul este
O(N 2/3 ). Ceilalţi paşi care urmează cresc acest timp doar cu un factor constant.

6.3 Atacul meet-in-the-middle


Este un atac cu text clar ales, dezvoltat ı̂n 1981 de Merkle şi Hellman ca răspuns la ideea
unei duble criptări cu două chei diferite, conform schemei
K1 K2
? ?
m - e x - e - y

Lema 6.1. Pentru un sistem de criptare bloc, o dublă criptare poate fi atacată folosind
O(2n ) operaţii şi O(2n ) spaţiu de memorie, unde n este lungimea cheii.

Demonstraţie: Fie (α, β) o pereche (text clar, text criptat) obţinută pe baza schemei de
mai sus.

1. Pentru fiecare din cele 2n chei posibile se calculează xi = eKi (α);

2. Se stochează (xi , Ki ) sortate (sau indexate) după xi .

3. Pentru fiecare din cele 2n chei posibile:

(a) Se calculează xj = dKj (β);


(b) Se caută in lista creată la pasul anterior o pereche (xi , Ki ) cu xi = xj ;
96 CAPITOLUL 6. ATACURI ASUPRA SISTEMELOR DE CRIPTARE BLOC

4. O pereche de chei posibile este (Ki , Kj );


(deoarece eKi (α) = dKj (β), deci eKj (eKi (α)) = β).
Algoritmul se reia cu alte perechi (α, β), până ce perechea de chei folosite este determinată
ı̂n mod unic.
Exemplul 6.1. Un atac direct asupra unei duble criptări cu DES ar necesita un timp
de ordin 2112 şi un spaţiu neglijabil. Dacă se foloseşte un atac meet-in-the-middle, timpul
va fi 256 iar spaţiul 256 . Strategii complementare de genul compromisului spaţiu - timp pot
duce la variante de genul: 2p spaţiu, 2q timp, unde p + q = 112 ([?]).

6.4 Criptanaliza diferenţială


Unul din cele mai cunoscute atacuri ale DES-ului este criptanaliza diferenţială, introdusă
de Biham şi Shamir ı̂n 1991 ([?],[?],[?]). Cu toate că nu dă o modalitate practică de
spargere a funcţiei DES ı̂n 16 tururi, ea furnizează atacuri eficace pentru variantele de
DES cu un număr redus de runde. De exemplu, un DES cu 8 runde poate fi spart ı̂n
câteva minute cu un P C obişnuit. Ulterior, criptanaliza diferenţială a fost extinsă ca
metodă standard de atac pentru toate sistemele de criptare bloc.

6.4.1 Privire generală


Un atac prin criptanaliză diferenţială exploatează faptul că anumite diferenţe dintre texte
clare să genereze – cu probabilitate semnificativă – diferenţe fixate ı̂ntre mesajele criptate
corespunzătoare.
Astfel, să considerăm un sistem de criptare pe blocuri de n biţi, cu intrarea (textul
clar) α = (a1 , a2 , . . . , an ) şi ieşirea (textul criptat) β = (b1 , b2 , . . . , bn ).
Fie α0 şi α00 două blocuri de intrare, iar β 0 , respectiv β 00 blocurile de ieşire cores-
punzătoare. Diferenţa dintre biţii de intrare este dată de
∆α = α0 ⊕ α00 = (∆a1 , ∆a2 , . . . ∆an )
unde ∆ai = ai 0 ⊕ ai 00 , iar ai 0 şi ai 00 reprezintă al i-lea bit din α0 , respectiv α00 .
Similar,
∆β = β 0 ⊕ β 00 = (∆b1 , ∆b2 , . . . , ∆bn )
este diferenţa dintre mesajele de ieşire (unde ∆bi = bi 0 ⊕ bi 00 ).
Într-un sistem de criptare ideal, probabilitatea ca, fiind dată o diferenţă de intrare
∆α, să apară o anumită diferenţă de ieşire ∆β, este 1/2n (unde n este mărimea blocului
de criptare).
Criptanaliza diferenţială exploatează situaţia când pentru o anumită diferenţă de in-
trare ∆α, o diferenţă de ieşire ∆β apare cu o probabilitate pD semnificativ mai mare decât
1/2n . Perechea (∆α, ∆β) pentru care există o astfel de situaţie se numeşte diferenţială.
6.4. CRIPTANALIZA DIFERENŢIALĂ 97

În esenţă, criptanaliza diferenţială este un atac cu text clar ales: Oscar alege perechi
de intrări (α0 , α00 ), care verifică o anumită diferenţă ∆α, ştiind că pentru această valoare
∆α, există o diferenţială (∆α, ∆β).
Cel mai important pas constă ı̂n construirea unei diferenţiale (∆α, ∆β), folosind biţii
textului clar pentru α, şi intrarea ı̂n ultima rundă a sistemului de criptare pentru β.
Aceasta se poate realiza examinând diverse diferenţiale caracteristice. O diferenţială
caracteristică este o secvenţă (∆α1 , ∆α2 , . . . , ∆αn ) unde (∆αi , ∆αi+1 ) este o diferenţială
a rundei i din sistemul de criptare (deci α1 = α, αn = β).
Pe baza unei diferenţiale caracteristice putem exploata informaţia care intră ı̂n ultima
rundă a sistemului, pentru a afla o parte din biţii cheii.
Deci, o primă problemă constă ı̂n construirea de diferenţiale caracteristice. Pentru
aceasta vom examina şi exploata diverse particularităţi ale S - boxurilor.
Practic, vom considera toate diferenţele de intrare şi ieşire din fiecare S-box, deter-
minând perechile (∆α, ∆β) cu probabilităţi mari. Combinând aceste perechi de la o rundă
la alta, astfel ca diferenţele dintre două ieşiri dintr-o rundă să coincidă cu diferenţele din-
tre două intrări ı̂n runda următoare, vom determina o diferenţială ı̂ntre două texte clare şi
intrările a două texte ı̂n ultima rundă. În final, biţii ultimei sub-chei vor dispare (deoarece
sunt folosiţi ı̂n ambele texte şi – prin diferenţiere cu operaţia XOR – se anulează reciproc).

6.4.2 Analiza componentelor unui sistem de criptare


Să examinăm perechile de diferenţe ale unui S-box.
Vom considera un 4 × 4 S-box, cu intrarea α = (a1 , a2 , a3 , a4 ) şi ieşirea β = (b1 , b2 , b3 , b4 ).

a1 a2 a3 a4

? ? ? ?

4 × 4 S-box

? ? ? ?
b1 b2 b3 b4
Figura 1: Modelul unui 4 × 4 S - box

Toate perechile de diferenţe (∆α, ∆β) ale unui astfel de S - box vor fi examinate;
fixăm o diferenţă ∆α şi calculăm probabilităţile de apariţie pentru toate diferenţele de
ieşiri ∆β, peste mulţimea perechilor de intrare (α0 , α00 ) cu α0 ⊕ α00 = ∆α.
98 CAPITOLUL 6. ATACURI ASUPRA SISTEMELOR DE CRIPTARE BLOC

Deoarece ordinea perechilor nu este relevantă, pentru un 4 × 4 S-box sunt necesare


doar cele 16 valori posibile ale unei intrări α0 ; a doua intrare α00 va fi calculată cu formula
α00 = α0 ⊕ ∆α.
Toată construcţia acestei secţiuni va fi exemplificată folosind prima linie a primului
S-box din DES (am considerat cel mai semnificativ bit din notaţia hexazecimală ca fiind
cel mai din stânga bit al S-boxului):

Intrare 0 1 2 3 4 5 6 7 8 9 A B C D E F
Iesire E 4 D 1 2 F B 8 3 A 6 C 5 9 0 7

Tabela 1. Reprezentarea (in hexazecimal) a unui S - box


Fiecare pereche (intrare, iesire) poate fi considerată ca un 4 × 4 S-box cu intrări şi
ieşiri pe 4 biţi.
Putem calcula diferenţa de ieşire ∆β pentru orice pereche de intrare (α0 , α00 = α0 ⊕∆α).
De exemplu, Tabela 2 prezintă valorile (binare) pentru α, β, şi valorile ∆β pentru
perechile de intrare (α, α ⊕ ∆α), unde ∆α are valorile
1011 (hex B), 1000 (hex 8) şi 0100 (hex 4).

α β ∆α = 1011 ∆α = 1000 ∆α = 0100


0000 1110 0010 1101 1100
0001 0100 0010 1110 1011
0010 1101 0111 0101 0110
0011 0001 0010 1011 1001
0100 0010 0101 0111 1100
0101 1111 1111 0110 1011
0110 1011 0010 1011 0110
0111 1000 1101 1111 1001
1000 0011 0010 1101 0110
1001 1010 0111 1110 0011
1010 0110 0010 0101 0110
1011 1100 0010 1011 1011
1100 0101 1101 0111 0110
1101 1001 0010 0110 0011
1110 0000 1111 1011 0110
1111 0111 0101 1111 1011
Tabela 2. Perechi de diferenţe ı̂ntr-un S - box

De exemplu, pentru α = 0000 şi ∆α = 1011 avem α0 = α ⊕ ∆α = 1011. Ieşirea (ı̂n


binar) pentru intrarea α0 este, conform Tabelei 1, β 0 = 1100 (hex C), deci ∆β = β ⊕ β 0 =
1110 ⊕ 1100 = 0010, valoare care apare pe coloana a treia din tabelă.
6.4. CRIPTANALIZA DIFERENŢIALĂ 99

Analizând Tabela 2, vedem că numărul apariţiilor lui ∆β = 0010 pentru ∆α = 1011
(coloana 3) este 8 din 16 valori posibile (deci probabilitate 8/16). Similar, numărul de
apariţii ∆β = 1011 pentru ∆α = 1000 este 4 (din 16), iar numărul de apariţii ale lui
∆β = 1010 pentru ∆α = 0100 este 0 (din 16).
Putem aduna toate datele unui S - box ı̂ntr-o tabelă de distribuţie a diferenţelor, ı̂n
care liniile reprezintă valorile ∆α, iar coloanele – valorile ∆β (toate ı̂n hexazecimal).
Revenind la exemplul nostru, tabela de distribuţie a diferenţelor pentru S-boxul din
Tabela 1, este dată de Tabela 3:
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 2 0 0 0 2 0 2 4 0 4 2 0 0
2 0 0 0 2 0 6 2 2 0 2 0 0 0 0 2 0
3 0 0 2 0 2 0 0 0 0 4 2 0 2 0 0 4
4 0 0 0 2 0 0 6 0 0 2 0 4 2 0 0 0
5 0 4 0 0 0 2 2 0 0 0 4 0 2 0 0 2
6 0 0 0 4 0 4 0 0 0 0 0 0 2 2 2 2
7 0 0 2 2 2 0 2 0 0 2 2 0 0 0 0 4
8 0 0 0 0 0 0 2 2 0 0 0 4 0 4 2 2
9 0 2 0 0 2 0 0 4 2 0 2 2 2 0 0 0
A 0 2 2 0 0 0 0 0 6 0 0 2 0 0 4 0
B 0 0 8 0 0 2 0 2 0 0 0 0 0 2 0 2
C 0 2 0 0 2 2 2 0 0 0 0 2 0 6 0 0
D 0 4 0 0 0 0 0 4 2 0 2 0 2 0 2 0
E 0 0 2 4 2 0 0 0 6 0 0 0 0 0 2 0
F 0 2 0 0 6 0 0 0 0 4 0 2 0 0 2 0
Tabela 3. Tabela de distribuţie a diferenţelor

Fiecare element al tabelei reprezintă numărul de apariţii ale diferenţei de ieşire ∆β,
fiind dată diferenţa de intrare ∆α.
Observaţia 6.1.
1. Înafară de situaţia specială (∆α = 0, ∆β = 0), cea mai mare valoare din tabelă este
8; ea corespunde lui ∆α = B şi ∆β = 2. Deci, pentru o pereche de intrări arbitrare
cu ∆α = B, probabilitatea ca ∆β = 2 este 8/16 = 1/2.
2. Cea mai mică valoare din tabelă este 0; ı̂n acest caz, probabilitatea de apariţie a
valorii ∆β pentru ∆α corespunzător, este 0.
3. Suma elementelor pe fiecare linie este 2n = 16; similar, suma pe fiecare coloană este
tot 2n = 16.
100 CAPITOLUL 6. ATACURI ASUPRA SISTEMELOR DE CRIPTARE BLOC

4. Toate valorile din tabel sunt numere pozitive pare; motivul este acela că o pereche
de valori de intrare/ieşire (α0 , α00 ) are aceeaşi diferenţă ∆α ca şi perechea (α00 , α0 ).

5. Pentru un S - box injectiv, o diferenţă de intrare ∆α = 0 va duce la o diferenţă de


ieşire ∆β = 0.
Ca o consecinţă, prima linie şi prima coloană vor fi 0, cu excepţia intersecţiei lor,
unde va fi valoarea 2n = 16.

Dacă s-ar putea construi un S - box ideal, care să nu ofere nici o informaţie de
tip diferenţial ı̂ntre intrări şi ieşiri, atunci toate valorile din tabela sa de distribuţie a
diferenţelor vor fi egale cu 1, iar probabilitatea de apariţie a unei diferenţe ∆β atunci
când diferenţa de intrare este ∆α, va fi 1/2n = 1/16.
Totuşi pe baza proprietăţilor arătate ı̂n Observaţia ??, un astfel de S - box ideal nu
este posibil.

6.4.3 Reţea substituţie - permutare


O reţea substituţie - permutare (Substitution Permutation Network – SP N ) este un sistem
de criptare bloc, format din mai multe runde, fiecare rundă conţinând o substituţie şi o
permutare. Cheia este expandată ı̂n mod similar sistemelor uzuale şi fiecare cheie de
rundă va fi XOR-ată cu mesajul la ı̂nceputul fiecărei runde.
Un SP N păstrează proprietăţile generale folosite ı̂n construirea sistemelor de criptare
uzuale (inclusiv DES şi AES).
În prezentarea criptanalizei diferenţiale (şi apoi a celei liniare) vom utiliza un SP N
care criptează un text clar de 16 biţi ı̂ntr-un mesaj de 16 biţi. Cheia are de asemenea 16
biţi şi este expandată ı̂n 5 sub-chei de rundă, de câte 16 biţi fiecare. La fiecare rundă, cei
16 biţi de intrare sunt XOR - aţi cu cheia de rundă, apoi sunt separaţi ı̂n patru blocuri
de câte 4 biţi, iar fiecare bloc trece prin câte un S - box. La sfârşitul rundei, cei 16 biţi
sunt permutaţi.
În cazul nostru, vom folosi acelaşi S - box pentru toate blocurile şi toate rundele;
anume S - boxul definit de Tabela 1 (prima linie din S1 - boxul definit ı̂n DES).
Permutarea utilizată este aceiaşi pentru toate rundele:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16

Tabela 4: O permutare utilizată ı̂n construirea unui SP N


6.4. CRIPTANALIZA DIFERENŢIALĂ 101

Figura 2 prezintă schematic structura unui SP N :

... text clar


m1 ... m16

XOR cu sub-cheia K1

S11 S12 S13 S14 runda 1

XOR cu sub-cheia K2

S21 S22 S23 S24 runda 2

XOR cu sub-cheia K3

S31 S32 S33 S34


runda 3






XOR cu sub-cheia K4

runda 4
S41 S42 S43 S44

XOR cu sub-cheia K5

y1 ... text criptat ... y16

Figura 2: Structura generală a unui SPN.


102 CAPITOLUL 6. ATACURI ASUPRA SISTEMELOR DE CRIPTARE BLOC

6.4.4 Diferenţiala caracteristică ı̂ntr-un SP N


În această secţiune vom construi o modalitate de atac prin criptanaliză diferenţială asupra
unui SP N , având ca scop aflarea unui set de biţi din sub-cheia folosită ı̂n ultima rundă.
Să considerăm SP N -ul din Figura 2.
Vom nota cu Ui intrarea ı̂n S - boxurile din runda i, iar cu Vi – ieşirea din S - boxuri
ı̂n runda i.
Să ı̂ncepem cu două texte clare, a căror diferenţă este

∆U1 = [0000 1011 0000 0000]

Deci singurul S - box activ ı̂n prima rundă este S12 (celelalte S - boxuri sunt inactive:
intrarea este 0, deci şi ieşirea va fi tot 0). Folosind Tabela 2, obţinem diferenţa de ieşire

∆V1 = [0000 0010 0000 0000]

Altfel spus,
S12 : ∆α = B16 = 1011 =⇒ ∆β = 216 = 0010 cu probabilitate 8/16 = 1/2.
Urmărind acum permutarea de la sfârşitul primei runde, găsim mesajul de intrare ı̂n
S - boxurile celei de-a doua runde:

∆U2 = [0000 0000 0100 0000]

cu probabilitate 1/2.
În a doua rundă, singurul S - box activ este S23 . Vom avea perechea de diferenţe
S23 : ∆α = 416 = 0100 =⇒ ∆β = 616 = 0110 cu probabilitate 6/16 = 3/8.
Am obţinut deci ieşirea

∆V2 = [0000 0000 0110 0000]

iar permutarea de la sfârşitul rundei a doua va da

∆U3 = [0000 0010 0010 0000]

cu probabilitate 3/8.
În a treia rundă sunt active două S - boxuri: S32 şi S33 :
S32 : ∆α = 216 = 0010 =⇒ ∆β = 516 = 0101 cu probabilitate 6/16 = 3/8,
S33 : ∆α = 216 = 0010 =⇒ ∆β = 516 = 0101 cu probabilitate 6/16 = 3/8.
Deci, ieşirea din S - boxurile din runda a treia este

∆V3 = [0000 0101 0101 0000]

iar intrarea ı̂n runda a patra (după efectuarea permutării) este

∆U4 = [0000 0110 0000 0110]


6.4. CRIPTANALIZA DIFERENŢIALĂ 103

Cu alte cuvinte,

∆U1 = [0000 1011 0000 0000] =⇒ ∆V3 = [0000 0101 0101 0000]

şi
∆V3 = [0000 0101 0101 0000] =⇒ ∆U4 = [0000 0110 0000 0110]
Rezultă

∆U1 = [0000 1011 0000 0000] =⇒ ∆U4 = [0000 0110 0000 0110]

Tabela 3 de distribuţie a diferenţelor poate conduce la ideea unor probabilităţi condi-


ţionale independente (noţiune fără utilizare ı̂n matematică, dar extrem de intuitivă ı̂n
această situaţie):
P r[∆β|∆α] = (∆α, ∆β)
Pe baza acestei relaţii, diferenţialele pot fi compuse. Astfel, pentru cazul studiat mai sus,
vom avea
1 3 3 3 27
(0000 1011 0000 0000, 0000 0110 0000 0110) = · · · =
2 8 8 8 1024
Altfel spus, diferenţiala caracteristică (0000 1011 0000 0000, 0000 0110 0000 0110) apare
cu probabilitatea 27/1024.
Să vedem cum pot fi extraşi acum biţii din cheie, pe baza acestei informaţii.

6.4.5 Extragerea biţilor din cheie


După ce am obţinut diferenţiala caracteristică a rundelor, putem construi un atac din
care să rezulte o parte din biţii care formează cheia de criptare.
Într-un sistem de criptare bloc cu N runde, vom ataca runda N − 1 . Astfel, ı̂n cazul
reţelei SP N , vom putea extrage biţi din sub-cheia K5 atacând a patra rundă.
Pentru o decriptare a textului obţinut după ultima rundă, trebuie să mergem ı̂n sens
invers: anume, realizăm un XOR ı̂ntre textul criptat şi sub-cheia ultimei runde – care este
influenţată de diferenţialele nenule – iar apoi trecem datele ı̂n sens invers prin S-boxuri.
Operaţia XOR o realizăm folosind toate valorile posibile ale sub-cheii.
Rezumând, vom face un XOR ı̂ntre textul criptat cu toate sub-cheile posibile, după
care vom aplica inversele S-boxelor.
Această căutare a cheii poate fi mult redusă dacă luăm numai perechile ”bune”
(perechile pentru care se obţin diferenţiale caracteristice).
De exemplu, o pereche ”bună” a fost obţinută ı̂n secţiunea precedentă: ea are U41 =
U43 = 0000 iar U42 şi U44 conţin diferenţiale nenule (Uij reprezintă intrarea ı̂n S - boxul
j din runda i).
104 CAPITOLUL 6. ATACURI ASUPRA SISTEMELOR DE CRIPTARE BLOC

Decriptarea este obţinută pentru toate perechile de mesaje criptate care corespund
perechilor de texte clare având diferenţa de intrare fixată ∆α.
Figura 3 trasează modalitatea de decriptare pentru diferenţiala caracteristică detaliată
ı̂n secţiunea precedentă.

∆α = [0000 1011 0000 0000]

S11 S12 S13 S14

S21 S22 S23 S24





S31 S32 S33 S34


XXX
XXX aa
  XXX aa
 XXX a


 XXX aaa
X

? ? ? ?
∆U4,5 ,...,∆U4,8 ∆U4,13 ,...∆U4,16
S41 S42 S43 S44

K5,5 , . . . , K5,8 K5,13 , . . . , K5,16

Figura 3: Diferenţiala caracteristică, cu ∆α ca diferenţă de intrare


6.4. CRIPTANALIZA DIFERENŢIALĂ 105

Pentru fiecare sub-cheie posibilă, ai cărei biţi sunt influenţaţi de diferenţele nenule
din diferenţiale, definim câte un counter. Aceşti counteri sunt incrementaţi atunci când
intrarea ı̂n ultima rundă coincide cu valoarea prevăzută de diferenţiala caracteristică.
În final, sub-cheia cu valoare maximă a counterului ataşat va fi considerată drept cea
corectă; restul biţilor din sub-cheie vor fi găsiţi cu o căutare prin forţă brută.
În exemplul din Figura 2, diferenţiala caracteristică a influenţat S - boxurile S42 şi S44
din ultima rundă; deci – pentru orice pereche de mesaje criptate – ı̂ncercăm toate cele
256 variante pentru [K5,5 . . . K5,8 , K5,13 . . . K5,16 ], şi – de câte ori diferenţa la intrarea ı̂n
ultima rundă determinată de decriptare este

∆U4 = [0000 0110 0000 0110]

va fi incrementat counterul asociat.

6.4.6 Criptanaliza diferenţială pentru DES


Într-un astfel de atac se ignoră permutarea iniţială IP şi inversa sa (ele nu joacă nici un
rol ı̂n criptanaliză). Ne vom mărgini la un DES restrâns pe n (n ≤ 16) runde.
Deci textul clar este L0 R0 , iar cel criptat – Ln Rn (vom ignora de asemenea inversarea
finală dintre Ln şi Rn ).
Pentru criptanaliza diferenţială vom considera două texte clare L0 R0 , L∗0 R0∗ şi textele
criptate corespunzătoare Ln Rn respectiv L∗n Rn∗ .
Diferenţele sunt L0 0 R0 0 = L0 R0 ⊕ L∗0 R0∗ şi Ln 0 Rn 0 = Ln Rn ⊕ L∗n Rn∗ .

Definiţia 6.1. Fie Sj (1 ≤ j ≤ 8) un S - box din sistemul de criptare DES. Pentru


orice pereche (Bj , Bj∗ ) de şiruri de 6 biţi, vom defini XOR-ul de intrare pentru Sj prin
Bj 0 = Bj ⊕ Bj∗ , iar XOR-ul de ieşire prin Sj (Bj ) ⊕ Sj (Bj∗ ).

De remarcat că un XOR de intrare este o secvenţă de 6 biţi, iar un XOR de ieşire
este o secvenţă de 4 biţi.

Definiţia 6.2. Pentru orice Bj 0 ∈ Z26 se notează ∆(Bj 0 ) mulţimea perechilor (Bj , Bj∗ )
care prin XOR dau B 0j .

Observaţia 6.2.

• O mulţime ∆(Bj 0 ) conţine 26 = 64 elemente;

• ∆(Bj 0 ) = {(Bj , Bj ⊕ Bj 0 )| Bj ∈ Z26 }.

Pentru fiecare pereche din ∆(Bj 0 ) vom calcula XOR-ul de ieşire al lui Sj şi construim
o tabelă de distribuţii ale valorilor obţinute (sunt 64 ieşiri pe un spaţiu de 24 = 16 valori
posibile). Pe această tabelă se va baza atacul de criptanaliză diferenţială.
106 CAPITOLUL 6. ATACURI ASUPRA SISTEMELOR DE CRIPTARE BLOC

Exemplul 6.2. Să considerăm primul S - box S1 şi XOR-ul de intrare 110100. Vom
avea:

∆(110100) = {(000000, 110100), (000001, 110101), . . . , (111111, 001011)}.

Pentru fiecare pereche din ∆(110100) vom calcula XOR-ul de ieşire al lui S1 . De exemplu,
S1 (000000) = E16 = 1110, S1 (110100) = 916 = 1001 deci XOR-ul de ieşire S1 al perechii
(000000, 110100) este 0111.
Efectuând acest calcul pentru toate cele 64 perechi din ∆(110100), vom obţine distribu-
ţia următoare a XOR-urilor de ieşire pentru S1 :

0000 0001 0010 0011 0100 0101 0110 0111


0 8 16 6 2 0 0 12

1000 1001 1010 1011 1100 1101 1110 1111


6 0 0 0 0 8 0 6

În Exemplul ?? au apărut numai 8 din cele 16 valori de ieşire posibile. În general,
dacă se fixează un S - box Sj şi un XOR de intrare diferit de 000000, se constată că vor
apare aproximativ 75 − 80 % din valorile posibile de ieşire.

Definiţia 6.3. Pentru 1 ≤ j ≤ 8 şi secvenţele Bj 0 , Cj 0 de 6 respectiv 4 biţi, definim

INj (Bj 0 , Cj 0 ) = {Bj ∈ Z26 | Sj (Bj ) ⊕ Sj (Bj ⊕ Bj 0 ) = Cj 0 ,

Nj (Bj 0 , Cj 0 ) = card(INj (Bj 0 , Cj 0 )).

Distribuţia dată ı̂n Exemplul ?? dă valorile N1 (110100, C1 0 ), C1 0 ∈ Z24 . Toate aceste
valori se găsesc ı̂n Tabela 5.

Pentru fiecare din cele 8 S - boxuri există 64 XOR-uri de intrare posibile; deci ı̂n total
vor fi 512 date de distribuit, lucru uşor de realizat cu un calculator.
Reamintim că intrarea ı̂ntr-un S - box la runda i este B = E ⊕ J, unde E = E(Ri−1 )
este rezultatul expandării lui Ri−1 , iar J = Ki este un subşir reordonat al cheii K. XOR-ul
de intrare (al celor 8 S - boxuri) este deci

B ⊕ B ∗ = (E ⊕ J) ⊕ (E ∗ ⊕ J) = E ⊕ E ∗ .

De remarcat că XOR-urile de intrare nu depind de sub-cheia J, pe când XOR-urile de


ieşire depind.
6.4. CRIPTANALIZA DIFERENŢIALĂ 107

XOR de ieşire intrări posibile


0000
0001 000011, 001111, 011110, 011111, 101010, 101011, 110111, 111011
0010 000100, 000101, 001110, 010001, 010010, 010100, 011010, 011011
100000, 100101, 010110, 101110, 101111, 110000, 110001, 111010
0011 000001, 000010, 010101, 100001, 110101, 110110
0100 010011, 100111
0101
0110
0111 000000, 001000, 001101, 010111, 011000, 011101, 100011, 101001
101100, 110100, 111001, 111100
1000 001001, 001100, 011001, 101101, 111000, 111101
1001
1010
1011
1100
1101 000110, 010000, 010110, 011100, 100010, 100100, 101000, 110010
1110
1111 000111, 001010, 001011, 110011, 111110, 111111
Tabela 5: Distribuţia valorilor intrare/ieşire pentru S1

Să detaliem pe grupuri de câte 6 biţi, cuvintele cu care se lucrează:

B = B1 B2 B3 B4 B5 B6 B7 B8 , E = E1 E2 E3 E4 E5 E6 E7 E8 , J = J1 J2 J3 J4 J5 J6 J7 J8

În mod similar se scriu B ∗ şi E ∗ . Să presupunem acum că se ştiu valorile Ej şi Ej∗ pentru
un j (1 ≤ j ≤ 8) dat, precum şi valoarea XOR de ieşire Cj 0 = Sj (Bj ) ⊕ Sj (Bj∗ ) a lui Sj .
Vom avea
Ej ⊕ Jj ∈ INj (Ej 0 , Cj 0 )
unde Ej 0 = Ej ⊕ Ej∗ .
Fie mulţimea testj definită astfel:

testj (Ej , Ej∗ , Cj 0 ) = {Bj ⊕ Ej | Bj ∈ INj (Ej 0 , Cj 0 )}

(s-au luat toate XOR-urile lui Ej cu elemente din INj (Ej 0 , Cj 0 )).
Din aceste consideraţii rezultă imediat teorema:

Teorema 6.1. Dacă Ej , Ej∗ sunt subsecvenţe construite pentru intrarea ı̂n S - boxul Sj ,
iar Cj 0 este XOR-ul de ieşire al lui Sj , atunci biţii sub-cheii Jj apar ı̂n testj (Ej , Ej∗ , Cj 0 ).

Cum se poate remarca, există exact Nj (Ej 0 , Cj 0 ) secvenţe de 6 biţi ı̂n testj (Ej , Ej∗ , Cj 0 );
valoarea corectă Jj este una din acestea.
108 CAPITOLUL 6. ATACURI ASUPRA SISTEMELOR DE CRIPTARE BLOC

Exemplul 6.3. Să considerăm E1 = 000001, E1∗ = 110101, C1 0 = 1101. Deoarece


N1 (110100, 1101) = {000110, 010000, 010110, 011100, 100010, 101000, 110010} are 8 ele-
mente, există 8 secvenţe posibile pentru J1 , cumulate ı̂n test1 (000001, 110101, 1101) =
{000111, 010001, 010111, 011101, 100011, 100101, 101001, 110011}.
Dacă se ia un alt triplet (E1 , E1∗ , C1 0 ), vom obţine altă mulţime test1 cu valori pentru
J1 , deci valoarea corectă se va găsi ı̂n intersecţia lor.

Atacul unui DES definit pe trei runde


Să vedem cum se aplică aceste idei pentru un DES construit pe 3 runde. Începem cu o
pereche de texte clare L0 R0 şi L∗0 R0∗ , criptate ı̂n L3 R3 respectiv L∗3 R3∗ . Vom avea
R3 = L2 ⊕ f (R2 , K3 ) = R1 ⊕ f (R2 , K3 ) = L0 ⊕ f (R0 , K1 ) ⊕ f (R2 , K3 ).
Construcţia pentru R3∗ este similară. Deci
R3 0 = L0 0 ⊕ f (R0 , K1 ) ⊕ f (R0∗ , K1 ) ⊕ f (R2 , K3 ) ⊕ f (R2∗ , K3 ).
Să presupunem că s-a ales R0 = R0∗ , deci R0 0 = 00 . . . 0.
Atunci f (R0 , K1 ) = f (R0∗ , K1 ) şi deci R3 0 = L0 0 ⊕ f (R2 , K3 ) ⊕ f (R2∗ , K3 ).
R3 0 se poate calcula pe baza textelor criptate, iar L0 0 – pe baza textelor clare; deci se
poate determina f (R2 , K3 ) ⊕ f (R2∗ , K3 ) = R3 0 ⊕ L0 0 .
Avem f (R2 , K3 ) = P (C), f (R2∗ , K3 ) = P (C ∗ ) unde C respectiv C ∗ sunt ieşirile cores-
punzătoare din cele 8 S - boxuri (reamintim, P este o permutare fixată din descrierea
sistemului DES). Deci P (C) ⊕ P (C ∗ ) = R3 0 ⊕ L0 , de unde

C 0 = C ⊕ C ∗ = P −1 (R3 0 ⊕ L0 0 ).

Acesta este XOR-ul de ieşire din cele opt S - boxuri, după a treia rundă.
R2 = L3 şi R2∗ = L∗3 sunt cunoscute (componente ale textelor criptate); deci se poate
calcula
E = E(L3 ), E ∗ = E(L∗3 )
folosind funcţia de expansiune E. Aceste valori sunt intrările ı̂n S - boxuri la runda a
treia. Se cunosc deci E, E ∗ , C 0 la a treia rundă şi se poate trece – aşa cum am văzut – la
construcţia mulţimilor test1 , test2 , . . . , test8 de valori posibile pentru J1 , J2 , . . . , J8 .
Un algoritm pentru această metodă este formalizat mai jos. Atacul foloseşte mai multe
triplete E, E ∗ , C 0 . Se utilizează opt tabele de valori şi se determină astfel cei 48 biţi ai
subcheii K3 de la a treia rundă. Cheia de 56 biţi se calculează apoi printr-o căutare
exhaustivă a celor 28 = 256 posibilităţi pentru cei 8 biţi rămaşi necunoscuţi.

Intrare: L0 R0 , L∗0 R0∗ , L3 R3 , L∗3 R3∗ cu R0 = R0∗ .


1. C 0 ← P −1 (R3 0 ⊕ L0 0 )
2. E ← E(L3 ), E ∗ ← E(L∗3 )
3. for j := 1 to 8 do testj (Ej , Ej∗ , Cj ).
6.5. CRIPTANALIZA LINIARĂ 109

6.5 Criptanaliza liniară


Criptanaliza liniară este – ı̂mpreună cu cea diferenţială – unul din atacurile de bază
utilizate contra sistemelor de criptare bloc.
Autorul ei este Mitsuru Matsui, care a aplicat-o prima oară ı̂n 1992, ca un atac asupra
sistemului de criptare FEAL ([?]). Ulterior, Matsui a publicat un atac similar asupra
sistemului DES, probabil prima criptanaliză experimentală prezentată public asupra unui
sistem de criptare bloc ([?],[?],[?]).
Practic, un atac asupra sistemului DES nu este ı̂nsă viabil, el necesitând 243 texte
clare cunoscute.
Ulterior au fost construite diverse rafinări ale atacurilor prin criptanaliză liniară,
folosind aproximări liniare multiple sau aproximări locale cu expresii neliniare.

6.5.1 Modalitatea generală de atac


Criptanaliza liniară este un atac cu text clar ales şi foloseşte o relaţie liniară de aproximare
pentru descrierea sistemului de criptare bloc. Fiind dat un număr suficient de mare de
perechi (text clar, text criptat) se pot obţine informaţii despre cheie, cu o probabilitate
acceptabilă.
Vom ilustra acest atac folosind aceiaşi structură SP N definită ı̂n Figura 2 pentru
criptanaliza difererenţială. El este construit plecând de la prima linie din S1 - boxul DES
(privită ca un 4 × 4 S - box) şi permutarea definită ı̂n Tabela 4.
Ideea de bază este de a aproxima statistic funcţionarea unei porţiuni din sistemul de
criptare printr-o expresie liniară (faţă de operaţia XOR). O astfel de expresie este de
forma
ai1 ⊕ ai2 ⊕ . . . ⊕ aiu ⊕ bj1 ⊕ bj2 ⊕ . . . ⊕ bjv = 0 (1)
unde ai reprezintă al i-lea bit al intrării α = (a1 , a2 , . . .), iar bj reprezintă al j-lea bit
al ieşirii β = (b1 , b2 , . . .).
Scopul criptanalizei liniare este de a determina expresii de forma (1), cu o probabilitate
mare sau mică de apariţie (deci cât mai diferită de 1/2).
Evident, rezistenţa unui sistem de criptare la criptanaliza liniară este cu atât mai mare
cu cât astfel de relaţii sunt mai puţine. Existenţa unei relaţii de tip (1) – cu probabilitate
mare sau mică – denotă o abilitate scăzută a sistemului de criptare privind difuzia datelor
criptate.
În general, dacă alegem aleator valori pentru u + v biţi şi le plasăm ı̂ntr-o relaţie de
tip (1), probabilitatea ca relaţia să fie verificată va fi 1/2. Cu cât o astfel de probabilitate
va fi mai depărtată de 1/2, cu atât va fi mai uşor pentru criptanalist să atace sistemul
folosind relaţia respectivă.
110 CAPITOLUL 6. ATACURI ASUPRA SISTEMELOR DE CRIPTARE BLOC

Dacă o expresie de tip (1) are loc cu probabilitate pL pentru texte clare şi texte criptate
alese aleator, vom nota tendinţa1 relaţiei respective prin L = pL − 1/2.
Cu cât magnitudinea tendinţei |pL − 1/2| este mai mare, cu atât mai puţine texte clare
va avea nevoie un atac ca să reuşească.
Observaţia 6.3. Dacă pL = 1, atunci expresia liniară (1) reprezintă ı̂n totalitate com-
portarea sistemului de criptare; deci acesta nu va asigura nici o securitate.
Dacă pL = 0, atunci (1) reprezintă o relaţie afină ı̂n sistemul de criptare, de asemenea
indiciul unei slăbiciuni catastrofice.
Dacă operaţia de adunare folosită este mod 2 (deci XOR), atunci o funcţie afină este
complementara unei funcţii liniare. Atât aproximările liniare cât şi cele afine, indicate de
pL > 1/2 respectiv pL < 1/2, sunt folosite ı̂n egală măsură de criptanaliza liniară.
În mod natural apare ı̂ntrebarea:
Cum pot fi găsite expresii statistic liniare (deci utilizabile ı̂n criptanal-
iza liniară) ?
Evident, problema se pune relativ la componenta neliniară a sistemelor de criptare, deci
relativ la S - boxuri. Când evaluăm proprietăţile neliniare ale unui S - box, este posibil să
găsim aproximări liniare ı̂ntre seturi de biţi de intrare şi de ieşire din S - box. Ulterior, este
posibil să concatenăm astfel de aproximări liniare ale diverselor S - boxuri, astfel ı̂ncât
să eliminăm biţii intermediari (aflaţi ı̂n interiorul sistemului de criptare) şi să obţinem o
expresie liniară – cu tendinţă semnificativă – ı̂ntre seturi de biţi din textul clar şi biţi de
intrare ı̂n ultima rundă.

6.5.2 Lema Piling-Up


Fie X1 , X2 două variabile aleatoare. Relaţia X1 ⊕ X2 = 0 este o expresie liniară, echiva-
lentă cu X1 = X2 . Similar, X1 ⊕ X2 = 1 este o expresie afină echivalentă cu X1 6= X2 .
Să considerăm o probabilitate definită
(
p1 , dacă i = 0
P r[X1 = i] =
1 − p1 dacă i = 1
şi (
p2 , dacă i = 0
P r[X2 = i] =
1 − p2 dacă i = 1
Dacă cele două variabile aleatoare sunt independente, atunci


 p 1 p2 , dacă i = 0, j =0
p1 (1 − p2 ), dacă i = 0, j =1


P r[X1 = i, X2 = j] = 

 (1 − p1 )p2 , dacă i = 1, j =0
(1 − p1 )(1 − p2 ), dacă i = 1, j =1

1
ı̂n engleză bias.
6.5. CRIPTANALIZA LINIARĂ 111

şi se poate arăta imediat că


P r[X1 ⊕ X2 = 0] = P r[X1 = X2 ] = P r[X1 = 0, X2 = 0] + P r[X1 = 1, X2 = 1] =
p1 p2 + (1 − p1 )(1 − p2 )
Pentru a simetriza formulele, introducem o nouă variabilă numită tendinţă definită
1 1 1
 
i = pi − , i ∈ − ,
2 2 2
Atunci
1 1
P r[Xi = 0] = + i , P r[Xi = 1] = − i
2 2
Lema 6.2. (Piling - up): Fie X1 , X2 , . . . Xn variabile aleatoare independente şi pentru
1 ≤ i1 < i2 < . . . < ik ≤ n, fie i1 ,i2 ,...ik tendinţa variabilei aleatoare Xi1 ⊕ Xi2 ⊕ . . . ⊕ Xik .
Atunci
k
i1 ,i2 ,...ik = 2k−1
Y
ij .
j=1
sau – echivalent:
k
P r[X1 ⊕ . . . ⊕ Xk = 0] = 1/2 + 2k−1
Y
i
i=1

Demonstraţie. Prin inducţie după k. Pentru k = 1 egalitatea este banală. Pentru k = 2


se verifică uşor relaţia i1 ,i2 = 2i1 i2 .
Presupunem egalitatea adevărată pentru k = p şi să o arătăm pentru k = p + 1. Din
p
faptul că tendinţa lui Xi1 ⊕ . . . ⊕ Xip este 2p−1
Y
ij rezultă
j=1
p
1 p−1
Y
P r[Xi1 ⊕ . . . ⊕ Xip = 0] = + 2 ij şi
2 j=1
p
1
P r[Xi1 ⊕ . . . ⊕ Xip = 1] = − 2p−1
Y
ij
2 j=1
De aici putem calcula

P r[Xi1 ⊕ . . . 
⊕ Xip ⊕ Xip+1 =  0] = 
p p p+1
1 1 1 1 1
   
 + 2p−1 p−1
− ip+1 = + 2p
Y Y Y
ij  + ip+1 +  −2 ij  ij .
2 j=1 2 2 j=1 2 2 j=1

Corolarul 6.1. Fie i1 ,i2 ,...,ik tendinţa variabilei aleatoare Xi1 ⊕ . . . Xik .

1. Dacă ∃j cu ij = 0 atunci i1 ,i2 ,...,ik = 0.

2. Dacă ij = ±1/2, (j = 1, . . . , k) atunci i1 ,i2 ,...,ik = ±1/2.

Exemplul 6.4. Să considerăm patru variabile aleatoare independente X1 , X2 , X3 , X4 . Fie


P r[X1 ⊕ X2 = 0] = 1/2 + 1,2 şi P r[X2 ⊕ X3 = 0] = 1/2 + 2,3 .
112 CAPITOLUL 6. ATACURI ASUPRA SISTEMELOR DE CRIPTARE BLOC

Suma X1 ⊕ X3 poate fi obţinută adunând X1 ⊕ X2 cu X2 ⊕ X3 . Deci

P r[X1 ⊕ X3 = 0] = P r[(X1 ⊕ X2 ) ⊕ (X2 ⊕ X3 ) = 0].

Deci prin combinarea expresiilor liniare se vor obţine expresii liniare noi.
Considerând că variabilele aleatoare X1 ⊕ X2 şi X2 ⊕ X3 sunt independente, putem
aplica lema Piling - Up, pentru a determina

P r[X1 ⊕ X3 = 0] = 1/2 + 21,2 2,3

Deci 1,3 = 21,2 2,3 .

6.5.3 Relaţii de aproximare a S - boxurilor


Să folosim S - boxul 4 × 4 definit de Figura 1.
Vom lua ca exemplu expresia liniară a2 ⊕ a3 ⊕ b1 ⊕ b3 ⊕ b4 = 0 sau – echivalent
– a2 ⊕ a3 = b1 ⊕ b3 ⊕ b4 , unde (a1 , a2 , a3 , a4 ) este reprezentarea ı̂n binar a intrării din
Figura 1, iar (b1 , b2 , b3 , b4 ) este reprezentarea binară a ieşirii. Aplicând la intrare toate
cele 24 = 16 valori posibile şi examinând valorile de ieşire corespunzătoare, se poate
observa (din Tabela 6) că expresia este verificată pentru 12 din cele 16 cazuri.
Deci tendinţa de probabilitate este 12/16 − 1/2 = 1/4.

(a1 , a2 , a3 , a4 ) (b1 , b2 , b3 , b4 ) a2 ⊕ a3 b1 ⊕ b3 ⊕ b4 a1 ⊕ a4 a3 ⊕ a4 b1 ⊕ b4
(0, 0, 0, 0) (1, 1, 1, 0) 0 0 0 0 1
(0, 0, 0, 1) (0, 1, 0, 0) 0 0 1 1 0
(0, 0, 1, 0) (1, 1, 0, 1) 1 0 0 1 0
(0, 0, 1, 1) (0, 0, 0, 1) 1 1 1 0 1
(0, 1, 0, 0) (0, 0, 1, 0) 1 1 0 0 0
(0, 1, 0, 1) (1, 1, 1, 1) 1 1 1 1 0
(0, 1, 1, ) (1, 0, 1, 1) 0 1 0 1 0
(0, 1, 1, 1) (1, 0, 0, 0) 0 1 1 0 1
(1, 0, 0, 0) (0, 0, 1, 1) 0 0 1 0 1
(1, 0, 0, 1) (1, 0, 1, 0) 0 0 0 1 1
(1, 0, 1, 0) (0, 1, 1, 0) 1 1 1 1 0
(1, 0, 1, 1) (1, 1, 0, 0) 1 1 0 0 1
(1, 1, 0, 0) (0, 1, 0, 1) 1 1 1 0 1
(1, 1, 0, 1) (1, 0, 0, 1) 1 0 0 1 0
(1, 1, 1, 0) (0, 0, 0, 0) 0 0 1 1 0
(1, 1, 1, 1) (0, 1, 1, 1) 0 0 0 0 1

Tabela 6: Exemple de aproximări liniare ale unui S - box


6.5. CRIPTANALIZA LINIARĂ 113

Similar, pentru relaţia a1 ⊕a4 = b2 tendinţa de probabilitate este 0, iar pentru a3 ⊕a4 =
b1 ⊕ b4 tendinţa este 2/16 − 1/2 = −3/8.
În general se pot construi 28 = 256 expresii liniare cu (a1 , a2 , a3 , a4 ) şi (b1 , b2 , b3 , b4 ).
Pentru fiecare din ele se poate da o reprezentare uniformă de tipul:
4 4
! !
M M
xi · ai ⊕ y i · bi
i=1 i=1

unde xi , yi ∈ {0, 1}, (1 ≤ i ≤ 4) iar operaţiile folosite sunt AN D (·) şi XOR (⊕).
Vectorii binari (x1 , x2 , x3 , x4 ) – numiţi sume de intrare şi (y1 , y2 , y3 , y4 ) (sume de ieşire)
vor fi codificaţi prin cifre hexazecimale.
Astfel, fiecare din cele 256 expresii liniare se va scrie ı̂n mod unic ca o pereche de două
cifre hexazecimale.
a1 a2 a3 a4 b 1 b 2 b 3 b 4
0 0 0 0 1 1 1 0
0 0 0 1 0 1 0 0
0 0 1 0 1 1 0 1
0 0 1 1 0 0 0 1
0 1 0 0 0 0 1 0
0 1 0 1 1 1 1 1
0 1 1 0 1 0 1 1
0 1 1 1 1 0 0 0
1 0 0 0 0 0 1 1
1 0 0 1 1 0 1 0
1 0 1 0 0 1 1 0
1 0 1 1 1 1 0 0
1 1 0 0 0 1 0 1
1 1 0 1 1 0 0 1
1 1 1 0 0 0 0 0
1 1 1 1 0 1 1 1
Exemplul 6.5. Expresia a1 ⊕ a4 ⊕ b2 va avea suma de intrare (1, 0, 0, 1) care este 9 ı̂n
hexazecimal, iar suma de ieşire este (0, 1, 0, 0), care este 4 ı̂n hexazecimal. Deci perechea
ataşată variabilei este (9, 4).
Pentru o expresie având suma de intrare x = (x1 , x2 , x3 , x4 ) şi suma de ieşire y =
(y1 , y2 , y3 , y4 ), fie NL (x, y) numărul octeţilor binari (x1 , x2 , x3 , x4 , y1 , y2 , y3 , y4 ) cu
4 4
! !
M M
x i · ai ⊕ y i · bi = 0
i=1 i=1

Tendinţa unei astfel de expresii (alese aleator) este


NL (x, y) − 8
(x, y) = .
16
114 CAPITOLUL 6. ATACURI ASUPRA SISTEMELOR DE CRIPTARE BLOC

O enumerare completă a tuturor tendinţelor pentru S - boxul folosit de sistemul nostru


de criptare, este dată de tabela de aproximări liniare (pentru a evita fracţiile, nu s-a
efectuat ı̂mpărţirea la 16):

0 1 2 3 4 5 6 7 8 9 A B C D E F
0 +8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 −2 −2 0 0 −2 +6 +2 +2 0 0 +2 +2 0 0
2 0 0 −2 −2 0 0 −2 −2 0 0 +2 +2 0 0 −6 +2
3 0 0 0 0 0 0 0 0 +2 −6 −2 −2 +2 +2 −2 −2
4 0 +2 0 −2 −2 −4 −2 0 0 −2 0 +2 +2 −4 +2 0
5 0 −2 −2 0 −2 0 +4 +2 −2 0 −4 +2 0 −2 −2 0
6 0 +2 −2 +4 +2 0 0 +2 0 −2 +2 +4 −2 0 0 −2
7 0 −2 0 +2 +2 −4 +2 0 −2 0 +2 0 +4 +2 0 +2
8 0 0 0 0 0 0 0 0 −2 +2 +2 −2 +2 −2 −2 −6
9 0 0 −2 −2 0 0 −2 −2 −4 0 −2 +2 0 +4 +2 −2
A 0 +4 −2 +2 −4 0 +2 −2 +2 +2 0 0 +2 +2 0 0
B 0 +4 0 −4 +4 0 +4 0 0 0 0 0 0 0 0 0
C 0 −2 +4 −2 −2 0 +2 0 +2 0 +2 +4 0 +2 0 −2
D 0 +2 +2 0 −2 +4 0 +2 −4 −2 +2 0 +2 0 0 +2
E 0 +2 +2 0 −2 −4 0 +2 −2 0 0 −2 −4 +2 −2 0
F 0 −2 −4 −2 −2 0 +2 0 0 −2 +4 −2 −2 0 +2 0
Tabela 7: Tabela de aproximări liniare
Exemplul 6.6. Tendinţa relaţiei liniare a3 ⊕a4 = b1 ⊕b4 (intrare hex 3 şi ieşire hex 9) este
−6/16 = −3/8; deci probabilitatea ca această relaţie liniară să aibă loc este 1/2 − 3/8 =
1/8.
Din construcţia de mai sus se pot obţine imediat câteva proprietăţi:
• Probabilitatea ca pentru o intrare 0 să obţinem o anumită sumă nevidă de biţi de
ieşire este 1/2 (deoarece pentru un S - box bijectiv, orice combinaţie liniară de biţi
de ieşire trebuie să conţină un număr egal de 0 şi 1).
• Dacă suma biţilor de ieşire este 0, atunci suma biţilor de intrare este 0; deci o
tendinţă +1/2 şi o valoare +8 ı̂n Tabela 7. În consecinţă, prima linie din Tabela 7
este 0, cu excepţia primului element. Aceeaşi proprietate o are şi prima coloană.
• Suma elementelor pe o linie sau coloană este ±8 (uşor de verificat).

6.5.4 Construirea aproximărilor liniare pentru un sistem bloc


Odată ce au fost stabilite aproximări liniare pentru S - boxurile unui SP N , putem merge
mai departe, determinând o aproximare liniară de forma (1) pentru ı̂ntreg sistemul de
6.5. CRIPTANALIZA LINIARĂ 115

criptare bloc. Aceasta se va realiza prin concatenarea aproximărilor liniare ale S -boxurilor
consecutive.
După ce s-a obţinut o aproximare liniară bazată pe biţi din textul clar şi biţi care intră
ı̂n ultima rundă a criptării, vom putea ataca sistemul găsind un sebset de biţi din cheia
folosită ı̂n ultima rundă.
Ca şi la criptanaliza diferenţială, vom ilustra acest procedeu printr-un exemplu.
Să considerăm – conform Figurii 4 – aproximări liniare pentru S12 , S22 , S32 şi S34 .
Anume:
S12 : a1 ⊕ a3 ⊕ a4 = b2 cu probabilitate 12/16 şi tendinţă +1/4;
S22 : a2 = b2 ⊕ b4 cu probabilitate 4/16 şi tendinţă −1/4;
S32 : a2 = b2 ⊕ b4 cu probabilitate 4/16 şi tendinţă −1/4;
S34 : a2 = b2 ⊕ b4 cu probabilitate 4/16 şi tendinţă −1/4.
Reamintim, Ui (Vi ) va reprezenta un bloc de 16 biţi care formează intrarea (ieşirea)
din S - boxuri la runda i, iar Ui,j (Vi,j ) va representa al j-lea bit din blocul Ui (Vi ) (biţii
sunt numerotaţi de la 1 la 16).
Similar, Ki va reprezenta sub-cheia care se combină prin XOR cu biţii de intrare ı̂n
runda i (o excepţie: sub-cheia K5 se combină prin XOR cu biţii de ieşire din runda 4).
Deci U1 = P ⊕ K1 unde P = (P1 , . . . , P16 ) reprezintă textul clar (de 16 biţi). Folosind
aproximarea liniară de la prima rundă, avem
V1,6 = U1,5 ⊕ U1,7 ⊕ U1,8 = (P5 ⊕ K1,5 ) ⊕ (P7 ⊕ K1,7 ) ⊕ (P8 ⊕ K1,8 ) (2)
cu probabilitate 3/4.
Aproximarea din runda 2 va da relaţia

V2,6 ⊕ V2,8 = U2,6

cu probabilitate 1/4. Deoarece U2,6 = V1,6 ⊕ K2,6 , putem găsi o aproximare de forma

V2,6 ⊕ V2,8 = V1,6 ⊕ K2,6

cu probabilitate 1/4.
Combinând această relaţie cu (2) (care are loc cu probabilitate 3/4), se obţine
V2,6 ⊕ V2,8 ⊕ P5 ⊕ P7 ⊕ P8 ⊕ K1,5 ⊕ K1,7 ⊕ K1,8 ⊕ K2,6 = 0 (3)
cu probabilitate 1/2 + 2(3/4 − 1/2)(1/4 − 1/2) = 3/8 (deci o tendinţă −1/8) obţinută
prin aplicarea Lemei ??.

Observaţia 6.4. În toată această secţiune folosim prezumţia că aproximările S - boxurilor
sunt independente; ipotetic, această ipoteză nu este foarte corectă, dar practic ea este
valabilă pentru aproape toate sistemele de criptare bloc.
116 CAPITOLUL 6. ATACURI ASUPRA SISTEMELOR DE CRIPTARE BLOC

P5 P7 P 8

K1,5 K1,7 K1,8

S11 S12 S13 S14

K2,6

S21 S22 S23 S24

K3,6 K3,14

S31 S32 S33 S34

K4,6 K4,8 K4,14 K4,16

? ?
U4,6 U4,8 U4,14 U4,16
S41 S42 S43 S44

K5,5 K5,6 K5,7 K5,8 K5,13 ... K5,16

Figura 4: Exemplu de aproximare liniară


Pentru runda 3, reţinem că
V3,6 ⊕ V3,8 = U3,6
cu probabilitate 1/4 şi
V3,14 ⊕ V3,16 = U3,14
tot cu probabilitate 1/4.
Deci, pentru că U3,6 = V2,6 ⊕ K3,6 şi U3,14 = V2,8 ⊕ K3,14 , aplicăm din nou Lema ?? şi
obţinem
6.5. CRIPTANALIZA LINIARĂ 117

V3,6 ⊕ V3,8 ⊕ V3,14 ⊕ V3,16 ⊕ V2,6 ⊕ K3,6 ⊕ V2,8 ⊕ K3,14 = 0 (4)


cu probabilitate 1/2 + 2(1/4 − 1/2)2 = 5/8 (deci, cu o tendinţă +1/8).
Combinăm acum relaţiile (3) şi (4) pentru a ı̂ncorpora toate cele patru aproximări ale
S - boxurilor. Vom avea
V3,6 ⊕ V3,8 ⊕ V3,14 ⊕ V3,16 ⊕ P5 ⊕ P7 ⊕ P8 ⊕ K1,5 ⊕ K1,7 ⊕ K1,8 ⊕ K2,6 ⊕ K3,6 ⊕ K3,14 = 0.
Ţinem cont că U4,6 = V3,6 ⊕ K4,6 , U4,8 = V3,14 ⊕ K4,8 , U4,14 = V3,8 ⊕ K4,14 , U4,16 =
V3,16 ⊕ K4,16 şi putem rescrie această relaţie sub forma
U4,6 ⊕ U4,8 ⊕ U4,14 ⊕ U4,16 ⊕ P5 ⊕ P7 ⊕ P8 ⊕ σK = 0
unde
σK = K1,5 ⊕ K1,7 ⊕ K1,8 ⊕ K2,6 ⊕ K3,6 ⊕ K3,14 ⊕ K4,6 ⊕ K4,8 ⊕ K4,14 ⊕ K4,16
De remarcat că σK este o valoare fixată (0 sau 1), dependentă de cheia sistemului de
criptare.
Aplicând Lema ??, această expresie are loc cu probabilitate 1/2 + 23(3/4 − 1/2)(1/4 −
1/2)3 = 15/32 (deci o tendinţă −1/32).
Deoarece σK este fixat, deducem că relaţia
U4,6 ⊕ U4,8 ⊕ U4,14 ⊕ U4,16 ⊕ P5 ⊕ P7 ⊕ P8 = 0 (5)
are loc cu probabilitate 15/32 sau (1 − 15/32) = 17/32 (după cum σK = 0, respectiv 1).
Am obţinut deci o aproximare liniară a primelor trei runde ale sistemului de criptare,
cu o tendinţă 1/32, remarcabil de bună pentru construirea unui atac.
Să vedem cum o putem folosi această tendinţă pentru a determina o parte din biţii
cheii.

6.5.5 Extragerea biţilor cheii


După ce am aflat o aproximare liniară pentru N − 1 runde dintr-un sistem de criptare
cu N runde, aproximare având o tendinţă semnificativ de mare, putem ataca sistemul
căutând biţi din ultima sub-cheie. În cazul nostru, având o aproximare liniară pentru 3
runde, este posibil să găsim biţi din subcheia K5 .
Vom numi sub-cheie ţintă setul de biţi din ultima sub-cheie, asociaţi S - boxurilor
active din ultima rundă (S - boxuri influenţate de biţii utilizaţi ı̂n aproximarea liniară
găsită). Pentru fiecare valoare posibilă a sub-cheii ţintă este definit un contor (iniţializat
cu zero).
Procesul este similar celui folosit la criptanaliza diferenţială. Anume, pentru toate
valorile posibile ale sub-cheii ţintă, biţii din textul criptat sunt XOR-aţi cu biţii din
sub-cheia ţintă şi rezultatul este trecut ı̂n sens invers prin S - boxurile corespunzătoare.
Această procedură este efectuată pentru perechile (text clar, text criptat) folosite ı̂n
atac. Dacă aproximarea liniară este verificată pentru biţii din textul clar folosit şi pentru
rezultatul obţinut de procedură, contorul asociat sub-cheii respective este incrementat.
118 CAPITOLUL 6. ATACURI ASUPRA SISTEMELOR DE CRIPTARE BLOC

Sub-cheia ţintă al cărei contor diferă cel mai mult de jumătatea numărului de perechi
de texte folosite, este cel mai probabil cea corectă. Aceasta rezultă din faptul că pentru
sub-cheia ţintă respectivă, tendinţa este maximă. Dacă valoarea acestui contor este mai
mare sau mai mică decât 1/2 depinde de faptul dacă aproximarea folosită este o relaţie
liniară sau afină (lucru care depinde la rândul său de valorile necunoscute ale biţilor
sub-cheii folosiţi implicit ı̂n aproximare).
Pentru o sub-cheie incorectă rezultată dintr-o alegere aleatoare, aproximarea asociată
este verificată ı̂n general cu o probabilitate foarte apropiată de 1/2.
Exemplul 6.7. ([?]). Expresia liniară (5) afectează intrările ı̂n S - boxurile S42 şi S44
din ultima rundă. Deci, pentru fiecare pereche (text clar, text criptat) ales pentru atac,
vom ı̂ncerca toate cele 28 = 256 valori ale sub-cheii ţintă [K5,5 , . . . , K5,8 , K5,13 , . . . , K5,16 ].
Pentru fiecare valoare a sub-cheii ţintă vom incrementa contorul respectiv ori de câte
ori relaţia (5) este verificată (valorile [U4,5 , . . . , U4,8 , U4,13 , . . . , U4,16 ] sunt determinate tre-
când datele ı̂n sens invers prin sub-cheia ţintă şi S - boxurile S24 şi S44 ).
Contorul care diferă cel mai mult de jumătate din numărul de perechi (text clar, text
criptat) folosite ı̂n atac va indica sub-cheia ţintă prezumtiv corectă. Valorile biţilor din
sub-cheie folosiţi ı̂n calculul lui σK vor indica dacă tendinţa este pozitivă sau negativă.
Când σK = 0, aproximarea liniară (5) va servi ca estimare cu probabilitate < 1/2, iar
când σK = 1, relaţia (5) va avea loc cu probabilitate > 1/2.

K5,5 . . . K5,8 , K5,13 . . . K5,16 |tendinta| K5,5 . . . K5,8 , K5,13 . . . K5,16 |tendinta|
1C 0.0031 2A 0.0044
1D 0.0078 2B 0.0186
1E 0.0071 2C 0.0094
1F 0.0170 2D 0.0053
20 0.0025 2E 0.0062
21 0.0220 2F 0.0133
22 0.0211 30 0.0027
23 0.0064 31 0.0050
24 0.0336 32 0.0075
25 0.0106 33 0.0162
26 0.0096 34 0.0218
27 0.0074 35 0.0052
28 0.0224 36 0.0056
29 0.0054 37 0.0048
Tabela 8. Rezultate experimentale pentru un atac liniar

În [?] este simulat un atac folosind 10000 perechi cunoscute (text clar, text crip-
tat) şi urmând procedura de criptare pentru valorile sub-cheii parţiale [K5,5 , . . . , K5,8 ] =
0010 (hex 2) respectiv [K5,13 , . . . , K5,16 ] = 0100 (hex 4). Contorul care diferă cel mai mult
6.5. CRIPTANALIZA LINIARĂ 119

de valoarea 5000 corespunde – aşa cum este de aşteptat – valorii sub-cheii ţintă [2, 4] hex,
confirmând că atacul a găsit corect biţii respectivi ai cheii.
Tabela 8 prezintă doar parţial rezultatele relative la contori (un tabel complet va avea
256 linii, câte una pentru fiecare valoare posibilă a sub-cheii ţintă ). Valorile din tabel
indică magnitudinea tendinţei, conform formulei |tendinta| = |cont − 5000|/10000, unde
”cont” corespunde contorului asociat valorii respective date sub-cheii ţintă.
După cum se vede, cea mai mare tendinţă apare pentru valoarea
[K5,5 . . . K5,8 , K5,13 . . . K5,16 ] = [2, 4],
rezultat care rămâne valabil pentru toată tabela cu 256 valori.
Valoarea 0.0336 găsită experimental este foarte apropiată de valoarea estimată 1/32 =
0.03125. De remarcat că ı̂n tabel apar şi alte valori destul de mari ale tendinţei (deşi
teoretic, ele ar trebui să fie foarte apropiate de zero). Ele rezultă – printre altele – din
alegerea aleatoare a perechilor de test, a proprietăţilor particulare ale S - boxurilor, a
impreciziei ipotezei de independenţă (cerută de Lema ??).

6.5.6 Criptanaliza liniară pentru DES


Cea mai bună aproximare liniară pentru un S - box din DES este

a2 ⊕ b 1 ⊕ b 2 ⊕ b 3 ⊕ b 4 = 0

asociată lui S5 . Această relaţie are probabilitatea 12/64.


Dacă se analizează componentele liniare ale funcţiei f , va rezulta că această relaţie
conduce la aproximarea
a15 ⊕ f (α, K)7 ⊕ f (α, K)18 ⊕ f (α, K)24 ⊕ f (α, K)29 ⊕ K22 = 0 (6)
având tot probabilitatea 16/24. Relaţia (6) poate fi folosită cu succes pentru un atac
contra sistemului DES cu 3 runde.
Pentru a ataca un DES complet (cu 16 runde) sunt folosite aproximările liniare:




a15 ⊕ f (X, K)7 ⊕ f (X, K)18 ⊕ f (X, K)24 ⊕ f (X, K)29 ⊕ K22 = 0
a27 ⊕ a28 ⊕ a30 ⊕ a31 ⊕ f (X, K)15 ⊕ K42 ⊕ K43 ⊕ K45 ⊕ K46 = 0




a29 ⊕ f (X, K)15 ⊕ K44 = 0
a15 ⊕ f (X, K)7 ⊕ f (X, K)18 ⊕ f (X, K)24 ⊕ K22 = 0





a12 ⊕ a16 ⊕ f (X, K)7 ⊕ f (X, K)18 ⊕ f (X, K)24 ⊕ K19 ⊕ K23 = 0

Atacul unui DES ı̂n 3 runde


Pentru atacul unui DES ı̂n 3 runde vom folosi structura din Figura 5 (care defineşte un
astfel de sistem DES simplificat), ı̂mpreună cu aproximarea (6).
120 CAPITOLUL 6. ATACURI ASUPRA SISTEMELOR DE CRIPTARE BLOC

α.H α.L

K1
+k
? 
f 


? ?
X2

+k K2
? 
 f 


? ?
X2

+k
?


f  K3
? 
?
β.H β.L

Figure 5: Structura unui DES cu 3 runde


Ele conduc la relaţia

α.L15 ⊕ (α.H7 ⊕ X27 ) ⊕ (α.H18 ⊕ X218 ) ⊕ (α.H24 ⊕ X224 ) ⊕ (α.H29 ⊕ X229 ) ⊕ K122 = 0

având probabilitatea tot 12/64 (s-a notat sub-cheia de la runda i cu Ki).


Bitul K122 din cheie este constant şi poate fi eliminat din relaţie (el doar face distincţia
dintre valorile de probabilitate 12/64 sau 1 − 12/64, diferenţă care nu ne interesează).
De remarcat că blocul X2 trece neschimbat prin runda a doua, deci va fi o intrare
ı̂n ultima rundă. Rezultă că va trebui să parcurgem această rundă ı̂n sens invers şi să
determinăm cei 4 biţi din X2 care apar ı̂n relaţia (6). Din Figura 5 avem

X2 = β.H ⊕ f (β.L, K3),

unde singura necunoscută este sub-cheia K3.


Trebuie să găsim cei patru biţi [X27 , X218 , X224 , X229 ] folosind doar o sub-cheie. Dacă
studiem funcţia f , vedem că aceşti biţi apar după o permutare şi o trecere prin S - boxuri.
Cum sunt numai 4 biţi, ei nu pot ieşi decât din maxim 4 S - boxuri diferite. Pentru a
calcula fiecare din aceste S - boxuri sunt necesari 6 biţi din cheie. Deci, ı̂n total sunt
necesari 24 biţi din sub-cheia K3, pentru a găsi cei patru biţi din X2.
Folosind o căutare exhaustivă vom lua toate cele 224 valori posibile ale biţilor din
sub-cheie – pentru toate perechile (text clar, text criptat) – şi vom verifica dacă relaţia
(6) este verificată. Valorile pentru care (6) se verifică ı̂n minim jumătate din cazuri, dau
biţii probabil corecţi din K3.
6.5. CRIPTANALIZA LINIARĂ 121

Atacul unui DES ı̂n 16 runde


Pentru a ataca un sistem DES complet vor fi necesare toate cele cinci relaţii descrise
anterior. Utilizarea lor ca aproximări ale funcţiilor f pentru un DES redus la 15 runde,
conduce la aproximarea liniară:
α.H[7, 8, 24] ⊕ α.L[12, 16] ⊕ β.H 15 [7, 18, 24, 29] ⊕ β.L15
15 ⊕ σkey = 0 (7)
unde β.L15 şi β.H 15 sunt componentele stânga/dreapta ale textului criptat prin acest
DES redus, iar σkey este o valoare fixată, rezultată printr-un XOR ı̂ntre mai mulţi biţi
de cheie din diverse runde. Conform cu Matsui, aceasta este cea mai bună aproximare a
unui DES ı̂n 15 runde, iar tendinţa ei este 1.19−22 .
Putem extinde acest DES redus la un sistem DES normal, pe 16 runde, prin adău-
garea unei ultime runde.
Deoarece runda 15 nu va mai fi ultima, va trebui să inversăm sub-blocurile β.L15 şi
β.H 15 . Să notăm β.H 15 = X.L15 şi β.L15 = X.H 15 .
Vom obţine din (7) următoarea aproximare (omiţând σkey ):
α.H[7, 8, 24] ⊕ α.L[12, 16] ⊕ X.L15 [7, 18, 24, 29] ⊕ X.H15
15
=0 (8)
Relaţia (8) va fi aproximarea care trebuie verificată după trecerea ı̂n sens invers prin
ultima rundă (a 16-a) din DES.
Fie β.L şi β.H componentele stânga/dreapta ale textului criptat obţinut după runda
16. Putem trece prin ultima rundă ı̂n sens invers, pentru a găsi blocurile X.L15 respectiv
X.H 15 de intrare ı̂n ultima rundă. Din construcţia sistemului DES avem:

X.L15 = β.L

şi
X.H 15 = β.H ⊕ f (X.L15 , K16) = β.H ⊕ f (β.L, K16)
Înlocuind ı̂n (8), putem verifica dacă aproximarea respectivă are loc pentru o sub-cheie
K16 dată, verificând pur şi simplu egalitatea
15
α.H[7, 18, 24] ⊕ α.L[12, 16] ⊕ β.L[7, 18, 24, 29] ⊕ β.H15 ⊕ f (β.L, K16)15 = 0

Singura componentă care nu este dată de o pereche (text clar, text criptat) folosită ı̂n
atac, este bitul f (β.L, K16)15 . Acest bit este afectat de un singur S - box al lui f , deci
sunt necesari numai 6 biţi din K16 pentru a verifica egalitatea (8) (remintim, S - boxurile
DES folosesc intrări de 6 biţi).
Putem obţine ı̂n acest fel 6 biţi din cheie. Restul biţilor se vor obţine folosind eventual
un atac prin forţă brută.
În [?] Matsui foloseşte simetria rundelor DES pentru a găsi altă aproximare liniară
similară cu (7), având aceeaşi tendinţă. Pe baza ei se pot găsi alţi 6 biţi din cheie. Deci, ı̂n
total pot fi descoperiţi 12 biţi din cheie. În [?], Matsui ı̂mbunătăţeşte algoritmul, folosind
122 CAPITOLUL 6. ATACURI ASUPRA SISTEMELOR DE CRIPTARE BLOC

o aproximare pentru un DES pe 14 runde, obţinând ı̂n final 26 biţi din sub-cheia K16
(care are ı̂n total 48 biţi).
După estimarea lui Matsui, atacul originar necesită 247 perechi (text clar, text criptat)
pentru a avea succes cu probabilitate mare, iar atacul ı̂mbunătăţit reduce acest număr
la 243 perechi. Cercetări experimentale ulterioare ([?]) sugerează că sunt suficiente 241
perechi pentru ca atacul ı̂mbunătăţit al lui Matsui să dea rezultate.

6.6 Comparare ı̂ntre criptanaliza diferenţială


şi liniară
Între cele două tipuri de criptanaliză există multe similarităţi remarcabile. Astfel:

• Diferenţialele caracteristice corespund aproximărilor liniare. Tabelele de distribuţie


a diferenţelor sunt ı̂nlocuite cu tabelele de aproximare liniară.

• Regula de combinare a diferenţialelor caracteristice: ”substituie diferenţele şi ı̂nmul-


ţeşte probabilităţile” corespunde regulii de combinare a aproximărilor liniare (Lema
piling-up): ”substituie elementele comune şi ı̂nmulţeşte tendinţele”.

• Algoritmii de căutare pentru cea mai bună caracteristică sau cea mai bună aproxi-
mare liniară sunt ı̂n esenţă identici.

Cele mai importante distincţii ı̂ntre cele două metode de atac sunt:

• Criptanaliza diferenţială lucrează cu blocuri de biţi, ı̂n timp ce criptanaliza liniară


lucrează ı̂n esenţă cu un singur bit.

• Tendinţa unei aproximări liniare este un număr cu semn. Deci, fiind date două
aproximări cu aceleaşi structuri de intrare şi ieşire, aceiaşi probabilitate, dar semne
opuse, aproximarea rezultată va avea tendinţa zero (datorită faptului că cele două
aproximări se vor anula reciproc).

6.7 Exerciţii
6.1. Fie S - boxul πS : {0, 1}3 −→ {0, 1}3 definit prin tabela

x 0 1 2 3 4 5 6 7
πS (x) 0 2 3 4 5 6 7 1

Se dau două mesaje s1 , s2 ∈ {0, 1}3 . Să se afle cheia k ∈ {0, 1}3 ştiind că
s1 ⊕ k = 5, s2 ⊕ k = 3, πS (s1 ) ⊕ πS (s2 ) = 2.
6.7. EXERCIŢII 123

6.2. Să se construiască aproximări liniare pentru S - boxul din exerciţiul precedent.

6.3. Fie X1 , X2 , X3 variabile aleatoare independente cu valori ı̂n {0, 1} de tendinţe 1 , 2


respectiv 3 . Demonstraţi că X1 ⊕ X2 şi X2 ⊕ X3 sunt indepedente dacă şi numai dacă
1 = 0, 3 = 0 sau 2 = ±1/2.

6.4. Pentru fiecare din cele opt S - boxuri DES calculaţi tendinţa variabilei aleatoare
X2 ⊕ Y1 ⊕ Y2 ⊕ Y3 ⊕ Y4 .

6.5. S - boxul DES S4 are câteva proprietăţi specifice:

1. Arătaţi că a doua linie din S4 poate fi obţinută din prima linie folosind operaţia

(y1 , y2 , y3 , y4 ) −→ (y2 , y1 , y4 , y3 ) ⊕ (0, 1, 1, 0)

2. Arătaţi că orice linie din S4 poate fi transformată ı̂n orice altă linie printr-o operaţie
similară.

6.6. Fie πS : {0, 1}m −→ {0, 1}n un S - box. Demonstraţi că:

1. NL (0, 0) = 2m ;

2. NL (a, 0) = 2m − 1, ∀a ∈ [0, 2m − 1];


m −1 2n −1
2X
NL (a, b) ∈ {2n+2m−1 , 2n+2m−1 + 2n+m−1 }.
X
3.
a=0 b=0

6.7. Un S - box πS : {0, 1}m −→ {0, 1}n este ”balansat” dacă

|πs−1 (y)| = 2n−m

pentru orice y ∈ {0, 1}n .


Demonstraţi următoarele afirmaţii despre NL pentru un S - box balansat:

1. NL (0, b) = 2m − 1, ∀b ∈ [0, 2n − 1];


n −1
2X
2. ∀a ∈ [0, 2 − 1],m
NL (a, b) = 2m+n−1 − 2n−1 + i2n
b=0

unde i este un număr ı̂ntreg din intervalul [0, 2m−n ].

6.8. Fie S - boxul definită:


x 0 1 2 3 4 5 6 7 8 9 A B C D E F
πS (x) 8 4 2 1 C 6 3 D A 5 E 7 F B 9 0
Determinaţi tabela de aproximaţie liniară.
124 CAPITOLUL 6. ATACURI ASUPRA SISTEMELOR DE CRIPTARE BLOC

6.9. Fie un sistem de criptare P = C = K care asigură un secret perfect; deci, din
eK (α) = eK1 (α) rezultă K = K1 . Notăm P= Y = {β1 , β2 , . . . , βN }. Fie α un bloc de text
clar fixat. Definim funcţia g : Y −→ Y prin g(β) = eβ (α). Definim un graf orientat Γ
având ca noduri mulţimea Y şi ca arce (βi , g(βi )) (1 ≤ i ≤ N ).

1. Arătaţi că Γ este o reuniune de cicluri orientate disjuncte.

2. Fie T un parametru de timp fixat. Considerăm o mulţime Z = {γ1 , . . . , γm } ⊆ Y ,


astfel ca pentru orice βi ∈ Y, βi este ı̂ntr-un ciclu de lungime cel mult T , sau
există un element γj 6= βi astfel că distanţa de la βi la γj (ı̂n Γ) este cel mult T .
Demonstraţi că există o astfel de mulţime cu card(Z) ≤ 2N/T (deci card(Z) este
de complexitate O(N/T ).

3. Pentru fiecare γ−j ∈ Z, definim g −1 (γj ) ca fiind acel element βi astfel că g T (β−i) =
γj , unde g T este funcţia g aplicată de T ori.
Construiţi tabela X a perechilor (γj , g −1 (γj )), ordonate după prima coordonată.
Un algoritm care găseşte cheia K astfel ca β = eK (α), este următorul:

1. β0 ← β;
2. f lag ← T rue;
3. while g(β) 6= β0 do
3.1. if ∃ j β = γj and f lag then
3.1.1. β −→ g −1 (γj )
3.1.2. f lag −→ F alse
else
3.1.3. β −→ g(β);
3.2. K = β.

Arătaţi că el determină K ı̂n maxim T etape (compromisul spaţiu - timp este deci
O(N )).

4. Daţi un algoritm care construieşte o mulţime Z ı̂n timp O(N T ), fără a folosi tablouri
de mărine N .
Capitolul 7

Sisteme de criptare cu cheie publică

7.1 Consideraţii generale


În sistemele de criptare clasice, Alice şi Bob ı̂şi aleg o cheie secretă K care defineşte
regulile de criptare (eK ) şi decriptare (dK ). În aproape toate cazurile dK şi eK coincideau
sau se puteau deduce imediat una din alta. Astfel de sisteme sunt numite sisteme cu
cheie privată (sau sisteme simetrice) deoarece publicarea lui eK face sistemul extrem de
vulnerabil.
Un punct slab al sistemelor cu cheie privată este acela că necesită o comunicare pre-
alabilă a cheii ı̂ntre Alice şi Bob printr-un canal sigur, ı̂nainte de transmiterea mesajului
criptat. Practic, ı̂n condiţiile cererii tot mai mari de securizare a comunicaţiilor, acest
lucru este din ce ı̂n ce mai dificil de realizat.
Obiectivul sistemelor de criptare cu cheie publică este acela de a face ”imposibil”
(asupra acestui termen vom reveni) de obţinut cheia dK plecând de la eK . Astfel, regula
de criptare eK poate fi făcută publică, fiind accesibilă oricui. Avantajul constă ı̂n faptul
că Alice (sau oricare altă persoană) poate trimite lui Bob un mesaj criptat cu eK fără
a intra ı̂n prealabil ı̂n contact direct. Bob este singura persoană capabilă să decripteze
textul, utilizând informaţia sa secretă dK .
Ideea de sistem de criptare cu cheie publică apare ı̂n 1976 şi este prezentată de Diffie şi
Hellman (vezi [?])1 . De atunci au apărut diverse astfel de sisteme, a căror securitate este
bazată pe probleme calculatorii (N P complete). Cele mai cunoscute sisteme de criptare
cu cheie publică sunt:

• Sistemul RSA: se bazează pe dificultatea descompunerii ı̂n factori primi a numerelor


mari (de sute de cifre). Este sistemul cel mai larg utilizat ı̂n acest moment.
1
Se pare că prima idee de cheie publică este schiţată ı̂n ianuarie 1970 de către britanicul James
Ellis – membru ı̂n Communication-Electronic Security Group – ı̂n articolul The possibility of non-secret
encryption. Informaţia este făcută publică de către British Government Communications Headquarters
abia in 1997.

125
126 CAPITOLUL 7. SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

• Sistemul El Gamal: se bazează pe dificultatea calculului logaritmului discret ı̂ntr-un


corp finit.

• Sistemul Merkle - Hellman: primul sistem definit cu cheie publică, bazat pe problema
{0, 1} a rucsacului.

• Sistemul McEliece: este bazat pe teoria algebrică a codurilor, decodificarea unui cod
liniar fiind de asemenea o problemă N P - completă.

• Curbe eliptice: Sunt sisteme de criptare care ı̂şi desfăşoară calculele pe mulţimea
punctelor unei curbe eliptice (ı̂n locul unui inel finit Zn ).

7.2 Funcţii neinversabile


O observaţie importantă este aceea că un sistem cu cheie publică nu este sigur ı̂n mod
necondiţionat; oricine – putând să efectueze criptări – are posibilitatea să găsească anu-
mite puncte slabe care să ı̂i permită să şi decripteze mesajele. Ideea de bază folosită este
aceea de funcţie neinversabilă. Să clarificăm puţin acest aspect.

Exemplul 7.1. Ne putem imagina uşor străzile cu sens unic dintr-un oraş. Astfel, este
uşor ca mergând pe astfel de străzi să ajungi de la punctul A la punctul B, dar este
imposibil să ajungi de la B la A. În acest mod, criptarea este privită ca direcţia A → B;
deşi este foarte uşor de parcurs drumul ı̂n această direcţie, nu te poţi ı̂ntoarce ı̂napoi spre
A (adică să decriptezi mesajul).

Exemplul 7.2. Să considerăm cartea de telefon a unui oraş mare2 ; cu ajutorul ei este
foarte uşor să găsim numărul de telefon al unei anumite persoane. În schimb, este extrem
de greu - practic imposibil - să afli persoana care are un anumit număr de telefon. Te
afli ı̂n situaţia parcurgerii secvenţiale a (cel puţin) unui volum gros, ceea ce conduce la o
creştere exagerată a timpului.
Aceasta dă o sugestie de construcţie a unui sistem de criptare cu cheie publică. Cripta-
rea se face independent de context, literă cu literă. Pentru fiecare literă a textului clar se
alege un nume care ı̂ncepe cu acest caracter şi numărul de telefon al persoanei respective
va constitui criptarea. Sistemul este homofonic; două apariţii diferite ale aceleiaşi litere
vor fi codificate foarte probabil cu numere diferite.
De exemplu, textul clar SOLIST se poate cripta astfel:

2
O carte de telefon expirată va duce la creşterea dificultăţii decriptării ilegale.
7.2. FUNCŢII NEINVERSABILE 127

S Simion Pavel 6394502


O Olaru Ştefan 7781594
L Lambru Stelian 6300037
I Ilie Romeo 3134971
S Solovean Raluca 6281142
T Tecuceanu Paul 3359962

Deci, textul criptat va fi


639450 277815 946300 037313 497162 811423 359962.
De remarcat că metoda este nedeterministă; din acelaşi text clar se pot obţine enorm
de multe texte criptate. Pe de-altă parte, orice text criptat conduce la un text clar unic.
Bob va avea la dispoziţie pentru decriptare o carte de telefon ordonată crescător după
numere. Aceasta ı̂i va permite să decripteze mesajele cu un algoritm de complexitate
O(log n).

În general, o funcţie neinversabilă f trebuie să verifice două condiţii:

• Fiind dat x, f (x) este uşor de calculat;

• Calculul lui x din f (x) este imposibil.

De remarcat că, din punct de vedere strict matematic, nu se cunosc astfel de funcţii. A
demonstra că există funcţii neinversabile este echivalent cu a demonstra relaţia P =
6 N P,
conjectură care stă la baza ı̂ntregii teorii criptografice (a se vedea [?], [?]). De aceea,
termenii folosiţi sunt relativi la complexitatea calculatorie. Astfel, o problemă este:

1. uşoară – dacă se poate rezolva cu un algoritm cel mult liniar;

2. grea – dacă se poate rezolva cu un algoritm polinomial neliniar;

3. imposibilă – dacă este N P - completă.

Am listat la ı̂nceput o serie de probleme N P - complete care stau la baza principalelor


sisteme de criptare cu cheie publică.

Exemplul 7.3. Să considerăm ”problema rucsacului” (a se vedea sistemul de criptare


Merkle Hellman prezentat ı̂n Capitolul 11). Ea constă dintr-un vector A = (a1 , a2 , . . . , an )
cu n elemente numere ı̂ntregi, pozitive, distincte, şi un număr ı̂ntreg pozitiv k. Trebuiesc
aflaţi acei ai din A (dacă există) a căror sumă este k. Numele intuitiv dat problemei este
evident. De exemplu, fie
A = (43, 129, 215, 473, 903, 302, 561, 1165, 696, 1523) şi k = 3231.
Se determină 3231 = 129 + 473 + 903 + 561 + 1165, care este o astfel de soluţie (vom
da mai târziu o definiţie formală riguroasă a problemei).
În principiu o soluţie se poate găsi parcurgând sistematic toate submulţimile lui A şi
verificând dacă suma elementelor lor este k. În cazul de sus, aceasta ı̂nseamnă 210 − 1 =
1023 submulţimi (fără mulţimea vidă), dimensiune acceptabilă ca timp de lucru.
128 CAPITOLUL 7. SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

Ce se ı̂ntâmplă ı̂nsă dacă A are câteva sute de componente ? În acest caz se cunoaşte
faptul că problema rucsacului este N P - completă.
Cu ajutorul lui A se poate defini o funcţie f astfel:
Fie x ∈ [0, 2n − 1]; x poate fi reprezentat ı̂n binar ca un cuvânt de lungime n (com-
pletând eventual ı̂n faţă cu 0 - uri). f (x) va fi numărul obţinut din A prin ı̂nsumarea
tuturor numerelor ai aflate pe poziţiile marcate cu 1 ı̂n reprezentarea binară a lui x.
Formal,
f (x) = A · BxT
unde Bx este reprezentarea binară a lui x, scrisă ca un vector coloană.
Să definim acum un sistem de criptare bazat pe problema rucsacului. Textul clar
este codificat iniţial ı̂n binar şi segmentat apoi ı̂n blocuri de câte n biţi (eventual ultimul
bloc este completat la sfârşit cu zerouri). Fiecare bloc rezultat este apoi criptat calculând
valoarea corespunzătoare a funcţiei f .
Pentru alfabetul latin sunt suficienţi 5 biţi pentru codificarea binară a literelor şi a
spaţiului. Mai exact, dacă asociem literelor A - Z reprezentările binare ale numerelor
1 − 26, vom avea:

− 00000 A − 00001 B − 00010


C − 00011 D − 00100 E − 00101
F − 00110 G − 00111 H − 01000
I − 01001 J − 01010 K − 01011
L − 01100 M − 01101 N − 01110
O − 01111 P − 10000 Q − 10001
R − 10010 S − 10011 T − 10100
U − 10101 V − 10110 W − 10111
X − 11000 Y − 11001 Z − 11010

Să considerăm un text clar; FLOARE DE COLT de exemplu. Cum fiecare caracter se
codifică ı̂n 5 biţi, ı̂n fiecare bloc intră două caractere:
FL OA RE D E CO LT.
Codificând cu ajutorul vectorului rucsac A definit anterior, se obţin şapte blocuri de
câte 10 biţi:

0011001100 0111100001 1001000101 0000000100 0000000101 0001101111 0110010100

care conduc la textul criptat:


(2414, 3243, 3204, 1165, 1118, 5321, 1811).

Să considerăm sistemul de criptare definit ı̂n Exemplul ??. Dacă ı̂l privim ca un sistem
clasic (cu cheie privată), criptanalistul trebuie să afle vectorul de bază A şi apoi să rezolve
problema rucsacului.
7.3. TRAPA SECRETĂ 129

Dacă el foloseşte un atac cu text clar ales, ı̂l va afla uşor pe A: este suficient să trimită
n texte clare cu cı̂te un singur 1 iar restul 0. Problema apare ı̂n momentul rezolvării
problemei rucsacului; aici atât Bob cât şi Oscar sunt puşi ı̂n faţa acelaiaşi probleme N P
- complete. Ori, practic, doar Oscar trebuie să rezolve o problemă dificilă, nu şi Bob.
O altă problemă ridicată de acest sistem de criptare: este obligatoriu ca un text criptat
să determine ı̂n mod unic un text clar. Aceasta ı̂nseamnă că nu trebuie să existe două
submulţimi ale lui A care să aibă aceeaşi sumă. Astfel, dacă se ia A = (17, 103, 50, 81, 33),
textul criptat (131, 33, 100, 234, 33) poate fi decriptat ı̂n două moduri: SAUNA şi FAUNA.

7.3 Trapa secretă


Pentru ca Bob să nu fie pus ı̂n aceaşi situaţie ca şi Oscar, el trebuie să dispună de
un procedeu care să ı̂i permită să transforme problema N P - completă publică, ı̂ntr-o
problemă uşoară. Acest procedeu este numit trapă secretă. În primul exemplu, trapa
secretă era cartea de telefon ordonată după numerele de telefon, nu după abonaţi. Să
vedem care este trapa secretă ı̂n sistemul de criptare definit ı̂n Exemplul ??:

Exemplul 7.4. Sunt clase de probleme ale rucsacului uşor de rezolvat; una din ele o
formează vectorii cu creştere mare.
Spunem că vectorul rucsac A = (a1 , a2 , . . . , an ) este super-crescător dacă
j−1
X
∀ j ≥ 2, aj > ai .
i=1

În acest caz, pentru a rezolva problema rucsacului este suficient să parcurgem vectorul
A de la dreapta spre stânga. Cunoscând valoarea k, cercetăm ı̂ntâi valoarea de adevăr
a relaţiei k ≥ an . Dacă răspunsul este FALSE, an nu poate aparţine sumei pe care o
căutăm. Dacă ı̂nsă se obţine TRUE, an trebuie să fie ı̂n sumă, deoarece toate elementele
ai rămase nu pot depăşi ı̂n sumă pe k.
Vom defini
(
k dacă an > k
k1 =
k − an dacă an ≤ k
şi repetăm procedeul pentru k1 şi an−1 . Algoritmul se va opri la valoarea a1 .
Să presupunem că avem vectorul rucsac super-crescător

A = (1, 3, 5, 11, 21, 44, 87, 175, 349, 701)

şi vrem să decodificăm mesajul 278. Vom parcurge 10 paşi, sumarizaţi ı̂n Tabelul 1.
130 CAPITOLUL 7. SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

Număr Componenta lui A Bit rezultat


278 701 0
278 349 0
278 175 1
103 87 1
16 44 0
16 21 0
16 11 1
5 5 1
0 3 0
0 1 0
Tabelul 1:
În final se obţine secvenţa binară 00110 01100 (aflată pe ultima coloană) care - conform
codificării din Exemplul ?? corespunde perechii de litere F L.
Dacă se foloseşte ı̂nsă public o astfel de informaţie, orice utilizator – inclusiv Oscar
– poate decripta mesajele folosind un algoritm liniar. Ori s-a presupus (Capitolul 1) că,
pentru orice intrus, ı̂ncercarea de aflare a mesajului clar trebuie să conducă la rezolvarea
unei probleme N P - complete.
Exemplul 7.5. Pentru sistemul bazat pe problema rucsacului, Bob va proceda astfel: va
m
X
alege un număr m (m > ai ) numit modul şi un număr t, cmmdc(m, t) = 1 numit
i+1
multiplicator. Există atunci un număr s astfel ca t · s ≡ 1 (mod m).
Plecând de la vectorul super-crescător A = (a1 , a2 , . . . , an ) Bob generează vectorul
B = (b1 , b2 , . . . , bn ) unde bi = t · ai (mod m).
Vectorul B este declarat public pentru criptare, iar m, t şi s vor forma trapa secretă a
lui Bob.
Astfel, dacă luăm m = 1590 şi t = 43, vectorul super-crescător
A = (1, 3, 5, 11, 21, 44, 87, 175, 349, 701)
devine
B = (43, 129, 215, 473, 903, 302, 561, 1165, 697, 1523),
adică cel prezentat ı̂n Exemplul ??. În plus, s = t−1 = 37.3
Cum se va proceda: Cel care doreşte să trimită lui Bob un mesaj criptat va folosi
vectorul rucsac B şi va cripta mesajul x ı̂n y = B · BxT , conform Exemplului ??.
La recepţie, Bob va calcula ı̂ntâi z = s · y (mod m), după care va decripta mesajul z
folosind vectorul super-crescător A. Se poate arăta uşor că soluţia este chiar x.
Astfel, de exemplu Alice poate cripta mesajul F L ı̂n 2414 (cf. Exemplului ??). La
primirea acestui număr, Bob va determina ı̂ntâi s · 2414 = 37 · 2414 (mod 1590) = 278. În
Exemplul ?? s-a văzut că decriptarea mesajului 278 cu vectorul A conduce la textul clar
F L.
3
Pentru calculul inversului unui număr se poate folosi algoritmul lui Euclid extins, prezentat ı̂n Anexă.
7.4. SECURITATEA SISTEMELOR DE CRIPTARE CU CHEIE PU-BLICĂ 131

Putem trasa acum câteva principii generale de construire a unui sistem de criptare cu
cheie publică ([?]):

1. Se ı̂ncepe cu o problemă dificilă P ; rezolvarea lui P este imposibilă ı̂n conformitate


cu teoria complexităţii (nu se cunoaşte nici un algoritm determinist de complexitate
polinomială care să rezolve P ).

2. Se selectează o subproblemă P1 a lui P , rezolvabilă ı̂n timp polinomial (preferabil


liniar).

3. Se aplică o transformare problemei P1 astfel ı̂ncât să se obţină o problemă P2 care


să nu semene cu P1 dar să fie foarte apropiată de problema P .

4. Se face publică problema P2 şi se descrie algoritmul de criptare bazat pe aceasta.


Informaţia referitoare la modul ı̂n care se obţine P1 din P2 este o trapă secretă.

5. Se construiesc detaliile sistemului de criptare, astfel ı̂ncât principiile de lucru să


difere esenţial pentru destinatar faţă de criptanalist; astfel, ı̂n timp ce primul va
folosi trapa secretă şi va rezolva problema P1 , al doilea va trebui să rezolve problema
P2 , imposibilă datorită asemănării ei cu problema P .

În funcţie de aceste principii generale, apar ı̂n detalii de construcţie multe alte probleme
pe care constructorii sistemelor de criptare trebuie să le rezolve.

7.4 Securitatea sistemelor de criptare cu cheie pu-


blică
În majoritatea sistemelor de criptare, aparatul matematic folosit este bazat pe teoria nu-
merelor, teoria funcţiilor recursive şi teoria probabilităţilor. Pe o scară mult mai restrânsă
apar funcţiile eliptice, teoria automatelor, calcul neconvenţional (cuantic, molecular etc).
Sistemele de criptare cu cheie publică au un avantaj major faţă de sistemele clasice:
aici nu mai este necesar efortul transmiterii cheii. Un contact prealabil ı̂ntre Alice şi Bob
pentru a pune la punct detaliile sistemului de criptare este inutil.
Un sistem de criptare cu cheie publică nu oferă ı̂nsă o securitate absolută. Aceasta se
datorează faptului că Oscar are oricând posibilitatea să lanseze atacuri pasive sau active.
Anume:

• Dacă un text criptat y este interceptat de criptanalist, acesta poate căuta exhaustiv
un text clar x astfel ca eK (x) = y. Singura apărare contra unui astfel de atac constă
ı̂n gradul de complexitate al sistemului.
132 CAPITOLUL 7. SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

• Un criptanalist activ poate efectua cu succes un atac numit man-in-the-middle (a


nu se confunda cu meet-in-the-middle prezentat ı̂n capitlul anterior).
Să presupunem că Alice şi Bob doresc să stabilească un contact. Ei fac publice
cheile de criptare eA respectiv eB . Dacă contactul este nepersonalizat, Oscar poate
controla mesajele schimbate ı̂ntre cei doi, ı̂n felul următor:

e1B (eA , eB ) e1A


Alice  - Bob
6 6
6

y1 = e1B (m) - ?
y = eB (m) -
? Oscar

1. Oscar ”opacizează” printr-un mijloc oarecare aceste chei, şi trimite lui Alice
cheia e1B ca din partea lui Bob; substituie – similar – pentru Bob cheia eA cu
e1A .
2. Fie m mesajul pe care Alice vrea să ı̂l trimită lui Bob. Ea va cripta şi va trimite
y1 = e1B (m).
3. Oscar interceptează mesajul (reamintim, toate canalele sunt nesigure) şi află
m = d1B (y1 ).
4. Oscar recriptează y = eB (m) şi trimite y lui Bob.

Bineı̂nţeles, dacă doreşte, Oscar poate modifica, interschimba sau ı̂ntârzia mesajele
interceptate.
Din această cauză, ı̂n toate sistemele de criptare cu cheie publică apare necesitatea
autentificării mesajului sau a expeditorului, precum şi aceea a confidenţialităţii.
Definiţia 7.1. Confidenţialitatea4 asigură accesul la informaţie doar părţilor autorizate
de a avea acest acces.
Definiţia 7.2. Autentificarea5 este procesul prin care un calculator (program de calculator
sau alt utilizator) ı̂ncearcă să confirme unui destinatar că mesajul primit de acesta vine
(sau nu vine) din partea sa.
Metodele prin care se poate autentifica un expeditor uman, sunt clasificate ı̂n:
1. ”ceva ce utilizatorul este” (de exemplu amprente digitale, de retină, de voce, secvenţă
DNA, recunoaşterea semnăturii, identificatori biometrici).
2. ”ceva de utilizatorul are” (de exemplu card ID, date de securitate soft aflate pe
calculator sau telefon).
4
conform International Standards Organization (ISO).
5
de la grecescul ”authentes” – autor.
7.4. SECURITATEA SISTEMELOR DE CRIPTARE CU CHEIE PU-BLICĂ 133

3. ”ceva ce utilizatorul ştie” (de exemplu un password, o parolă, un număr de identi-


ficare - PIN).

4. Orice combinaţie ı̂ntre metodele anterioare (de exemplu un card bancar cu PIN
asigură o dublă autentificare).

Alt termen frecvent utilizat este cel de integritate. El se referă la validitatea datelor.

Definiţia 7.3. Integritatea este siguranţa că datele la care se referă un utilizator pot fi
accesate şi eventual modificate numai de cei autorizaţi să o facă.

În general integritatea poate fi compromisă ı̂n două moduri:

1. Prin alterare intenţionată (de exemplu modificarea unui cont bancar, a unei adrese
de e-mail, a unui document de identitate);

2. În mod accidental (transmisii perturbate de zgomote de canal, zgârierea harddiscu-


lui)6 .

Să presupunem că Alice şi Bob sunt doi utilizatori, cu posibile conflicte de interese.
Când Alice trimite un mesaj lui Bob, ambele părţi trebuie să se asigure că:

• Mesajul nu este trimis de o terţă persoană care pretinde a fi Alice;

• Bob să nu poată obliga pe Alice să ţină cont de mesaje care nu-i aparţin, iar Alice
să nu poată repudia propriile mesaje.

Într-o oarecare măsură, cele două condiţii sunt contradictorii: conform primei condiţii,
Bob trebuie să ştie ceva despre modul de criptare al lui Alice, care ı̂i va permite să
autentifice mesajul, iar conform celei de-a doua condiţii, el nu trebuie să ştie prea mult.
O modalitate frecvent utilizată pentru autentificarea mesajelor este folosirea codurilor de
autentificare.

Exemplul 7.6. MAC-ul (Message Authentication Code) definit ı̂n cadrul sistemului de
criptare DES este o variantă prin care se poate asigura atât autenticitatea cât şi integri-
tatea mesajului.

Dacă se solicită şi autentificarea partenerilor, atunci se foloseşte de obicei semnătura


electronică.
6
De recuperarea informaţiei pierdută ı̂n acest mod se ocupă Teoria Codurilor detectoare şi corectoare
de erori.
134 CAPITOLUL 7. SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

Exemplul 7.7. Să presupunem că Alice vrea să trimită lui Bob mesajul m. Dacă se
foloseşte un sistem de criptare cu cheie publică ı̂n care funcţiile de criptare/decriptare
sunt comutative, iar (eA , dA ), (eB , dB ) sunt perechile (cheie publică, cheie privată) ale
celor doi parteneri, ei pot urma următorul protocol:
1. Alice trimite lui Bob y1 = eA (m);
2. Bob trimite lui Alice y = eB (y1 );
3. Alice trimite lui Bob dA (y) = eB (m);
4. Bob calculează dB (eB (m)) = m şi află mesajul.
Se observă că sunt verificate cele două condiţii de autentificare şi – ı̂n plus – protocolul
rezistă unui atac de tip man-in-the-middle.
Dacă dorim să folosim un singur contact, Alice poate trimite mesajul y = eB (dA (m)).
La recepţie, Bob va folosi propria sa cheie pentru decriptare, impreună cu cheia publică a
lui Alice. Metoda merge şi pentru sisteme de criptare necomutative.

7.5 Comparaţie ı̂ntre criptarea simetrică şi cea cu


cheie publică
Avantaje ale sistemelor de criptare cu cheie simetrică:
1. Pot transmite volume mari de date. Există implementări hard care pentru unele
sisteme de criptare asigură rate de criptare de sute de mega-octeţi pe secundă (sunt
şi implementări soft cu rate de mega-octeţi pe secundă).
2. Cheile sunt relativ scurte.
3. Pot fi folosite ca bază de construcţie a diverselor mecanisme de criptare, cum ar fi
generatori de numere pseudo-aleatoare, generatori de funcţii de dispersie, scheme
de semnătură.
4. Prin compunere pot conduce la sisteme de criptare puternice.
5. Au o istorie bogată ı̂n evenimente şi experienţă.
Dezavantaje ale sistemelor de criptare cu cheie simetrică:
1. Cheia trebuie să rămână permament secretă ı̂n (cel puţin) două locuri distincte.
2. Cu cât lungimea unui mesaj criptat este mai mare, cu atât el este mai uşor de spart.
3. În reţele mari, o gestionare a cheilor devine extrem de dificilă.
4. Necesită un canal sigur de comunicare, cel puţin pentru transmiterea cheii. Acest
lucru devine dificil mai ales pentru sistemele care necesită schimbări frecvente ale
cheilor de criptare/decriptare.
7.6. EXERCIŢII 135

Avantaje ale sistemelor de criptare cu cheie publică:

1. Sistemul este ideal pentru transmiterea informaţiei prin canale nesigure.

2. Sistemele cu cheie publică sunt simplu de definit şi elegante matematic.

3. Doar cheia de decriptare trebuie ţinută secretă, la un singură adresă (destinatar).

4. În funcţie de modul de utilizare, o pereche de chei (publică, privată) poate fi păstrată
o perioadă mai lungă de timp.

5. Conduc la aplicaţii de mare ı̂ntindere: semnături electronice, algoritmi de autentifi-


care, componente de comerţ electronic etc.

Dezavantaje ale sistemelor de criptare cu cheie publică:

1. Sunt semnificativ mai lente decât sistemele simetrice.

2. Sunt necesare chei de lungimi mult mai mari.

3. Nu se poate garanta securitatea absolută a nici unei scheme de criptare cu cheie


publică.

4. Implementarea trebuie realizată cu foarte mare grijă. Sisteme cu grad teoretic ridi-
cat de securitate pot fi sparte uşor printr-o implementare neglijentă.

După cum se observă, cele două clase de sisteme de criptare dispun de o serie de avantaje
complementare. Acest lucru face ca ele să fie folosite combinat.

Exemplul 7.8. Multe sisteme de criptare ı̂ncep comunicarea transmiţând via un sistem cu
cheie publică, cheia unui sistem simetric. În faza a doua, mesajele sunt criptate folosind
sistemul simetric de criptare. Aceasta asigură o viteză mult mai mare de transmitere şi
un spor de autenticitate a mesajelor.

7.6 Exerciţii
7.1. Justificaţi modul ı̂n care un sistem de criptare simetric asigură condiţiile de confiden-
ţialitate, autentificare şi integritate.

7.2. Construiţi exemple de funcţii neinversabile.

7.3. Fie f (x) şi g(x) două funcţii neinversabile. Daţi un argument auristic pentru a
arăta că nici una din funcţiile f (x) + g(x), f (x) · g(x), f (g(x)) nu este ı̂n mod obligatoriu
neinversabilă.
136 CAPITOLUL 7. SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

7.4. Alice şi Bob aleg public un nunăr prim p. După aceea, fiecare alege şi păstrează
secret câte două numere (eA , dA ) respectiv (eB , dB ) astfel ca eX · dX ≡ 1 (mod p − 1).
Dacă Alice doreşte să transmită lui Bob mesajul m, se va urma protocolul:

1. Alice trimite lui Bob textul x = meA ;

2. Bob răspunde cu mesajul y = xeB ;

3. Alice trimite ı̂napoi mesajul z = y dA .

Arătaţi că Bob este capabil să decripteze mesajul şi discutaţi problemele de securitate
implicate.
Capitolul 8

Sistemul de criptare RSA

8.1 Descrierea sistemului RSA


Sistemul de criptare RSA (Rivest - Shamir - Adleman) este ı̂n acest moment cel mai
cunoscut şi utilizat sistem cu cheie publică1 . Aceasta se datorează ı̂n primul rând modali-
tăţii foarte simple de criptare şi decriptare, care se realizează similar – cu aceleaşi module
de calcul (proprietate ı̂ntâlnită la multe sisteme simetrice: Beaufort, Enigma, AES etc).
Iată ı̂n ce constă sistemul de criptare RSA:
Fie p, q numere prime impare distincte şi n = pq.
Indicatorul său Euler este φ(n) = (p − 1)(q − 1).
Fie P = C= Zn . Se defineşte
K= {(n, p, q, a, b)| n = pq, ab ≡ 1 (mod φ(n))}
Pentru K = (n, p, q, a, b) se definesc (∀x, y ∈ Zn ):
eK (x) = xb (mod n)
şi
dK (y) = y a (mod n)
Valorile n şi b sunt publice, iar p, q şi a sunt secrete.
Deoarece ab ≡ 1 (mod φ(n)), avem ab = tφ(n) + 1.
Atunci, pentru un x ∈ Zn∗ = Zn \ {0}, putem scrie (toate calculele se fac ı̂n Zn ):
 t
(xb )a ≡ xtφ(n)+1 ≡ xφ(n) x ≡ 1t x ≡ x.
Pentru x = 0 afirmaţia este banală.

Exemplul 8.1. Să presupunem că Bob alege p = 101, q = 113. Atunci n = 11413,
φ(n) = 11200. Deoarece 11200 = 26 52 7, un număr b poate fi utilizat ca exponent de
1
Sistemul este prezentat ı̂n 1977 de Ron Rivest, Adi Shamir şi Len Adleman ı̂n cadrul unui proiect
de cercetare la MIT. Totuşi, după declasificarea ı̂n 1997 a unor documente din Marea Britanie, se pare
că matematicianul Clifford Cocks a elaborat ı̂n 1973 un sistem echivalent, prezentat ı̂ntr-un document
intern GCHQ (Government Communications Headquarters).

137
138 CAPITOLUL 8. SISTEMUL DE CRIPTARE RSA

criptare dacă şi numai dacă nu este divizibil cu 2, 5 sau 7 (deci Bob poate să nu factorizeze
φ(n); este suficient să verifice dacă cmmdc(φ(n), b) = 1 folosind algoritmul lui Euclid).
Fie de exemplu b = 3533. Avem atunci b−1 = 6597 (mod 11200).
Deci, exponentul (secret) de decriptare este a = 6597.
Bob face public n = 11413 şi b = 3533.
Dacă Alice doreşte să-i transmită lui Bob mesajul m = 9726, ea calculează

97263533 (mod 11413) = 5761

şi trimite prin canal textul criptat c = 5761. Când Bob primeşte acest număr, el determină

57616597 (mod 11413) = 9726.

Securitatea sistemului de criptare RSA se bazează pe ipoteza că funcţia de criptare


eK (x) = xb mod n este neinversabilă din punct de vedere al complexităţii, deci este imposi-
bil pentru Oscar să o determine. Trapa secretă de care dispune Bob pentru decriptare
este descompunerea n = pq. Deoarece Bob ştie această factorizare, el poate calcula
φ(n) = (p − 1)(q − 1) şi apoi determina exponentul de decriptare a folosind algoritmul lui
Euclid extins (a se vedea Anexa).

8.2 Implementarea sistemului RSA


Pentru a realiza criptarea, Bob trebuie să efectueze următorii paşi (fiecare din ei va fi
detaliat mai târziu):

Tabelul 8.1:

1. Generează două numere prime mari p, q.

2. Calculează n = pq şi φ(n) = (p − 1)(q − 1).

3. Alege aleator un număr b (1 < b < φ(n)) astfel ca cmmdc(b, φ(n)) = 1.

4. Calculează a = b−1 mod φ(n) folosind algoritmul lui Euclid extins.

5. Face public n şi b.

Un atac evident al sistemului constă ı̂n ı̂ncercarea de factorizare a lui n. Dacă se


realizează aceasta, este uşor de determinat φ(n) = (p − 1)(q − 1) şi de calculat exponentul
de decriptare a plecând de la b.
8.2. IMPLEMENTAREA SISTEMULUI RSA 139

Deci, pentru ca sistemul RSA să fie sigur, este necesar ca n să fie suficient de mare
pentru ca factorizarea sa să fie imposibilă (din punct de vedere al complexităţii). Algorit-
mii de factorizare actuali pot descompune rapid numere de până la 200 cifre zecimale. Se
recomandă de aceea – pentru siguranţă – să se lucreze cu numere prime p şi q de cel puţin
300 cifre fiecare, deci n va avea peste 500 cifre. Aproape toate implementările actuale ale
sistemului folosesc chei de 1024 − 2048 biţi2 .
Cu intenţia că vom reveni asupra problemelor legate de numere prime mari, să studiem
ı̂ntâi operaţiile necesare pentru criptare şi decriptare. Orice astfel de calcul se bazează
pe o exponenţiere modulo n. Cum n este foarte mare, vom utiliza aritmetica numerelor
mari pentru lucrul ı̂n Zn , timpul de calcul necesar fiind direct proporţional cu numărul
de biţi ai lui n.
Dacă n ocupă k biţi ı̂n memorie (deci k = [log2 n] + 1), prin metode de calcul uzuale
se ajunge la concluzia că suma a două numere de k biţi se face ı̂n O(k), iar ı̂nmulţirea ı̂n
O(k 2 ). La fel şi reducerea modulo n. Deci, pentru x, y ∈ Zn , numărul xy mod n se poate
determina prin calcule de complexitate O(k 2 ). Vom numi această operaţie multiplicare
modulară.
Să cercetăm acum exponenţierea modulară xc mod n. O modalitate de calcul constă ı̂n
efectuarea de c−1 multiplicări modulare – proces foarte ineficient pentru c mare, deoarece
algoritmul devine de complexitate exponenţială.
Există ı̂nsă un algoritm de exponenţiere rapidă, care realizează xc mod n cu complexi-
tate O(k 3 ) (deci polinomial). Acesta utilizează descompunerea binară a lui c,
s−1
ci 2i
X
c=
i=0

unde s (s ≤ k) este numărul de biţi ai lui c, iar ci ∈ {0, 1}.


Exponenţierea se face doar prin ridicări la pătrat şi maxim s ı̂nmulţiri modulare,
conform algoritmului:

z ←− 1;
for i ←− s − 1 downto 0 do
z ←− z 2 (mod n);
if ci = 1 then z ←− z · x (mod n)

Exemplul 8.2. Să reluăm datele din Exemplul ??. Calculul lui 97263533 mod 11413 se
efectuează cu algoritmul de sus ı̂n numai 12 paşi; anume:

2
Un număr n de maxim 256 biţi poate fi factorizat de un PC obişnuit ı̂n câteva ore, folosind un soft
free. Dacă n are până la 512 biţi, el poate fi factorizat folosind o reţea de câteva sute de calculatoare,
conform unei scheme prezentate ı̂n 1999. În 2003 a fost pusă sub semnul ı̂ntrebării securitatea modulelor
de 1024 biţi.
140 CAPITOLUL 8. SISTEMUL DE CRIPTARE RSA

i ci z
2
11 1 1 · 9726 = 9726
10 1 97262 · 9726 = 2659
9 0 26592 = 5634
8 1 56342 · 9726 = 9167
7 1 91672 · 9726 = 4958
6 1 49582 · 9726 = 7783
5 0 77832 = 6298
4 0 62982 = 4629
3 1 46292 · 9726 = 10185
2 1 101852 · 9726 = 105
1 0 1052 = 11025
0 1 110252 · 9726 = 5761
Deci textul clar 9726 este criptat de Alice ı̂n 5761.

Pentru aplicarea sistemului de criptare RSA, trebuie generate ı̂ntâi numerele prime
p, q – despre care vom discuta ı̂n secţiunea următoare. Etapa a doua (din Tabelul ??)
se efectuează evident ı̂n O((log2 n)2 ). Etapele 3 şi 4 folosesc algoritmul lui Euclid extins.
Ca rezultat general, calculul celui mai mare divizor comun dintre a şi b (cmmdc(a, b)) cu
a > b se poate realiza cu complexitatea O((log2 a)2 ).
În general, un algoritm RSA este cam de 1000 ori mai lent decât DES pentru o
implementare harwdare şi cam de 100 ori la o implementare software. În [?] se dau câteva
tabele cu astfel de valori comparative, la nivelul anului 1995.

8.3 Teste de primalitate probabiliste


În realizarea sistemului de criptare RSA trebuie să generăm aleator numere prime cu
număr mare de cifre. Practic, se realizează secvenţe de numere, a căror primalitate se
testează, până se ajunge la un număr prim. Pentru teste se folosesc algoritmi probabilişti,
al căror avantaj este rapiditatea (complexitatea lor este log n) dar care pot afirma uneori
primalitatea unor numere care nu sunt prime. Aceste erori se pot reduce la o marjă
acceptabilă prin multiplicarea testelor.
Problema generării aleatoare este posibilă din următorul considerent. Un rezultat din
teoria numerelor (numit Teorema rarefierii numerelor prime) afirmă că sunt circa n/log n
numere prime mai mici decât n. Astfel, pentru un modul de 512 biţi, un număr p de 256
biţi are o probabilitate 1/logp ≈ 1/177 de a fi prim. Deci se fac ı̂n medie cam 177 generări
de numere p pentru a obţine un număr prim (dacă se foloseşte şi faptul că se generează
numai numere impare, aceasta reduce la jumătate numărul de ı̂ncercări). Rezultă că este
practic să se construiască numere mari, care sunt probabil prime, pe baza cărora să se
realizeze criptarea RSA. Vom detalia acest procedeu.
Definiţia 8.1. O problemă de decizie este o problemă care pune o ı̂ntrebare al cărui
răspuns este dicotomic (Da/Nu).
8.3. TESTE DE PRIMALITATE PROBABILISTE 141

Un algoritm probabilist este un algoritm care foloseşte numere aleatoare.


Definiţia 8.2. Un algoritm Monte - Carlo pozitiv este un algoritm probabilist care rezolvă
o problemă de decizie ı̂n care orice răspuns pozitiv este corect, dar pentru care un răspuns
negativ poate fi incorect.
În mod similar se defineşte algoritmul Monte - Carlo negativ.
Un algoritm Monte - Carlo pozitiv are o probabilitate de eroare  dacă pentru orice
problemă al cărei răspuns ar trebui să fie pozitiv, algoritmul dă un răspuns negativ cu
probabilitatea cel mult .
Problema de decizie folosită aici, numită Problema de descompunere este
Fiind dat un număr ı̂ntreg n, se poate el descompune ı̂n produs de alte numere suprau-
nitare mai mici ?
Vom prezenta ı̂n această secţiune doi algoritmi de tip Monte Carlo pozitiv care rezolvă
această problemă de de decizie.

8.3.1 Algoritmul Solovay - Strassen


Să reamintim ı̂ntâi câteva noţiuni matematice:
Definiţia 8.3. Fie p ≥ 3 număr prim şi a ∈ Zp∗ . Spunem că a este rest (reziduu) pătratic
modulo p dacă ecuaţia x2 ≡ a (mod p) are soluţie ı̂n Zp .
În caz contrar, un număr a 6= 0 nu este rest pătratic.
Exemplul 8.3. Resturile pătratice modulo 11 sunt 1, 3, 4, 5, 9 Aceasta deoarece ı̂n Z11
avem (±1)2 = 1, (±5)2 = 3, (±2)2 = 4, (±4)2 = 5, (±3)2 = 9.
Problema resturilor pătratice constă ı̂n a decide dacă un număr n dat este sau nu un
rest pătratic. Un algoritm determinist pentru rezolvarea acestei probleme se bazează pe
Teorema 8.1. (Criteriul lui Euler). Dacă p ≥ 3 este prim, un număr a este rest pătratic
modulo p dacă şi numai dacă
p−1
a 2 ≡ 1 (mod p)
Demonstraţie. Să presupunem a ≡ x2 (mod p). Cum xp−1 ≡ 1 (mod p) (Teorema lui
Fermat) pentru x 6≡ 0 (mod p),vom avea
p−1 p−1
a 2 ≡ (x2 ) 2 ≡ xp−1 ≡ 1 (mod p).
p−1
Invers, fie a 2 ≡ 1 (mod p) şi b ∈ Zp un element primitiv (de ordin p − 1). Atunci
a ≡ bi (mod p) pentru un anumit i. Calculăm
p−1 p−1 i(p−1)
1≡a 2 ≡ (bi ) 2 ≡b 2 (mod p).
Ordinul p − 1 al lui b va divide i(p − 1)/2. Deci i este par şi rădăcinile pătrate ale lui a
sunt ±bi/2 .
142 CAPITOLUL 8. SISTEMUL DE CRIPTARE RSA

Definiţia 8.4. Dacă p ≥ 3 este prim, pentru orice număr a ≥ 0 se defineşte simbolul
Legendre prin

! 0 dacă a ≡ 0 (mod p)
a


= 1 dacă a este rest pătratic modulo p
p
−1


dacă a nu este rest pătratic modulo p

Teorema ?? asigură că a(p−1)/2 ≡ 1 (mod p) dacă şi numai dacă a este rest pătratic
modulo p. Dacă a este multiplu de p, evident a(p−1)/2 ≡ 0 (mod p). În sfârşit, dacă a nu
este rest pătratic modulo p, avem a(p−1)/2 ≡ −1 (mod p) deoarece ap−1 ≡ 1, a(p−1)/2 6≡
1 (mod p) şi −1 este singura rădăcină pătrată diferită de 1 modulo p. Este deci adevărată
teorema următoare:

Teorema 8.2. Dacă p este număr prim impar, atunci


!
a p−1
≡a 2 (mod p)
p

Simbolul lui Legendre se poate generaliza astfel:

Definiţia 8.5. Fie n = pe11 . . . pekk un număr impar descompus ı̂n factori primi. Dacă
a ≥ 0 este un număr ı̂ntreg, se defineşte simbolul Jacobi prin
k
!ei
a a
  Y
=
n i=1 pi

6278
 
Exemplul 8.4. Să calculăm simbolul Jacobi . Descompunerea ı̂n factori primi a
9975
2
lui 9975 este 9975 = 3 · 5 · 7 · 19. Avem atunci
6278 2 6278
   2    
6278 6278 6278 2 3 6 8
       
= = =
9975 3 5 7 19 3 5 7 19
2
= (−1)(−1) (−1)(−1) = −1

Fie n > 1 un număr impar.


a
 
n−1
Dacă n este prim, atunci pentru orice a, avem ≡ a 2 (mod n).
n
Invers, dacă n nu este prim, este posibil ca egalitatea de sus să fie falsă. Dacă
congruenţa se verifică, spunem că n este număr Euler pseudo - prim pentru baza a.
De exemplu, 91 este pseudo-prim pentru baza 10 deoarece
10
 
= −1 = 1045 (mod 91).
91
Putem enunţa acum testul de primalitate Solovay - Strassen pentru un număr impar n:
8.3. TESTE DE PRIMALITATE PROBABILISTE 143

1. Se generează aleator un număr a ∈ Zn∗ ;


a
 
2. x ←− ;
n
3. if x = 0 then ”n nu este prim”
n−1
4. y ←− a 2 (mod n);

5. if x ≡ y (mod n) then ”n este prim”,


else ”n nu este prim”.

n−1
Pentru evaluarea a (mod n) se poate folosi un algoritm
2 de complexitate O((log n)3 ).
a
 
Problema este cum putem evalua simbolul Jacobi x ←− fără a factoriza pe n (altfel
n
ne ı̂nvârtim ı̂ntr-un cerc vicios !!).
Acest lucru se poate realiza folosind câteva proprietăţi. Anume:

Lema 8.1. Fie n un ı̂ntreg pozitiv impar. Atunci


x y
   
1. Dacă x ≡ y (mod n) atunci = ;
n n
(
2 1 dacă n ≡ ±1 (mod 8)
 
2. =
n −1 dacă n ≡ ±3 (mod 8)

x·y x y
     
3. = · ;
n n n
Lema 8.2. Fie m, n două numere ı̂ntregi pozitive impare. Atunci
  
n

m
  − dacă m ≡ 3 (mod 4), n ≡ 3 (mod 4)
= m
n n

m
altfel

Lăsăm ca exerciţiu demonstraţiile celor două leme.


7411
 
Exemplul 8.5. Să calculăm simbolul Jacobi . Vom avea succesiv:
9283
4 
7411 9283 1872 2 117 117
         
=− =− =− =− =
9283  7411  7411  7411 7411 7411
7411 40 2 3 5 5 117 2
        
=− =− =− = = = = −1
117 117 117 117 117 5 5
144 CAPITOLUL 8. SISTEMUL DE CRIPTARE RSA

 
O analiză sumară arată că se poate calcula simbolul Jacobi m n
folosind cel mult
2
O(log n) reduceri modulare, fiecare ı̂n timp O((log n) ). Deci complexitatea poate fi
estimată la O((log n)3 )3 .
Se poate arăta că numărul de baze a pentru care un număr neprim n este pseudo -
prim Euler, este cel mult n/2. Aceasta duce la concluzia că testul de primalitate Solovay
- Strassen este un algoritm Monte Carlo pozitiv pentru problema de descompunere, cu
probabilitate de eroare 1/2.
Un studiu referitor la complexitatea aplicării acestui test de primalitate şi a proba-
bilităţii de eroare se poate găsi ı̂n [?].

8.3.2 Algoritmul Miller - Rabin


Acest algoritm este cunoscut şi sub numele de testul de tare pseudo - primalitate. Forma
sa este:

1. Se descompune n − 1 = 2k m unde m este impar;

2. Se alege aleator ı̂ntregul a ∈ [2, n − 2];

3. b ←− am (mod n)

4. if b ≡ 1 (mod n) then ”n este prim”, Stop;

5. for i ←− 0 to k − 1 do
5.1. if b ≡ −1 (mod n) then ”n este prim”, Stop,
else b ←− b2 (mod n)

6 ”n nu este prim”, Stop

Evident, algoritmul este polinomial, de complexitate O((log n)3 ).

Teorema 8.3. Algoritmul Miller - Rabin este un algoritm Monte Carlo pozitiv pentru
problema de descompunere.

Demonstraţie. Să presupunem prin absurd că algoritmul răspunde că un număr prim n
se poate descompune, adică am 6≡ 1 (mod n). Vom urmări şirul de valori pe care le ia b.
k−1
Cum la fiecare iterare b este ridicat la pătrat, acest şir este am , a2m , . . . , a2 m .
Vom avea deci
i
a2 m 6≡ −1 (mod n) pentru 0 ≤ i ≤ k − 1.
3
O analiză mai detaliată poate reduce această complexitate la O((log n)2 ).
8.3. TESTE DE PRIMALITATE PROBABILISTE 145

k k−1
Deoarece n este prim, teorema lui Fermat dă a2 m ≡ 1 (mod n). Deci a2 m este o
rădăcină pătrată a lui 1 modulo n.
Din faptul că n este prim, singurele rădăcini pătrate ale lui 1 sunt ±1. Această
afirmaţie se poate arăta astfel:
x este rădăcină pătrată a lui 1 modulo n dacă şi numai dacă n|(x − 1)(x + 1). Cum n
este prim, avem n|(x − 1) (deci x ≡ 1 (mod n)) sau n|(x + 1) (adică x ≡ −1 (mod n)).
k−1 k−1
Cum prin ipoteză a2 m 6≡ −1 (mod n), avem a2 m ≡ 1 (mod n).
k−2
Atunci a2 m trebuie să fie rădăcină pătrată a lui 1, diferită de −1, deci
k−2
a2 m ≡ 1 (mod n).
Procedând iterativ, se ajunge la am ≡ 1 (mod n), ceea ce contrazice faptul că algorit-
mul nu s-a oprit la Pasul 4.

Dacă n este un număr impar neprim, atunci maxim 1/4 din numerele a ∈ Zn∗ conduc
la un rezultat fals. În [?] se apreciază că numărul maxim de astfel de valori este φ(n)/4,
pentru n 6= 9.
De exemplu, pentru n = 91 (neprim), mulţimea valorilor a pentru care algoritmul
dă răspuns incorect este {9, 10, 12, 16, 17, 22, 29, 38, 53, 62, 69, 74, 75, 79, 81, 82}. Pentru
n = 105 orice valoare a lui a conduce la un rezultat corect.
Deci, algoritmul Miller-Rabin este un algoritm Monte-Carlo pozitiv de probabilitate
 = 1/4.
În general se consideră că testul Miller - Rabin este mai bun decât Solovay - Strassen.
Câteva motive:

1. Solovay - Strassen este mai complex computaţional.

2. Implementarea lui Solovay - Strassen este mai dificilă din cauza calculului simbolului
Jacobi.

3. Probabilitatea de eroare pentru Solovay - Strassen este 1/2, pe când la Miller -


Rabin ea se reduce la 1/4.

4. Deoarece orice valoare a lui a pentru care testul Miller - Rabin este greşit este
un număr Euler pseudo-prim (vezi Exerciţiul ??), un test Miler - Rabin nu este
niciodată inferior unui test Solovay - Strassen.

Deoarece orice implementare a unui sistem RSA trebuie ı̂nsoţită de un generator de


numere prime mari, sunt necesare construcţii care să genereze rapid astfel de numere.
Bruce Schneier propune următoarea variantă ([?]):

1. Se generează un număr aleator p de n biţi.

2. Se verifică dacă primul şi ultimul bit sunt 1.


146 CAPITOLUL 8. SISTEMUL DE CRIPTARE RSA

3. Se verifică dacă p nu este divizibil cu numere prime mici (3, 5, 7, 11, . . .)4 .
4. Se aplică testul Miller - Rabin cu o valoare aleatoare a. Dacă p trece testul, se
ia altă valoare pentru a. Cinci teste sunt suficiente. Pentru viteză, se recomandă
să se ia valori mici pentru a. Dacă p eşuează la unul din cele cinci teste, se reia
algoritmul.
Se apreciază că utilizarea pasului 3, cu o testare a tuturor numerelor prime până la 256
elimină aproape 80% din cazurile nefavorabile.

8.4 Securitatea sistemului RSA


Vom trece ı̂n revistă câteva modalităţi de atac ale sistemelor de criptare RSA.
Ca o primă observaţie, RSA nu rezistă la un atac de tipul man-in-the middle, strategia
fiind cea prezentată ı̂n cazul general al sistemelor de criptare cu cheie publică. De aceea,
un sistem RSA este ı̂nsoţit permanent de un certificat generat conform unui protocol
P KI (Public Key Infrastructure) şi – bineı̂nţeles – de un generator de numere prime.

8.4.1 Informaţii despre p şi q


Evident, cunoaşterea lui φ(n) este suficientă pentru spargerea sistemului. În acest caz,
totul se reduce la rezolvarea ı̂n N × N a sistemului
(
pq = n
(p − 1)(q − 1) = φ(n)
sau - după substituţie - a ecuaţiei
X 2 − (n − φ(n) + 1)X + n = 0
Deci, dacă Oscar determină φ(n), el poate factoriza n şi sparge sistemul.
Cu alte cuvinte, calculul lui φ(n) nu este mai simplu decât factorizarea lui n.
De asemenea, o slăbiciune constă ı̂n alegerea unor numere p, q prime apropiate unul
de altul. În acest caz (cu p >√q), vom avea (p − q)/2 un număr foarte mic, iar (p + q)/2
un număr foarte apropiat de n. În plus,
(p + q)2 (p − q)2
−n= ,
4 4
deci membrul stâng este pătrat perfect. √
Atunci, pentru factorizarea lui n se testează toate numerele ı̂ntregi x > n până se
găseşte unul astfel ı̂ncât x2 − n este pătrat perfect; fie acesta y 2 . Atunci vom avea imediat
p = x + y, q = x − y.
4
Multe implementări testează divizibilitatea cu numerele prime mai mici decât 256. Eficienţa este
crescută dacă se merge până la 2000
8.4. SECURITATEA SISTEMULUI RSA 147


Exemplul 8.6. Pentru n = 97343 se găseşte n = 311, 998. Apoi 3122 − n = 1, ceea ce
conduce la factorizarea p = 313, q = 311.

Deci, ı̂n general este recomandabil ca cele două numere prime p şi q să difere – ı̂n
reprezentarea binară – prin numărul de biţi.

8.4.2 Exponentul de decriptare


Factorizarea modulului ştiind exponentul de decriptare
Dacă există un algoritm care calculează exponentul de decriptare a fără a-l cunoaşte pe
φ(n), acesta poate fi utilizat ca oracol5 ı̂ntr-un algoritm probabilist care descompune n.
Deci, se poate spune că dacă a este descoperit, secretul factorizării lui n este compromis;
atunci Bob va trebui să schimbe nu numai exponentul de decriptare, ci şi modulul n.
Algoritmul de descompunere care va fi descris este de tip Las Vegas.

Definiţia 8.6. Fie  (0 ≤  < 1). Un algoritm tip Las Vegas este un algoritm probabilist
care, pentru orice apariţie a unei probleme, poate oferi un răspuns – totdeauna corect –
sau poate eşua şi să nu dea nici un răspuns, cu probabilitate .

Observaţia 8.1. Un algoritm Las Vegas poate să nu dea răspuns; dar dacă dă – acest
răspuns este sigur corect. Algoritmii Monte Carlo ı̂n schimb dau totdeauna răspuns, deşi
acesta uneori este incorect.

Deci, dacă avem un algoritm Las Vegas pentru rezolvarea unei probleme, putem să ı̂l
apelăm de mai multe ori, până se obţine un răspuns. Probabilitatea ca el să nu răspundă
la m tentative consecutive este m .
Să considerăm un algoritm ipotetic A care calculează exponentul de decriptare a
plecând de la exponentul de criptare b. Se poate descrie atunci un algoritm Las Vegas
care utilizează A ca oracol. El este bazat pe studiul rădăcinilor pătrate ale unităţii modulo
n, când n = pq, p şi q fiind numere prime impare.
În acest caz x2 ≡ 1 (mod p) are ca singure soluţii x ≡ ±1 (mod p). La fel, x2 ≡
1 (mod q) are soluţiile x ≡ ±1 (mod q).
Din Teorema chineză a resturilor (a se vedea Anexa 2) rezultă că congruenţa x2 ≡
1 (mod n) este echivalentă cu x2 ≡ 1 (mod p) şi x2 ≡ 1 (mod q).
Vom avea deci patru rădăcini pătrate ale unităţii modulo n, care pot fi calculate cu
Teorema chineză a resturilor. Două sunt soluţiile triviale ±1 (mod n), iar celelalte –
numite netriviale – sunt opuse modulo n.

Exemplul 8.7. Fie n = 403 = 13 · 31. Cele patru rădăcini pătrate ale lui 1 modulo 403
sunt 1, 92, 311 şi 402.
5
program care răspunde numai cu Da/Nu la o ı̂ntrebare - tip a utilizatorului
148 CAPITOLUL 8. SISTEMUL DE CRIPTARE RSA

Să presupunem acum că x este o rădăcină pătrată netrivială a lui 1 modulo n, deci o
soluţie a ecuaţiei x2 ≡ 1 (mod n). Avem
n|(x − 1)(x + 1)
Dar n nu poate divide nici unul din factorii din membrul drept. Deci va trebui ca
cmmdc(x+1, n) = p, cmmdc(x−1, n) = q – sau invers – cmmdc(x+1, n) = q, cmmdc(x−
1, n) = p. Acest cel mai mare divizor comun se poate calcula fără a şti descompunerea
lui n, aplicând algoritmul de mai jos, care foloseşte A ca oracol:
1. Se generează aleator w ∈ Zn∗ , w 6= 1;
2. x ←− cmmdc(w, n);
3. if x > 1 then Stop (cu p = x sau q = x);
4. a ←− A(b);
5. Se descompune ab − 1 = 2s r, r impar;
6. v ←− wr (mod n);
7. if v ≡ 1 (mod n) then Stop (eşec);
8. while v 6≡ 1 (mod n) do
8.1. v0 ←− v;
8.2. v ←− v 2 (mod n);
9. if v0 ≡ −1 (mod n) then Stop (eşec);
else x ←− cmmdc(v0 + 1, n), Stop (p = x sau q = x).
Deci, cunoaşterea unei rădăcini pătrate netriviale a lui 1 modulo n determină descom-
punerea lui n printr-un calcul de complexitate polinomială.
Exemplul 8.8. Fie n = 89855713, b = 34986517, a = 82330933 şi să considerăm că s-a
generat aleator w = 5. Vom avea:
ab − 1 = 23 · 360059073378795.
La pasul 6 se obţine v = 85877701, iar la pasul 8.2, v = 1. La pasul 9 se va obţine
atunci cmmdc(85877702, n) = 9103.
Acesta este un factor al lui n; celălalt este n/9103 = 9871.
Trebuie demonstrată următoarea afirmaţie:
Afirmaţia 8.1. Procedeul descris este un algoritm.
Demonstraţie. Ca o primă observaţie, dacă există suficientă şansă şi w este multiplu de
p sau q, atunci el se factorizează imediat (pasul 2).
Dacă w este prim cu n, atunci se calculează succesiv wr , w2r , . . . prin ridicări succesive
t
la pătrat, până se ajunge la un t cu w2 r ≡ 1 (mod n). Deoarece ab − 1 = 2s r ≡
s
0 (mod φ(n)), se ştie că w2 r ≡ 1 (mod n). Deci bucla while va efectua maxim s iteraţii.
La sfârşitul buclei se va găsi o valoare v0 6≡ 1 (mod n) cu v02 ≡ 1 (mod n). Dacă
v0 ≡ −1 (mod n), algoritmul eşuează; altfel, v0 este o rădăcină pătrată netrivială a lui 1
modulo n care – la pasul 12 – permite descompunerea lui n.
Se poate arăta ([?]) că acest algoritm se termină cu succes cu probabilitate 1/2.
8.4. SECURITATEA SISTEMULUI RSA 149

Atacul lui Wiener


În [?] este dezvoltat un atac asupra sistemului de criptare RSA ı̂n care exponentul de
decriptare a este mic; mai exact, trebuie verificate condiţiile

3a < n1/4 , q < p < 2q.

Deci, dacă n are j biţi, atunci atacul va fi eficient pentru orice sistem de criptare RSA ı̂n
care a are mai puţin de j/4 − 1 biţi, iar p şi q au valori suficient de apropiate6 .
Din condiţia a · b ≡ 1 (mod φ(n)) rezultă că există un număr ı̂ntreg t astfel ca

a · b − t · φ(n) = 1.

Relaţia se poate rescrie


b t 1
− =

a · φ(n)

φ(n)
a

Pe de-altă parte, din n = p · q > q 2 rezultă q < n; deci

0 < n − φ(n) = p · q − (p − 1) · (q − 1) = p + q − 1 < 2q + q − 1 < 3q < 3 n

Pe baza acestor relaţii, putem evalua



b t a · b − t · n 1 + t · (φ(n) − n) 3t n 3·t
− = = < = √

a·n a·n a·n

n a a n

Deoarece t < a (evident), vom avea 3 · t < 3 · a < n1/4 şi deci

b t 1 1
− < < .

a·n 1/4 3 · a2

n a

Rezultă că valoarea fracţiei t/a este foarte apropiată de valoarea lui b/n. Din teoria
fracţiilor continue se ştie că orice aproximare suficient de bună a lui b/n este una din
convergenţele dezvoltării ı̂n fracţie continuă a lui b/n. Să descriem acest procedeu.

Definiţia 8.7. O fracţie continuă (finită) este un m-tuplu [q1 , q2 , . . . , qm ] de numere natu-
rale care reprezintă notarea expresiei

1
q1 + 1
q2 + q3 +...+ q1
m

6
Bob poate fi tentat să aleagă astfel de parametri, pentru creşterea vitezei de decriptare; reamintim,
RSA este un sistem relativ lent.
150 CAPITOLUL 8. SISTEMUL DE CRIPTARE RSA

Fie a, b două numere ı̂ntregi pozitive prime ı̂ntre ele şi (q1 , q2 , . . . , qm ) secvenţa câturilor
a
obţinute prin aplicarea algoritmului lui Euclid. Se verifică uşor că = [q1 , q2 , . . . , qm ].
b
Vom spune că [q1 , q2 , . . . , qm ] este dezvoltarea ı̂n fracţie continuă a lui a/b.
Acum, pentru fiecare j (1 ≤ j ≤ m) definim Cj = [q1 , q2 , . . . , qj ] ca fiind a j-a
convergenţă a lui [q1 , q2 , . . . , qm ]. Fiecare Cj se poate scrie ca un număr raţional cj /dj ,
unde valorile cj şi dj se pot defini recursiv astfel:
 

1 dacă j = 0 
 0 dacă j = 0
cj = q 1 dacă j = 1 dj = 1 dacă j = 1
qj · cj−1 + cj−2 dacă j ≥ 2 qj · dj−1 + dj−2 dacă j ≥ 2

 

Exemplul 8.9. Să dezvoltăm numărul raţional 34/99 ı̂n fracţie continuă. Folosind algo-
ritmul lui Euclid se obţine [0, 2, 1, 10, 3], care este notarea fracţiei
34 1
=0+
99 2 + 1+ 1 1
10+ 1
3

Convergenţele acestei fracţii sunt:


[0] = 0
[0, 2] = 1/2
[0, 2, 1] = 1/3
[0, 2, 1, 10] = 11/32
[0, 2, 1, 10, 3] = 34/99
Este adevărată următoarea teoremă ([?],[?]):
Teorema 8.4. Dacă cmmdc(a, b) = cmmdc(c, d) = 1 şi
a c 1

− <

b d 2 · d2
atunci c/d este una din convergenţele dezvoltării ı̂n fracţie continuă a lui a/b.
Să revenim acum la sistemul de criptare RSA. În condiţiile 3a < n1/4 şi q < p < 2q,
putem da următorul algoritm de factorizare a lui n:

1. Plecând de la n şi b (publice), se află dezvoltarea ı̂n fracţie continuă a lui b/n
(folosind algoritmul lui Euclid).

2. Se parcurg pe rând convergenţele acestei dezvoltări. Dacă există convergenţa t/a


a·b−1
care verifică t|(a · b − 1), se calculează φ(n) = .
t
3. Cu n şi φ(n) se află p şi q, conform metodei din secţiunea 8.4.1.
8.4. SECURITATEA SISTEMULUI RSA 151

Dacă sunt ı̂ndeplinite ipotezele de la ı̂nceputul acestui paragraf, Teorema ?? asigură


existenţa unei convergenţe care satisface pasul 2 al algoritmului.
Ţinând cont de observaţiile anterioare, algoritmul lui Wiener poate fi detaliat:

Intrare: [q1 , q2 , . . . , qm ] – dezvoltarea ı̂n fracţie continuă a lui b/n.


Algoritm:
1 c0 ←− 1, c1 ←− q1 , d0 ←− 0, d1 ←− 1;
2. for j ←− 1 to m do
2.1. if cj |(dj · b − 1) then
2.1.1. m ←− (dj · b − 1)/cj ;
2.1.2. Fie p, q rădăcinile ecuaţiei x2 − (n − m + 1)x + n = 0
2.1.3. if p, q ∈ Zn then return(p, q);
2.2. j ←− j + 1;
2.3. cj ←− qj · cj−1 + ck−2 , dj ←− qj · dj−1 + dj−2 ;
3. return(”eşec”);

Exemplul 8.10. Să presupunem că n = 160523347, b = 60728973. Dezvoltarea ı̂n fracţie
continuă a lui b/n este

[0, 2, 1, 1, 1, 4, 12, 102, 1, 1, 2, 3, 2, 2, 36]

1 1 2 3 14
Primele convergenţe sunt: 0, , , , , ...
2 3 5 8 37
Primele cinci convergenţe nu verifică condiţia de divizibilitate. Pentru 14/37 avem
ı̂nsă:
37 · 60728973 − 1
m= = 160498000.
14
Rezolvând ecuaţia x2 − 25348x + 160523347 = 0 obţinem rădăcinile 12347 şi 13001. Deci
avem factorizarea
160523347 = 12347 · 13001

8.4.3 Informaţie parţială despre textul clar


Să studiem puţin informaţia din textul clar care ar putea trăda sistemul de criptare RSA.
Ştiind că y = eK (x), vom considera două exemple de informaţie parţială dată de y despre
x:

1. par(y) - dă valoarea ultimului bit din scrierea binară a lui x;

2. jum(y) - va da 0 dacă 0 ≤ x < n/2, 1 dacă n/2 ≤ x ≤ n − 1.


152 CAPITOLUL 8. SISTEMUL DE CRIPTARE RSA

Vom arăta ([?]) că orice algoritm care poate calcula par(y) sau jum(y) poate fi utilizat ca
oracol pentru regăsirea textului clar x. Altfel spus, a calcula una din aceste funcţii este
la fel de dificil cu a decripta tot textul y.
Faptul că cele două funcţii sunt polinomial echivalente rezultă din

jum(y) = par(y · eK (2) mod n) par(y) = jum(y · eK (2−1 ) mod n)

şi din relaţia eK (x1 x2 ) = eK (x1 )eK (x2 ).


Să arătăm acum cum se poate calcula x = dK (y) cu ajutorul unui oracol care dă
valoarea jum(y):

1. k ←− [log2 n];
2. for i = 0 to k do
2.1. yi ←− jum(y)
2.2. y ←− (y · eK (2)) mod n
3. jos ←− 0;
4. sus ←− n;
5. for i = 0 to k do
5.1. mijloc ←− (jos + sus)/2;
5.2. if yi = 1 then jos ←− mijloc
else sus ←− mijloc
6. x ←− [sus]

La pasul 2 se calculează yi = jum(y · (eK (2))i ) = jum(eK (x · 2i )) pentru 0 ≤ i ≤ [log2 n].


Se observă că
n
 
jum(eK (x)) = 0 ⇐⇒ x ∈ 0,
 2  
n n 3n

jum(eK (2x)) = 0 ⇐⇒ x ∈ 0, ∪ ,
 4 2 4  
n n 3n n 5n 3n 7n
  
jum(eK (4x)) = 0 ⇐⇒ x ∈ 0, ∪ , ∪ , ∪ , , etc.
8 4 8 2 8 4 8
În acest mod, x se poate localiza printr-o căutare binară, realizată la paşii 7 − 11.

Exemplul 8.11. Fie n = 1457, b = 779, iar textul criptat este y = 722. Calculăm
eK (2) = 946. Să presupunem că oracolul jum din pasul 2.1. dă următoarele răspunsuri:

i 0 1 2 3 4 5 6 7 8 9 10
yi 1 0 1 0 1 1 1 1 1 0 0
Căutarea binară este realizată ı̂n tabelul:
8.4. SECURITATEA SISTEMULUI RSA 153

i jos mijloc sus


0 0, 00 728, 50 1457, 00
1 728, 50 1092, 75 1457, 00
2 728, 50 910, 62 1092, 75
3 910, 62 1001, 69 1092, 75
4 910, 62 956, 16 1001, 69
5 956, 16 978, 92 1001, 69
6 978, 92 990, 30 1001, 69
7 990, 30 996, 00 1001, 69
8 996, 00 998, 84 1001, 69
9 998, 84 1000, 26 1001, 69
10 998, 84 999, 55 1000, 26
998, 84 999, 55 999, 55

Textul clar este deci x = [999, 55] = 999.

8.4.4 Algoritmi de descompunere ı̂n factori primi


Sunt extrem de numeroase lucrările care tratează descompunerea numerelor ı̂n factori
primi. De aceea aici vom face doar o trecere ı̂n revistă a celor mai cunoscuţi algoritmi de
factorizare.
Astfel, cel mai simplu pare a fi ciurul lui Eratostene care constă ı̂n ı̂ncercarea
√ de
ı̂mpărţi numărul n impar prin toate numerele ı̂ntregi impare din intervalul [3, n]. Pentru
n < 1012 tehnica este destul de eficientă.

Metoda p − 1
Un algoritm simplu care se poate aplica uneori şi la numere mari este metoda p − 1
enunţată de Pollard ı̂n 1974. În esenţă, el foloseşte trei variabile de intrare: numărul
n (impar) care trebuie descompus, o margine B şi un număr oarecare g ∈ [2, n − 1].
Descrierea algoritmului este:
Intrare: n, B, g.
1. a ←− g
2. for j = 2 to B do a ←− aj mod n
3. d ←− cmmdc(a − 1, n)
4. if d > 1 then ”d este factor al lui n”, Stop
else ”nu s-a găsit divizor al lui n”

Să vedem cum funcţionează acest algoritm:


Presupunem că p este un divizor prim al lui n şi că toţi divizorii primi ai lui p − 1 – la
puterile la care apar ı̂n descompunerea lui p − 1 – sunt mai mici decât B. Atunci p − 1|B!.
La terminarea ciclului de la pasul 2, avem

a ≡ g B! (mod n) deci a ≡ g B! (mod p)


154 CAPITOLUL 8. SISTEMUL DE CRIPTARE RSA

deoarece p|n. Cum g p−1 ≡ 1 (mod p), conform teoremei lui Fermat (ı̂n afară de cazul
când p|g) şi cum (p − 1)|B!, se obţine a ≡ 1 (mod p).
Deci, la pasul 3 se ajunge la p|(a − 1) şi p|n, de unde rezultă p|d = cmmdc(a − 1, n).
Numărul d este un divizor netrivial al lui n (ı̂n afară de cazul a = 1 la pasul 3).
Având un divizor netrivial d, procesul se poate itera.

Exemplul 8.12. Să considerăm n = 15770708441. Aplicând metoda p − 1 cu B = 180,


se găseşte a = 11620221425, iar d = 135979. Se ajunge la descompunerea finală
15770708441 = 135979 · 115979.
Descompunerea a reuşit deoarece 135978 are numai factori primi ”mici”:
135978 = 2 · 3 · 131 · 173. Luând deci B ≥ 173 se obţine 135978|B!.

Observaţia 8.2. Condiţia ca metoda să funcţioneze este ca divizorii primi la puterile
la care apar ı̂n descompunerea lui p − 1 să fie mai mici decât b. Dacă s-ar solicita ca
doar divizorii primi să verifice această condiţie, rezultatul ar fi fals. Astfel, să considerăm
p = 17 şi B = 3. Atunci p − 1 = 24 . Vom avea 2 < 3 dar 16 nu este un divixor al lui 3 !!

Pentru valori relativ mici ale lui B algoritmul


√ este de complexitate polinomial scăzută
(O(BlogB(log n)3 )). Dacă B creşte până la n, el va reuşi totdeauna, dar nu va fi mai
rapid decât ciurul lui Eratostene.
Deci slăbiciunea metodei rezidă ı̂n faptul că n trebuie să admită un divizor p cu
proprietatea ca p − 1 să aibă numai factori primi mici.
Pentru a rezista la acest atac, se recomandă folosirea numerelor prime tari.

Definiţia 8.8. Se numeşte număr prim tare un număr prim p care verifică condiţiile:
1. p − 1 are un divizor prim mare r;
2. p + 1 are un divizor prim mare;
3. r − 1 are un divizor prim mare.

Există diverşi algoritmi pentru generarea numerelor prime tari. Pentru exemplificare
am ales algoritmul lui Gordon:

1. Se generează aleator două numere prime mari distincte s, t.


2. Se alege un număr aleator i0 . Se află primul număr prim de forma 2 · i · t + 1, unde
i ←− i0 , i0 + 1, . . .. Fie r = 2 · i · t + 1 acest număr prim.
3. p0 ←− 2 · (sr−2 (mod r)) · s − 1;
4. Se alege un număr aleator j0 . Se află primul număr prim de forma p0 + 2 · j · r · s,
unde j ←− j0 , j0 + 1, . . .. Fie p = p0 + 2 · j · r · s acest număr prim.
5. return(p)

Teorema 8.5. Numărul p generat de algoritmul Gordon este un număr prim tare.
8.4. SECURITATEA SISTEMULUI RSA 155

Demonstraţie. Cum r 6= s, vom avea sr−1 ≡ 1 (mod r) (Fermat). Deci p0 ≡ 1 (mod r) şi
p0 ≡ −1 (mod s). Acum:
(1) p − 1 = p0 + 2 · j · r · s − 1 ≡ 0 (mod r), deci p − 1 are pe r drept divizor prim.
(2) p + 1 = p0 + 2 · j · r · s + 1 ≡ 0 (mod s), deci s este un divizor prim al lui p + 1.
(3) r − 1 = 2 · i · t ≡ 0 (mod t), deci numărul prim t divide pe r − 1.

Practic, generarea unui număr prim tare se realizează ı̂n trei paşi:
(i) Cu un generator de numere aleatoare, se generează numerele s, t, i0 , j0 ;
(ii) Se testează dacă s şi t sunt numere prime, folosind algoritmul Miller - Rabin;
(iii) În caz afirmativ, se aplică algoritmul lui Gordon, bazat de asemenea pe algoritmul
Miller - Rabin.
De multe ori, pentru criptarea RSA este suficient să se folosească numere prime mari
p−1
p cu proprietatea că este de asemenea număr prim.
2
Exemplul 8.13. În practică este folosit frecvent exponentul de criptare b = 3. În acest
caz ı̂nsă, este necesar ca p − 1 şi q − 1 să nu fie divizibile cu 3. Rezultatul este o criptare
extrem de rapidă, deoarece se foloseşte o singură ı̂nmulţire modulară şi o singură ridicare
la pătrat modulară.
De asemenea este utilizat frecvent şi exponentul b = 216 + 1 = 65537. Acest număr are
numai doi de 1 ı̂n reprezentarea binară, aşa că o criptare foloseşte 16 ridicări la pătrat
modulare şi o singură ı̂nmulţire modulară.

Algoritmul lui Dixon şi sita pătratică


Algoritmul lui Dixon se bazează pe o idee extrem de simplă: dacă se pot afla două
numere x, y cu x 6≡ y (mod n) dar x2 ≡ y 2 (mod n), atunci cmmdc(x − y, n) este un
divizor netrivial al lui n.
Metoda utilizează o bază B de factori primi ”mici”. Se caută ı̂ntâi mai multe numere
x pentru care divizorii primi ai lui x2 mod n sunt ı̂n B. Se formează apoi produse cu
aceste numere, ı̂n aşa fel ı̂ncât fiecare factor prim al pătratului produsului să apară de un
număr par de ori. Aceasta conduce la o relaţie x2 ≡ y 2 (mod n) care va da – eventual –
o descompunere a lui n.

Exemplul 8.14. Fie n = 15770708441 şi alegem mulţimea B= {2, 3, 5, 7, 11, 13}. Se-
lectăm
83409341562 ≡ 3 · 7 (mod n)
120449429442 ≡ 2 · 7 · 13 (mod n)
27737000112 ≡ 2 · 3 · 13 (mod n)
Dacă se ia produsul acestor trei congruenţe, se ajunge la

(8340934156 · 12044942944 · 2773700011)2 ≡ (2 · 3 · 7 · 13)2 (mod n)


156 CAPITOLUL 8. SISTEMUL DE CRIPTARE RSA

Reducând conţinutul parantezelor modulo n, se obţine


95034357852 ≡ 5462 (mod n).
Vom calcula acum cmmdc(9503435785 − 546, 15770708441) = 115759,
care va da un divizor 115759 al lui n.

Fie B= {p1 , p2 , . . . , pB }; considerăm un număr C ”puţin” mai mare decât B (o posi-


bilitate este C = B + 10) şi presupunem că am găsit C relaţii de forma
α α α
x2j ≡ p1 1j · p2 2j · . . . · pBBj , (1 ≤ j ≤ C).

Pentru fiecare j se consideră vectorul binar (elementele sale se iau modulo 2)

αj = (α1j , . . . , αBj ) ∈ Z2B .

Dacă se poate determina o submulţime, formată din astfel de vectori, a căror sumă modulo
2 să fie (0, 0, . . . , 0), atunci pătratul produsului elementelor xj corespunzătoare va avea ı̂n
B toţi divizorii reprezentaţi de un număr par de ori.

Exemplul 8.15. Revenind la Exemplul ??, cei trei vectori care se construiesc sunt
α1 = (0, 1, 0, 1, 0, 0), α2 = (1, 0, 0, 1, 0, 1), α3 = (1, 1, 0, 0, 0, 1).
Se verifică imediat că α1 + α2 + α3 ≡ (0, 0, 0, 0, 0, 0) (mod 2).

Evident, a căuta o submulţime de C vectori de sumă nulă modulo 2 revine la a căuta o


relaţie de dependenţă liniară (ı̂n Z2 ) ı̂ntre aceşti vectori. Dacă C > B, o asemenea relaţie
există şi poate fi găsită uşor prin eliminare gaussiană.
Ar mai fi de văzut cum se pot obţine acei xj pentru care x2j admit descompuneri ı̂n
factori primi din baza B. Sunt mai multe metode posibile pentru aceasta; de exemplu,
ciurul pătratic – construit de Pomerance – foloseşte numere ı̂ntregi de forma

xj = j + [ n], j = 1, 2, . . . .

De remarcat că dacă B este mare, este foarte posibil ca un ı̂ntreg xj să se descompună
ı̂n B, dar numărul acestor xj trebuie să crească pentru a căuta relaţiile de dependenţă.
Se arată că alegerea optimă pentru Bqeste ı̂n jur de

e logn log logn .

8.4.5 Alte tipuri de atac


Atac bazat pe proprietăţi multiplicative ale criptării RSA
Fie m1 , m2 două texte clare şi c1 respectiv c2 textele criptate corespunzătoare. Vom avea

(m1 m2 )b ≡ mb1 mb2 ≡ c1 c2 (mod n)


8.4. SECURITATEA SISTEMULUI RSA 157

Această proprietate de homomorfism a criptării poate oferi unui adversar activ posibili-
tatea unui atac cu text clar ales.
Să presupunem că Oscar vrea să decripteze mesajul c = mb (mod n) trimis de Bob lui
Alice, iar Alice are amabilitatea să ı̂i decripteze lui Oscar orice text criptat primit (ı̂nafară
de c, bineinţeles).
Atunci Oscar va alege un număr aleator x ∈ Zn∗ , va calcula c1 = c · xb (mod n) şi va
solicita decriptarea lui. Alice va decripta pentru el m1 = ca1 (mod n). Deoarece
m1 ≡ ca1 ≡ ca (xb )a ≡ mx (mod n)
Oscar va afla imediat m = m1 · x−1 (mod n).
Acest tip de atac este prevenit de obicei impunând anumite structuri speciale asupra
textelor clare.

Atac bazat pe un exponent mic de criptare


Asa cum s-a arătat ı̂n Exemplul ??, pentru mărirea vitezei de criptare se preferă exponenţi
mici de criptare (cum este b = 3). Această alegere are unele slăbiciuni, care permit atacuri
ı̂n anumite condiţii.
Astfel, să presupunem că Alice doreşte să trimită acelaşi text clar m la trei destinatari
diferiţi, care au modulele ni , dar acelaşi exponent de criptare b = 3. Deci textele criptate
vor fi ci = m3 (mod ni ) i = 1, 2, 3. Oscar le interceptează şi rezolvă sistemul
x ≡ c1 (mod n1 ), x ≡ c2 (mod n2 ), x ≡ c3 (mod n3 )
folosind teorema chineză a resturilor, care asigură existenţa unui x ∈ [0, n1 · n2 · n3 ).
Deoarece m3 < n1 · n2 · n3 , va rezulta că x = m3 .
Deci Oscar va afla textul clar m extrăgând rădăcina de ordinul 3 din soluţia x.
În general, exponenţi mici de criptare asigură o securitate redusă pentru mesajele mici
m: dacă m < n1/b atunci textul clar poate fi dedus din textul criptat c = mb calculând
rădăcina de ordin b a lui c.
Folosirea unui modul comun de criptare de către mai mulţi utilizatori permite de
asemenea un atac uşor. Să presupunem că Alice trimite acelaşi mesaj m către doi utiliza-
tori care au cheile publice b1 , b2 dar acelaşi modul n. Deci
c1 ≡ mb1 (mod n), c2 ≡ mb2 (mod n).
Fără a micşora generalitatea, putem presupune că cmmdc(b1 , b2 ) = 1. Oscar va folosi
algoritmul lui Euclid pentru a determina numerele ı̂ntregi r, s astfel ca
r · b1 + s · b2 = 1
Unul din numerele r sau s este negativ; să presupunem că este r (pentru s negativ se
procedează analog). Atunci Oscar obţine textul clar m folosind egalitatea
(c−1
1 )
−r
· cs2 ≡ m (mod n)
158 CAPITOLUL 8. SISTEMUL DE CRIPTARE RSA

Atacuri ciclice
Fie c = mb (mod n) un text criptat şi k un ı̂ntreg pozitiv astfel ca
k
cb ≡ c (mod n)

(un astfel de k există totdeauna, deoarece criptarea RSA este de fapt o permutare ı̂n
spaţiul Zn al textelor clare). Rezultă că
k−1
cb ≡ m (mod n)
i
Această observaţie conduce la un atac ciclic: Oscar calculează cb (mod n) pentru
k
i = 1, 2, . . . până găseşte un k astfel ca cb ≡ c (mod n). Atunci va decripta c ı̂n
k−1
cb ≡ m (mod n).
Un atac ciclic generalizat constă ı̂n aflarea celui mai mic ı̂ntreg pozitiv k astfel ca
k
cmmdc(cb − c, n) > 1. Vom avea implicaţia
k k
cb ≡ c (mod p), cb 6≡ c (mod q) =⇒ k=p

şi similar
k k
cb 6≡ c (mod p), cb ≡ c (mod q) =⇒ k=q
În ambele cazuri s-a obţinut factorizarea lui n.
Pe de-altă parte, dacă
k k k
cb ≡ c (mod p), cb ≡ c (mod q) =⇒ k = n şi cb ≡ c (mod n)
k−1
În acest caz s-a reuşit decriptarea m = cb (mod n).
Folosirea unor numere prime tari asigură o protecţie suficientă pentru acest gen de
atac.

8.5 Sisteme de criptare ı̂nrudite cu RSA


8.5.1 Sistemul de criptare Rabin
Sistemul de criptare Rabin (propus ı̂n 1979) este o variantă a sistemului RSA, care oferă
o securitate de calcul echivalentă. Descrierea sa este:

Fie n = pq unde p, q sunt numere prime distincte, p, q ≡ 3 (mod 4). Se ia


P = C= Zn şi K= {(n, p, q, B) | 0 ≤ B ≤ n − 1}.
Pentru cheia K = (n, p, q, B) se definesc: s
B2 B
eK (x) = x(x + B) (mod n) dK (y) = +y−
4 2
8.5. SISTEME DE CRIPTARE ÎNRUDITE CU RSA 159

Observaţia 8.3. Numerele prime n cu n ≡ 3 (mod 4) se numesc ”numere Blum”.

Există patru texte clare distincte care se pot cripta ı̂n acelaşi text. Să detaliem această
afirmaţie:
Fie α una din cele patru rădăcini pătrate modulo n ale unităţii, şi x ∈ Zn . Efectuăm
calculele
B 2
 2
B B B
     
2
eK α x + − =α x+ − = x2 + Bx = eK (x)
2 2 2 2
(calculele s-au realizat ı̂n Zn , iar ı̂mpărţirea la 2 şi 4 s-a făcut prin ı̂nmulţirea ı̂n Zn cu
2−1 respectiv 4−1 ).
Cele patru texte clare care se cifrează ı̂n eK (x) sunt
x, −x − B, α(x + B/2) − B/2 şi −α(x + B/2) − B/2,
unde α este o rădăcină pătrată netrivială modulo n a unităţii.
Verificarea este imediată.
În general, dacă nu dispune de informaţii suplimentare, Bob nu are nici un mijloc de
a distinge care din cele patru mesaje este cel corect.
Să vedem cum se realizează decriptarea. Bob primeşte mesajul criptat y şi ı̂ncearcă
să să determine x astfel ca x2 + Bx ≡ y (mod n).
Aceasta este o ecuaţie de gradul doi ı̂n x. Termenul de gradul 1 se poate elimina
folosind substituţia x1 = x + B/2 (sau – echivalent – x = x1 − B/2).
Se ajunge la ecuaţia
B2
x21 ≡ + y (mod n).
4
Notând membrul drept cu C, această ecuaţie se scrie x21 ≡ C (mod n). Deci decriptarea
se reduce la extragerea rădăcinilor pătrate modulo n; operaţie echivalentă cu rezolvarea
sistemului
x21 ≡ C (mod p) x21 ≡ C (mod q)
care, prin combinarea soluţiilor fiecărei ecuaţii va da patru rădăcini pătrate modulo n.
Într-o criptare corectă, C este totdeauna un rest pătratic modulo p şi q. Dacă p ≡
3 (mod 4), există o formulă simplă pentru extragerea rădăcinilor pătrate dintr-un rest
pătratic C modulo p. Avem (calculele se fac modulo p):
 2
±C (p+1)/4 ≡ C (p+1)/2 ≡ C (p−1)/2 C ≡ C

(s-a folosit Teorema ??). Cele patru rădăcini sunt deci

±C (p+1)/4 (mod p), ±C (q+1)/4 (mod q)

Acestea, prin combinare folosind teorema chineză a resturilor, dau cele patru rădăcini
pătrate ale lui C.
160 CAPITOLUL 8. SISTEMUL DE CRIPTARE RSA

Observaţia 8.4. Nu se cunoaşte un algoritm polinomial determinist pentru extragerea


rădăcinilor pătratice modulo p pentru p ≡ 1 (mod 4); ı̂n această situaţie există doar
algoritmi Las Vegas.

După determinarea acestor rădăcini x1 , se află x = x1 − B/2, rezultat care dă formula
de decriptare din enunţul metodei Rabin.

Exemplul 8.16. Fie n = 77 = 7 · 11 şi B = 9. Funcţia de criptare este


eK (x) = x2 + 9x (mod 77)
iar cea de decriptare q
dK (y) = 1 + y − 43 (mod 77).
Să presupunem că Bob vrea să decripteze textul y = 22. El va trebui să determine
rădăcinile pătrate ale lui 23 modulo 7 şi 11. Cum aceste două module sunt congruente cu
3 modulo 4, se poate aplica formula arătată anterior:

23(7+1)/4 ≡ 22 ≡ 4 (mod 7) 23(11+1)/4 ≡ 13 ≡ 1 (mod 11).

Utilizând teorema chineză a resturilor, se obţin rădăcinile pătrate ale lui 23 modulo 77:

11 · 2 · a + 7 · 8 · b (mod 77)

unde a = ±4, b = ±1. Calculând, se obţin valorile ±10, ±32. Cele patru texte clare
posibile (calculate modulo 77) vor fi deci:

10 − 43 = 44, 67 − 43 = 24, 32 − 43 = 66, 45 − 43 = 2.

Se verifică imediat că toate aceste patru texte clare se criptează ı̂n 22.

Să studiem acum securitatea sistemului de criptare Rabin. Să presupunem că există
un algoritm de decriptare A; acesta poate fi atunci utilizat ı̂ntr-un algoritm Las Vegas
care descompune modulul n cu probabilitate 1/2; algoritmul este următorul:

1. Se alege aleator r ∈ Zn ;
2. y ←− r2 − B 2 /4 mod n;
3. x ←− A(y);
4. x1 ←− x + B/2;
5. if x1 ≡ ±r (mod n) then Stop (eşec)
else cmmdc(x1 + r, n) = p sau q, Stop

B
 
Să observăm ı̂ntâi că y = eK r − , deci la pasul 3 se decriptează x sub forma r − B/2.
2
Cum la pasul 5. avem x21 ≡ r2 (mod n), rezultă x1 ≡ ±r (mod n) sau x1 ≡ ±αr (mod n),
unde α este o rădăcină netrivială modulo n a unităţii.
8.6. EXERCIŢII 161

În al doilea caz, n|(x1 − r)(x1 + r) şi n nu divide nici unul din cei doi factori. Deci,
calculul lui cmmdc(x1 + r, n) sau cmmdc(x1 − r, n) va da p sau q, adică o descompunere
a lui n.
Să calculăm probabilitatea de succes a algoritmului ([?]), din n − 1 extrageri posibile
ale lui r. Pentru două resturi nenule r1 , r2 , se defineşte

r1 ∼ r2 ⇐⇒ r12 ≡ r22 (mod n)

Aceasta este evident o relaţie de echivalenţă. Toate clasele de echivalenţă din Zn∗ au câte
patru elemente, fiecare clasă fiind de forma [r] = {±r, ±αr}. În algoritmul anterior, două
valori dintr-o clasă de echivalenţă conduc la acelaşi y.
Să considerăm un x1 calculat plecând de la valoarea x returnată de oracolul A pentru
un y dat. x1 este un element din [r]. Dacă x1 = ±r, algoritmul eşuează; dacă x1 = ±αr, el
reuşeşte să descompună n. Cum r este aleator, cele patru posibilităţi sunt echi-probabile,
deci algoritmul dă reuşită ı̂n 50% din cazuri.

8.6 Exerciţii
8.1. Demonstraţi lemele ?? şi ??.
8.2. Fie p, q numere prime impare distincte şi n = pq. Definim
(p − 1)(q − 1)
λ(n) =
cmmdc(p − 1, q − 1)

Folosim un sistem de criptare RSA ı̂n care s-a făcut modificarea a · b ≡ 1 (mod λ(n)).
(a) Demonstraţi că operaţiile de criptare şi decriptare sunt operaţii inverse şi ı̂n acest
sistem.
(b) Dacă p = 37, q = 79 şi b = 7, calculaţi valoarea exponentului a atât ı̂n acest
sistem cât şi ı̂n sistemul RSA normal.
8.3. O modalitate curentă de a mări viteza de decriptare foloseşte teorema chineză a
resturilor. Să presupunem că n = pq şi dK (y) = y a (mod n). Definim dp = d (mod (p −
1)), dq = d (mod (q − 1)) şi Mp = q −1 (mod p), Mq = p−1 (mod q).
Vom considera algoritmul

1. xp ←− y dp (mod p);
2. xq ←− y dq (mod q);
3. x ←− Mp · q · xp + Mq · p · xq (mod n);
4. return(x).

(a) Demonstraţi că valoarea x returnată este de fapt y d (mod n).


162 CAPITOLUL 8. SISTEMUL DE CRIPTARE RSA

(b) Pentru p = 1511, q = 2003 calculaţi dp , dq , Mp , Mq şi apoi decriptaţi textul y =


152702 folosind algoritmul din acest exerciţiu.

8.4. Pentru n = 837, 851 1189 aflaţi numărul de baze b pentru care numărul n este Euler
pseudo-prim.

8.5. Scrieţi un program pentru calculul simbolului Jacobi, folosind Lemele ?? şi ??. Sin-
gura operaţie de factorizare permisă este ı̂mpărţirea la 2. Valori de test:
610 20964 1234567
     
, ,
987 1987 11111111
8.6. Să se arate că orice număr a pentru care testul Miller - Rabin dă rezultat fals este un
număr Euler pseudo-prim. Reciproca este adevărată dacă şi numai dacă n ≡ 3 (mod 4).

8.7. Fie p un număr prim impar şi cmmdc(a, p) = 1.


a) Să presupunem că i ≥ 2 şi b2 ≡ a (mod pi−1 ). Demonstraţi că există un x ∈ Zp unic
astfel ca x2 ≡ a (mod pi ) şi x ≡ b (mod pi−1 ).
Găsiţi o modalitate eficientă de calcul a lui x.
(b) Aplicaţi punctul anterior ı̂n următoarea situaţie: plecând de la congruenţa 62 ≡
17 (mod 19), aflaţi rădăcinile pătrate ale lui 17 modulo 192 şi modulo 193 .
(c) Arătaţi că numărul soluţiilor congruenţei x2 ≡ a (mod pi ) este 0 sau 2, (∀i ≥ 1).

8.8. Folosind metoda p − 1 şi diverse margini B, factorizaţi 262063 şi 9420457. Cât este
B pentru fiecare caz ?

8.9. Fie n = 317940011 şi b = 7753781. Descompuneţi n ı̂n factori, folosind algoritmul
lui Wiener.

8.10. Considerăm algoritmul lui Rabin cu p = 199, q = 211, n = pq şi B = 1357.


(a) Criptaţi mesajul 32767;
(b) Determinaţi cele 4 mesaje clare care duc la textul criptat y = eK (32767).
Capitolul 9

Sistemul de criptare El Gamal

9.1 Descrierea algoritmului de criptare El Gamal


Sistemul de criptare El Gamal1 , prezentat ı̂n 1985 (vezi [?]) de Taher ElGamal, se bazează
pe problema logaritmului discret (P LD), care este următoarea:

Fie p număr prim şi α, β ∈ Zp , β 6= 0.


Să se determine a ∈ Zp−1 astfel ca

αa ≡ β (mod p).

Acest ı̂ntreg a – dacă există – este unic şi se notează logα β.



Exemplul 9.1. Fie p = 11 şi α = 6. Toate elementele din Z11 pot fi exprimate ca puteri
ale lui α:
a 0 1 2 3 4 5 6 7 8 9
6a (mod 11) 1 6 3 7 9 10 5 8 4 2
De aici rezultă imediat tabelul logaritmilor ı̂n baza 6:

β 1 2 3 4 5 6 7 8 9 10
log6 β 0 9 2 8 6 1 3 7 4 5

Pentru α = 3 ı̂nsă nu vom avea totdeauna soluţie. Deoarece


a 0 1 2 3 4 5 6 7 8 9
a
3 (mod 11) 1 3 9 5 4 1 3 9 5 4

valorile β ∈ {2, 6, 7, 8, 10} nu pot fi exprimate ca logaritmi ı̂n baza 3. Altfel spus, ecuaţia
log3 x = β nu are soluţie ı̂n Z11 pentru aceste valori ale lui β.
1
Implementări ale sistemului sunt conţinute ı̂n softuri pentru GNU Privacy Guard şi PGP – pentru a
lista doar cele mai cunoscute aplicaţii.

163
164 CAPITOLUL 9. SISTEMUL DE CRIPTARE EL GAMAL

Observaţia 9.1. Pentru problema logaritmului discret, nu este obligatoriu ca p să fie
număr prim. Important este ca α să fie rădăcină primitivă de ordinul p − 1 a unităţii:
∀i (0 < i < p − 1), αi 6≡ 1 (mod p). Teorema lui Fermat asigură αp−1 ≡ 1 (mod p).

La o alegere convenabilă a lui p, P LD este N P - completă. Pentru siguranţă, p se


alege de minim 512 biţi2 iar p − 1 să aibă cel puţin un divizor prim ”mare”. Pentru un
astfel de modul p, spunem că problema logaritmului discret este dificilă ı̂n Zp . Utilitatea
acestei cerinţe rezidă ı̂n faptul că, deşi este foarte dificil de calculat un logaritm discret,
operaţia inversă – de exponenţiere – este foarte simplă (după cum s-a văzut la sistemul
RSA).
Sistemul de criptare El Gamal este următorul:

Fie p număr prim pentru care P LD este dificilă ı̂n Zp , şi fie α ∈ Zp∗ primitiv.
Definim P= Zp∗ , C= Zp∗ × Zp∗ şi K= {(p, α, a, β) | β ≡ αa (mod p)}.
Valorile p, α, β sunt publice, iar a este secret.
Pentru K = (p, α, a, β) şi k ∈ Zp−1 aleator (secret) se defineşte

eK (x, k) = (y1 , y2 )

unde y1 = αk (mod p), y2 = x · β k (mod p).


Pentru y1 , y2 ∈ Zp∗ se defineşte

dK (y1 , y2 ) = y2 · (y1a )−1 (mod p)

Verificarea este imediată:

y2 · (y1a )−1 ≡ x · β k · (αka )−1 ≡ x · β k (β k )−1 ≡ x (mod p)

Sistemul este evident nedeterminist: criptarea depinde de x şi de o valoare aleatoare


aleasă de Alice. Există deci mai multe texte criptate corespunzătoare unui anumit text
clar.

Exemplul 9.2. Să alegem p = 2579, α = 2, a = 765. Prin calcul se obţine β =


2765 (mod 2579) = 949.
Să presupunem că Alice vrea să trimită mesajul x = 1299. Ea alege aleator k (să
spunem k = 853) şi calculează y1 = 2853 = 435, apoi y2 = 1299 · 949853 = 2396 (toate
calculele se fac modulo 2579).
Când Bob primeşte mesajul criptat y = (435, 2396), el va determina

x = 2396 · (435765 )−1 = 1299 (mod 2579).


2
Pentru o securitate pe termen lung se recomandă 1024 biţi ([?]).
9.2. CALCULUL LOGARITMULUI DISCRET 165

Observaţia 9.2.
1. Un dezavantaj al sistemului El Gamal constă ı̂n dublarea lungimii textului criptat
(comparativ cu lungimea textului clar).
2. Dacă (y1 , y2 ), (z1 , z2 ) sunt textele criptate ale mesajelor m1 , m2 atunci se poate
deduce imediat un text criptat pentru m1 m2 : (y1 z1 , y2 z2 ). Similar poate fi dedusă o
criptare pentru 2m1 (sau 2m2 ). Acest lucru face sistemul El Gamal permeabil la un atac
cu text clar ales.
3. Indicaţia ca pentru criptarea a două texte diferite să se folosească valori diferite ale
parametrului k este esenţială: astfel, să prsupunem că mesajele m1 , m2 au fost criptate ı̂n
(y1 , y2 ) respectiv (z1 , z2 ) folosind acelaşi k. Atunci y2 /z2 = m1 /m2 şi cunoaşterea unuia
din mesaje ı̂l determină imediat pe celălalt.

9.2 Calculul logaritmului discret


În această secţiune vom presupune că p este număr prim, iar α este o rădăcină primitivă
de ordinul p − 1 a unităţii. Aceste două valori fiind fixate, P LD se poate reformula astfel:

Fiind dat un β ∈ Zp∗ , să se determine exponentul a ∈ Zp−1 astfel ca αa ≡ β (mod p).

Evident această problemă se poate rezolva printr-o căutare directă (se calculează puterile
lui α) ı̂n timp O(p) şi folosind O(1) memorie. Pe de-altă parte, dacă se calculează anterior
ı̂ntr-o tabelă toate valorile (a, αa mod p), aflarea valorii căutate se poate face ı̂n O(1), dar
cu un spaţiu de complexitate O(p).
Toţi algoritmii construiţi pentru calculul logaritmului discret folosesc un compromis
spaţiu - timp.

9.2.1 Algoritmul Shanks


q 
Fie m = p − 1 . Algoritmul Shanks este:

1. Se construieşte lista L1 = {(j, αmj (mod p)) | 0 ≤ j ≤ m − 1};


2. Se construieşte lista L2 = {(i, βα−i (mod p)) | 0 ≤ i ≤ m − 1};
3. Se determină perechile (j, y) ∈ L1 , (i, y) ∈ L2 (identice pe a doua poziţie);
4. Se defineşte logα β = m · j + i (mod (p − 1))
De remarcat că prin alegerea perechilor (j, y) ∈ L1 , (i, y) ∈ L2 vom avea
αmj = y = βα−i , deci αmj+i = β.
Invers, pentru orice β putem scrie logα β = m · j + i cu 0 ≤ i, j ≤ m − 1; deci căutarea
de la pasul 3 se termină totdeauna cu succes.
Implementarea acestui algoritm se poate face ı̂n timp O(m) şi spaţiu O(m).
166 CAPITOLUL 9. SISTEMUL DE CRIPTARE EL GAMAL

Exemplul 9.3. Fie p = √ 809 şi să determinăm log3 525. Avem deci
α = 3, β = 525, m = d 808e = 29, iar α29 mod 809 = 99.
Lista L1 a perechilor (j, 99j (mod 809)), 0 ≤ j ≤ 28 este:

(0, 1) (1, 99) (2, 93) (3, 308) (4, 559)


(5, 329) (6, 211) (7, 664) (8, 207) (9, 268)
(10, 644) (11, 654) (12, 26) (13, 147) (14, 800)
(15, 727) (16, 781) (17, 464) (18, 632) (19, 275)
(20, 528) (21, 496) (22, 564) (23, 15) (24, 676)
(25, 586) (26, 575) (27, 295) (28, 81)

Lista L2 a cuplurilor (i, 525 · (3i )−1 (mod 809)), 0 ≤ i ≤ 28 este:

(0, 525) (1, 175) (2, 328) (3, 379) (4, 396)
(5, 132) (6, 44) (7, 554) (8, 724) (9, 511)
(10, 440) (11, 686) (12, 768) (13, 256) (14, 355)
(15, 388) (16, 399) (17, 133) (18, 314) (19, 644)
(20, 754) (21, 521) (22, 713) (23, 777) (24, 259)
(25, 356) (26, 658) (27, 489) (28, 163)

Parcurgând (eventual simultan) cele două liste se găseşte (10, 644) ∈ L1 , (19, 644) ∈ L2 .
Se poate scrie deci
log3 525 = 29 · 10 + 19 = 309.
Se verifică uşor că 3309 ≡ 525 (mod 809).

9.2.2 Algoritmul Pohlig - Hellman


Mai ı̂ntâi, un rezultat matematic:

Lema 9.1. Fie x ∈ Zp un element primitiv. Atunci

xm ≡ xn (mod p) ⇐⇒ m ≡ n (mod (p − 1))

Demonstraţie. Relaţia xm ≡ xn (mod p) se poate rescrie xm−n ≡ 1 (mod p). Dar –


conform Teoremei lui Fermat – xp−1 ≡ 1 (mod p) şi xi 6≡ 1 (mod p) pentru 0 < i < p − 1.
Deci p − 1|m − n, sau m − n ≡ 0 (mod (p − 1)), relaţie echivalentă cu m ≡ n (mod (p −
1)).

Revenind la sistemul de criptare El Gamal, să considerăm descompunerea ı̂n factori


primi
k
ci
Y
p−1= qi .
i=1
9.2. CALCULUL LOGARITMULUI DISCRET 167

Dacă s-ar putea calcula a (mod qici ) pentru toţi i = 1, . . . , k, atunci – folosind Teorema
chineză a resturilor – s-ar putea determina a mod (p − 1).
Fie q un număr prim astfel ca p − 1 ≡ 0 (mod q c ) şi p − 1 6≡ 0 (mod q c+1 ). Să arătăm
cum se poate calcula atunci x ≡ a (mod q c ) pentru orice x, (0 ≤ x ≤ q c − 1).
Să descompunem ı̂ntâi x ı̂n baza q folosind egalitatea
c−1
ai q i ,
X
x= (0 ≤ ai ≤ q − 1).
i=0

Atunci se poate scrie a = x + q c · s pentru un anumit număr ı̂ntreg pozitiv s.


La primul pas trebuie calculat a0 . Se porneşte de la observaţia că
β (p−1)/q ≡ α(p−1)a0 /q (mod p).
c s)/q
Pentru a arăta aceasta, deoarece β (p−1)/q ≡ α(p−1)(x+q (mod p), este suficient să se
c
verifice că α(p−1)(x+q s)/q ≡ α(p−1)a0 /q (mod p).
Această relaţie este adevărată dacă şi numai dacă
(p − 1)(x + q c s) (p − 1)a0
≡ (mod (p − 1)),
q q
ceea ce se poate verifica prin calcul direct:
c−1
(p − 1)(x + q c s) (p − 1)a0
!
p−1 p − 1
(x + q c s − a0 ) = ai q i + q c s − a0 =
X
− =
q q q q i=0
p − 1 c−1 c−1
! !
ai q i + q c s = (p − 1) ai q i−1 + q c−1 s ≡ 0 (mod (p − 1)).
X X
=
q i=1 i=1

Putem acum să ı̂ncepem calculul lui β (p−1)/q (mod p). Dacă β (p−1)/q ≡ 1 (mod p),
atunci a0 = 0. Altfel se calculează ı̂n Zp γ = α(p−1)/q , γ 2 , . . . până se obţine un număr
ı̂ntreg pozitiv i pentru care γ i ≡ β (p−1)/q . Atunci a0 = i.
Dacă c = 1, algoritmul se termină; altfel, (c > 1), se caută valoarea lui a1 . Pentru
aceasta se defineşte
β1 = βα−a0
şi se notează x1 = logα β1 (mod q c ).
c−1
(p−1)/q 2
ai q i , se va ajunge la relaţia β1
X
Deoarece (evident) x1 = ≡ α(p−1)a1 /q (mod p).
i=1
(p−1)/q 2
Se calculează atunci β1 (mod p) şi se caută i astfel ca
(p−1)/q 2
γ i ≡ β1 (mod p).
Se ia a1 = i.
Dacă c = 2, s-a terminat; ı̂n caz contrar, se mai efectuează c − 2 paşi pentru deter-
minarea coeficienţilor a2 , . . . , ac−1 .
168 CAPITOLUL 9. SISTEMUL DE CRIPTARE EL GAMAL

Formal, algoritmul Pohlig - Hellman este următorul:

1. Se calculează γ i = α(p−1)i/q (mod p), 0 ≤ i ≤ q − 1;


2. β0 ←− β;
3. for j = 0 to c − 1 do
(p−1)/q j+1
3.1 δ ←− βj (mod p);
3.2. Se caută i astfel ca δ = γ i ;
3.3. aj ←− i;
j
3.4. βj+1 ←− βj α−aj q mod p.

c−1
ai q i .
X
Algoritmul calculează a0 , a1 , . . . , ac−1 unde logα β (mod q c ) =
i=0

Exemplul 9.4. Fie p = 29. Avem n = p − 1 = 28 = 22 71 .


Să alegem α = 2, β = 18 şi ne punem problema determinării lui a = log2 18. Pentru
aceasta se va calcula a (mod 4) şi a (mod 7).
Să ı̂ncepem cu q = 2, c = 2. Avem (toate calculele se efectuează modulo 29):
γ 0 = 1, γ 1 = α28/2 = 214 = 28, deci δ = β 28/2 = 1814 = 28, de unde rezultă a0 = 1.
28/4
β1 = β0 · α−1 = 9, β1 = 97 = 28. Cum γ1 = 28, rezultă a1 = 1.
Avem deci a ≡ 3 (mod 4).
Să considerăm acum q = 7, c = 1. Vom avea (modulo 29):
β 28/7 = 184 = 25, γ 1 = α28/7 = 24 = 16, apoi γ 2 = 24, γ 3 = 7, γ 4 = 25, deci a0 = 4
şi a ≡ 4 (mod 7).
Se obţine sistemul a ≡ 3 (mod 4), a ≡ 4 (mod 7), de unde – folosind teorema chineză
a resturilor – a ≡ 11 (mod 28). Deci, log2 18 = 11 ı̂n Z29 .

9.2.3 Algoritmul Pollard Rho


Fie p un număr prim şi α ∈ Zp un element de ordin n (n < p). Vom considera Gα ⊆ Zp
subgrupul ciclic generat de α. Ne punem problema calculării lui logα β, unde β ∈ Gα este
arbitrar.
Fie Zp = S1 ∪ S2 ∪ S3 o partiţie a lui Zp ı̂n trei mulţimi de dimensiuni aproximativ
egale; considerăm funcţia

f : Gα × Zn × Zn −→ Gα × Zn × Zn

definită prin 

 (βx, a, b + 1) dacă x ∈ S1
f (x, a, b) = (x2 , 2a, 2b) dacă x ∈ S2
x ∈ S3


(αx, a + 1, b) dacă
Pe baza acestei funcţii vom genera recursiv triplete (x, a, b) cu proprietatea x = αa β b .
9.2. CALCULUL LOGARITMULUI DISCRET 169

Fie (1, 0, 0) tripletul iniţial (el are această proprietate). În continuare
(
(1, 0, 0) dacă i=0
(xi , ai , bi ) =
f (xi−1 , ai−1 , bi−1 ) dacă i≥1

În etapa a doua, se compară tripletele (x2i , a2i , b2i ) şi (xi , ai , bi ) până se găseşte o valoare
a lui i pentru care x2i = xi . În acel moment,

αa2i β b2i = αai β bi .

Notând c = logα β, relaţia poate fi rescrisă

αa2i +cb2i = αai +cbi .

Cum α are ordinul n, rezultă

a2i + cb2i ≡ ai + cbi (mod n)

sau
c(b2i − bi ) ≡ ai − a2i (mod n).
Dacă cmmdc(b2i − bi , n) = 1, atunci se poate obţine c:

c = (ai − a2i ) · (b2i − bi )−1 (mod n)



Exemplul 9.5. Să considerăm p = 809 şi α = 89; ordinul lui α ı̂n Z809 este n = 101. Se
verifică uşor că β = 618 ∈ G89 . Vom calcula log89 618.
Să presupunem că alegem partiţia
S1 = {x | x ∈ Z809 , x ≡ 1 (mod 3)}
S2 = {x | x ∈ Z809 , x ≡ 0 (mod 3)}
S3 = {x | x ∈ Z809 , x ≡ 2 (mod 3)}
Pentru i = 1, 2, 3, . . . se obţin următoarele triplete:
i (xi , ai , bi ) (x2i , a2i , b2i )
1 (618, 0, 1) (76, 0, 2)
2 (76, 0, 2) (113, 0, 4)
3 (46, 0, 3) (488, 1, 5)
4 (113, 0, 4) (605, 4, 10)
5 (349, 1, 4) (422, 5, 11)
6 (488, 1, 5) (683, 7, 11)
7 (555, 2, 5) (451, 8, 12)
8 (605, 4, 10) (344, 9, 13)
9 (451, 5, 10) (112, 11, 13)
10 (422, 5, 11) (422, 11, 15)
170 CAPITOLUL 9. SISTEMUL DE CRIPTARE EL GAMAL

Deci x10 = x20 = 422. Se poate calcula atunci


log89 618 = (11 − 5) · (11 − 15)−1 (mod 101) = 6 · 25 (mod 101) = 49

(ı̂n grupul multiplicativ Z809 ).

O formalizare a algoritmului Pollard Rho pentru calculul logaritmului discret3 este:

Algoritm Pollard Rho(Zp , n, α, β)


1 Se defineşte partiţia Zp = S1 ∪ S2 ∪ S3 ;
2. (x, a, b) ←− f (1, 0, 0), (x1 , a1 , b1 ) ←− f (x, a, b)
3. while x 6= x1 do
3.1. (x, a, b) ←− f (x, a, b);
3.2. (x1 , a1 , b1 ) ←− f (x1 , a1 , b1 ), (x1 , a1 , b1 ) ←− f (x1 , a1 , b1 );
4. if cmmdc(b1 − b, n) > 1 then return(Eşec)
else return((a − a1 ) · (b1 − b)−1 (mod n))
procedure f (x, a, b)
1. if x ∈ S1 then f ←− (β · x, a, (b + 1) (mod n));
2. if x ∈ S2 then f ←− (x · x, 2 · a (mod n), 2 · b (mod n));
3. if x ∈ S3 then f ←− (α · x, (a + 1) (mod n), b);
4. return(f ).
end procedure

În cazul cmmdc(b1 − b, n) = d > 1, congruenţa c · (b1 − b) ≡ a − a1 (mod n) are d


soluţii posibile. Dacă d este destul de mic, aceste soluţii se pot afla, iar o simplă căutare
exhaustivă printre ele va determina soluţia corectă.

9.2.4 Metoda de calcul a indicelui


Această metodă seamănă cu unul din cei mai buni algoritmi de descompunere ı̂n factori.
Vom da doar o descriere informală a acestui algoritm.
Se foloseşte o bază de divizori B compusă din B numere prime ”mici”. Prima etapă
constă ı̂n aflarea logaritmilor elementelor din baza B.
În a doua etapă, folosind aceşti logaritmi, se va determina logaritmul discret al lui β.
I: Se construiesc C = B + 10 congruenţe modulo p de forma
a a a
αxj ≡ p1ij p22j . . . pBBj (mod p), (1 ≤ j ≤ C).

Cu aceste C ecuaţii de necunoscute logα pi (1 ≤ i ≤ B) se ı̂ncearcă aflarea unei soluţii


unice modulo (p − 1). În caz de reuşită, primul pas este ı̂ncheiat.
3
Un algoritm similar Pollard Rho poate fi construit pentru factorizarea unui număr. Detalii se găsesc
de exemplu ı̂n [?].
9.3. SECURITATEA P LD FAŢĂ DE INFORMAŢII PARŢIALE 171

Problema ar fi cum să se găsească aceste C congruenţe. O metodă elementară constă


din trei paşi: alegerea aleatoare a unui x, calculul lui αx (mod p) şi verificarea dacă acest
număr are toţi divizorii ı̂n B.
II: Acum se poate determina logα β cu un algoritm de tip Las Vegas. Se alege aleator
un număr ı̂ntreg s (1 ≤ s ≤ p − 2) şi se determină γ = βαs (mod p).
Se ı̂ncearcă apoi descompunerea lui γ ı̂n baza B. Dacă acest lucru este posibil, se
obţine o relaţie de forma
βαs ≡ pc11 pc22 . . . pcBB (mod p)
care poate fi transformată ı̂n
logα β + s ≡ c1 logα p1 + . . . + cB logα pB (mod (p − 1)).
De aici - prin evaluarea membrului drept, se poate determina logα β.
Exemplul 9.6. Fie p = 10007 şi α = 5 (element primitiv). Să considerăm B= {2, 3, 5, 7}
ca bază de divizori. Cum – evident – log5 5 = 1, trebuie determinaţi doar trei logaritmi de
bază.
Trei numere aleatoare ”norocoase” pot fi 4063, 5136, 9865.
Pentru x = 4063 calculăm 54063 (mod 10007) = 42 = 2 · 3 · 7, care conduce la congruenţa
log5 2 + log5 3 + log5 7 ≡ 4063 (mod 10006).
În mod similar se obţin 55136 (mod 10007) = 54 = 2 · 33 , 59865 (mod 10007) = 189 =
33 · 7.
Pe baza lor se obţin alte două relaţii:
log5 2 + 3log5 3 ≡ 5136 (mod 10006),
3log5 3 + log5 7 ≡ 9865 (mod 10006).
Rezolvarea acestui sistem de trei ecuaţii ı̂n Z10006 conduce la soluţia unică
log5 2 = 6578, log5 3 = 6190, log5 7 = 1301.
Să presupunem acum că se caută log5 9451. Dacă se generează aleator numărul
s = 7736, avem 9451 · 57736 (mod 10007) = 8400 = 24 31 52 71 .
Cum acesta se poate factoriza ı̂n B, avem
log5 9451 = 4log5 2 + log5 3 + 2log5 5 + log5 7 − s = 4 · 6578 + 6190 + 2 · 1 + 1301 − 7736 = 6057,
calculele fiind realizate modulo 10006.
Se verifică uşor că 56057 ≡ 9451 (mod 10007).

9.3 Securitatea P LD faţă de informaţii parţiale


În această secţiune vom considera un tip de atac care ı̂ncearcă să determine valoarea unuia
sau mai multor biţi din reprezentarea binară a logaritmilor discreţi.
Mai exact se ı̂ncearcă calculul lui Li (β): al i-lea bit (numărând de la cel mai puţin bit
semnificativ) din scrierea ı̂n binar a lui logα β peste Zp∗ ; deci 1 ≤ i ≤ dlog2 (p − 1)e.
172 CAPITOLUL 9. SISTEMUL DE CRIPTARE EL GAMAL

Afirmaţia 9.1. L1 (β) poate fi calculat printr-un algoritm de complexitate polinomială.


Demonstraţie. Să considerăm funcţia f : Zp∗ ←− Zp∗ definită

f (x) = x2 (mod p).


Notăm RP (p) mulţimea resturilor pătratice modulo p:
RP (p) = {x | ∃y ∈ Zp∗ , x ≡ y 2 (mod p)}.
Pe baza observaţiilor
1. f (x) = f (p − x),
2. x2 ≡ y 2 (mod p) ⇐⇒ x = ±y (mod p)
rezultă card(RP (p)) = (p − 1)/2 (deci exact jumătate din elementele lui Zp∗ sunt resturi
pătratice).
Să presupunem acum că α ∈ Zp este primitiv. Deci αi ∈ RP (p) pentru i par. Cum
(p − 1)/2 astfel de puteri sunt distincte, rezultă
p−3
 
RP (p) = α2i 0 ≤ i ≤

.
2
Deci β este rest pătratic dacă şi numai dacă logα β este par, adică L1 (β) = 0.
Conform Teoremei 8.1 (Capitolul 8), β este rest pătratic dacă şi numai dacă
p−1
β 2 ≡ 1 (mod p)
fapt care poate fi testat cu un algoritm de complexitate polinomială. Deci putem da o
formulă pentru calculul lui L1 (β):
(
0 dacă β (p−1)/2 ≡ 1 (mod p)
L1 (β) =
1 altfel

Afirmaţia 9.2. Dacă p − 1 = 2s (2t + 1), atunci


1. Calculul lui Li (β) pentru 1 ≤ i ≤ s este uşor.
2. Orice algoritm (sau oracol) care poate calcula Ls+1 (β) permite rezolvarea problemei
logaritmului discret ı̂n Zp .
Prima parte a afirmaţiei este simplă.
Vom demonstra a doua parte pentru cazul s = 1. Mai exact,vom arăta că dacă p este
prim şi p ≡ 3 (mod 4), atunci orice oracol care dă L2 (β) poate fi folosit la rezolvarea
problemei logaritmului discret ı̂n Zp .
Se ştie (algoritmul de criptare al lui Rabin, Capitolul 8) că dacă β este rest pătratic ı̂n
Zp şi p ≡ 3 (mod 4), atunci rădăcinile pătrate ale lui β modulo p sunt ±β (p+1)/4 (mod p).
9.3. SECURITATEA P LD FAŢĂ DE INFORMAŢII PARŢIALE 173

Lema 9.2. Dacă p ≡ 3 (mod 4) şi β 6= 0, atunci L1 (p − β) = 1 − L1 (β).

Demonstraţie. Fie αa ≡ β (mod p). Atunci αa+(p−1)/2 ≡ −β (mod p). Deoarece p ≡


3 (mod 4), numărul (p − 1)/2 este impar. Deci L1 (β) 6= L1 (p − β).

Fie acum β = αa pentru un exponent par a, necunoscut. Atunci

±β (p+1)/4 ≡ αa/2 (mod p).

Cum L2 (β) = L1 (αa/2 ), valoarea L2 (β) poate determina care din cele două variante (cu +
sau −) este corectă. Acest lucru este folosit de următorul algoritm care dă valoarea loga-
ritmului discret logα β (s-a presupus că valoarea L2 (β) se poate afla, folosind de exemplu
un oracol):

Algoritm aflare bit(p, α, β)


1. x0 ←− L1 (β);
2. β ←− β/αx0 (mod p)
3. i ←− 1;
4. while β 6= 1 do
4.1. xi ←− L2 (β);
4.2. γ ←− β (p+1)/4 (mod p);
4.3. if L1 (γ) = xi then β ←− γ
else β ←− p − γ;
xi
4.4. β ←− β/α (mod p);
4.5. i ←− i + 1;
5. return(xi−1 , xi−2 , . . . , x0 ).

În final, se obţine


xj · 2j .
X
logα β =
j≥0

Exemplul 9.7. Fie p = 19, α = 2, β = 6. Deoarece numerele sunt foarte mici, se pot
determina uşor valorile pentru L1 şi L2 ; ele sunt cele din tabelul

x L1 (x) L2 (x) x L1 (x) L2 (x) x L1 (x) L2 (x)


1 0 0 7 0 1 13 1 0
2 1 0 8 1 1 14 1 1
3 1 0 9 0 0 15 1 1
4 0 1 10 1 0 16 0 0
5 0 0 11 0 0 17 0 1
6 0 1 12 1 1 18 1 0
174 CAPITOLUL 9. SISTEMUL DE CRIPTARE EL GAMAL

Pe baza acestor informaţii, aplicăm algoritmul. Se obţine:


x0 ←− 0, β ←− 6, i ←− 1;
x1 ←− L2 (6) = 1, γ ←− 5, L1 (5) = 0 6= x1 , β ←− 14, β ←− 7, i ←− 2;
x2 ←− L2 (7) = 1, γ ←− 11, L1 (11) = 0 6= x2 , β ←− 8, β ←− 4, i ←− 3;
x3 ←− L2 (4) = 1, γ ←− 17, L1 (17) = 0 6= x3 , β ←− 2, β ←− 1, i ←− 4.
return(1, 1, 1, 0).
Deci log2 6 = 11102 = 14.

9.4 Generalizarea sistemului de criptare El Gamal


Sistemul de criptare El Gamal se poate construi pentru orice grup (ı̂n locul grupului
multiplicativ Zn∗ ) ı̂n care problema logaritmului (definită corespunzător) este dificilă.
Fie (G, ◦) un grup finit. Problema logaritmului discret (P LD) se defineşte ı̂n G astfel:

Fie α ∈ G şi H = {αi | i ≥ 0} subgrupul generat de α. Dacă β ∈ H, să se determine


un a (unic) (0 ≤ a ≤ card(H) − 1) cu αa = β, unde αa = α | ◦ α ◦{z. . . ◦ α}
a ori

Definirea sistemului de criptare El Gamal ı̂n subgrupul H ı̂n loc de Zn∗ este uşor de
realizat; anume:

Fie (G, ◦) un grup şi α ∈ G pentru care P LD ı̂n H = {αi | i ≥ 0} este dificilă.
Fie P= G, C= G × G şi K= {(G, α, a, β) | β = αa }.
Valorile α, β sunt publice iar a este secret.
Pentru K = (G, α, a, β) şi un k ∈ Zcard(H) aleator (secret), se defineşte

eK (x, k) = (y1 , y2 ) unde y1 = αk , y2 = x ◦ β k .

Pentru y = (y1 , y2 ), decriptarea este

dK (y) = y2 ◦ (y1a )−1 .

De remarcat că pentru criptare/decriptare nu este necesară cunoaşterea ordinului card(H)


de mărime al subgrupului; Alice poate alege aleator un k, (0 ≤ k ≤ card(G) − 1) cu care
cele două procese funcţionează fără probleme.
Se poate observa de asemenea că G nu este neapărat abelian (H ı̂n schimb este, fiind
subgrup ciclic).
Să studiem acum problema logaritmului discret ”generalizat”. Deoarece H este sub-
grup ciclic, orice versiune a problemei este echivalentă cu P LD ı̂ntr-un grup ciclic.
În schimb, se pare că dificultatea problemei depinde mult de reprezentarea grupului
utilizat.
9.5. EXERCIŢII 175

Astfel ı̂n grupul aditiv Zn , problema este simplă; aici exponenţierea αa este de fapt
ı̂nmulţirea cu a modulo n. Deci, P LD constă ı̂n aflarea unui număr ı̂ntreg a astfel ca

aα ≡ β (mod n).

Dacă se alege α astfel ca cmmdc(α, n) = 1 (α este generator al grupului), α are un


invers multiplicativ modulo n, care se determină uşor cu algoritmul lui Euclid extins.
Atunci,
a = logα β = βα−1 (mod n).
Să vedem cum se reprezintă P LD ı̂n grupul multiplicativ Zp∗ cu p prim. Acest grup
este ciclic de ordin p − 1, deci izomorf cu grupul aditiv Zp−1 . Deoarece P LD se poate
rezolva uşor ı̂ntr-un grup aditiv, apare ı̂ntrebarea dacă putem rezolva această problemă
ı̂n Zp∗ reducând-o la Zp−1 .
Ştim că există un izomorfism φ : Zp∗ −→ Zp−1 , deci pentru care

φ(xy mod p) = (φ(x) + φ(y)) (mod (p − 1).)

În particular, φ(αa mod p) = aφ(α) (mod (p − 1)), adică

β ≡ αa (mod p) ⇐⇒ aφ(a) ≡ φ(β) (mod (p − 1)).

Acum, determinarea lui a se realizează cu logα β = φ(β)(φ(α))−1 (mod (p − 1)).


Deci, dacă se găseşte o metodă eficace pentru calculul izomorfismului φ, se obţine un
algoritm eficace pentru calculul logaritmului discret ı̂n Zp∗ .
Problema este că nu se cunoaşte nici o metodă generală de construcţie a lui φ pentru
un număr prim p oarecare. Deşi se ştie că cele două grupuri sunt izomorfe, nu există ı̂ncă
un algoritm eficient pentru construcţia explicită a unui astfel de izomorfism.
Această metodă se poate aplica problemei logaritmului discret ı̂ntr-un grup finit ar-
bitrar. Implementările au fost realizate ı̂n general pentru Zp , GF (2p ) (unde P LD este
dificilă) sau curbe eliptice.

9.5 Exerciţii
9.1. Implementaţi algoritmul Shanks pentru aflarea logaritmului discret. Aplicaţii pentru
∗ ∗
aflarea log106 12375 ı̂n Z24691 şi log6 248388 ı̂n Z458009 .

9.2. Numărul p = 458009 este prim şi α = 2 are ordinul 57251 ı̂n Zp∗ . Folosind algoritmul
Pollard Rho, calculaţi log2 56851 ı̂n Zp∗ .
Luaţi valoarea iniţială x0 = 1 şi partiţia din Exemplul ??.
176 CAPITOLUL 9. SISTEMUL DE CRIPTARE EL GAMAL

9.3. Fie p un număr prim impar şi k un număr pozitiv. Grupul multiplicativ Zp∗k are
ordinul pk−1 · (p − 1) şi este ciclic. Un generator al acestui grup este numit ”element
primitiv modulo pk ”.
(a) Dacă α este un element primitiv modulo p, arătaţi că cel puţin unul din numerele
α, α + p este element primitiv modulo p2 .
(b) Descrieţi cum se poate poate verifica eficient că 3 este o rădăcină primitivă modulo
29 şi modulo 292 . Arătaţi ı̂ntâi că dacă α este o rădăcină primitivă modulo p şi modulo
p2 , atunci ea este rădăcină primitivă modulo pj pentru orice j ı̂ntreg.
(c) Găsiţi un ı̂ntreg α care este rădăcină primitivă modulo 29 dar nu este rădăcină
primitivă modulo 292 .

(d) Folosiţi algoritmul Pohlig - Hellman pentru a calcula log3 3344 ı̂n Z24389 .
9.4. Să implementăm sistemul de criptare El Gamal ı̂n GF (33 ). Polinomul x3 + 2x2 + 1
este ireductibil peste Z3 [x] şi deci GF (33 ) = Z[ x]/(x3 + 2x2 + 1). Asociem cele 26 litere
ale alfabetului cu cele 26 elemente nenule ale corpului (ordonate lexicografic):
A ↔ 1 B ↔ 2 C ↔ x
D ↔ x+1 E ↔ x+2 F ↔ 2x
G ↔ 2x + 1 H ↔ 2x + 2 I ↔ x2
J ↔ x2 + 1 K ↔ x2 + 2 L ↔ x2 + x
M ↔ x2 + x + 1 N ↔ x2 + x + 2 O ↔ x2 + 2x
P ↔ x2 + 2x + 1 Q ↔ x2 + 2x + 2 R ↔ 2x2
S ↔ 2x2 + 1 T ↔ 2x2 + 2 U ↔ 2x2 + x
V ↔ 2x2 + x + 1 W ↔ 2x2 + x + 2 X ↔ 2x2 + 2x
Y ↔ 2x2 + 2x + 1 Z ↔ 2x2 + 2x + 2
Să presupunem că Bob foloseşte α = x şi p = 11 ı̂ntr-un sistem de criptare El Gamal.
Apoi alege β = x + 2. Decriptaţi mesajul

(K, H) (P, X) (N, K) (H, R) (T, F ) (V, Y ) (E, H) ((F, A) (T, W ) (J, D) (U, J)

9.5. Fie p = 227. Elementul α = 2 este primitiv ı̂n Zp∗ .


(a) Calculaţi α32 , α40 , α59 şi α156 modulo p şi apoi factorizaţi-le pentru baza de factori
{2, 3, 5, 7, 11}.
(b) Folosind faptul că log2 2 = 1, calculaţi log2 3, log2 5, log2 7, log2 11 folosind facto-
rizarea anterioară.
(c) Să presupunem că vrem să calculăm log2 173. Înmulţim 173 cu valoarea ”aleatoare”
177
2 (mod p). Factorizaţi rezultatul peste baza de factori dată mai sus şi determinatı̂
log2 173.
9.6. Implementaţi algoritmul Pohlig - Hellman de calcul al logaritmului discret ı̂n Zp ,
unde p este număr prim şi α primitiv. Folosiţi programul pentru a afla log5 8563 ı̂n Z28703
şi log10 12611 ı̂n Z31153 .
Capitolul 10

Sisteme de criptare bazate pe curbe


eliptice

Toate sistemele de criptare prezentate până ı̂n acest moment se bazează pe operaţii efec-
tuate ı̂ntr-un inel multiplicativ Zn ; securitatea lor s-a redus ı̂n general la probleme mate-
matice N P - complete.
În 1985, Victor Miller şi Neal Koblitz propun – independent unul de altul – o crip-
tografie ı̂n care baza de calcul să fie mulţimea punctelor unei curbe eliptice. Se pare că
sunt două motive pentru care această modalitate este exploatată cu tot mai mult succes:

• Este asigurată o eficienţă sporită a algoritmilor (din punct de vedere timp/spaţiu).


Conform N SA (National Security Agency), ”criptografia pe curbe eliptice asigură o
securitate sporită, precum şi performanţe superioare tehnicilor de criptare cu cheie
publică cunoscute până acum.”
O estimare oferită de N IST a mărimii cheilor (ı̂n biţi) pentru un nivel echivalent
de securitate arată astfel:
Sistem simetric RSA Sistem pe curbe eliptice
80 1024 160
112 2048 224
128 3072 256
192 7680 384
256 15360 521

• Oferă variante de implementare superioare pentru noi aparate matematice de calcul


(cum ar fi de exemplu aplicaţiile biliniare).

Vom aborda ı̂n acest capitol o scurtă prezentare a curbelor eliptice, precum şi a princi-
palelor direcţii de studiu referitoare la ECC (Elliptic Curve Cryptography).

177
178 CAPITOLUL 10. SISTEME DE CRIPTARE BAZATE PE CURBE ELIPTICE

10.1 Aritmetica curbelor eliptice


Pentru ı̂nceput, să definim noţiunea de curbă eliptică.
Definiţia 10.1. O curbă eliptică E peste un corp K este definită de ecuaţia
E: y 2 + a1 xy + a3 y = x3 + a2 x2 + a4 x + a6 (1)
unde a1 , a2 , a3 , a4 , a6 ∈ K şi ∆ 6= 0, unde ∆ este discriminantul lui E, definit prin
∆ = −d22 d8 − 8d34 − 27d26 + 9d2 d4 d6 , (2)
= a21 + 4a2 ,


 d2
d4 = 2a4 + a1 a3 ,


iar


 d6 = a23 + 4a6 ,
d8 = a21 a6 + 4a2 a6 − a1 a3 a4 + a2 a23 − a4 .

Dacă L este o extensie oarecare a lui K, atunci mulţimea punctelor curbei E pe L este

E(L) = {(x, y) ∈ L × L | y 2 + a1 xy + a3 y − x3 + a2 x2 + a4 x + a6 = 0}
[
{O}

unde O este ”punctul de la infinit”1 .


Elementele lui E(L) se numesc punctele L - raţionale ale curbei E.
În general vom lucra cu un corp K = Zp , unde p este un număr prim. Prin extensie,
vom numi curbă eliptică peste Zp mulţimea (x, y) ∈ Zp × Zp a soluţiilor ecuaţiei
y 2 + a1 xy + a3 y ≡ x3 + a2 x2 + a4 x + a6 (mod p)
şi dintr-un punct la infinit O.
Observaţia 10.1.
1. Ecuaţia (1) este numită ecuaţie Weierstrass.

2. Condiţia ∆ 6= 0 asigură lucrul cu o curbă eliptică ”netedă” (fără puncte ı̂n care
curba are două sau mai multe tangente distincte).
În funcţie de valorile caracteristicii p a corpului K, se disting următoarele cazuri:
1. p = 2. Apar două subcazuri:

(a) Dacă a1 6= 0, atunci curba eliptică E poate fi adusă (prin schimbări de variabile)
la forma
y 2 + xy = x3 + ax + b (3)
unde a, b ∈ K. O asemenea curbă se numeşte non-supersingulară, iar discri-
minantul ei este ∆ = b.
1
Elementul O este introdus pentru a satisface forma proiectivă a ecuaţiei (1) şi pentru a permite
construirea unei structuri algebrice convenabile pe E(L).
10.1. ARITMETICA CURBELOR ELIPTICE 179

(b) Dacă a1 = 0, atunci ecuaţia curbei E poate fi adusă la forma


y 2 + cy = x3 + ax + b (4)
unde a, b, c ∈ K. O asemenea curbă este numită supersingulară, iar discrimi-
nantul ei este ∆ = c4 .

2. p = 3. Apar şi aici două subcazuri:

(a) Dacă a21 6= −a2 , atunci curba eliptică E se poate transforma ı̂n
y 2 = x3 + ax2 + b (5)
cu a, b ∈ K. Curba este numită non-supersingulară, iar discriminantul ei este
∆ = −a3 b.
(b) Dacă a21 = −a2 , atunci E se aduce la forma
y 2 = x3 + ax + b (6)
cu a, b ∈ K. Curba este supersingulară, de discriminant ∆ = −a3 .

3. Pentru p > 3, curba eliptică E poate fi adusă (prin schimbări de variabile) la forma

y 2 = x3 + ax + b (7)

unde a, b ∈ K. Descriminantul ei este ∆ = −16(4a3 + 27b2 ).

Marea majoritate a curbelor eliptice utilizate ı̂n protocoale criptografice sunt definite
pentru cazul p > 3 sau (ı̂ntr-o măsură mai mică) pentru curbele non-supersingulare.
În continuare vom lucra cu definiţia (7) a unei curbe eliptice (cazul corpurilor de
caracteristică p > 3).
O astfel de curbă eliptică E se poate structura ca un grup abelian finit. Legea de
compoziţie (notată aditiv) este definită astfel:
Fie P, Q ∈ E(L), P = (x1 , y1 ), Q = (x2 , y2 ).
Dacă x2 = x1 , y2 = −y1 , atunci P + Q = O; altfel, P + Q = (x3 , y3 ) unde

x3 = λ 2 − x1 − x2 , y3 = λ(x1 − x3 ) − y1 ,
iar 
 y2 −y1 dacă P 6= Q
x2 −x1
λ= 2
 3x1 +a dacă P = Q
2y1

Se mai defineşte P + O= O+P = P, ∀P ∈ E.


Verificarea proprietăţilor de grup este banală. Elementul neutru este O.
De remarcat că inversa lui (x, y) (notată −(x, y)) este (x, −y).
180 CAPITOLUL 10. SISTEME DE CRIPTARE BAZATE PE CURBE ELIPTICE

Operaţia poate fi explicată mult mai sugestiv geometric.


Fie P = (x1 , y1 ) şi Q = (x2 , y2 ) două puncte distincte pe curba eliptică E. Suma
R = P + Q este definită astfel: linia P Q taie curba ı̂ntr-un al treilea punct. R este
simetricul acestui punct faţă de axa xx0 (figura (a)).
y y

P =(x1 ,y1 )

Q=(x2 ,y2 ) x
x
P =(x1 ,y1 )

R=(x3 ,y3 ) R=(x3 ,y3 )

(a) Adunarea P + Q = R (b) Dublarea: P + P = R

Dacă P şi Q coincid, atunci tangenta ı̂n P va tăia din nou curba eliptică E. R este
simetricul acestui nou punct faţă de axa xx0 (figura (b)).

Exemplul 10.1. Fie E curba eliptică y 2 = x3 + x + 5 peste Z19 . Să calculăm la ı̂nceput
punctele lui E. Aceasta se face astfel: ∀x ∈ Z11 se calculează z = x3 + x + 5 (mod 19);
apoi se testează dacă z este rest pătratic.
În caz afirmativ, deoarece 19 ≡ 3 (mod 4), există o formulă (a se vedea sistemul de
criptare Rabin, Capitolul 8) care conduce direct la calculul rădăcinilor pătrate ale lui z :
± z (19+1)/4 (mod 19) = ±z 5 (mod 19).
Rezultatele sunt strânse ı̂n tabelele următoare (toate calculele se realizează modulo 19):

a 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
a2 0 1 4 9 16 6 17 11 7 5 5 7 11 17 6 16 9 4 1

x x3 + x + 5 y x x3 + x + 5 y x x3 + x + 5 y
0 5 9, 10 1 7 8, 11 2 15 −
3 16 4, 15 4 16 4, 15 5 2 −
6 18 − 7 13 − 8 12 −
9 2 − 10 8 − 11 17 6, 13
12 16 4, 15 13 11 7, 12 14 8 −
15 13 − 16 13 − 17 14 −
18 3 −
10.1. ARITMETICA CURBELOR ELIPTICE 181

Curba eliptică E admite deci 15 puncte; cum ordinul grupului nu este număr prim,
grupul nu este ciclic. Vom alege un element primitiv drept generator. Fie acesta α =
(0, 9). Calculăm ”puterile” lui α (de fapt multiplii, grupul fiind aditiv). Pentru 2α se
calculează ı̂ntâi (modulo 19):

λ = (3 · 02 + 1)(2 · 9)−1 = 1 · 18−1 = 18.

Acum se pot determina


x3 = 182 − 0 − 0 = 361 ≡ 1 (mod 19), y3 = 18 · (0 − 1) − 9 = −27 ≡ 11 (mod 19),
deci 2α = (1, 11).
Multiplul următor este 3α = 2α + α = (1, 11) + (0, 9). Avem:
λ = (9 − 11) · (0 − 1)−1 = 2, deci
x3 = 22 − 1 − 0 = 3, y3 = 2 · (1 − 3) − 11 = −15 ≡ 4 (mod 19),
de unde rezultă 3α = (3, 4).
În mod similar se obţin toate punctele curbei eliptice E:
α = (0, 9) 2α = (1, 11) 3α = (3, 4) 4α = (4, 4) 5α = (13, 12)
6α = (11, 6) 7α = (12, 15) 8α = (12, 4) 9α = (11, 13) 10α = (13, 7)
11α = (4, 15) 12α = (3, 15) 13α = (1, 8) 14α = (0, 10) 15α = O
De remarcat că – de exemplu – (3, 4) nu este element primitiv, având ordinul 5.
O curbă eliptică definită pe Zp (p > 3 prim) are aproximativ p puncte. Numărul
punctelor din E(Zp ) este numit ordinul lui E peste Zp . O teoremă a lui Hasse ([?])
stabileşte un interval pentru acest număr:
√ √
p + 1 − 2 p ≤ card(E(Zp )) ≤ p + 1 + 2 p

Valoarea t = 2 p se numeşte urma lui E peste Zq , iar intervalul [p + 1 − t, p + 1 + t]
este numit interval Hasse.
Calculul efectiv al lui card(E(Zp )) este destul de dificil şi vom trece peste el2 . Există
un algoritm al lui Schoof ([?], pag 137-140) de numărare a punctelor unei curbe eliptice,
dar complexitatea lui este destul de mare: O(log 6 p) (O(log 9 p) ı̂n versiunea originală)
ı̂nmulţiri şi inversiuni, şi O(log 3 p) spaţiu de memorie. În plus implementarea sa este
destul de greoaie şi nu a fost realizată complet până ı̂n prezent.
În cazul curbelor eliptice construite peste extensii, se poate da următoarea teoremă:
Teorema 10.1. Fie p = q m . Există o curbă eliptică E definită peste Zp , cu card(E(Zp )) =
p + 1 − t dacă şi numai dacă este verificată una din condiţiile:
• t 6≡ 0 (mod q) şi t2 ≤ 4p.
2
Nu se cunoaşte nici o formulă care să dea valoarea card(E(Zp )); există o conjectură Birch and
Swinnerton-Dyer ı̂n legătură cu acest subiect, conjectură inclusă printre cele şapte probleme ale mileniului
(ı̂mpreună cu ”problema ”P versus N P ”).
182 CAPITOLUL 10. SISTEME DE CRIPTARE BAZATE PE CURBE ELIPTICE

• m este impar şi

– t = 0, sau
– t2 = 2p şi q = 2, sau
– t2 = 3p şi q = 3.

• m este par şi

– t2 = 4p, sau
– t2 = p şi q 6≡ 1 (mod 3), sau
– t = 0 şi q 6≡ 1 (mod 4).

O informaţie utilă referitoare la structura de grup a lui E(Zp ) este dată de teorema
următoare:
Teorema 10.2. (Teorema lui Ruck) Fie E o curbă eliptică peste Zp cu p > 3 număr prim.
Atunci există două numere ı̂ntregi n1 , n2 astfel ca E(Zp ) să fie izomorfă cu Zn1 × Zn2 , iar

n2 |n1 , n2 |(p − 1).

Demonstraţia poate fi găsită ı̂n [?], pag. 107.


O consecinţă a acestei teoreme este evaluarea card(E(Zp )) = n1 · n2 . Dacă n2 = 1,
atunci E(Zp ) este grup ciclic. Dacă n2 > 1, atunci spunem că E(Zp ) are rangul 2. Dacă
valoarea lui n2 este mică (n2 ≤ 4), spunem că E(Zp ) este aproape ciclic. Cum n2 divide n1
şi p − 1, se aşteaptă ca E(Zp ) să fie ciclic sau aproape ciclic pentru majoritatea curbelor
eliptice peste Zp .

10.2 Sisteme de criptare construite pe curbe eliptice


Pe spaţiul curbelor eliptice se pot realiza diverse tehnici de criptare cu cheie publică; unele
din ele sunt doar adaptări ale sistemelor deja prezentate, altele sunt aplicaţii specifice.
Principala atracţie a sistemelor construite pe curbe eliptice constă ı̂n dimensiuni mici
ale cheilor, ceea ce le face aplicabile pe sisteme portabile (smart-carduri de exemplu).
În general, sistemele de criptare se bazează pe problema logaritumuluin discret şi sunt
inspirate de algoritmul El Gamal.
Exemplul 10.2. Să vedem cum se realizează o criptare El Gamal pentru curba eliptică
definită ı̂n Exemplul ??.
Fie α = (0, 9) şi să presupunem că exponentul secret este a = 7. Atunci β = 7α =
(12, 15), iar operaţia de criptare este:

eK (x, k) = (k · (0, 9), x + k · (12, 15)), unde x ∈ E, 0 ≤ k ≤ 14.


10.2. SISTEME DE CRIPTARE CONSTRUITE PE CURBE ELIPTICE 183

Pentru decriptare se foloseşte operaţia

dK (y1 , y2 ) = y2 − 7y1

Să presupunem că Alice vrea să cripteze mesajul x = (3, 4) (care este un punct din
E); dacă ea alege aleator valoarea k = 8, va calcula
y1 = 8 · (0, 9) = (12, 4), şi
y2 = (3, 4) + 8 · (12, 15) = (3, 4) + (4, 15) = 3α + 8 · 7α = 3α + 11α = 14α = (0, 10)
(coeficienţii se calculează modulo 15).
Deci y = ((12, 4), (0, 10)). După recepţie, Bob decriptează mesajul astfel:
x = (0, 10) − 7 · (12, 4) = 14α − 7 · 8α = 3α.

10.2.1 Sistemul Menezes - Vanstone


În acest sistem de criptare – de fapt o variantă a lui El Gamal – curba eliptică este utilizată
pentru ”mascare”, domeniile de valori al textelor clare şi criptate fiind mult mai largi.
Prezentarea algoritmului este:

Fie E o curbă eliptică peste Zp (p > 3 prim) care conţine un subgrup ciclic H ı̂n
care problema logaritmului discret este dificilă.
Alegem P= Zp∗ × Zp∗ , C= E × Zp∗ × Zp∗ şi
K= {(E, α, a, β) | α ∈ E, a ∈ Zp∗ , β = a · α}.
Valorile α, β sunt publice, iar a este secret.
Pentru K = (E, α, a, β), k ∈ Zcard(H) ales aleator (secret) şi x = (x1 , x2 ) ∈ P,
definim
eK (x, k) = (y0 , y1 , y2 ),
unde y0 = k · α, (c1 , c2 ) = k · β, yi = ci · xi (mod p), i = 1, 2.
Pentru un text criptat y = (y0 , y1 , y2 ) se defineşte

dK (y) = (y1 · c−1 −1


1 (mod p), y2 · c2 (mod p)),

unde a · y0 = (c1 , c2 ).

Exemplul 10.3. Revenind la curba y 2 = x3 + x + 5 peste Z19 definită ı̂n Exemplul ??,
criptarea Menezes - Vanstone autorizează 18 · 18 = 324 texte clare, faţă de numai 15 ı̂n
sistemul El Gamal adaptat.
Să luăm din nou α = (0, 9) şi exponentul a = 7. Atunci β = 7 · α = (12, 15).
Dacă Alice doreşte să transmită textul clar x = (x1 , x2 ) = (5, 11) (de remarcat că
acesta nu este un punct din E) şi alege k = 4, ea va ı̂ncepe prin a calcula

y0 = k · α = 4 · (2, 7) = (4, 4)şik · β = 4(12, 15) = (1, 8)

deci c1 = 1, c2 = 8.
184 CAPITOLUL 10. SISTEME DE CRIPTARE BAZATE PE CURBE ELIPTICE

Apoi se calculează (modulo 19):

y1 = c1 · x1 = 1 · 5 = 5 şi y2 = c2 · x2 = 8 · 11 = 12.

Alice trimite deci lui Bob mesajul criptat y = (y0 , y1 , y2 ) = ((4, 4), 5, 12).
După recepţie, Bob calculează (c1 , c2 ) = a · y0 = 7 · (4, 4) = 7 · 4α = 13 · α = (1, 8),
apoi

x = (y1 · c−1 −1 −1 −1
1 (mod 19), y2 · c2 (mod 19)) = (5 · 1 , 12 · 8 ) = (5, 12 · 12) = (5, 11).

10.3 Problema logaritmului discret pe curbe eliptice


După cum am văzut anterior, principalele sisteme de criptare pe curbe eliptice folosesc
problema logaritmului discret. În cazul curbelor eliptice, ea se enunţă ı̂n felul următor:
Problema logaritmului discret pe curbe eliptice (ECDLP):
Fiind dată o curbă eliptică E peste corpul Zp , un punct P ∈ E(Zp ) de ordin n şi
Q ∈ [P ] = {sP | 1 ≤ s ≤ n − 1}, să se determine k astfel ı̂ncât Q = kP .
Numărul k este numit logaritmul discret al lui A ı̂n baza P : k = logP Q.
Vom prezenta o serie de atacuri generale asupra ECDLP , atacuri care nu exploatează
eventuale slăbiciuni particulare ale anumitor curbe eliptice. Deoarece ele au fost detaliate
pentru sistemele de criptare El Gamal sau RSA, vom detalia doar modalitatea lor de
scriere ı̂n cazul curbelor eliptice.

10.3.1 Atacul Pohlig - Hellman


Cea mai simplă metodă de atac este prin forţă brută: se calculează R = kP pentru
k = 1, 2, 3, . . ., verificându-se permanent egalitatea R = Q. Atunci când egalitatea este
verificată, s-a găsit valoarea k = logP Q. Algoritmul nu solicită multă memorie, dar timpul
de rulare este O(n), unde n este ordinul lui P .
Pohlig şi Hellman au observat că problema logaritmului discret ı̂ntr-un grup G are
acelaşi ordin de dificultate ca şi problema logaritmului discret ı̂n cel mai mare subgrup
prim din G. Ca o consecinţă pentru criptografia pe curbe eliptice, se vor selecta curbe
eliptice E cu proprietatea card(E(Zp )) = n = h · s, unde s este un număr prim mare, iar
h este un număr foarte mic (de obicei h = 1, 2 sau 4). În acest caz, ECDLP este dificilă.
Ideile de bază ale atacului Pohling - Hellman (adaptate criptografiei pe curbe eliptice)
sunt:
10.3. PROBLEMA LOGARITMULUI DISCRET PE CURBE ELIPTICE 185

Fie n = pe11 pe22 . . . perr .


1. Se calculează ki = k (mod pei i ) (1 ≤ i ≤ r).
2. Se rezolvă sistemul de congruenţe

x ≡ ki (mod pei i ) (1 ≤ i ≤ r).

Teorema chineză a resturilor asigură existenţa unei soluţii unice k = x ∈ [0, n − 1].
Să arătăm că determinarea fiecărui ki se poate reduce la aflarea exponentului ei ı̂ntr-un
subgrup ciclic [P ] de ordin pi ; pentru simplificare, vom nota pi cu p.
i −1
eX
Să reprezentăm ki ı̂n baza p; vom avea ki = zj pj , unde zj ∈ [0, p − 1].
j=0
Pentru determinarea lui z0 :

• Se calculează P0 = (n/p)P, Q0 = (n/p)Q;


!
n n
• Deoarece ordinul lui P0 este p, avem Q0 = Q = k P = kP0 ≡ z0 P0 (mod p)
p p
Deci z0 = logP0 Q0 poate fi obţinut rezolvând o instanţă ECDLP ı̂n grupul ciclic [P ].
!
n
La pasul următor se determină Q1 = 2
(Q − z0 P ). Vom avea:
!
p ! !
n n n n
Q1 = (Q − z0 P ) = 2 (k − z0 ) P = (k − z0 ) 2 P = (z0 + z1 p − z0 ) 2 P =
!
p2 p p p
n
= z1 P ≡ z1 P0 (mod p)
p
Valoarea z1 = logP0 Q1 se poate obţine deci rezolvând o instanţă ECDLP ı̂n [P ].
În general, dacă numerele z0 , z1 , . . . , zt−1 au fost calculate, atunci zt = logP0 Qt , unde
n  
Qt = Q − z0 P − z1 pP − z2 p2 P − . . . − zt−1 pt−1 P .
pt+1
Pentru detalii referitoare la corectitudinea algoritmului, se poate relua secţiunea 9.2.2
care tratează algoritmul Pohlig - Hellman ı̂n varianta generală.

10.3.2 Atacul BSGS (Baby-Step/Giant-Step)


Ca o consecinţă a atacului Pohlig Hellman, ne putem concentra atenţia asupra rezolvării
problemei logaritmului discret ı̂n grupuri ciclice de ordin prim. Atacul BSGS este atacul
Shanks (prezentat ı̂n secţiunea 9.2.1) adaptat pentru curbe eliptice.
Fie G = [P ] un subgrup ciclic de ordin p (p prim) al unui grup E(Zq ) al unei curbe
eliptice. Fiind dat Q ∈ G, problema cere aflarea unei valori k (1 ≤ k < p) astfel ı̂ncât
Q = kP .
186 CAPITOLUL 10. SISTEME DE CRIPTARE BAZATE PE CURBE ELIPTICE

Considerăm reprezentarea

k = k0 + k1 b pc

unde k0 , k1 ∈ [0, b pc).


1. Se calculează lista A = {(Pi , i) | Pi = iP, 0 ≤ i < b pc} (faza ”Baby -
Step”).

2. Fie R = b pcP . Se calculează lista B = {(Qj , j) | Qj = Q − jR, 0 ≤ j <

b pc} (faza ”Giant - Step”).
Cele două liste sunt ordonate crescător după prima componentă.

3. Se caută (Pi , i) ∈ A, (Qj , j) ∈ B astfel ca Pi = Qj .


Dacă aşa ceva există, atunci k0 = i, k1 = j.

√ √
Justificare: Avem iP = Q − jb pcP , deci (i + jb pc)P = Q.
După cum se ştie, complexitatea spaţiu şi complexitatea timp a unui astfel de atac

sunt ambele egale cu O(b pc). Shoup ([?]) arată că atacul BSGS este cea mai rapidă
metodă pentru rezolvarea problemei logaritmului discret ı̂ntr-un grup ”cutie neagră”3 .

10.3.3 Atacul Pollard Rho


Ideea de bază ı̂n algoritmul Pollard Rho constă ı̂n găsirea a două perechi distincte (c1 , d1 ),
(c2 , d2 ) de numere ı̂ntregi din Zp astfel ı̂ncât

c1 P + d1 Q = c2 P + d2 Q.

De aici va rezulta (c1 − c2 )P = (d2 − d1 )Q = (d2 − d1 )kP , deci

(c1 − c2 ) ≡ (d2 − d1 )k (mod p),

şi valoarea k = logP Q se obţine imediat prin

k = (c1 − c2 )(d2 − d1 )−1 (mod p)

O metodă ingenioasă de aflare a unor astfel de perechi constă ı̂n selectarea aleatoare a
două valori c, d ∈ Zp şi memorarea ı̂ntr-o tabelă a tripletului (c, d, cP + dQ). Procedeul se
repetă (tabela se completează eventual sortată după a treia componentă), până se obţine
a doua oară un punct cP + dQ.
3
Un grup ”cutie neagră” este un grup ı̂n care nu se foloseşte nici o structură prestabilită pentru
reprezentarea elementelor sale.
10.3. PROBLEMA LOGARITMULUI DISCRET PE CURBE ELIPTICE 187

q
Neajunsul acestui atac constă ı̂n necesitatea de stocare a πp/2 triplete.
Algoritmul Pollard Rho găseşte perechile (c1 , d1 ), (c2 , d2 ) cam ı̂n acelaşi timp ca şi
metoda de mai sus, dar folosind o cantitate neglijabilă de memorie. Ideea – similară celei
din secţiunea 9.2.3 – este de a defini o funcţie recursivă f : [P ] −→ [P ] astfel ı̂ncât, fiind
dat X ∈ [P ] şi c, d ∈ Zp cu X = cP + dQ, sunt uşor de calculat X 0 = f (X) şi c0 , d0 ∈ Zp
cu X 0 = c0 P + d0 Q.
În plus, f ar trebui să aibă caracteristicile unei funcţii aleatoare.
Algoritmul Pollard Rho este:
Intrare: P ∈ E(Zq ), ord(P ) = p număr prim, şi Q ∈ [P ].
Ieşire: k = logP Q.
1. Selectează numărul L al ramificaţiilor (ı̂n 9.2.3 s-a definit apriori L = 3).
2. Selectează o funcţie de partiţie H : [P ] −→ {1, 2, . . . , L} cu proprietatea
card(H −1 (i)) ' p/L, (1 ≤ i ≤ L).
3. for j ←− 1 to L do
3.1. Selectează (aleator) aj , bj ∈ Zp .
3.2. Calculează Rj = aj P + bj Q.
4. Selectează (aleator) c0 , d0 ∈ Zp şi calculează X 0 = c0 P + d0 Q.
5. X” ←− X 0 , c” ←− c0 , d” ←− d0 .
6. repeat
6.1. Calculează j = H(X 0 ).
X 0 ←− X 0 + Rj , c0 ←− c0 + aj (mod p), d0 ←− d0 + bj (mod p).
6.2. for i ←− 1 to 2 do
6.2.1. Calculează j = H(X”).
X” ←− X”+Rj , c” ←− c”+aj (mod p), d” ←− d”+bj (mod p).
until X 0 = X”.
7. if d0 = d” then return(”eşec”)
else return k = (c0 − c”)(d” − d0 )−1 (mod p).
8. Stop
După cum se observă, algoritmul Pollard Rho este un algoritm probabilist de tip Las
Vegas. Probabilitatea de eşec este neglijabilă.

Exemplul 10.4. Să considerăm L = 32 şi fie {S1 , S2 , . . . , S32 } o partiţie a lui [P ] definită
astfel: dacă X ∈ [P ] şi ultimii ultimii 5 biţi semnificativi ai primei coordonate a lui X
reprezintă numărul j, atunci H(X) = j + 1. Mulţimile Sj = {X | H(X) = j} au acelaşi
număr de elemente pentru orice j = 1, 2, . . . , 32.

Să detaliem puţin algoritmul Pollard Rho:


Fie aj , bj ∈ Zp . Se defineşte funcţia f : [P ] −→ [P ] prin

f (X) = X + aj P + bj Q unde j = H(X).


188 CAPITOLUL 10. SISTEME DE CRIPTARE BAZATE PE CURBE ELIPTICE

Se observă că dacă X = cP + dQ, atunci f (X) = X 0 = c0 P + d0 Q unde c0 = c + aj (mod p)


şi d0 = d + bj (mod p).
Acum, pentru un punct arbitrar X0 ∈ [P ] se poate determina o secvenţă de puncte
{Xi }i≥0 definită Xi = f (Xi−1 ) pentru i ≥ 1.
Cum toate aceste puncte sunt din grupul finit [P ], la un moment dat secvenţa va
ı̂ncepe să se repete (şi să cicleze). Deci există un t minim pentru care Xt = Xt+s cu s ≥ 1.
Valoarea t se numeşte ”lungimea cozii”, iar s – ”lungimea ciclului”. q q
Dacă f este o funcţie cu proprietăţi aleatoare, atunci t ' πp/8, s ' πp/8, deci
q
secvenţa va ı̂ncepe să se repete după aproximativ πp/2 termeni.
Algoritmul lui Floyd de aflare a două puncte Xi , Xj cu Xi = Xj şi i 6= j, explorează
perechile de puncte de forma (Xi , X2i ) până găseşte un indice i cu Xi = X2i . După
calcularea unei perechi, perechea anterioară de puncte poate fi eliminată; astfel memoria
utilizată este de mărime neglijabilă. Numărul n al perechilor calculate până se obţine
egalitatea Xi = X2i verifică relaţia t ≤ n ≤ t + s. Dacă f este o funcţie aleatoare, atunci
√ √
n ' 1, 0308 p, deci numărul de operaţii pe grupul curbelor eliptice este 3 p.

10.4 Factorizări bazate pe curbe eliptice


În cadrul sistemului de criptare RSA la secţiunea 8.4.4. a fost prezentată metoda p − 1 de
factorizare a unui număr. Ideea sa era de a efectua operaţii ı̂ntr-un grup Zp∗ sensibil mai
mic decât grupul multiplicativ Zn∗ (unde p este un divizor al lui n) ı̂n care sunt definite
toate calculele. Această concepţie – de a restrânge de facto domeniul de calcul – poate fi
extinsă şi la alte grupuri, ı̂n particular la grupul definit pe mulţimea punctelor unei curbe
eliptice. Metoda folosită este numită ECM (Elliptic Curve Method) şi este descrisă mai
jos.
Să generăm aleator două numere a, b ∈ Zn , şi să construim curba Ea,b de ecuaţie
y 2 ≡ x3 + ax + b (mod n) (8)
Vom considera pe această curbă diverse calcule modulo p (deşi p nu se cunoaşte),
calcule ”ascunse” de calculele modulo n. Ordinul grupului Ea,b (Zp ) este un număr aleator
√ √
ı̂n intervalul [p + 1 − 2 p, p + 1 + 2 p]. Dacă acest ordin are divizorii primi (la puterile
cu care apar) mai mici decât marginea B stabilită de metoda p − 1, putem aplica această
metodă (adaptată la grupul definit pe E(Zn )), cu o complexitate de O(B) operaţii arit-
metice. Succesul ei corespunde deci probabilităţii ca ordinul grupului Ea,b (Zp ) să aibă toţi
divizorii primi mai mici decât B. Această probabilitate este estimată ı̂n [?] la u−u unde
log p
u= .
log B
Exemplul 10.5. Să ı̂ncercăm factorizarea numărului n = 44023 (pentru care metoda
p − 1 definită ı̂n 8.4.4. eşuează).
10.5. EXERCIŢII 189

Prima problemă care apare este alegerea unui punct (iniţial) X pe curba (8). Această
alegere nu este simplă, deoarece trebuie să rezolvăm o ecuaţie algebrică modulo un număr
n a cărui factorizare nu se cunoaşte. Pentru a evita această dificultate, ı̂n loc de a alege
a, b şi apoi X, vom genera ı̂ntâi a, X şi ulterior b.
Să alegem a = 13 şi X = (x, y) = (23482, 9274). Vom avea imediat

b = y 2 − x3 − ax ≡ 21375 (mod 44203)

Conform metodei p−1, vom calcula Xi = i!X = (xi , yi ) pentru i = 1, 2, . . . până se ajunge
la un punct Xi 6= O (ı̂n Ea,b (Zn )), care este punctul de la infinit ı̂n Ea,b (Zp ). Aceste lucru
se poate ı̂ntâmpla la apariţia unei operaţii imposibile – de obicei ı̂mpărţirea la un element
neinversabil. Elementele neinversabile din Zn∗ conduc, prin calcularea unui cel mai mare
divizor comun, la un factor al lui n (deci la factorizare).
Determinarea lui X1 este uşoară: X1 = X = (23482, 9274). Urmează:
X2 = 2X1 = (18935, 21838),
X3 = 3X2 = 2X2 + X2 = (15187, 29168),
X4 = 4X3 = 2(2X3 ) = (10532, 5412)
şi ajungem la X5 = 5X4 = 2(2X4 ) + X4 .
Aici calculăm ı̂ntâi 2X4 = (30373, 40140), apoi 2(2X4 ) = (27556, 42335).
În momentul când vrem să adunăm acest punct cu X4 , ajungem la calculul valorii
42335 − 5412
λ= (mod 44023)
27556 − 10532
care nu se poate efectua, deoarece 27556 − 10532 = 17024 nu este inversabil modulo n.
Atunci când ı̂ncercăm să calculăm inversul folosind algoritmul lui Euclid extins, ajungem
la cmmdc(17024, 44023) = 133, care este un factor al lui n = 44023.

10.5 Exerciţii
10.1. Să se verifice propietăţile de grup ale operaţiei aditive definite pe E(L).
10.2. Fie E curba eliptică y 2 = x3 + x + 28 peste Z71 .
1. Determinaţi numărul de puncte din E(Z71 );

2. Arătaţi că grupul E(Z71 ) nu este ciclic;

3. Care este ordinul maxim al unui element din E(Z71 ) ? Găsiţi un astfel de element.
10.3. Fie E curba eliptică y 2 = x3 + x + 13 definită pe Z31 . Se poate arăta că E(Z31 ) are
34 puncte şi că (9, 10) este de ordinul 34 ı̂n E. Sistemul de criptare Mezenes - Vanstome
∗ ∗
definit pe E admite ca spaţiu al textelor clare Z34 × Z34 . Fie a = 25 exponentul secret al
lui Bob.
190 CAPITOLUL 10. SISTEME DE CRIPTARE BAZATE PE CURBE ELIPTICE

1. Calculaţi β = a · α;

2. Decriptaţi textul următor:

((4, 9), 28, 7)((19, 28), 9, 13)((5, 22), 20, 17)((25, 16), 12, 27)

3. Dacă presupunem că fiecare text clar reprezintă două caractere alfabetice, convertiţi
acest text clar ı̂n engleză (s-a folosit corespondenţa A − 1, . . . , Z − 26).

10.4. Fie E curba eliptică y 2 = x3 + x + 6 peste Z11 .


(a) Să se calculeze punctele lui E(Z11 ).
(b) Se aleg parametrii α = (2, 7) şi a = 7. Folosind sistemul de criptare El Gamal, să
se cripteze mesajul x = (10, 9) cu valoarea aleatoare k = 3.
(c) Folosind sistemul de criptare Menezes - Vanstone şi aceiaşi parametri, să se crip-
teze mesajul x = (9, 1).

10.5. Fie p > 3 un număr prim impar şi a, b ∈ Zp . Dacă ecuaţia x3 + ax + b ≡ 0 (mod p)
are trei rădăcini distincte ı̂n Zp , arătaţi că grupul curbei eliptice corespunzătoare (E, +)
nu este ciclic.

10.6. Fie E o curbă eliptică definită peste Zp unde p > 3 este un număr prim. Să
presupunem că n = card(E) este prim şi fie P ∈ E, P 6= O.
(a) Arătaţi că logP (−P ) = n − 1.
(b) Daţi un algoritm de calcul pentru n de complexitate O(p1/4 ) folosind teorema lui
Hasse şi algoritmul BSGS.

10.7. Fie curba eliptică y 2 = x3 + 9x + 17. Un generator al lui E(Z23 ) este P = (16, 5).
Să se calculeze logaritmul punctului Q = (4, 5).

10.8. O reprezentare binară (an−1 , an−2 , . . . , a0 ) a numărului ı̂ntreg a este ı̂n ”forma ne-
adiacentă” (forma N AF ) dacă nu există două valori consecutive nenule.
(a) Daţi un algoritm de reprezentare a numerelor ı̂ntregi ı̂n forma N AF . Aplicaţi
acest algoritm pentru numerele 87, 112, 2047.
(b) Folosind reprezentarea N AF a lui 87, calculaţi 87P , unde P = (2, 6) este un punct
pe curba eliptică y 2 = x3 + x + 26 definită peste Z27 .
Capitolul 11

Alte sisteme de criptare cu cheie


publică

11.1 Sistemul de criptare Merkle - Hellman


Sistemul de criptare Merkle - Hellman sau ”sistemul de criptare rucsac” a fost prezentat ı̂n
linii mari ı̂n Capitolul 7, ca exemplificare pentru ideea de criptare cu cheie publică (apărut
ı̂n 1978 ı̂n [?], a fost oficial primul astfel de sistem de criptare). În această secţiune vom
face o analiză a sistemului, ı̂nsoţită de un atac cu succes asupra variantei iniţiale.

11.1.1 Considerente generale


Numim vector rucsac un tablou unidimensional A = (a1 , a2 , . . . , an ) (n ≥ 3) cu elemente
numere ı̂ntregi pozitive distincte.
O apariţie a problemei rucsacului este o pereche (A, x) unde A este un vector rucsac,
iar x - un număr ı̂ntreg pozitiv.
O soluţie a apariţiei problemei (A, x) este un vector B = (ai1 , . . . , aik ) de elemente din
k
X
A astfel ca x = ai j .
j=1
Cea mai obişnuită abordare a problemei rucsacului este de a decide dacă o anumită
apariţie (A, x) a problemei rucsacului are soluţie sau nu. Varianta utilizată ı̂n criptografie
constă ı̂n obţinerea acestei soluţii pentru (A, x), ştiind că ea există. Ambele probleme
sunt N P - complete.
După cum am văzut ı̂n Capitolul 7, un vector rucsac este folosit pentru criptarea unui
bloc C de n biţi realizând suma acelor elemente din A a căror poziţie corespunde lui 1 ı̂n
C. Matematic, privind C ca un vector coloană, criptarea este realizată de produsul scalar

x=A·C

191
192 CAPITOLUL 11. ALTE SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

Decriptarea revine la a determina C ştiind x sau – pentru varianta cu cheie publică a


sistemului de criptare rucsac – de a afla C din A şi x.

Exemplul 11.1. Fie n = 6 şi vectorul rucsac A = (3, 41, 5, 1, 21, 10). Atunci textul clar
C1 = (1, 1, 0, 0, 1, 0) este criptat ı̂n x1 = 65, iar C2 = (1, 0, 1, 1, 0, 1) ı̂n x2 = 19. Pentru
vectorul A astfel definit, mulţimea textelor criptate este inclusă ı̂n intervalul [0, 81].

Pentru a putea fi utilizat ı̂n criptare, un vector rucsac A trebuie să fie injectiv: pentru
orice x ∈ N , apariţia problemei rucsacului (A, x) are cel mult o soluţie.

Exemplul 11.2. Pentru vectorul rucsac A = (14, 28, 56, 82, 90, 132, 197, 284, 341, 455)
textul criptat x = 515 se poate obţine din trei texte clare distincte:
(1, 1, 0, 0, 0, 1, 0, 0, 1, 0), (0, 1, 1, 0, 1, 0, 0, 0, 1, 0), (1, 0, 0, 1, 1, 1, 1, 0, 0, 0).

Sunt anumiţi vectori A pentru care toate apariţiile (A, x) sunt uşor de rezolvat. Am
văzut că vectorii cu creştere mare au această proprietate.

Definiţia 11.1. Un vector rucsac A = (a1 , a2 , . . . , an ) este crescător (super-crescător)


dacă
j−1
X
∀j ≥ 2, aj > aj−1 (respectiv aj > ai ).
i=1

Evident, orice vector super-crescător este crescător.


Pentru un vector rucsac A = (a1 , . . . , an ) definim max(A) = max{aj | 1 ≤ j ≤ n}.
Fie A un vector rucsac, m > max(A) şi t ∈ (0, m) astfel ca cmmdc(t, m) = 1. Dacă
B = (b1 , b2 , . . . , bn ) este un vector definit prin

bi ≡ t · ai (mod m) (1 ≤ i ≤ n)

spunem că B rezultă din A prin ı̂nmulţire modulară ı̂n raport cu perechea (m, t).
După cum ştim, condiţia cmmdc(t, m) = 1 asigură existenţa unui element u ∈ (1, m)
(obţinut prin algoritmul lui Euclid extins), astfel ca t · u ≡ 1 (mod m).
Deci va avea loc şi proprietatea reciprocă: vectorul rucsac A rezultă din B prin
ı̂nmulţire modulară ı̂n raport cu (m, u)1 .
n
X
Dacă relaţia m > max(A) este ı̂nlocuită cu condiţia m > ai , spunem că B rezultă
i=1
din A prin ı̂nmulţire modulară tare ı̂n raport cu (m, t). În acest caz nu va mai rezulta
n
X
valabilitatea proprietăţii inverse, deoarece inegalitatea m > bi nu mai este adevărată
i=1
totdeauna. Se poate spune ı̂nsă, evident, că A rezultă din B prin ı̂nmulţire modulară ı̂n
raport cu (m, u).
1
Evident, m > max(B), pentru că bi < m pentru orice i = 1, . . . , n.
11.1. SISTEMUL DE CRIPTARE MERKLE - HELLMAN 193

Construcţia sistemului de criptare rucsac este imediată:

1. Bob alege numerele m, t prime ı̂ntre ele, precum şi vectorul super-crescător
n
X
A = (a1 , . . . , an ), astfel ca m > ai .
i=1

2. Determină vectorul rucsac B obţinut din A prin inmulţire modulară tare ı̂n
raport cu (m, t).

3. Face public B şi păstrează drept cheie secretă elementele A, m, t şi u ≡


t−1 (mod m).

Dacă Alice doreşte să cripteze un mesaj, va proceda ı̂n felul următor:

1. Sparge mesajul ı̂n blocuri Bx ∈ Z2n (n – lungimea vectorului B), unde x ∈ [0, 2n − 1)
are Bx drept reprezentare binară.

2. Calculează y = B · BxT şi ı̂l trimite lui Bob.

În acest fel, un criptanalist va trebui să rezolve apariţia (B, y) a problemei rucsacului.
Bob va determina ı̂ntâi x ≡ u · y (mod m), după care va rezolva apariţia (A, x).
Această simplificare este asigurată de lema:

Lema 11.1. Presupunem că A = (a1 , a2 , . . . , an ) este un vector super-crescător, iar B


rezultă din A prin ı̂nmulţire modulară tare ı̂n raport cu (m, t). Fie u ≡ t−1 (mod m), y
un ı̂ntreg arbitrar şi x ≡ u · y (mod m). Atunci aserţiunile următoare sunt adevărate:

1. Problema rucsacului (A, x) este rezolvabilă ı̂n timp liniar. Dacă soluţia există, ea
este unică.

2. Problema rucsacului (B, y) are cel mult o soluţie.

3. Dacă există o soluţie pentru (B, y), atunci ea este egală cu soluţia apariţiei (A, x).

Demonstraţie. Am arătat ı̂n Capitolul 7 că orice apariţie a problemei rucsacului având
A super-crescător poate fi rezolvată printr-un algoritm liniar (Exemplul 7.4), parcurgând
A de la dreapta spre stânga. Metoda arată de asemenea şi faptul că există cel mult o
soluţie.
Pentru celelalte două serţiuni, să presupunem că vectorul D ∈ Z2n este soluţie a
apariţiei problemei rucsacului (B, y); deci y = B · DT . Atunci

x ≡ u · y = u · B · DT = u · (t · A) · DT ≡ A · DT (mod m)
194 CAPITOLUL 11. ALTE SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

Pentru că m depăşeşte suma componentelor lui A, trebuie să avem A · DT < m. Cum de
asemenea x < m (din definiţia lui x), deducem x = A · DT . Deci vectorul D este unica
soluţie a apariţiei problemei (A, x) a rucsacului.
Deoarece s-a folosit o soluţie arbitrară a lui (B, y), va rezulta şi aserţiunea (3).
Exemplul 11.3. Fie n = 10 şi vectorul super-crescător
A = (103, 107, 211, 430, 863, 1718, 3449, 6907, 13807, 27610)
Alegem modulul m = 55207 (care este mai mare decât suma componentelor lui A) şi t =
25236. Deoarece cmmdc(t, m) = 1, algoritmul lui Euclid extins va calcula u = t−1 = 1061.
Ca rezultat al ı̂nmulţirii modulare tari ı̂n raport cu (m, t) se obţine vectorul rucsac
B = (4579, 50316, 24924, 30908, 27110, 17953, 32732, 16553, 22075, 53620)
Acest vector B este cheia publică de criptare, ı̂n timp ce elementele A, t, m, u formează
trapa secretă.
Folosind cheia publică B, să criptăm textul clar PELIN DE MAI.
În prima fază acesta se ı̂mparte ı̂n perechi de căte două litere, care se codifică ı̂n
secvenţe binare de 10 biţi (folosind codificarea propusă ı̂n Capitolul 7). Obţinem
PE 10000 00101 74.752
LI 01100 01001 161.592
N 01110 00000 106.148
DE 00100 00101 95.097
MA 01101 00001 155.970
I 01001 00000 77.426
Pe ultima coloană sunt scrise criptările blocurilor de câte două litere (aflate pe prima
coloană).
Să decriptăm primul bloc: 74.752 (cu celelalte se procedează analog). Avem
74752 · 1061 = 79311872 = 1436 · 55207 + 34620
Considerăm apariţia problemei rucsacului (A, 34.620). Soluţia se obţine parcurgând
vectorul A de la dreapta spre stânga:
Număr Componenta lui A Bit
35.620 27.610 1
7.010 13.807 0
7.010 6.907 1
103 3.449 0
103 1.718 0
103 863 0
103 430 0
103 211 0
103 107 0
103 103 1
11.1. SISTEMUL DE CRIPTARE MERKLE - HELLMAN 195

Citind ultima coloană din tabel, de jos ı̂n sus, obţinem 10000 00101, care este codificarea
binară pentru perechea de litere P E.
Să ı̂ncercăm să procedăm invers: să criptăm textul clar P E folosind vectorul A. Se
obţine, evident, 34.620. Aplicăm ı̂nmulţirea modulară tare ı̂n raport cu (55.207, 25.236) şi
avem
34620 · 25236 = 873670320 = 15825 · 55207 + 19545
Dar apariţia (B, 19.545) nu are soluţie, lucru evident pentru că, ı̂n B, singurele numere
mai mici decât 19.545 sunt 4.579, 19.953 şi 16.553, iar 19.545 nu se poate obţine din nici
o combinaţie a lor.

Exemplul 11.4. Datele din Exemplul ?? sunt simple, putând fi prelucrate şi cu un
calculator de buzunar. Criptările reale folosesc numere mult mai mari. Tot ı̂n exem-
ple se foloseşte frecvent şi varianta n = 20, m = 53939986, t = 54377 (cu inversa
t−1 = u = 17521047). Un exemplu de vector super-crescător cu 20 componente este
A = (101, 102, 206, 412, 823, 1.647, 3.292, 6.584, 13.169, 26.337, 52.676, 105.352, 210.703,
421.407, 842.812, 1.685.624, 3.371.249, 6.742.497, 13.484.996, 26.969.992)

11.1.2 Criptanaliza sistemului de criptare rucsac


Ne aflăm ı̂n faţa următoarei probleme de criptanaliză: se ştie un vector rucsac B =
(b1 , b2 , . . . , bn ) folosit drept cheie publică de criptare ı̂n maniera descrisă anterior. Se
ştie de asemenea că B este obţinut dintr-un vector super-crescător A printr-o ı̂nmulţire
modulară tare ı̂n raport cu un modul m şi un ı̂nmulţitor t. Nu cunoaştem A, m, t; vrem
să le aflăm. Dacă determinăm m şi u = t−1 , putem găsi imediat vectorul super-crescător
A şi decripta mesajele interceptate. Calculul lui u plecând de la t (sau invers) se bazează
pe Algoritmul extins al lui Euclid şi nu prezintă nici o dificultate.
În această secţiune vom dezvolta metoda de criptanaliză a lui Adi Shamir ([?]).
Algoritmul operează ı̂n timp polinomial, gradul polinomului de complexitate fiind
determinat de numărul şi mărimea componentelor vectorului B. Shamir face o analiză
detaliată asupra stabilirii acestui grad, analiză care poate fi studiată ı̂n [?].
Atacul are ca prim scop găsirea valorilor m şi u. O primă observaţie: nu este necesară
aflarea exact a valorilor pe care le-a definit Bob pentru sistemul de criptare. Orice pereche
(m, u) care, plecând de la vectorul B duce la un vector super-crescător A, poate fi utilizată
la decriptare. Astfel de perechi se numesc ”perechi trapă”. Odată găsită o astfel de pereche
trapă, Lema ?? devine valabilă şi se poate ı̂ncepe decriptarea. Existenţa cel puţin a unei
perechi trapă este asigurată de faptul că sistemul de criptare rucsac se bazează pe o astfel
de construcţie.
În aflarea unei perechi trapă, vom considera graful funcţiei fi (u) = bi u (mod m)
pentru i = 1, 2, . . . , n. Acesta este format din segmente de linii paralele, ”rupte” ı̂n
punctele u = p · m/bi , p = 1, 2, . . .
196 CAPITOLUL 11. ALTE SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

6bi u

- u
m

În particular, a1 ≡ b1 u (mod m). Pentru că a1 este prima componentă ı̂ntr-un vector
super-crescător, iar m depăşeşte suma tuturor componentelor, elementul a1 trebuie să fie
foarte mic ı̂n comparatţie cu m. Deci valoarea lui u trebuie să fie suficient de aproape
de un minim al grafului y = f1 (u), corespunzător lui b1 . O exprimare explicită – cât
de aproape trebuie să fie de acest minim – trebuie să ţină cont de anumite considerente
relative la mărimile a1 , b1 şi m. De obicei raportul bi /ai este foarte mare pentru valori
mici ale lui i (bineı̂nţeles, Bob poate ţine seama de acest lucru şi să construiască sistemul
ı̂n aşa fel ı̂ncât această remarcă să nu fie valabilă; atunci ı̂nsă vor apare alte particularităţi
de care un bun criptanalist se poate folosi).
Similar, observăm că valoarea lui u din perechea trapă (m, u) trebuie să fie destul de
apropiată de un minim al grafului lui f2 (u). Aceasta duce, pe baza inegalităţii triunghi-
ului, la concluzia că două minime ale lui f1 (u) şi f2 (u) trebuie să fie apropiate. Putem
proceda ı̂n acest fel şi pentru alte valori. Faptul că valoarea lui u este apropiată de un
minim al fiecărei curbe fi (u) implică faptul că aceste minime sunt apropiate unul de altul.
Deci, ı̂n loc să aflăm pe u, vom căuta puncte de acumulare ale minimelor curbelor
fi (u). Ele vor duce la determinarea unor intervale de valori reale, ı̂n care se află astfel de
minime. În final se va alege un u dintr-un astfel de interval.
Prin argumente şi calcule euristice, Shamir arată că ı̂n general sunt suficiente patru
astfel de curbe pentru aflarea unei mulţimi rezonabil de mică de astfel de intervale (sau –
echivalent – puncte de acumulare).
Să ”traducem” aceste idei sub o formă matematică.
Primul obstacol: nu ştim nici o valoare a lui m (care apare ı̂n perechea trapă). Vom
considera temporar valoarea m = 1. Această particularizare este de fapt o normalizare a
graficelor şi nu afectează localizarea punctelor de acumulare care ne interesează.
Algoritmul constă din două părţi: ı̂n prima etapă vom afla o mulţime de numere ı̂ntregi
p cu proprietatea că al p-lea punct de minim al curbei f1 (u) este punct de acumulare.
Pentru a evita generarea unui număr prea mare de valori p, se fixează o limită: un
parametru r care să indice numărul maxim de valori posibile permise. Dacă prima parte
a algoritmului generează mai mult de r valori, el se va termina cu eşec.
În etapa următoare vom explora pe rând punctele de acumulare găsite anterior. Unul
din teste va reuşi, deoarece valoarea lui u folosită de Bob ı̂n sistemul de criptare desem-
nează un astfel de punct de acumulare.

I. Coordonata u a celui de-al p-lea punct de minim al curbei f1 (u) este p/b1 (reamintim,
momentan m = 1). Deci condiţia ca minimele curbelor f1 (u) şi f2 (u) să fie apropiate
11.1. SISTEMUL DE CRIPTARE MERKLE - HELLMAN 197

este
p q
−e < − < e, 1 ≤ p ≤ b1 − 1, 1 ≤ q ≤ b2 − 1
b1 b2
unde e este o valoare rezonabil de mică. Înmulţind această relaţie cu b1 b2 se obţine
−δ < b2 p − b1 q < δ, 1 ≤ p ≤ b1 − 1, 1 ≤ q ≤ b2 − 1.
Considerăm s astfel de puncte de minim şi scriem s − 1 inegalităţi de acest tip,
pentru b1 , b2 ,q
. . . , bs . Relativ la o valoare estimativă a lui δ, Shamir arată că dacă
se alege δ < b1 /2, atunci probabilitatea ca algoritmul să eşueze este mai mică de
(2/r)s−1 .
Prima parte a algoritmului rezolvă acest sistem de inecuaţii, aflând toate valorile
lui p pentru care există q, . . . astfel ı̂ncât să fie satisfăcute cele s − 1 inecuaţii.
II. Fie p un punct de minim fixat arbitrar. Toate punctele de discontinuitate ale curbe-
p p+1
 
lor fi (u) (1 ≤ i ≤ n) aflate ı̂n intervalul , sunt ordonate crescător. Con-
b1 b1
siderăm xj , xj+1 două puncte consecutive de discontinuitate. Atunci ı̂n intervalul
[xj , xj+1 ] fiecare curbă fi (u) este un segment reprezentat prin fi (u) = bi u − cji , unde
cji este o constantă care depinde de valorile lui i, j şi p.
Construim sistemul de inecuaţii liniare


 xj ≤ u ≤ xj+1


 Xn
(bi u − cji ) < 1
i=1


 (b u − cj ) + . . . + (b − cji−1 ) < bi u − cji ,

i−1 u (2 ≤ i ≤ n)

1 1

Soluţia acestui sistem este un subinterval (posibil vid) al lui [xj , xj+1 ].
O condiţie necesară şi suficientă ca două numere u, m să formeze o pereche trapă
este să existe un p şi un j astfel ca u/m să aparţină unui astfel de subinterval.
Într-adevăr, ı̂n sistemul de sus, a doua inecuaţie asigură un m mai mare decât suma
componentelor, iar ultimele n − 1 inecuaţii reprezintă condiţia de super-creştere.
Deci etapa a doua face o căutare exhaustivă printre perechile (p, j), unde p este dat
de prima etapă a algoritmului, iar j este un index al listei ordonate de puncte de
discontinuitate din intervalul dat de p. Căutarea se face până la aflarea unui interval
nevid (soluţie care există totdeauna). La un astfel de interval corespunde cel puţin
o pereche trapă.
Exemplul 11.5. Să presupunem că vectorul public este B = (7, 3, 2) (exemplul este
extrem de simplu, dar va permite detalierea algoritmului).
Prima etapă a algoritmului solicită rezolvarea unui sistem de două inegalităţi duble:
−δ < 3p − 7q < δ, −δ < 2p − 7r < δ, (1 ≤ p ≤ 6, 1 ≤ q ≤ 2, r = 1).
198 CAPITOLUL 11. ALTE SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

q q
Valoarea recomandată pentru δ este b1 /2 = 7/2 = 1, 87. Această alegere nu dă ı̂nsă
nici o soluţie pentru p (de fapt, pe exemple mici, orice rezultat asimptotic poate fi eronat).
Vom trece la etapa a doua, considerând drept candidaţi pentru testare toate valorile lui p.
Deci ı̂mpărţim intervalul (0, 1) ı̂n subintervalele
1 1 2 2 1 1 3 3 1 1 4 4 2 2 5 5 6 6
                
0, , , , , , , , , , , , , , , , , , ,1 .
7 7 7 7 3 3 7 7 2 2 7 7 3 3 7 7 7 7
În fiecare din aceste subintervale, cele trei curbe sunt de forma fi (u) = bi u − cji (i =
1, 2, 3, iar indicele j indică intervalul). Toate intervalele sunt deschise, pentru că nici un
punct de discontinuitate nu va corespunde unei perechi trapă.
Pentru fiecare subinterval considerăm inecuaţiile


 (7u − i1 ) + (3u − i2 ) + (2u − i3 ) < 1
7u − i1 < 3u − i2
(7u − i1 ) + (3u − i2 ) < 2u − i3

cu 0 ≤ i1 ≤ 6, 0 ≤ i2 ≤ 2, 0 ≤ i3 ≤ 1. Acest sistem se poate rescrie

12u < i, 4u < j, 8u < k

unde s-a notat i = 1 + i1 + i2 + i3 , j = i1 − i2 , k = i1 + i2 − i3 .


Listăm ı̂ntr-un tabel toate variantele posibile:
                   
0, 17 1 2
,
7 7
2 1
,
7 3
1 3
,
3 7
3 1
,
7 2
1 4
,
2 7
4 2
,
7 3
2 5
,
3 7
5 6
,
7 7
6
7
,1
i1 0 1 2 2 3 3 4 4 5 6
i2 0 0 0 1 1 1 1 2 2 2
i3 0 0 0 0 0 1 1 1 1 1
i 1 2 3 4 5 6 7 8 9 10
j 0 1 2 1 2 2 3 2 3 4
k 0 1 2 3 4 3 4 5 6 7
12u < i PT PT NU NU NU NU PT NU PT NU
4u < j NU PT DA NU DA NU DA NU PT DA
8u < k NU NU NU PT DA NU NU NU PT PT
Pentru fiecare subinterval am notat: DA – dacă inegalitatea din prima coloană este
adevărată, NU – dacă nu este adevărată, şi P T – dacă este parţial adevărată (verifi-
cată doar la unul din capete). Un interval generează perechi trapă numai dacă pe coloana
sa apar numai DA sau PT.
În cazul nostru, singurul interval valid este (5/7, 6/7). Alegem numere raţionale u/m
din acest interval, care să verifice cele trei inecuaţii. Căutând cei mai mici numitori
posibili, primul număr raţional care verifică este 8/11. Deci luăm u = 8 şi m = 11.
Atunci relaţia ai ≡ bi u (mod 11) transformă vectorul B = (7, 3, 2) ı̂n vectorul cu creştere
mare A = (1, 2, 5).
Evident, aceasta nu este singura soluţie posibilă. Alte soluţii pot fi de exemplu:
11.1. SISTEMUL DE CRIPTARE MERKLE - HELLMAN 199

• (u, m) = (41, 56) care transformă B ı̂n vectorul super-crescător A = (7, 11, 26),
• (u, m) = (61, 84) care conduce la vectorul super-crescător A = (7, 15, 38),
• (u, m) = (223, 308) care conduce la vectorul super-crescător A = (25, 35, 138).
Exemplul 11.6. Să considerăm vectorul rucsac public
B = (43, 129, 215, 473, 903, 302, 561, 1165, 697, 1523)
Este mult prea
 dificil
 să scriem lista completă a punctelor de discontinuitate din toate
p p+1
intervalele 43 , 43 ; de exemplu, numai funcţia f10 (u) (pentru p = 1253) are 35 puncte
de discontinuitate. Totuşi, B conţine destul de multe slăbiciuni criptografice pentru a
permite scurtarea algoritmului de atac.
Inegalităţile din prima etapă pot fi scrise sub forma
|129p − 43q| ≤ δ, |215p − 43r| ≤ δ, |473p − 43s| ≤ δ
Pentru că 129, 215 şi 473 sunt multipli de 43, rezultă că p = 1 este un candidat  posi- 
1 2
bil. Nu mai căutăm alte valori pentru p şi restrângem investigaţia la intervalul 43 , 43 .
Considerând şi puncte de discontinuitate
 ale
 altor curbe ı̂n acest interval, vom putea res-
1 36
trânge subintervalul soluţiilor la 43 , 1523 . Cele 10 curbe sunt definite aici sub forma
segmentelor de dreaptă de ecuaţii
f1 (u) = 43u − 1, f2 (u) = 129u − 3, f3 (u) = 215u − 5, f4 (u) = 473u − 11,
f5 (u) = 903u − 21 f6 (u) = 302u − 7, f7 (u) = 561u − 13, f8 (u) = 1165u − 27,
f9 (u) = 697u − 16, f10 (u) = 1523u − 35.
10
X
Inecuaţia a doua (care se referă la mărimea modulului) este fi (u) < 1 sau
i=1
6011u − 139 < 1, care duce la soluţia u < 140/6011.  Pentru  că 140/6011 < 36/1523,
1 140
găsim un nou interval – mai restrâns – al soluţiilor: 43 , 6011 .
Listăm inecuaţiile care exprimă condiţia de super-creştere, ı̂mpreună cu soluţiile lor:
129u − 3 > 43u − 1 u > 1/43
215u − 5 > 172u − 4 u > 2/43
473u − 11 > 387u − 9 u > 1/43
903u − 21 > 860u − 20 u > 1/43
302u − 7 > 1763u − 41 u < 34/1461
561u − 13 > 2065u − 48 u < 35/1504
1165u − 27 > 2626u − 61 u < 34/1461
697u − 16 > 3791u − 88 u < 72/3094
1523u − 35 > 4488u − 104 u < 69/2965
Cea mai mică margine superioară
 dintre toate aceste soluţii este 72/3094 = 36/1547.
1 36
În final se obţine intervalul 43 , 1547 . Alegând numărul 37/1590 din acest interval se
obtine vectorul super-crescător A din Exemplul 7.4., Capitolul 7. Pentru numărul 72/3095
se obţine vectorul super-crescător A = (1, 3, 5, 11, 21, 79, 157, 315, 664, 1331).
200 CAPITOLUL 11. ALTE SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

11.1.3 Vectori rucsac cu densitate mare


Spargerea sistemului de criptare rucsac definit de Merkle şi Hellman nu ı̂nseamnă re-
zolvarea problemei rucsacului, ci numai exploatarea slăbiciunii provenite din modul de
alegere a cheii secrete. Ulterior au fost generate şi alte construcţii de cripto-sisteme ruc-
sac. În această setiune prezentăm un astfel de sistem, prezentat de Arto Salomaa ([?]).
În varianta Merkle - Hellman, sistemul de criptare rucsac se baza pe vectori cu den-
sitate mică, ı̂n sensul că elementele vectorului erau foarte rare ı̂n raport cu numărul lor.
Noul sistem propune o construcţie bazată pe vectori rucsac cu densitate mare.
Fie p un număr prim şi h ≥ 1. Un element α este algebric de gradul h peste Zp dacă
satisface o ecuaţie polinomială P (x) = 0 de gradul h şi nici o ecuaţie de grad mai mic
(adică P (x) este un polinom ireductibil peste Zp ). Considerând atunci extensia Galois
GF (ph ), elementele sale pot fi reprezentate sub forma
h−1
cj α j
X
x= (0 ≤ cj ≤ p − 1)
j=0

Exemplul 11.7. Fie p = 3, h = 2 şi α o rădăcină a ecuaţiei X 2 − X − 1 = 0. Elementele


corpului GF (32 ) pot fi exprimate ı̂n funcţie de α astfel:

GF (32 ) = {0, 1, 2, α, α + 1, α + 2, 2α, 2α + 1, 2α + 2}

Similar aritmeticii modulare definite pe Zp , putem folosi noţiunea de logaritm discret


şi ı̂n extensiile Galois GF (ph ). Un element β este un generator al lui GF (ph ) \ {0} dacă
pentru orice x ∈ GF (ph ) \ {0} există un ı̂ntreg i ∈ [0, ph − 1] astfel ca x = β i . Deci
i = logβ x.
Exemplul 11.8. Pentru extensia GF (32 ) construită ı̂n Exemplul ??, α este un gene-
rator. Logaritmii elementelor nenule din această extensie sunt:

x 1 2 α α + 1 α + 2 2α 2α + 1 2α + 2
logα x 8 4 1 2 7 5 3 6

Tot un generator al lui GF (32 ) \ {0} este şi 2α + 1. Tabela de logaritmi ı̂n această bază
este
x 1 2 α α + 1 α + 2 2α 2α + 1 2α + 2
log2α+1 x 8 4 3 6 5 7 1 2

În 1936 a fost enunţată o problemă interesantă, cu aplicaţii ı̂n domeniu. Anume, fiind
date numerele ı̂ntregi pozitive n şi h, există un vector A = (a1 , a2 , . . . , an ) cu elemente
nenegative distincte, astfel ı̂ncât toate sumele de exact h componente de elemente (nu
neapărat distincte) din A, sunt diferite. Un astfel de vector A este uşor de construit,
luând ai = hi−1 (1 ≤ i ≤ n). Construcţia corespunde vectorilor rucsac cu densitate mică
11.1. SISTEMUL DE CRIPTARE MERKLE - HELLMAN 201

(categorie ı̂n care intră şi vectorii super-crescători). În cazul vectorilor rucsac cu densitate
mare (unde valorile componentelor lui A cresc doar polinomial ı̂n n), Bose şi Chowla au
dat o rezolvare, prezentată ı̂n Lema următoare:

Lema 11.2. Fie p un număr prim şi h un număr ı̂ntreg, (h ≥ 2). Atunci există un vector
rucsac A = (a1 , a2 , . . . , ap ) care satisface condiţiile

1. 1 ≤ ai ≤ ph − 1, (1 ≤ i ≤ p),

2. Dacă x, yi (1 ≤ i ≤ p) sunt numere ı̂ntregi nenegative cu


p
X p
X
(x1 , x2 , . . . , xp ) 6= (y1 , y2 , . . . , yp ) iar xi = yi = h,
i=1 i=1

p
X p
X
atunci ai xi 6= ai y i .
i=1 i=1

Demonstraţie. Să considerăm extensia Galois GF (ph ); fie α un element algebric de grad
h peste Zp , iar g – un generator al lui GF (ph ) \ {0}. Definim

ai = logg (α + i − 1), (1 ≤ i ≤ p)

Condiţia (1) este evident satisfăcută. Pentru a arăta şi (2), să presupunem prin absurd
p
X p
X
că există numerele xi , yi (1 ≤ i ≤ p) care verifică ipoteza, dar ai x i = ai yi . Deci
i=1 i=1
Pp Pp
ai xi ai yi
g i=1 =g i=1

sau
(α + 0)x1 . . . (α + p − 1)xp = (α + 0)y1 . . . (α + p − 1)yp .
Ţinând cont şi de ipoteză, această expresie este un polinom ı̂n α de grad cel mult h − 1,
ceea ce contrazice faptul că α este algebric de gradul h.
Demonstraţia rămâne valabilă şi pentru p = q n , q număr prim. De asemenea, se poate
ı̂nlocui concluzia Lemei ?? cu un rezultat mai tare:
p p
(mod ph − 1)
X X
ai xi 6≡ ai y i
i=1 i=1

Pe baza acestor rezultate, să construim un sistem de criptare rucsac. Textul clar va
conţine cuvinte (blocuri) de p biţi, astfel ı̂ncât ı̂n fiecare bloc sunt exact h biţi egali cu 1.
În general, un text clar arbitrar nu poate fi segmentat ı̂n astfel de blocuri; totuşi, se pot
defini codificări convenabile premergătoare ale textului clar. O astfel de codificare este
asigurată de rezultatul următor:
202 CAPITOLUL 11. ALTE SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

Lema 11.3. Fie n ≥ 3 şi h < n. Atunci există o aplicaţie injectivă a mulţimii secvenţelor
binare de lungime blog2 Cnh c ı̂n mulţimea secvenţelor binare de n biţi ı̂n care apar h de 1.
Demonstraţie. Să considerăm secvenţele binare de lungime blog2 Cnh c ca reprezentări bina-
re de numere a.
- Ordonăm crescător secvenţele binare de lungime n având h de 1.
- Stabilim o corespundenţă ı̂ntre secvenţa binară asociată numărului a şi al (a + 1) -
lea bloc binar astfel ordonat.
Aplicaţia definită de această corespondenţă este injectivă; ı̂n plus, deoarece Cnh < 2n ,
nu sunt epuizate toate secvenţele binare.
Exemplul 11.9. Fie n = 5 şi h = 2. Atunci blog2 C52 c = 3; deci putem codifica blocuri
de 3 biţi. Corespondenţa se realizează după tabelul:
0 0 0 −→ 0 0 0 1 1
0 0 1 −→ 0 0 1 0 1
0 1 0 −→ 0 0 1 1 0
0 1 1 −→ 0 1 0 0 1
1 0 0 −→ 0 1 0 1 0
1 0 1 −→ 0 1 1 0 0
1 1 0 −→ 1 0 0 0 1
1 1 1 −→ 1 0 0 1 0
Secvenţele 10100 şi 11000 rămân neutilizate.
Să descriem acum sistemul de criptare:

• Se alege un număr prim p şi fie h < p. Se alege α algebric de gradul h peste
Zp şi un generator g al lui GF (ph ) \ {0}.

• Se calculează A = (a1 , a2 . . . , ap ) definit prin


ai = logg (α + i − 1), (1 ≤ i ≤ p) (1)

• Se defineşte vectorul B = (b1 , b2 , . . . , bp ) prin bi = aπ(i) + d,


unde π ∈ Sp este o permutare, iar d (0 ≤ d ≤ ph −2) este o constantă arbitrară.

Cheia publică de criptare este B, p, h. Trapa secretă constă din α, g, d, π.


Fie C o secvenţă binară de lungime p ı̂n care suma elementelor este h. Considerat sub
forma unui vector, C este criptat prin produsul scalar
e(C) = B · C T (mod ph − 1)
Protocolul de decriptare urmat de Bob este:
11.1. SISTEMUL DE CRIPTARE MERKLE - HELLMAN 203

• Dacă x este mesajul criptat, ı̂n prima fază se determină y = x−h·d (mod ph −1).

• Se calculează g y ı̂n GF (ph ). Acesta este un polinom ı̂n α, de grad cel mult h − 1.
Pe de altă parte, α satisface o ecuaţie de forma αh = r(α), unde r(X) ∈ Zq [X]
este un polinom de grad cel mult h − 1.

• Polinomul s(α) = αh + g y − r(α) se descompune ı̂n factori liniari peste Zp (lucru


posibil deoarece s(α) este un produs de puteri ale lui g, fiecare exponent fiind de
forma (1)). Fie s(α) = (α+i1 −1)(α+i2 −1) . . . (α+ih −1) această descompunere.

• Poziţia elementelor 1 din textul clar este dată de valorile


(π −1 (i1 ), π −1 (i2 ), . . . , π −1 (ih )).

Unicitatea decriptării este asigurată de Lema ??.


Exemplul 11.10. Pentru facilitarea ı̂nţelegerii, vom face abstracţie de permutarea π şi
deplasarea d. Fie extensia GF (32 ) definită ı̂n Exemplele ?? şi ??, ı̂n care α verifică ecuaţia
X 2 = X +1, iar 2α+1 este generatorul extensiei. Deoarece logaritmii elementelor α, α+1
şi α + 2 sunt 3, 6 şi respectiv 5, se obţine cheia publică de criptare A = (3, 6, 5) (ı̂n acest
exemplu B = A). În plus, p = 3 şi h = 2.
Un text clar este compus din vectori binari cu 3 componente, ı̂n care suma componen-
telor este 2.
Să considerăm vectorii (2, 0, 0) şi (0, 1, 1). Ei sunt criptaţi ı̂n numerele 6 respectiv 3
(calculele se efectuează modulo ph − 1 = 8).
La decriptare, Bob:
- calculează ı̂ntâi puterile (2α + 1)6 = α + 1 şi (2α + 1)3 = α.
- La ambele expresii, adună α2 − α − 1, rezultând polinoamele α2 respectiv α2 − a =
(α + 1)(α + 2).
- Se deduc textele clare (2, 0, 0) respectiv (0, 1, 1).
Exemplul 11.11. Să relăm elementele principale din Exemplul ! ??, şi să construim vec-
1 2 3
torul public, aplicând lui A permutarea π = urmată de deplasarea d = 7.
2 3 1
Vectorul rezultat este B = (5, 4, 2); acesta, ı̂mpreună cu p = 3 şi h = 2 constituie cheia
publică. Trapa secretă este formată din π, d, polinomul X 2 − X − 1 şi generatorul 2α + 1.
Atunci, textul clar (0, 1, 1) este criptat ı̂n 6.
La recepţie, Bob calculează ı̂ntâi 6 − 2 · 7 (mod 8) = 0.
Pe urmă determină α2 + (2α + 1)0 − α − 1 = α2 − α = α(α + 2), care ! conduce la vectorul
1 2 3
(1, 0, 1). Acestuia i se aplică permutarea inversă π −1 = pentru a obţine textul
3 1 2
clar (0, 1, 1).
204 CAPITOLUL 11. ALTE SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

11.2 Sistemul de criptare McEliece


Sistemul de criptare McEliece – propus ı̂n 1978 – este destul de apropiat de problema
rucsacului. El utilizează drept cadru teoria codurilor liniare (pentru detalii vezi [?]); aici,
ı̂n general decodificarea unui cod liniar binar corector de erori este o problemă N P - com-
pletă. Pentru unele clase de coduri sunt construiţi algoritmi de decodificare polinomiali;
o astfel de clasă o formează codurile Goppa, care constituie baza sistemului de criptare
McEliece.

Definiţia 11.2. Fie k, n ∈ N (k ≤ n). Un (n, k) - cod liniar binar este un subspaţiu liniar
C ⊆ Z2n de dimensiune k.
O matrice generatoare a lui C este o matrice binară k × n ale cărei linii formează o
bază a lui C.
Pentru a ∈ Z2n se defineşte ponderea w(a) = numărul de elemente nenule din a.
Pentru a, b ∈ Z2n a = (a1 , . . . , an ), b = (b1 , . . . , bn ), se defineşte distanţa Hamming
prin d(a, b) = w(a − b).
Pentru un (n, k) - cod liniar binar C, distanţa minimă este

dC = min{d(a, b) | a, b ∈ C, a 6= b}

Un (n, k, d) - cod este un (n, k) - cod de distanţă minimă d.

Rolul unui cod corector de erori este de a corija modificări aleatoare care apar ı̂n
transmiterea unui set de date (binare) printr-un canal. În linii mari, acesta funcţionează
astfel: dacă a este un mesaj de informaţie de k biţi, Alice ı̂l codifică ı̂ntr-un cuvânt de n
biţi b = aG, unde G este matricea generatoare a codului.
Bob primeşte un mesaj r ∈ Z2n (eventual r = b) şi caută un cuvânt b1 ∈ C cu d(r, b1 )
minim posibil. Va decodifica r ı̂n b1 după care va calcula un mesaj de informaţie a1 astfel
ca b1 = a1 G. Cazul ideal este acela când b1 = b, a1 = a (adică erorile au fost acoperite
corect). Se cunoaşte că, dacă numărul de erori care apar nu depăşeşte (d − 1)/2, acest
procedeu corectează efectiv erorile.
Dacă Bob caută cuvântul - cod cel mai apropiat comparând r pe rând cu fiecare element
din C, cum sunt 2k astfel de cuvinte, algoritmul va fi exponenţial, deci nefuncţional.
Majoritatea algoritmilor de decodificare se bazează pe noţiunea de sindrom, definit
astfel:
Matricea de control a unui (n, k, d) - cod liniar binar de matrice generatoare G este o
matrice H de dimensiune (n − k) × n ale cărei linii formează o bază a unui spaţiu liniar
ortogonal. Evident, G · H T = 0.
Pentru un cuvânt r ∈ Z2n , se numeşte sindrom secvenţa de n − k biţi definită H · rT .

Teorema 11.1. a este un cuvânt - cod dacă şi numai dacă H · aT = 0.


În plus, dacă a ∈ C, e ∈ Z2n şi r = a + e, atunci H · rT = H · eT .
11.2. SISTEMUL DE CRIPTARE MCELIECE 205

Pentru demonstraţie se poate consulta de asemenea [?].


e poate fi considerat drept vectorul de erori care au apărut ı̂n transmiterea mesajului
a. Teorema anterioară afirmă că sindromul depinde doar de erori, nu şi de cuvântul - cod
transmis.
Această observaţie sugerează o metodă de decodificare bazată pe sindrom. Se cal-
culează ı̂ntâi s = H · rT . Dacă s = 0, decodificarea lui r este tot r. Altfel, se ı̂ncearcă
toate cuvintele de pondere 1. Pentru fiecare astfel de cuvânt e se calculează H · eT . Dacă
s-a găsit un e cu H · eT = s, r se decodifică ı̂n r − e. În caz contrar se ı̂ncearcă vectorii de
pondere 2, 3, . . . , [(d − 1)/2]. Dacă nu s-a găsit nici un cuvânt e cu H · eT = s, se deduce
că au apărut mai mult de [(d − 1)/2] erori ı̂n cursul transmisiei.
Metoda prezentată funcţionează pentru toate codurile liniare. Pentru anumite clase
speciale de coduri există algoritmi polinomiali de decodificare şi corectare a erorilor; ı̂n
cazul general ı̂nsă problema este N P - completă.
Algoritmul de criptare McElliece se bazează pe această idee. Trapa sa secretă o con-
stituie o clasă de coduri pentru care există algoritmi eficace de decodificare – codurile
Goppa. În plus, există un număr mare de coduri Goppa neechivalente, având aceiaşi
parametri.
Algoritmul de criptare McEliece este următorul:

Fie G matricea generatoare a unui (n, k, d) - cod Goppa cu n = 2m , d = 2t + 1, k =


n − m · t.
Se definesc:
- S – matrice inversabilă k × k peste Z2 ,
- P – matrice de permutare n × n (matrice ı̂n care pe fiecare linie şi coloană există
o valoare 1, iar restul elementelor sunt 0).
Fie P= Z2k , C= Z2n , K= {(G, S, P, G0 ) | G0 = S · G · P }.
G0 este publică iar G, S, P sunt secrete.
Pentru K = (G, S, P, G0 ) se defineşte

eK (a, e) = a · G0 + e

unde e ∈ Z2n este un cuvânt aleator de pondere t.


Bob decriptează un mesaj b ∈ Z2n astfel:
1. Calculează b1 = b · P −1 ;
2. Decodifică b1 obţinând b1 = a1 + e1 unde a1 ∈ C;
3. Calculează a0 ∈ Z2k astfel ca a0 · G = a1 ;
4. Calculează a = a0 · S −1 .

De remarcat că sistemul McElliece este primul sistem de criptare cu cheie publică care
a folosit alegerea unei valori aleatoare ı̂n procesul de criptare, idee reluată de ulterior de
sistemul El Gamal.
206 CAPITOLUL 11. ALTE SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

Corectitudinea algoritmului de decriptare:


Deoarece b1 = b · P −1 = (a · G0 + e) · P −1 = (a · S · G · P + e) · P −1 = (a · S) · G + e · P −1
iar e · P −1 este un vector de pondere cel mult t, algoritmul de decodificare al codului de
matrice generatoare G poate decodifica corect pe b1 şi obţine un mesaj sursă a0 = a · S.
La ultimul pas se află mesajul iniţial a = a0 · S −1 .
Nu vom intra ı̂n detalii privind definiţia codurilor Goppa ([?]). Acestea pot fi privite
ı̂nsă drept coduri liniare cu parametrii n = 2m , d = 2t + 1, k = n − m · t. Pentru o
implementare practică referitor la criptare, McEliece sugerează m = 10, t = 50, ceea ce
corespunde unui (1024, 524, 101) - cod Goppa2 . Un text clar este o secvenţă de 524 biţi,
iar un text criptat este o secvenţă de 1024 biţi. Cheia publică este o matrice binară de
dimensiuni 524 × 1024.

Exemplul 11.12. Vom exemplifica algoritmul pe un (8, 2, 5) - cod Goppa (deci n =


23 , k = 2, d = 5). Acest cod - extrem de mic (are doar 4 cuvinte) este generat de
matricea
!
0 0 1 1 1 1 1 1
G=
1 1 0 0 1 0 1 1

Să presupunem că Bob alege matricile


! !
1 0 1 0
S= cu S −1 =
1 1 1 1
şi    
0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0
 0 0 0 1 0 0 0 0   1 0 0 0 0 0 0 0
   

   
 0 0 0 0 0 0 1 0   0 0 0 0 1 0 0 0 
   
 1 0 0 0 0 0 0 0   0 1 0 0 0 0 0 0 
−1
P = cu P = 
   
 0 0 1 0 0 0 0 0   0 0 0 0 0 0 1 0
 

   
 0 0 0 0 0 1 0 0   0 0 0 0 0 1 0 0 
   
 0 0 0 0 1 0 0 0   0 0 1 0 0 0 0 0
   

0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
Matricea publică generată este deci
!
0 1 0 1 0 1 1 1 1
G =S·G·P =
1 1 0 1 0 1 1 0

Să presupunem că Alice vrea să cripteze textul clar a = (0, 1) folosind vectorul - eroare
e = (0, 0, 1, 0, 0, 1, 0, 0) (ales aleator) de pondere 2. Textul criptat este

b = a · G0 + e = (1, 1, 1, 1, 0, 0, 1, 0).
2
O analiză a securităţii recomandă parametrii n = 1024, t = 38, k ≥ 644.
11.3. EXERCIŢII 207

După recepţionarea mesajului, Bob calculează ı̂ntâi


b1 = b · P −1 = (1, 1, 1, 1, 1, 0, 0, 0),
pe care ı̂l scrie sub forma a1 + e1 unde a1 = (1, 1, 1, 1, 0, 1, 0, 0) este un cuvânt - cod,
iar e1 = (0, 0, 0, 0, 1, 1, 0, 0) 6= e (din cauza ı̂nmulţirii cu P −1 ).
Bob calculează apoi mesajul a0 = (1, 1), singurul cu proprietatea a0 · G = a1 .
Ultimul pas este determinarea lui a = S −1 · a0 = (0, 1), care este textul clar expediat
de Alice.

Algoritmul McElliece s-a dovedit sigur. Acest lucru rezultă din analiza celor două
tipuri de atac posibile:

1. Din informaţia publică, Oscar ı̂ncearcă să afle matricea G sau o matrice G1 a unui
cod Goppa echivalent (având aceeaşi parametri). Nu se cunoaşte nici un algoritm
eficient pentru un astfel de demers.

2. Oscar ı̂ncearcă să afle mesajul clar a direct din textul criptat b. El ia aleator k
coloane din matricea publică G0 . Notând G0k , bk , ek restricţiile lui G0 , b respectiv e
la aceste k coloane, vom avea a · G0k = bk + ek . Dacă bk = 0 şi G0k este nesingulară,
atunci a poate fi aflat rezolvând sistemul liniar a · G0k = bk . Probabilitatea ca cei
k
k biţi selectaţi să nu facă parte din eroare (deci ek = 0) este Cn−t /Cnk , neglijabilă
pentru valorile alese ale parametrior n, k, t.

Interesant, dar această securitate este mult diminuată dacă se foloseşte altă clasă de coduri
liniare ı̂n locul codurilor Goppa.
Totuşi, ı̂n ciuda securităţii sale şi a vitezei relativ mari de criptare/decriptare sistemul
McElliece nu este folosit practic. Cauza principală o constituie cheia sa excesiv de mare.
De exemplu, pentru n = 1024, t = 38, k ≥ 644, cheia are aproximativ 219 biţi.

11.3 Exerciţii
11.1. Folosind vectorul rucsac public B = (228, 325, 346, 485, 556, 525) criptaţi textul clar
CASA DE P IAT RA.

11.2. Se ştiu parametrii m = 523, u = 28 şi vectorul public


B = (355, 131, 318, 113, 21, 135, 215).

1. Aflaţi vectorul rucsac super-crescător A = (a1 , a2 , a3 , a4 , a5 , a7 );

2. Decriptaţi mesajul (113, 689, 379, 350, 346, 697, 355, 355).

11.3. Folosind vectorul rucsac public B = (102, 238, 3400, 284, 1044, 2122, 425) criptaţi
textul clar F RU N ZA DE ST EJAR.
208 CAPITOLUL 11. ALTE SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

11.4. Se ştiu parametrii m = 3989, u = 352 şi vectorul public


B = (102, 238, 3400, 284, 1044, 2122, 425).

1. Aflaţi vectorul rucsac super-crescător A = (a1 , a2 , a3 , a4 , a5 , a7 );

2. Decriptaţi mesajul (1753, 2122, 5624, 1566, 1809, 3450, 2360, 1049, 0).

11.5. Plecând de la criptanaliza vectorului rucsac din din Exemplul ??, să se construiască
vectorul super-crescător corespunzător valorii 720/30949.

11.6. Fie A = (a1 , a2 , . . . , an ) un vector rucsac. Un ı̂ntreg pozitiv x este reprezentat de


A dacă şi numai dacă x poate fi exprimat ca o sumă de ai ı̂n care fiecare element din A
apare cel mult odată. Dacă A este un vector injectiv, atunci este clar că 2n − 1 valori
ı̂ntregi sunt reprezentate de A. Acesta este cel mai mare număr posibil de valori. Care
este cel mai mic număr posibil de valori (ı̂n funcţie de n) ?

11.7. Folosind parametrii din Exemplul ?? criptaţi mesajele x = (1, 1) şi y = (1, 0).
Capitolul 12

Generatori de numere pseudo -


aleatoare

12.1 Numere aleatoare şi numere pseudo-aleatoare


Aproape toate sistemele de criptare şi protocoalele folosite ı̂n criptografie au un punct
central comun: alegerea unor numere arbitrare, necunoscute apriori, imprevizibile; denu-
mirea standard este de ”numere aleatoare” sau ”numere generate aleator”. În general nu
se poate vorbi de un singur număr aleator decât ı̂ntr-un context statistic. Termenul corect
este acela de ”şir de numere aleatoare”.
Folosirea calculatorului reduce termenul de numere aleatoare la un şir de biţi generaţi
aleator, grupaţi după o anumită regulă. Matematic, nu există o modalitate mai scurtă de
a specifica şirul decât secvenţa ı̂nsăşi.

Definiţia 12.1. Un generator de numere aleatoare, sau ”generator real aleator” (GA)
este un dispozitiv sau un algoritm care produce o secvenţă de numere independente şi
nepredictibile (care nu oferă informaţii asupra valorilor ulterioare).

În majoritatea cazurilor, un GA produce secvenţe binare, care ulterior sunt convertite
ı̂n numere ı̂ntregi.
Statistica oferă destul de puţine informaţii despre biţii generaţi aleator. De exemplu,
se ştie că 0 trebuie să apară la fel de frecvent ca 1, că 00 trebuie să apară de două ori
mai rar decât 0 (sau 1) şi la fel de des ca 11, 10, 01. Există şi teste statistice (distribuţie
normală standard, distribuţie χ2 - Kolmogorov) care estimează cât de aleatoare sunt
numerele dintr-un secvenţă.
În criptografie este esenţial ca un număr aleator să nu poată fi aflat. Un număr perfect
aleator este acela pe care Oscar nu-l poate ghici decât prin forţă brută. O parte destul de
importantă din criptanaliză se bazează pe exploatarea imperfecţiunilor unor funcţii care
generează numere aleatoare.

209
210 CAPITOLUL 12. GENERATORI DE NUMERE PSEUDO - ALEATOARE

O generare de numere pur aleatoare se realizează prin colectarea şi procesarea de date
obţinute dintr-o sursă de entropie exterioară calculatorului. Sursa de entropie poate fi
foarte simplă, ca de exemplu variaţiile mişcării mouse-ului, sau intervalul de timp dintre
apăsarea a două taste. Surse foarte bune de entropie pot fi cele radioactive sau cele care
folosesc zgomote din atmosferă.
Proprietatea de a fi aleator a fost introdusă ı̂n domeniul tehnicii de calcul cu ajutorul
generatorilor de numere pseudo-aleatoare.
Definiţia 12.2. Fie m, k (0 < k < m) numere ı̂ntregi. Un (k, m) generator de numere
pseudo-aleatoare este o aplicaţie recursivă
f : Z2k ←− Z2m
calculabilă ı̂n timp polinomial.
În aplicaţii, m = h(k) unde h este o funcţie polinomială.
Un generator de numere pseudo-aleatoare trebuie să satisfacă anumite cerinţe:
• Să fie simplu şi rapid.

• Să producă şiruri de numere de lungime arbitrară care să nu conţină repetiţii.
Deoarece un calculator nu poate genera decât numere mai mici decât un număr
dat, nu se poate construi un generator cu perioadă infinită. Generatorul trebuie să
aibă totuşi o perioadă de repetiţie cât mai mare.

• Să producă numere independente unul de altul (sau cu o corelare cât mai vagă).

• Să genereze numere cu o repartiţie uniformă ı̂n spaţiul valorilor.


Putem defini un generator de numere pseudo-aleatoare folosind arhitectura calculatorului.
Astfel, dacă S = (Q, f ) este un circuit secvenţial cu m = card(Q) stări şi funcţie de
tranziţie f : Q −→ Q, atunci secvenţa

xn = f (xn−1 ), x0 oarecare,

este o secvenţă de numere pseudo-aleatoare.


Un astfel de generator este cu atât mai eficient cu cât satisface mai bine cerinţele
anterioare.

12.2 Generatori simpli de numere pseudo-aleatoare


12.2.1 Generatori liniari congruenţiali
Un astfel de generator (construit de Lehmer ı̂n 1949) este definit de formula

xn+1 = axn + b (mod m)


12.2. GENERATORI SIMPLI DE NUMERE PSEUDO-ALEATOARE 211

Valorile a (multiplicatorul), b (incrementul) şi m (modulul) sunt constante. Cheia de


generare este valoarea iniţială x0 .
Când b = 0, generatorul se numeşte multiplicativ.
Perioada maximă a unui generator liniar este evident m. Ea poate fi atinsă pentru
anumite valori ale perechii (a, b) (de exemplu dacă cmmdc(b, m) = 1).
Un generator liniar congruenţial de perioadă m se numeşte generator de perioadă maxi-
mală. O analiză a strategiei de selecţie a valorilor pentru a asigura o perioadă maximală
se poate găsi ı̂n [?] şi [?]. O analiză teoretică detaliată a generatorilor liniari congruenţiali
se găseşte ı̂n [?].
În Tabelul 1 se află listaţi câţiva generatori de perioadă maximală.
a b m a b m
105 1283 6075 1277 24749 117128
211 1663 7875 2311 25367 120050
421 1663 7875 3877 29573 139968
430 2531 11979 8121 28411 134456
171 11213 53125 9301 49297 233280
141 28411 134456 2416 374441 1771875
421 17117 81000 17221 107839 510300
1093 18257 86436 84589 45989 217728
Tabelul 1
Avantajul generatorilor liniari congruenţiali este viteza de calcul.
O generalizare a relaţiei de recurenţă este

xn+k = (ak xn + (ak − 1)c/b) (mod m)

care dă un generator de perioadă maximală când:


• cmmdc(c, m) = 1;
• b = a − 1 este multiplu de p, pentru orice număr prim p care divide m;
• b (mod 4) = 0 dacă m (mod 4) = 0.
Dezavantajul generatorilor liniari congruenţiali este acela că ei nu mai pot fi folosiţi ı̂n
criptografie; ştiind prima valoare, numerele pot fi găsite uşor. Criptanaliza a fost realizată
de Jim Reeds ı̂n 1977 (cu completări ı̂n 1979) şi Joan Boyar ı̂n 1982. Ea a spart şi
generatorii pătratici
xn+1 = (ax2n + bxn + c) (mod m)
şi cubici
xn+1 = (ax3n + bx2n + cxn + d) (mod m)
Alţi cercetători au extins metodele de atac pentru spargerea oricărui generator poli-
nomial congruenţial.
212 CAPITOLUL 12. GENERATORI DE NUMERE PSEUDO - ALEATOARE

Acum, acest tip de generator de numere pseudo-aleatoare este folosit cu predilecţie ı̂n
aplicaţii necriptografice; de exemplu, ı̂n simulare el asigură o comportare statistică bună
ı̂n majoritatea testelor.

12.2.2 Generatori Ranrot


Clasa generatorilor Ranrot a fost definită de danezul Agner Fog ı̂n 1997 ([?]), iniţial
pentru algoritmi de tip Monte Carlo. Ei se bazează pe generatoare de numere Fibonacci,
completate cu operaţia de deplasare ciclică pe biţi. Sunt cunoscute şi studiate trei variante
de generatoare Ranrot:
• Tip A: xn = ((xn−j + xn−k ) (mod 2b ))  r;

• Tip B: xn = ((xn−j  r1 ) + (xn−k  r2 )) (mod 2b );

• Tip B3: xn = ((xn−i  r1 ) + (xn−j  r2 ) + (xn−k  r3 )) (mod 2b );

• Tip W: zn = ((yn−j  r3 ) + (yn−k  r1 )) (mod 2b/2 ),


yn = ((zn−j  r4 ) + (zn−k  r2 )) (mod 2b/2 ),
xn = yn + zn · 2b/2 .
S-au folosit următoarele convenţii:
1. Toate numerele x sunt ı̂ntregi binare pe b biţi;

2. 0 < i < j < k ≤ n numere ı̂ntregi;

3. α  s este rotaţia secvenţei α spre dreapta cu s poziţii;

4. 0 ≤ ri ≤ b − 1 pentru primele două tipuri, 0 ≤ bi ≤ b/2 pentru tipul W .


Valorile sunt calculate ı̂ntr-un vector (buffer) de k elemente, numit stare Sn .
Starea iniţială este
S1 = (x1 , x2 , . . . , xk )
iar trecerea de la o stare la alta se realizează printr-o deplasare spre stânga de forma
(xn−k , xn−k+1 , . . . , xn−1 ) ←− (xn−k+1 , . . . , xn−1 , xn )
unde xn este calculat conform formulei specifice tipului său.
Fie p = cmmdc(j, k). Dacă p > 1, atunci sistemul se poate descompune ı̂n p sisteme
independente. Deci o primă condiţie de performanţă este cmmdc(j, k) = 1, ceea ce asigură
inter-dependenţa tuturor numerelor din stare.
Din acelaşi motiv, la tipul W trebuie ca numărul k − j să fie prim.
Din modul de implementare al adunării binare rezultă o scurgere de informaţie (prin
bitul de transport - carry) de la biţii cei mai puţin semnificativi către cei mai semnificativi,
informaţie care nu se transferă ı̂n sens contrar. Pentru eliminarea acestui neajuns s-au
12.2. GENERATORI SIMPLI DE NUMERE PSEUDO-ALEATOARE 213

ı̂ncercat diverse variante, cum ar fi adunarea transportului la bitul cel mai puţin semni-
ficativ (ı̂n loc de cel mai semnificativ) – operaţie care ı̂mbunătăţeşte lungimea perioadei,
dar nu şi caracterul aleator. Varianta considerată a fost aceea de deplasare ciclică a biţilor
sumei rezultate. În plus, pentru ca toate elementele din S să rămână interdependente,
trebuie ca cel puţin un r să fie nenul. Din experimente a rezultat că cele mai bune valori
b b 2b
pentru numărul de poziţii rotite este aproape de pentru tipul A, aproape de şi
2 3 3
b b 3b
pentru tipul B şi aproape de , , pentru tipul B3.
4 2 4
Lungimea maximă a unei perioade la un generator Ranrot este (2k − 1) · 2b−1 .
Nu se cunoaşte ı̂ncă un algoritm de obţinere de generatori Ranrot de perioadă maxi-
mală; cei cunoscuţi au fost găsiţi prin testări. Cel mai mare generator analizat are 232
stări.
Exemplul 12.1. Un generator Ranrot de tipul A cu j = 1, k = 4, b = 7, r = 4 are 24
cicluri de perioade 1, 5, 9, 11, 14, 21, 129, 6576, 8854, 16124, 17689, 135756, 310417, 392239,
488483, 1126126, 1355840, 1965955, 4576377, 7402465, 8393724, 57549556, 184256986.
Importanţa restricţiilor impuse diverselor tipuri de generatori Ranrot este listată ı̂n
Tabelul 2.
Regula A B B3 W
cmmdc(j, k) = cmmdc(j, i) = cmmdc(k, i) = 1 *** *** *** ***
1<i<j <k−1 ** * * *
k − j impar - - - ***
un r 6= 0 *** *** *** **
toţi r 6= 0 *** ** * -
r distincţi - ** ** **
r>1 *** ** * *
cmmdc(r, b) = 1 * * * *
cmmdc(b, k) = 1 * * * *
Tabelul 2
S-a notat cu: − o regulă fără importanţă, ∗ - importanţă minoră, ∗∗ - nerespectarea ei
duce la apariţia unor cicluri de perioadă mică, ∗ ∗ ∗ - regulă importantă.
Şi aceşti generatori sunt uşor de spart, deoarece starea iniţială se poate deduce uşor
din k valori consecutive ale lui x. Dacă ı̂nsă parametrii nu se cunosc, generatorii Ranrot
pot fi folosiţi cu succes ı̂n criptografie, având o securitate sporită.
Exemplul 12.2. Să considerăm o variantă de generator Ranrot:
xn = ((xn−1  r1 ) + (xn−2  r2 ) + . . . + (xn−k  rk ) + h) (mod 2b )
unde h este un număr ı̂ntreg arbitrar din [0, 2b ]. Pentru fiecare r sunt bk valori posibile.
Astfel, pentru k = 17, b = 32 numărul de variante distincte este 1, 6 · 1035
Există un sistem de criptare (Power Crypto) bazat pe generatorul Ranrot de tip B3.
214 CAPITOLUL 12. GENERATORI DE NUMERE PSEUDO - ALEATOARE

12.2.3 Generatorul Blum - Blum - Shub


Cel mai simplu şi – se pare – cel mai eficient generator de numere pseudo - aleatoare este
Blum - Blum - Shub (numit şi generator rezidual pătratic).
Definiţia 12.3. Fie p, q două numere prime. Dacă
p ≡ 3 (mod 4), q ≡ 3 (mod 4)
atunci numărul n = pq se numeşte ı̂ntreg Blum.
Algoritmul Blum - Blum - Shub (BBS pe scurt) de generare de numere pseudo-
aleatoare (prezentat ca un (k, m) generator) este:
Fie n = pq un ı̂ntreg Blum, unde p, q sunt numere prime pe k/2 biţi.
Fie x0 un reziduu pătratic modulo n. Se defineşte secvenţa
xi+1 = x2i (mod n)
Dacă zi = xi (mod 2) pentru 1 ≤ i ≤ m, atunci numărul aleator generat este

f (x0 ) = z1 z2 . . . zm .

Generarea biţilor nu este de fapt recursivă, deoarece zi (1 ≤ i ≤ m) se poate calcula direct


cu formula
2i (mod (p−1)(q−1))
zi = x0 (mod 2)
Exemplul 12.3. Fie p = 383, q = 503; deci n = 192649. Alegând x0 = 1013552 (mod n)
= 20749, generatorul BBS va produce şirul pseudo-aleator 1100111000010011101.
Detaliind
i 0 1 2 3 4 5 6 7 8 9
xi 20749 143135 177671 97048 89992 174051 80649 45663 69442 186894
zi − 1 1 0 0 1 1 1 0 0
i 10 11 12 13 14 15 16 17 18 19
xi 177046 137922 123175 8630 114386 14863 133015 106065 45870 137171
zi 0 0 1 0 0 1 1 1 0 1
Securitatea acestui generator se bazează pe dificultatea factorizării lui n. n poate fi
făcut public; oricine poate genera o secvenţă pseudo-aleatoare pe baza lui. Totuşi, dacă
n nu se descompune ı̂n factori, nimeni nu poate prezice ieşirea; nici măcar o afirmaţie de
genul: Următorul bit este 1 cu probabilitate 51%.
Mai mult, fiind dată o parte a secvenţei, nu există nici o modalitate de a prezice bitul
anterior sau cel ulterior secvenţei.
Algoritmul BBS este destul de lent, dar are unele implementări mai rapide. Astfel,
dacă n este lungimea lui xi , pot fi păstraţi ultimii blog2 xi c biţi.
În acest moment BBS este considerat cel mai bun generator de numere pseudo-
aleatoare pentru protocoale de generare şi distribuţie a cheii.
12.3. CIRCUITE LINIARE 215

12.3 Circuite liniare


Circuitele liniare1 sunt folosite pe scară largă ı̂n teoria codurilor detectoare şi corectoare
de erori (codurile ciclice şi codurile convoluţionale) precum şi ı̂n unele sisteme de criptare
liniare (AES de exemplu). Avantajul lor constă ı̂n modalitatea extrem de rapidă de
calcul.
Teoria circuitelor liniare a fost stabilită ı̂n 1965 ([?]) de Ernst Selmer, şeful biroului de
criptografie al guvernului norvegian. Pentru detalii şi rezultate teoretice poate fi consultat
cartea de teoria codurilor [?].
Un LF SR (Linear Feedback Shift Register) este un circuit liniar format dintr-un regis-
tru serial şi o funcţie de ı̂ntoarcere (feedback). Dacă registrul este compus din n flip-flopuri
de date (DF − F ), vom avea un n − LF SR.

- bn bn−1 ... b2 b1 -
6
? ? ? ?
 Funcţie de ı̂ntoarcere

Funcţia de ı̂ntoarcere este o adunare modulo 2 (XOR) a anumitor biţi din registru; uneori
ea este numită configuraţie Fibonacci (vezi generatoarele Ranrot).
Exemplul 12.4. Să considerăm un 4 − LF SR dat de schema:
- s - - - s -

6
?
 +

 ?

Funcţia de ı̂ntoarcere este formată dintr-un singur XOR ı̂ntre primul şi ultimul bit. Să
presupunem că iniţial cei patru biţi din registru sunt 1001. La fiecare tact se va obţine o
nouă configuraţie, anume:
0100, 0010, 0001, 1000, 1100, 1110, 1111, 0111, 1011, 0101, 1010, 1101, 0110, 0011
după care apare din nou 1001.
La ieşire va apare secvenţa 1001000111101011. Acest circuit asigură un generator de
perioadă 16.
Un n − LF SR poate avea maxim 2n − 1 stări distincte (starea 00 . . . 0 este exclusă
deoarece ea formează un ciclu de lungime 1, neinteresant pentru generarea de numere
pseudo-aleatoare).
Fie g(X) ∈ Z2 [X], g(X) = 1 + g1 X + . . . + gn X n polinomul asociat unui n − LF SR,
unde gi = 1 dacă şi numai dacă bitul i participă la o adunare modulo 2. Astfel, ı̂n
Exemplul ?? polinomul este g(X) = 1 + X + X 4 .
1
Termenul din engleză este Shift Register.
216 CAPITOLUL 12. GENERATORI DE NUMERE PSEUDO - ALEATOARE

Să considerăm un polinom g(X) ∈ Z2 [X], grad(g(X)) = n şi fie m cel mai mic număr
astfel ca g(X)|X m + 1. Atunci secvenţa binară generată de un n − LF SR asociat lui g(X)
are perioada m (este o m - secvenţă).
Dacă g(X) este un polinom ireductibil peste Z2 , atunci m = 2n − 1, iar aceasta este
valoarea maximă posibilă (egalează numărul de stări distincte posibile din n − LF SR).
Toate detaliile teoretice care justifică aceste afirmaţii se găsesc ı̂n [?].
Lema 12.1. Un polinom g(X) ∈ Z2 [X] este ireductibil dacă şi numai dacă
1. Are un număr impar de termeni;

2. Cel puţin un termen este de forma X 2p+1 .


Demonstraţie: Exerciţiu.
În [?] pag. 376 este dat un tabel cu aproape 300 polinoame ireductibile.
Evident, un n − LF SR este un generator de secvenţe, dar proprietatea lor pseudo-
aleatoare este extrem de slabă; o stare internă oferă următorii n biţi din secvenţa de
ieşire. Chiar dacă funcţia de ı̂ntoarcere nu este cunoscută, ea poate fi determinată pe
baza a 2n biţi de ieşire (Algoritmul de decodificare Berlekamp - Massey, [?]). Totuşi, prin
combinarea mai multor circuite LF SR se pot obţine generatori acceptabili de secvenţe
pseudo - aleatoare.

12.4 Generatori bazaţi pe LF SR


12.4.1 Generatorul Geffe
Generatorul Geffe combină ı̂ntr-o formă neliniară trei LF SR, conform schemei următoare2 :

LF SR2 - i0
EM U X -

LF SR3 - i1
6

LF SR1 -

LF SR1 formează funcţia de selecţie a multiplexorului elementar, intrările fiind asigurate


de celelalte două LF SR-uri. Dacă a1 , a2 , a3 sunt ieşirile din cele trei LF SR-uri, ieşirea
din generatorul Geffe este dată de relaţia
2
Pentru noţiunile elementare de arhitectura calculatorului se poate folosi referinţa [?].
12.4. GENERATORI BAZAŢI PE LF SR 217

b = (a1 ∧ a2 ) ⊕ (a1 ∧ a3 )
Perioada generatorului este cel mai mic multiplu comun al perioadelor celor trei
LF SR-uri. Deci, dacă cele trei polinoame care definesc circuitele au grade prime ı̂ntre
ele, perioada generatorului Geffe este produsul celor trei perioade.
Din punct de vedere criptografic generatorul nu rezistă unui atac prin corelare. Ieşirea
din generator coincide cu ieşirea din LF SR2 cam 75% din timp. Deci, dacă definiţiile
polinomiale ale circuitelor sunt cunoscute se poate ghici valoarea iniţială din LF SR2 şi
genera secvenţa sa de ieşire. Apoi se numără de câte ori ieşirea din LF SR2 coincide cu
ieşirea din generator. Statistic, dacă nu s-a ghicit corect, cele două secvenţe coincid cam
50%; dacă s-a ghicit corect, ele coincid cam 75%.
Similar, ieşirea generatorului coincide cu cea din LF SR3 cam 75% din timp.
Cu aceste corelări secvenţa poate fi ghicită complet. Într-un articol din 1991, Zeng ş.a.
([?]) arată că dacă polinoamele ireductibile au câte trei termeni iar cel mai mare LF SR
este de lungime n, atunci o secvenţă de 37n biţi la ieşirea din generator este suficientă
pentru determinarea stărilor interne din cele trei circuite LF SR.
Generatorul Geffe poate fi extins la 2k + 1 LF SR legaţi printr-un M U Xk . Acest lucru
nu va mări ı̂nsă securitatea generatorului.

12.4.2 Generatori ”Stop-and-Go”


• Cel mai cunoscut este generatorul Beth - Piper (după numele autorilor); structura
sa este următoarea:

LF SR2 a2 (t)

-
LF SR1 a1 (t)
-  
-6 ? -
6
-
 -
- b(t)
 
6
s
6
-
LF SR3 a3 (t)
-

CK s -6

Acest generator controlează ceasurile celor trei circuite. Astfel, ceasul de intrare ı̂n
LF SR2 este controlat de ieşirea din LF SR1 ; ı̂n acest fel, LF SR2 şi schimbă starea
la momentul t numai dacă ieşirea din LF SR1 a fost 1 la momentul t − 1.
Nu se cunosc studii asupra complexităţii acestui generator. El totuşi nu a rezistat
atacurilor corelate ([?]).

• Stop-and-Go alternativ: Această variantă foloseşte trei LF SR de lungimi diferite,


legate ı̂ntr-un circuit de forma:
218 CAPITOLUL 12. GENERATORI DE NUMERE PSEUDO - ALEATOARE

 LF SR2 -
LF SR1 s

-
-

- ? -6 ? -

6 -
-
e  
6
?XX
- - 6

s -
LF SR3
-

-

CK s - ? -6

Când ieşirea din LF SR1 este 1 ea activează LF SR2 ; ı̂n caz contrar este activat
LF SR3 . Ieşirea din generator este un XOR dintre cele două ieşiri.
Acest generator are o perioadă mare. Există un atac prin corelare asupra sa (mai
precis asupra LF SR1 ), dar acesta nu i-a slăbit substanţial securitatea.

• Generator Gollmann: Este o legare serială ”ı̂n cascadă” a mai multor circuite LF SR,
ceasul fiecărui LF SR fiind controlat de circuitul anterior.
1
      
- -
s
6 6
-...
?
- -
? -
?
LF SR1 s LF SR2 LF SR2
- -
- - - - - -
        
-
6
s s s
6
...
? -6 ? -6
CK 6 -

Dacă la momentul t − 1 ieşirea din LF SRi este 1, atunci la momentul t este activat
LF SRi+1 . Ieşirea din generator este ieşirea din ultimul LF SR. Dacă toate circuitele
liniare au aceiaşi lungime n, complexitatea unui generator Gollmann cu k LF SR-uri
este n · (2n − 1)k−1 .

12.5 Alţi generatori de numere pseudo-aleatoare


12.5.1 Generatorul Blum - Micali
Fie g un număr prim, p un număr prim impar şi x0 o valoare iniţială. Se generează
numerele
xi+1 = g xi (mod p)
p−1
Ieşirea din generator este 1 dacă xi < şi 0 altfel.
2
Securitatea acestui sistem se bazează pe problema logaritmului discret. Dacă p este
suficient de mare astfel ca problema logaritmului discret să fie dificilă, generatorul este
sigur.

12.5.2 Generatorul RSA


Sistemul de criptare RSA poate fi folosit şi pentru generare de numere aleatoare.
Fie n = pq un modul obţinut prin produsul a două numere prime mari, un număr e
astfel ca cmmdc(e, φ(n))) = 1 şi x0 (x0 < n) o valoare iniţială. Se defineşte
12.5. ALŢI GENERATORI DE NUMERE PSEUDO-ALEATOARE 219

xi+1 = xei (mod n)


Ieşirea din generator este zi = xi (mod 2).
Securitatea generatorului se bazează pe dificultatea spargerii sistemului RSA. Dacă
n este suficient de mare, sistemul este sigur.

12.5.3 Generatorul Mother-of-all


Este un generator propus de George Marsaglia.
Iniţial se aleg cinci numere ı̂ntregi x0 , x1 , x2 , x3 , c (nu toate nule), stocate pe 32 biţi
fiecare.
Algoritmul este:

1. n ←− 4;

2. while n ≤ M AX do

(a) S ←− 2111111111 · xn−4 + 1492 · xn−3 + 1776 · xn−2 + 5115 · xn−1 + c;


S
 
(b) xn ←− S (mod 232 ), c ←− 32 ;
2
(c) n ←− n + 1;

Suma intermediară S este stocată pe 64 biţi. Valoarea M AX este stabilită ı̂n funcţie
de lungimea secvenţei de numere pseudo-aleatoare generate.
Implementat ı̂n limbaj de asamblare, algoritmul este extrem de rapid, deoarece aici
există o instrucţiune de ı̂nmulţire a două numere ı̂ntregi pe 32 biţi, cu rezultatul pe 64
biţi. Scris ı̂ntr-un limbaj de nivel ı̂nalt, algoritmul foloseşte numere ı̂n virgulă mobilă cu
o mantisă de 63 biţi.

12.5.4 Generatorul 1/P


Fie P un număr prim impar şi b un generator al lui ZP∗ . Secvenţa pseudo-aleatoare
produsă de generatorul 1/P cu intrarea (b, P ) este şirul de cifre zecimale din reprezentarea
numerică a fracţiei 1/P ı̂n baza b.
Secvenţa obţinută este periodică de perioadă P − 1 : 1/P = q1 q2 . . . qP −1 qP . . .

Exemplul 12.5. Fie b = 10 şi P = 7. Secvenţa pseudo-aleatoare produsă de genera-


torul 1/P cu intrarea (10, 7) este 142857142 . . ., deoarece 1/7 = 0, 142857142 . . . Evident,
lungimea perioadei este P − 1 = 6.

Deşi generatorul 1/P are o serie de proprietăţi care ı̂l situează printre generatorii
performanţi din punct de vedere al distribuţiei datelor, criptografic este slab.
220 CAPITOLUL 12. GENERATORI DE NUMERE PSEUDO - ALEATOARE

Astfel, notând cu s numărul de cifre din reprezentarea binară a lui P , se pot demonstra
următoarele rezultate ([?]):
- Dacă se ştie P şi o secvenţă de caractere din şir egală cu s, aceasta se poate extinde
la dreapta şi la stânga.
- Dacă se ştiu orice 2s + 1 elemente consecutive din şir, se poate reconstitui valoarea
lui P .

12.5.5 Generatorul AN SI X9.17


AN SI X9.17 este un standard F IP S folosit pentru generarea de chei pseudo-aleatoare
şi vectori de iniţializare (V I) din modurile de operare DES. El foloseşte sistemul de
criptare 3DES.
Intrare: - s: secvenţă aleatoare secretă de 64 biţi;
- K: cheia de criptare pentru 3DES;
- m: număr ı̂ntreg (lungimea secvenţei generate).
Ieşire: m secvenţe de câte 64 biţi.
Algoritm:
1. I = eK (s);
2. for i ←− 1 to m do
2.1. xi ←− eK (s ⊕ I);
2.2. s ←− eK (xi ⊕ I).
3. output(x1 , x2 , . . . , xm ).

12.6 Securitatea generatorilor de numere


pseudo-aleatoare
Proprietatea de aleatorism a secvenţelor se măsoară prin teste statistice. Un generator de
secvenţe pseudo-aleatoare trece testele statistice dacă se comportă asemănător sau identic
cu un generator real aleator.
Din punct de vedere criptografic, securitatea generatorului depinde de eficienţa compu-
taţională a algoritmului folosit, precum şi de posibilitatea ca un adversar – cunoscând doar
secvenţa pseudo-aleatoare rezultată – să determine parametrii secreţi ai algoritmului.
Se poate spune că din punct de vedere criptografic este mai important să se pună ı̂n
evidenţă slăbiciunile criptografice ale unei secvenţe pseudo-aleatoare decât proprietăţile
sale statistice (un şir poate fi bun din punct de vedere statistic, dar să prezinte numeroase
defecte de securitate criptografică).
Astfel, apare o relaţie de inter-dependenţă ı̂ntre existenţa unui test statistic eficient
(care poate fi folosit la diferenţierea dintre un geneator şi un generator real aleator)
şi existenţa unui posibil atac criptografic (de genul atacului prin corelare) care poate
”sparge” generatorul.
12.6. SECURITATEA GENERATORILOR DE NUMERE PSEUDO-ALEATOARE 221

Definiţia 12.4. Un generator G este ”nediferenţiabil (ı̂n timp) polinomial” dacă nu există
nici un text statistic eficient care să poată decide că G este diferit de un generator real
aleator (GA).
Lema 12.2. Dacă generatorul G este nediferenţiabil polinomial, atunci nu există nici un
algoritm de complexitate polinomială (”eficient”) care să-l poată sparge.
Demonstraţie. Presupunem prin absurd că există un algoritm A care poate sparge gene-
ratorul G. Atunci vom construi un test simplu pentru a diferenţia G de un generator real
aleator, fapt care contrazice ipoteza.
Fie α o secvenţă suficient de lungă obţinută din G. Atunci A(α) va da parametrii
necunoscuţi ai lui G; pe baza lor se calculează următoarea ieşire ipotetică din G. Dacă
acest rezultat apriori diferă de valoarea reală produsă de G, putem trage concluzia că G
este un GA; altfel, G nu va fi un generator real aleator.
Exemplul 12.6. Pentru generatorul 1/P se poate construi un test statistic simplu care
determină dacă – pentru un număr prim arbitrar de n cifre binare – o secvenţă de 3n
numere a fost extrasă din 1/P sau a fost generată aleator. Astfel, pentru generarea lui
P se utilizează 2n + 1 elemente (din cele 3n). Apoi, folosind acest P se generează 3n
cifre, care se compară cu secvenţa dată. Dacă cele două secvenţe se potrivesc, atunci (cu
1
o probabilitate de cel puţin 1 − 2n−1 ) şirul a fost produs de generatorul 1/P .

12.6.1 Teste statistice


Există pachete de teste utilizate ca standarde pentru evaluarea securităţii generatorilor
de numere pseudo-aleatoare. Cele mai cunoscute sunt DIEHARD (15 teste elaborate
de George Marsaglia) şi N IST (16 teste elaborate de Institutul de Standarde din SU A).
Testele propuse se concentrează pe o mare varietate de tipuri de non-aleatorism care pot
exista ı̂ntr-o secvenţă. Astfel, câteva aspecte pe care testele ı̂ncearcă să le pună ı̂n evidenţă
sunt:
• Verifică dacă numărul de 0 şi de 1 din secvenţă sunt aproximativ egale.
• Calculează şi analizează frecvenţa bigramelor, trigramelor etc (şabloane de lungime
fixată).
• Determină frecvenţa de apariţie a bitului 1 ı̂n cadrul blocurilor de M caractere
consecutive (M fixat).
• Analizează numărul de iteraţii din secvenţă (prin ”iteraţie” se ı̂nţelege o subsecvenţă
contiguă de biţi identici).
• Calculează rangul submatricilor create din secvenţa testată; scopul este de a verifica
independenţa liniară a subşirurilor de lungime fixată. Acest test apare atât ı̂n
pachetul DIEHARD cât şi ı̂n N IST .
222 CAPITOLUL 12. GENERATORI DE NUMERE PSEUDO - ALEATOARE

• Determină numărul de apariţii ale unor secvenţe ţintă fixate, pentru a detecta gene-
ratorii care produc prea multe apariţii ale unor şabloane neperiodice.

• Calculează frecvenţa secvenţelor de o anumită lungime.

• Cercetează dacă secvenţa poate fi comprimată semnificativ fără pierderi de informa-


ţie; un şir care poate fi comprimat este considerat nealeator.

• Calculează abaterea maximă de la 0 a sumelor parţiale ale secvenţei (ı̂n care 0 este
ı̂nlocuit cu −1), pentru a determina dacă suma cumulativă a unui subşir este prea
mare sau prea mică ı̂n comparaţie cu cea corespunzătoare a unui şir aleator (unde
aceste sume sunt apropiate de zero). Tot aici se urmăreşte de câte ori sumele parţiale
au valoarea 0.

Testele au o valoare direct proporţională cu lungimea n a secvenţei testate. În general


ordinul de mărime al lui n este ı̂n intervalul [103 , 107 ]. Pentru secvenţe de lungime mai
mică testele sunt neadecvate şi nu dau o estimare corectă de aleatorism.

12.7 Exerciţii
12.1. Se dă generatorul liniar congruenţial

xn+1 ≡ axn + b (mod 15)

Pentru ce valori ale perechii (a, b) ∈ Z15 × Z15 acest generator are perioadă maximă ?

12.2. Folosiţi generatorul BBS cu parametrii p = 7, q = 11, x0 = 2 pentru a genera o


secvenţă pseudo-aleatoare de lungime 30.

12.3. Folosiţi generatorul RSA cu parametrii p = 7, q = 11, x0 = 2 şi e = 3 pentru a


genera o secvenţă pseudo-aleatoare de lungime 30. Comparaţi secvenţa obţinută cu cea
găsită ı̂n exerciţiul anterior.

12.4. Construiţi LF SRi (i = 1, 2, 3) de polinoame generatoare 1 + X + X 3 , 1 + X + X 4


şi respectiv 1 + X 2 + X 5 . Pe baza lor construiţi generatori Geffe şi Stop-and-Go.
Plecând de la secvenţele iniţiale 011, 1011 respectiv 00101, generaţi secvenţe pseudo-
aleatoare cu fiecare din aceşti generatori. Ce perioade au aceste secvenţe ?
Anexa 1

Algoritmul lui Euclid extins

După cum se ştie, algoritmul lui Euclid constituie o modalitate eficace de determinare a
celui mai mare divizor comun a două numere ı̂ntregi pozitive. El poate fi extins pentru a
determina şi inversele elementelor dintr-un corp finit Zn .
Să reamintim ı̂ntâi algoritmul lui Euclid (forma clasică):
Fie r0 , r1 ∈ N ∗ .
Se efectuează secvenţa de ı̂mpărţiri succesive:
r0 = q1 r1 + r2 0 < r2 < r1
r1 = q2 r2 + r3 0 < r3 < r2
..
. (1)
rm−2 = qm−1 rm−1 + rm 0 < rm < rm−1
rm−1 = qm rm .
Deoarece cmmdc(r0 , r1 ) = cmmdc(r1 , r2 ) = . . . = cmmdc(rm−1 , rm ) = rm , rezultă că
cel mai mare divizor comun dintre r0 şi r1 este rm .
Să definim acum şirul t0 , t1 , . . . , tm astfel:
t0 = 0, t1 = 1
tj = tj−2 − qj−1 tj−1 (mod r0 ), j ≥ 2 (2)

Teorema 1.1. Pentru 0 ≤ j ≤ m avem rj ≡ tj r1 (mod r0 ) unde rj şi tj sunt definite de


(1) respectiv (2).

Demonstraţie. Se foloseşte o inducţie după j.


Pentru j = 0 şi j = 1 afirmaţia este banală.
Presupunem afirmaţia adevărată pentru j = i − 1 şi j = i − 2 (i ≥ 2) şi să o arătăm
pentru j = i. Toate calculele se fac modulo r0 .
Conform ipotezei de inducţie, ri−2 = ti−2 r1 , ri−1 = ti−1 t1 .
Acum:
ri = ri−2 − qi−1 ri−1 = ti−2 r1 − qi−1 ti−1 r1 = (ti−2 − qi−1 ri−1 )r1 = ti r1 .

223
224 ANEXA 1. ALGORITMUL LUI EUCLID EXTINS

Corolarul 1.1. Dacă (r0 , r1 ) = 1 atunci tm = r1−1 (mod r0 ).

Se poate da acum algoritmul extins al lui Euclid, care pentru n > 1 şi b ∈ Zn∗ va
determina b−1 mod n (dacă există).

Algoritmul lui Euclid extins:


1. n0 ←− n, b0 ←− b, t0 ←− 0, t ←− 1;
n0
2. q ←− , r ←− n0 − q · b0 ;
b0
3. while r > 0 do
3.1. temp ←− t0 − q · t
3.2. if temp ≥ 0 then temp ←− temp (mod n)
else temp ←− n − ((−temp) (mod n))
3.3. n0 ←− b0 ,b0 ←− r, t0 ←− t, t ←− temp;
n0
3.4. q ←− , r ←− n0 − q · b0 ;
b0
4. if b0 6= 1 then b nu are inversă mod n.
else b−1 (mod n) = t.

Exemplul 1.1. Să calculăm 28−1 mod 75, folosind algoritmului lui Euclid extins. Vom
avea pe rând:
n 0 b0 q r t0 t temp
75 28 2 19 0 1 73
28 19 1 9 1 73 3
19 9 2 1 73 3 67
9 1 9 0 3 67

Deci 28−1 mod 75 = 67.


Anexa 2

Teorema chineză a resturilor

Teorema 2.1. Se dau numerele p1 , p2 , . . . , pr prime ı̂ntre ele şi fie n = p1 p2 . . . pr . Atunci
sistemul de ecuaţii
x ≡ ai (mod pi ), 1≤i≤r
are soluţie comună ı̂n intervalul [0, n − 1].

Demonstraţie. Pentru fiecare i, cmmdc(pi , n/pi ) = 1; deci există numerele yi astfel ı̂ncât
n
· yi ≡ 1 (mod pi ).
pi
n
De asemenea, pentru j 6= i, deoarece pj |cmmdc(n/pi ), avem · yi ≡ 0 (mod pj ).
pi
Alegem
r
X n
x= · yi · ai (mod n).
i=1 pi

Pentru orice i, x este o soluţie a ecuaţiei x ≡ ai (mod pi ) deoarece ı̂n Zpi avem
n
x = · y i · ai = ai .
pi
n
Exemplul 2.1. Fie r = 3, p1 = 7, p2 = 11, p3 = 13, deci n = 1001. Notând mi = ,
pi
avem m1 = 143, m2 = 91 şi m3 = 77.
Folosind algoritmul lui Euclid, se obţine y1 = 5, y2 = 4, y3 = 12.
Soluţia generală este atunci
x = 715a1 + 364a2 + 924a3 (mod 1001).
De exemplu, pentru sistemul
x ≡ 5 (mod 7), x ≡ 3 (mod 11), x ≡ 10 (mod 13)
formula de sus dă
x = 715 · 5 + 364 · 3 + 924 · 10 (mod 1001) = 13907 (mod 1001) = 894.
Verificarea se realizează reducând x modulo 7, 11 şi 13.

225
226 ANEXA 2. TEOREMA CHINEZĂ A RESTURILOR

2.1 Exerciţii
2.1. Folosiţi algoritmul lui Euclid extins pentru a calcula inversele

17−1 (mod 101), 357−1 (mod 1234), 3125−1 (mod 9987)

2.2. Calculaţi cmmdc(57, 93) şi aflaţi numerele ı̂ntregi s, t astfel ca

57s + 93t = cmmdc(57, 93).

2.3. Fie funcţia g : Z105 −→ Z3 × Z5 × Z7 definită

g(x) = (x mod 3, x mod 5, x mod 7).

Găsiţi o formulă pentru g −1 şi utilizaţi-o pentru a calcula g −1 (2, 2, 3).

2.4. Rezolvaţi sistemul de congruenţe


x ≡ 12 (mod 25),
x ≡ 9 (mod 26),
x ≡ 23 (mod 27)
2.5. Rezolvaţi sistemul de congruenţe
13x ≡ 4 (mod 99),
15x ≡ 56 (mod 101)
Bibliografie

[1] Anderson R. ş.a. - Serpent: A proposal for the Advanced Encryption Standard,
http://www.ftp.cl.cam.ac.uk/ftp/users/rja14/serpent.pdf

[2] Atanasiu A. - Teoria codurilor corectoare de erori, Editura Univ. Bucureşti, 2001;

[3] Atanasiu, A. - Arhitectura calculatorului, Editura Infodata, Cluj, 2006;

[4] Blum L., Blum M., Shub M. - Comparision of two pseudo-random number generators,
Advanced in Cryptology, CRYPTO 82

[5] D. Bayer, S. Haber, W. Stornetta; Improving the efficiency and reliability of digital
time-stamping. Sequences II, Methods in Communication, Security and Computer
Science, Springer Verlag (1993), 329-334.

[6] Biham E., Shamir A. - Differential Cryptanalysis of DES - like Cryptosystems, Jour-
nal of Cryptology, vol. 4, 1 (1991), pp. 3-72.

[7] Biham E., Shamir A. - Differential Cryptanalysis of the Data Encryption Standard,
Springer-Verlag, 1993.

[8] Biham E., Shamir A. - Differential Cryptanalysis of the Full 16-Round DES, Pro-
ceedings of Crypto92, LNCS 740, Springer-Verlag.

[9] Biham E. - On Matsuis Linear Cryptanalysis, Advances in Cryptology - EURO-


CRYPT 94 (LNCS 950), Springer-Verlag, pp. 341-355, 1995.

[10] Biryukov A., Shamir A., Wagner D. - Real Time Cryptanalysis of A5/1 on a PC,
Fast Software Encryption - FSE 2000, pp 118.

[11] Bruen A., Forcinito M - Cryptography, Information Theory, and Error - Correction,
Wiley Interscience 2005.

[12] Collard Brigitte - Secret Language in Graeco-Roman antiquity (teză de doctorat)


http : //bcs.f ltr.ucl.ac.be/F E/07/CRY P T /Intro.html

227
228 BIBLIOGRAFIE

[13] Cook S., http : //www.claymath.org/millennium/P vs N P/Of f icial P ro


blem Description.pdf

[14] Coppersmith D. ş.a. - MARS - a candidate cypher for AES,


http://www.research.ibm.com/security/mars.pdf

[15] Daemen J., Rijmen V. - The Rijndael Block Cipher Proposal,


http://csrc.nist.gov/CryptoToolkit/aes/

[16] Damgard I.B. - A design principle for hash functions, Lecture Notes in Computer
Science, 435 (1990), 516-427.

[17] Diffie D.W., Hellman M.E. - New Directions in Cryptography, IEEE Transactions on
Information Theory, IT-22, 6 (1976), pp. 644-654

[18] Diffie D.W., Hellman M.E. - Multiuser cryptographic techniques, AFIPS Conference
Proceedings, 45(1976), 109 − 112

[19] L´ Ecuyer P. - Random Numbers for Simulation, Comm ACM 33, 10(1990), 742-749,
774.

[20] Enge A. - Elliptic Curves and their applications to Cryptography, Kluwer Academic
Publ, 1999

[21] El Gamal T. - A public key cryptosystem and a signature scheme based on discrete
algorithms, IEEE Transactions on Information Theory, 31 (1985), 469-472

[22] Fog A. - http://www.agner.org/random/theory;

[23] Gibson J. - Discrete logarithm hash function that is collision free and one way. IEEE
Proceedings-E, 138 (1991), 407-410.

[24] Heyes H. M. - A Tutorial on Linear and Differential Cryptanalysis.

[25] van Heyst E., Petersen T.P. - How to make efficient fail-stop signatures, Lecture
Notes in Computer Science, 658(1993), 366 − 377

[26] Junod P. - On the complexity of Matsuiş attack, in SAC 01: Revised Papers from the
8th Annual International Workshop on Selected Areas in Cryptography, pp 199211,
London, UK, 2001. Springer-Verlag.

[27] Kahn D. - The Codebreakers, MacMillan Publishing Co, New York, 1967

[28] Kelly T. - The myth of the skytale, Cryptologia, Iulie 1998, pp. 244 - 260.

[29] Konheim A. - Computer Security and Cryptography, Wiley Interscience, 2007.


BIBLIOGRAFIE 229

[30] Knuth D. - The art of computer Programming, vol 2 (Seminumerical Algorithms)

[31] Lenstra, H.W. - Factoring Integers with Eiipltic Curves, Annals of Mathematics, vol.
126, pp. 649-673, 1987.

[32] Matsui M, Yamagishi A. - A new method for known plaintext attack of FEAL cipher.
Advances in Cryptology - EUROCRYPT 1992.

[33] Matsui M. - Linear Cryptanalysis Method for DES Cipher, Advances in Cryptology
- EUROCRYPT 93, LNCS 765, Springer-Verlag, pp. 386-397, 1994.

[34] Matsui M. - The first experimental cryptanalysis of the Data Encryption Standard, in
Y.G. Desmedt, editor, Advances in Cryptology - Crypto 4, LNCS 839, SpringerVerlag
(1994), 1- 11.

[35] Matsui M. - New Structure of Block Ciphers with Provable Security against Differen-
tial and Linear Cryptalaysis, Fast Software Encryption, LNCS 1039, Springer-Verlag,
1996, pp. 205-218.

[36] Merkle R. C., Hellman M. - Hiding Information and Signatures in Trapdoor Knap-
sacks, IEEE Trans. IT 24(5), Sept 1978, pp. 525530.

[37] Merkle R.C. - A fast software one-way functions and DES, Lecture Notes in Com-
puter Science, 435 (1990), 428-446

[38] Menezes A., Oorschot P., Vanstome S. - Handbook of Applied Cryptography, CRC
Press 1996.

[39] Preneel B., Govaerts R., Vandewalle J. - Hash functions based on block ciphers: a
syntetic approach; Lecture Notes in Computer Science, 773 (1994), 368-378

[40] Rivest R. ş.a - The RC6T M Block Cipher,


ftp://ftp.rsasecurity.com/pub/rsalabs/rc6/rc6v11.pdf

[41] Rivest R.L. - The MD4 message digest algorithm; Lecture Notes in Computer Sci-
ence, 537, (1991), 303-311

[42] Rivest R., Shamir A., Adleman A. - A Method for Obtaining Digital Signatures and
Public-Key Cryptosystems, Communications of the ACM, Vol. 21 (2), 1978, pages
120–126.

[43] Rosing, M - Implementing Elliptic Curve Cryptography, Manning, 1998

[44] Salmon, D. - Data Privacy and Security, Springer Professional Computing, 2003

[45] Salomaa A. - Criptografie cu chei publice, Ed. Militară, Bucureşti 1994


230 BIBLIOGRAFIE

[46] Schneier B. - Applied Cryptography, John Wiley and Sons, 1995

[47] Schneier B ş.a. - Twofish, http://www.counterpane.com/twofish.html

[48] Shamir, A. - A polynomial time Algorithm for breaking the basic Merkle - Hellman
cryptosystem,
http://dsns.csie.nctu.edu.tw/research/crypto/HTML/PDF/C82/279.PDF

[49] Shoup, V. - Lower bounds for discrete logarithm and related problems, Advanced in
Cryptology, EUROCRYPT 97, Springer - Verlag LNCS 1233, pp. 313-328, 1997.

[50] Selmer E.S. - Linear Recurrence over Finite Field, Univ. of Bergen, Norway, 1966;

[51] Sibley E.H. - Random Number Generators: Good Ones are Hard to Find, Comm
ACM 31, 10(1988), 1192-1201.

[52] Smid M.E., Branstad, D.K. - Response to comments on the N IST proposed digital
signature standard, Lecture Notes in Computer Science, 740(1993), 76 − 88

[53] Stinton D., Cryptography, Theory and Practice, Chapman& Hall/CRC, 2002

[54] Wiener M.J. - Cryptanalysis of short RSA secret exponents, IEEE Trans on Informa-
tion Theory, 36 (1990), 553-558

[55] Williams H.C. - Some public-key criptofunctions as intractable as factorisation, Cryp-


tologia, 9 (1985), 224-237.

[56] Zeng K.G., Yang C.H., Wei D.Y., Rao T.R.N.- Pseudorandom Bit Generators in
Stream Cipher Cryptography, IEEE Computer, 24 (1991), 8.17.

[57] Secure hash Standard; National Bureau of Standards, FIPS Publications 180, 1993

[58] http : //en.wikipedia.org/wiki/Enigma machine

[59] http : //en.wikipedia.org/wiki/M − 209

[60] http://en.wikipedia.org/wiki/Caesar cipher# History and usage

[61] http://psychcentral.com/psypsych/Polybius square

[62] http://www.answers.com/topic/vigen-re-cipher

[63] http://en.wikipedia.org/wiki/Rosetta stone

[64] Serpent homepage, http://www.cl.cam.ac.uk/ rja14/serpent.html

[65] P versus NP homepage, http://www.win.tue.nl/ gwoegi/P-versus-NP.htm


BIBLIOGRAFIE 231

[66] http://www.win.tue.nl/ gwoegi/P-versus-NP.htm

[67] http://en.wikipedia.org/wiki/Complexity classes P and NP


232 BIBLIOGRAFIE

Cuprins

Prefaţă 3

Capitolul 1: Sisteme de criptare 5


1.1. Caracteristicile unui sistem de criptare 5
1.2. Criptanaliza sistemelor de criptare 10
1.3. Exerciţii 15

Capitolul 2: Sisteme simetrice de criptare 17


2.1. Cifruri de permutare 17
2.2. Cifruri de substituţie 19
2.2.1. Sisteme de criptare monoalfabetice 19
Sistemul de criptare Cezar 19
Sistemul de criptare afin 20
Sistemul de criptare Polybios 21
Sistemul cavalerilor de Malta 22
2.2.2. Criptanaliza sistemelor de criptare monoalfabetice 22
2.2.3. Sisteme de criptare polialfabetice 25
Sistemul homofonic 25
Sistemul de criptare Playfair 25
Sistemul Vigenere 28
2.3. Exerciţii 33

Capitolul 3: Sisteme mecanice de criptare 35


3.1. Sistemul skitala 35
3.2. Cilindrul Jefferson 36
3.3. Maşini de criptat 38
3.3.1. Enigma 38
3.3.2. C-36 43
3.3. Exerciţii 45

Capitolul 4: Sisteme fluide de criptare 47


4.1. Sisteme sincrone şi auto-sincronizabile 47
4.2. Exemple de sisteme fluide de criptare 52
4.2.1. SEAL 52
4.2.2. RC4 55
4.2.3. Sistemul A5/1 57
4.3. Exerciţii 60

Capitolul 5: Sisteme simetrice de criptare moderne 61


BIBLIOGRAFIE 233

5.1. Sistemul de criptare DES 61


5.1.1. Reţele Feistel 61
5.1.2. Consideraţii generale privind sistemul de criptare DES 62
5.1.3. Descrierea sistemului DES 63
5.1.4. Chei slabe 67
5.1.5. Controverse legate de DES 68
5.1.6. Moduri de implementare ale DES-ului 69
5.1.7. Parole U N IX 71
5.1.8. Sisteme de criptare ı̂nrudite cu DES 72
Triplu DES 72
DES − X 73
IDEA 74
5.2. Alte sisteme de criptare ulterioare DES 75
5.2.1. M ARS 76
5.2.2. RC6 79
5.2.3. Serpent 81
5.2.4. Twofish 83
5.3. Sistemul de criptare AES 86
5.3.1. Descrierea sistemului AES 86
5.3.2. Prelucrarea cheii de criptare 89
5.4. Exerciţii 91

Capitolul 6: Atacuri asupra sistemelor de criptare bloc 93


6.1. Consideraţii generale 93
6.2. Compromisul spaţiu - timp 93
6.3. Atacul meet - in - the - middle 95
6.4. Criptanaliza diferenţială 96
6.4.1. Privire generală 96
6.4.2. Analiza componentelor unui sistem de criptare 97
6.4.3. Reţea substituţie - permutare (SP N ) 100
6.4.4. Diferenţiala caracteristică ı̂ntr-un SP N 102
6.4.5. Extragerea biţilor cheii 103
6.4.6. Criptanaliza diferenţială pentru DES 105
6.5. Criptanaliza liniară 109
6.5.1. Modalitatea generală de atac 109
6.5.2. Lema Piling - up 110
6.5.3. Relaţii de aproximare a S - boxurilor 112
6.5.4. Construirea aproximărilor liniare pentru un sistem bloc 114
6.5.5. Extragerea biţilor cheii 117
6.5.6. Criptanaliza liniară pentru DES 119
6.6. Comparaţie ı̂ntre criptanaliza diferenţială şi liniară 122
234 BIBLIOGRAFIE

6.7. Exerciţii 122

Capitolul 7: Sisteme de criptare cu cheie publică 125


7.1. Consideraţii generale 125
7.2. Funcţii neinversabile 126
7.3. Trapa secretă 129
7.4. Securitatea sistemelor de criptare cu cheie publică 131
7.5. Comparaţie ı̂ntre criptarea simetrică şi cea cu cheie publică 134
7.6. Exerciţii 135

Capitolul 8: Sistemul de criptare RSA 137


8.1. Descrierea sistemului RSA 137
8.2. Implementarea sistemului RSA 138
8.3. Teste de primalitate probabiliste 140
8.3.1. Algoritmul Soloway - Strassen 141
8.3.2. Algoritmul Miller - Rabin 144
8.4. Securitatea sistemului RSA 146
8.4.1. Informaţii despre p şi q 146
8.4.2. Exponentul de decriptare 147
Factorizarea modulului ştiind exponentul de decriptare 147
Atacul lui Wiener 149
8.4.3. Informaţie parţială despre textul clar 151
8.4.4. Algoritmi de descompunere ı̂n factori primi 153
Metoda p − 1 153
Algoritmul lui Dixon şi sita pătratică 155
8.4.5. Alte tipuri de atac 156
Atac bazat pe proprietăţile multiplicative ale RSA 156
Atac bazat pe exponent mic de criptare 157
Atacuri ciclice 158
8.5. Sisteme de criptare ı̂nrudite cu RSA 158
8.5.1. Sistemul de criptare Rabin 158
8.6. Exerciţii 161

Capitolul 9: Sistemul de criptare El Gamal 163


9.1. Descrierea algoritmului de criptare El Gamal 163
9.2. Calculul logaritmului discret 165
9.2.1. Algoritmul Shanks 165
9.2.2. Algoritmul Pohlig - Hellman 166
9.2.3. Algoritmul Pollard - Rho 168
9.2.4. Metoda de calcul a indicelui 170
9.3. Securitatea P LD faţă de informaţii parţiale 171
BIBLIOGRAFIE 235

9.4. Generalizarea sistemului de criptare El Gamal 174


9.5. Exerciţii 175

Capitolul 10: Sisteme de criptare bazate pe curbe eliptice 177


10.1. Aritmetica curbelor eliptice 178
10.2. Sisteme de criptare construite pe curbe eliptice 182
10.2.1. Sistemul Menezes - Vanstome 183
10.3. Problema logaritmului discret pe curbe eliptice 184
10.3.1. Atacul Pohlig - Hllman 184
10.3.2. Atacul BSGS (Baby-Step/Giant-Step) 185
10.3.3. Atacul Pollard - Rho 186
10.4. Factorizări bazate pe curbe eliptice 188
10.5. Exerciţii 189

Capitolul 11: Alte sisteme de criptare cu cheie publică 191


11.1. Sistemul de criptare rucasc (Merkle - Hellman) 191
11.1.1. Considerente generale 191
11.1.2. Criptanaliza sistemului de criptare rucsac 195
11.1.3. Vectori rucsac cu creştere mare 200
11.2. Sistemul de criptare McElliece 204
11.3. Exerciţii 207

Capitolul 12: Generatori de numere pseudo-aleatoare 209


12.1. Numere aleatoare şi pseudo-aleatoare 209
12.2. Generatori simpli de numere pseudo-aleatoare 210
12.2.1. Generatori liniari congruenţiali 210
12.2.2. Generatori Ranrot 212
12.2.3. Generatorul Blum - Blum - Shub 214
12.3. Circuite liniare (LF SR) 215
12.4. Generatori bazaţi pe LF SR 216
12.4.1. Generatorul Geffe 216
12.4.2. Generatori ”Stop-and-Go” 217
12.5. Alţi generatori de numere pseudo-aleatoare 218
12.5.1. Generatorul Blum - Micali 218
12.5.2. Generatorul RSA 218
12.5.3. Generatorul Mother-of-all 219
12.5.4. Generatorul 1/P 219
12.5.5. Generatorul AN SI X9.14 220
12.6. Securitatea generatorilor de numere pseudo-aleatoare 220
12.6.1. Teste statistice 221
12.7. Exerciţii 222
236 BIBLIOGRAFIE

Anexa 1: Algoritmul lui Euclid extins 223

Anexa 2: Teorema chineză a resturilor 225


2.1 Exerciţii 226

Bibliografie 227

Cuprins 232

View publication stats

You might also like