Professional Documents
Culture Documents
net/publication/308791446
CITATIONS READS
0 1,310
1 author:
SEE PROFILE
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by Adrian Constantin Atanasiu on 03 October 2016.
Vol. 1
(Criptografie)
Adrian Atanasiu
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
Sisteme de criptare
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
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):
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ă.
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 [?].
Î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.
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
!
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.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.
Î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.
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
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
0 0 1
adică LF O.
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!.
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
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ă.
ş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 [?]).
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
: . : : . : : : : : : : . :
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 ∗ .
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.
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:
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.
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
D O A R O V O R B A
S A I T I S P U N Q
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).
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
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
Î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
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ă
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.
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
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.
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.
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.
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.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
• Poziţia iniţială a discurilor: poziţionarea ı̂n mod independent a fiecărui disc, diferită
pentru fiecare mesaj;
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
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
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
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
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.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
x = x1 x2 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
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
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
Observaţia 4.1.
• (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).
K - Generator zi- ? - y
⊕ i K - Generator zi- ? - x
⊕ i
chei fluide chei fluide
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.
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.
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
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.
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 );
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
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, ∞).
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
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:
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]
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.
×
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
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:
2. for i ←− 0 to 63 do
3. for i ←− 0 to 21 do
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).
Folosind un atac prin forţă brută, să se decripteze mesajul BST KXOU XM W JK
Capitolul 5
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).
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.
Li = Ri−1
Ri = Li−1 ⊕ f (Ri−1 , Ki )
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:
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:
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
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
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:
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.
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
• 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
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
γi = eK (γi−1 ), (i ≥ 1)
βi = αi ⊕ γi , (i ≥ 1)
β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.
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):
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.
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
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:
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.
• Î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
• 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.
• 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).
• S[·] – S − box de 512 cuvinte; S0[] va conţine primele 256 elemente, iar S1[] –
ultimele 256 cuvinte.
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
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.
• +, −, · (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),
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 π.
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:
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
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:
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 .
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
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
g(X) = h(X, S)
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).
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
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
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
2. Nr − 1 runde;
3. O rundă finală.
• 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 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 ).
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.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.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
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 )
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.
Î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).
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
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
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 ).
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.
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
XOR cu sub-cheia K1
XOR cu sub-cheia K2
XOR cu sub-cheia K3
XOR cu sub-cheia K4
runda 4
S41 S42 S43 S44
XOR cu sub-cheia K5
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
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:
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
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
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]
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ă.
? ? ? ?
∆U4,5 ,...,∆U4,8 ∆U4,13 ,...∆U4,16
S41 S42 S43 S44
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
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.
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:
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 :
Î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.
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 ∗ .
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:
(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
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.
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ă.
1
ı̂n engleză bias.
6.5. CRIPTANALIZA LINIARĂ 111
Corolarul 6.1. Fie i1 ,i2 ,...,ik tendinţa variabilei aleatoare Xi1 ⊕ . . . Xik .
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
(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
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
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).
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
cu probabilitate 1/4. Deoarece U2,6 = V1,6 ⊕ K2,6 , putem găsi o aproximare de forma
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
K2,6
K3,6 K3,14
? ?
U4,6 U4,8 U4,14 U4,16
S41 S42 S43 S44
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 ??).
a2 ⊕ b 1 ⊕ b 2 ⊕ b 3 ⊕ b 4 = 0
α.H α.L
K1
+k
?
f
? ?
X2
+k K2
?
f
? ?
X2
+k
?
f K3
?
?
β.H β.L
α.L15 ⊕ (α.H7 ⊕ X27 ) ⊕ (α.H18 ⊕ X218 ) ⊕ (α.H24 ⊕ X224 ) ⊕ (α.H29 ⊕ X229 ) ⊕ K122 = 0
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.
• 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:
• 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.4. Pentru fiecare din cele opt S - boxuri DES calculaţi tendinţa variabilei aleatoare
X2 ⊕ Y1 ⊕ Y2 ⊕ Y3 ⊕ Y4 .
1. Arătaţi că a doua linie din S4 poate fi obţinută din prima linie folosind operaţia
2. Arătaţi că orice linie din S4 poate fi transformată ı̂n orice altă linie printr-o operaţie
similară.
1. NL (0, 0) = 2m ;
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 ).
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
125
126 CAPITOLUL 7. SISTEME DE CRIPTARE CU CHEIE PUBLICĂ
• 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 ).
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
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:
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:
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:
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.
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
ş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Ă
Putem trasa acum câteva principii generale de construire a unui sistem de criptare cu
cheie publică ([?]):
Î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.
• 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Ă
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
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ă.
1. Prin alterare intenţionată (de exemplu modificarea unui cont bancar, a unei adrese
de e-mail, a unui document de identitate);
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ă:
• 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.
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.
4. În funcţie de modul de utilizare, o pereche de chei (publică, privată) poate fi păstrată
o perioadă mai lungă de timp.
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.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:
Arătaţi că Bob este capabil să decripteze mesajul şi discutaţi problemele de securitate
implicate.
Capitolul 8
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ă
şi trimite prin canal textul criptat c = 5761. Când Bob primeşte acest număr, el determină
Tabelul 8.1:
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
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.
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:
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
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:
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
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 [?].
3. b ←− am (mod n)
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)
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:
2. Implementarea lui Solovay - Strassen este mai dificilă din cauza calculului simbolului
Jacobi.
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.
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.
√
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.
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
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.
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
1. Plecând de la n şi b (publice), se află dezvoltarea ı̂n fracţie continuă a lui b/n
(folosind algoritmul lui Euclid).
Exemplul 8.10. Să presupunem că n = 160523347, b = 60728973. Dezvoltarea ı̂n fracţie
continuă a lui b/n este
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
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
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]
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
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”
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.
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 !!
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:
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ă.
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
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).
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 .
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.
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.
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
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
După determinarea acestor rădăcini x1 , se află x = x1 − B/2, rezultat care dă formula
de decriptare din enunţul metodei Rabin.
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:
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
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).
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.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.
αa ≡ β (mod p).
β 1 2 3 4 5 6 7 8 9 10
log6 β 0 9 2 8 6 1 3 7 4 5
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).
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 )
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.
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.
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, 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).
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
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
c−1
ai q i .
X
Algoritmul calculează a0 , a1 , . . . , ac−1 unde logα β (mod q c ) =
i=0
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,
sau
c(b2i − bi ) ≡ ai − a2i (mod n).
Dacă cmmdc(b2i − bi , n) = 1, atunci se poate obţine c:
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):
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
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
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).
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)
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:
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
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}
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
(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)
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
P =(x1 ,y1 )
Q=(x2 ,y2 ) x
x
P =(x1 ,y1 )
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):
– t = 0, sau
– t2 = 2p şi q = 2, sau
– t2 = 3p şi q = 3.
– 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
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α.
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
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
deci c1 = 1, c2 = 8.
184 CAPITOLUL 10. SISTEME DE CRIPTARE BAZATE PE CURBE ELIPTICE
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).
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 :
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ă.
√ √
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 .
c1 P + d1 Q = c2 P + d2 Q.
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.
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
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 );
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 · α;
((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.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
x=A·C
191
192 CAPITOLUL 11. ALTE SISTEME DE CRIPTARE CU CHEIE PUBLICĂ
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.
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
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).
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ă.
Î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:
1. Problema rucsacului (A, x) este rezolvabilă ı̂n timp liniar. Dacă soluţia există, ea
este unică.
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)
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
• (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Ă
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),
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}.
• 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.
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}
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 .
eK (a, e) = a · G0 + e
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Ă
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
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.
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Ă
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.7. Folosind parametrii din Exemplul ?? criptaţi mesajele x = (1, 1) şi y = (1, 0).
Capitolul 12
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ă).
xn = f (xn−1 ), x0 oarecare,
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.
ı̂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
f (x0 ) = z1 z2 . . . zm .
- 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;
LF SR2 - i0
EM U X -
LF SR3 - i1
6
LF SR1 -
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.
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 ([?]).
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 .
1. n ←− 4;
2. while n ≤ M AX do
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.
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 .
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 .
• 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ă 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.
12.7 Exerciţii
12.1. Se dă generatorul liniar congruenţial
Pentru ce valori ale perechii (a, b) ∈ Z15 × Z15 acest generator are perioadă maximă ?
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)
223
224 ANEXA 1. ALGORITMUL LUI EUCLID EXTINS
Se poate da acum algoritmul extins al lui Euclid, care pentru n > 1 şi b ∈ Zn∗ va
determina b−1 mod n (dacă există).
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
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
[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;
[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.
[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.
227
228 BIBLIOGRAFIE
[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
[23] Gibson J. - Discrete logarithm hash function that is collision free and one way. IEEE
Proceedings-E, 138 (1991), 407-410.
[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.
[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
[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.
[44] Salmon, D. - Data Privacy and Security, Springer Professional Computing, 2003
[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
[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
[62] http://www.answers.com/topic/vigen-re-cipher
Cuprins
Prefaţă 3
Bibliografie 227
Cuprins 232