Sunteți pe pagina 1din 710

Definitii de baza

Sisteme de criptare simetrice

Criptografie si securitate

Luciana Morogan

Facultatea de Matematica-Informatica
Universitatea Spiru Haret

Laboratoare

Laborator
Definitii de baza
Sisteme de criptare simetrice

Outline

1 Definitii de baza

2 Sisteme de criptare simetrice


Cifruri de permutare
Exercitii
Cifruri cu substitutie
Sisteme monoalfabetice
Sisteme polialfabetice

Laborator
Definitii de baza
Sisteme de criptare simetrice

Definitie generica

Criptografia =⇒ studiul metodelor matematice legate de


securitatea informatiei, capabile sa asigure
confidentialitatea
autentificarea
non-repudierea mesajelor
integritatea datelor vehiculate
Termenul criptografie =⇒ scriere secreta: format din
cuvintele grecesti cryptos 7→ ascuns si grafie 7→ scriere.
Domeniul cuprinde
operatia de criptare (cifrare) a unui text
eventualele incercari de descifrare si de aflare a cheii de
criptare
Procesul de determinare a unei chei folosind un text criptat
se numeste criptanaliza.

Laborator
Definitii de baza
Sisteme de criptare simetrice

Schema generala

Fig.1

Figure: Fig.1

Laborator
Definitii de baza
Sisteme de criptare simetrice

Definitie formala(1)

Un sistem de criptare este o structura (P, C, K , E, D)


P = {w|w ∈ V ∗ } este multimea textelor clare, scrise peste
un alfabet nevid V (uzual V = {0, 1}).
C = {α|α ∈ W ∗ } este multimea textelor criptate, scrise
peste un alfabet nevid W (uzual W = V ).
K este o multime de elemente numite chei.
Fiecare cheie κ ∈ K determina o metoda de criptare
eκ ∈ E si o metoda de decriptare dκ ∈ D
functiile eκ : P −→ C si dκ : C −→ P au proprietatea
dκ (eκ (w)) = w, w ∈ P
C = {α|∃w ∈ P, ∃κ ∈ K , α = eκ (w)}
Functia eκ este evident injectiva; daca eκ este bijectiva (si deci
dκ = eκ−1 ) atunci sistemul de criptare se numeste simetric.

Laborator
Definitii de baza
Sisteme de criptare simetrice

Definitie formala(2)

Pentru ca un sistem de criptare sa fie considerat bun, trebuie


indeplinite patru criterii (enuntate de Francis Bacon in sec.
XVII):
Fiind date eκ si w ∈ P, este usor de determinat eκ (w)
Fiind date dκ si α ∈ C, este usor de determinat dκ (α)
w este imposibil de determinat din α, fara a cunoaste dκ
(defineste vag ideea de securitate a sistemului)
Textul criptat trebuie sa fie un text banal, fara suspiciuni
(Aceasta conditie este utilizata astazi doar de un
subdomeniu strict al criptografiei, numit steganografie)

Laborator
Cifruri de permutare
Definitii de baza
Exercitii
Sisteme de criptare simetrice
Cifruri cu substitutie

Sisteme clasice
Sistemele de criptare clasice ↔ sisteme simetrice
odata cu aflarea cheii de criptare cheia de decriptare se
obtine imediat, fiind functia inversa

Clasificare
Sistemele de criptare simetrice se impart in doua clase mari
cifruri de permutare
cifruri cu substitutie

Laborator
Cifruri de permutare
Definitii de baza
Exercitii
Sisteme de criptare simetrice
Cifruri cu substitutie

Cifru de permutare: definitie formala


Fie n un numar natural nenul. Un cifru de permutare este un
sistem (P, C, K , E, D) unde P = C = (Z26 )n , K = Pn (multimea
permutarilor de n elemente). Pentru o cheie (permutare) π,

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

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

Criptarea
Textul clar se imparte in blocuri de n, n ≥ 2 caractere, si
fiecaruia i se va aplica o permutare prefixata.

Laborator
Cifruri de permutare
Definitii de baza
Exercitii
Sisteme de criptare simetrice
Cifruri cu substitutie

Exemplul 1 (1)

Fie cheia de criptare permutarea


 
1 2 3
2 1 3

Criptarea
Textul clar GRUPELE ANULUI III se imparte in grupuri de
cate trei caractere (consideram si caracterul spatiu, notat
•)
GRU PEL E•A NUL UI• III
Textul criptat va fi....?
si eliminand gruparile...?

Laborator
Cifruri de permutare
Definitii de baza
Exercitii
Sisteme de criptare simetrice
Cifruri cu substitutie

Exemplul 1 (2)

Solutia
Textul criptat va fi... RGU EPL •EA UNL IU• III
si eliminand gruparile... RGUEPL•EAUNLIU•III

Laborator
Cifruri de permutare
Definitii de baza
Exercitii
Sisteme de criptare simetrice
Cifruri cu substitutie

Exemplul 2: sistemul de criptare Hill (1929) (1)

Fie d ≥ 2 un numar intreg fixat. Definim


P = C = (Z26 )d
K = {M|M ∈ Md (Z26 ) , det(M) 6= 0}
O cheie de criptare este o matrice M patrata nesingulara de
dimensiune d, cu elemente din (Z26 ), iar M −1 formeaza
cheia de criptare.
Criptarea.Textul clar w se imparte in blocuri de lungime
d : w = α1 α2 . . . αn , |αi | = d
(ultimul bloc se completeaza - eventual - pana se ajunge la
dimensiunea d).
Textul criptat va fi
x = β1 β2 . . . βn , βi = eM (αi ) = αi · M(mod26), (1 ≤ i ≤ n).
Decriptarea. Se foloseste relatia dM (βi ) = βi · M −1 (mod26).

Laborator
Cifruri de permutare
Definitii de baza
Exercitii
Sisteme de criptare simetrice
Cifruri cu substitutie

Exemplul 2: sistemul de criptare Hill (1929) (2)


 
3 3
Consideram exemplul in care d = 2 si cheia M = a
2 5
 
15 17
carei inversa este matricea M = .
20 9
Daca w = FRAC, avem
   
α1 = F R = 5 17 si α2 = A C = 0 2
Din urmatoarele doua relatii  
 3 3
β1 = eM (α1 ) = α1 · M(mod26) = 5 17 · =
2 5
 
23 22 = X W
 
 3 3
β2 = eM (α2 ) = α2 · M(mod26) = 0 2 · =
2 5
 
4 10 = E K

Laborator
Cifruri de permutare
Definitii de baza
Exercitii
Sisteme de criptare simetrice
Cifruri cu substitutie

Exemplul 2: sistemul de criptare Hill (1929) (3)

Se obtine textul criptat x = XWEK .


Oscar criptanalistul varianta 1 (1)
Daca presupunem ca Oscar a gasit dimensiunea d = 2 si
incearca sa afle matricea M (M −1 ) cunoscand perechea (text
clar, text criptat) = (FRAC, XWEK), Oscar se afla in fata
urmatoarei probleme:
 
a b
M =?, M = , a, b, c, d ∈ 0, 1, ..., 25 astfel incat
c d
     
5 17 a b 23 22
· =
0 2 c d 4 10

Laborator
Cifruri de permutare
Definitii de baza
Exercitii
Sisteme de criptare simetrice
Cifruri cu substitutie

Exemplul 2: sistemul de criptare Hill (1929) (4)

Oscar criptanalistul varianta 1 (2)


Pentru
 aflarea
 lui M, Oscar trebuie sa afle inversa lui
5 17
.
0 2
 
5 17
Cum determinantul matricii este 10 si
0 2
cmmdc(10, 26) > 1
⇒ 10−1 (mod26) nu exista ⇒ matricea nu este inversabila.

Laborator
Cifruri de permutare
Definitii de baza
Exercitii
Sisteme de criptare simetrice
Cifruri cu substitutie

Exemplul 2: sistemul de criptare Hill (1929) (5)

Oscar criptanalistul varianta 2: ipoteza atacului cu text clar


ales (1)
Oscar alege un text clar a carui matrice este inversabila si ii afla
criptarea.
Fie BRAD
 acest
 text clar. Matricea asociata acestuia este
1 17
A= .
0 3
Oscar solicita criptarea
 lui BRAD si primeste LKGP cu matricea
11 10
B= ⇒ Oscar dispune acum de perechea (BRAD,
6 15
LKGP).  
−1 1 3
Determinand pe A = si apoi ecuatia A · M = B, va
0 9
     
−1 1 3 11 10 3 3
gasi solutia M = A · B = · =
0 9 6 15 2 5
Laborator
Cifruri de permutare
Definitii de baza
Exercitii
Sisteme de criptare simetrice
Cifruri cu substitutie

Exemplul 2: sistemul de criptare Hill (1929) (6)

Oscar criptanalistul varianta 2: ipoteza atacului cu text clar


ales (2)
 
1 2 3
Permutarii ii corespunde matricea de permutare
2 1 3
 
0 1 0
 1 0 0 
0 0 1
Opertatia de criptare este imediata si criptarea textului FLO
este  
 0 1 0 
5 11 14 ·  1 0 0  = 11 5 14
0 0 1
adica LFO.

Laborator
Cifruri de permutare
Definitii de baza
Exercitii
Sisteme de criptare simetrice
Cifruri cu substitutie

Exercitiul 1

Determinati inversele matricilor (modulo 26)

1
 
2 5
3 1

2
 
7 3 5
 1 8 2 
2 2 4

Laborator
Cifruri de permutare
Definitii de baza
Exercitii
Sisteme de criptare simetrice
Cifruri cu substitutie

Exercitiul 2

Criptati un text clar la alegere folosind sistemul de criptare


Hill cu matricea

1
 
17 17 5
 21 18 21 
2 2 19

sau
2
 
5 11 5
 2 14 1 
2 4 9

Laborator
Cifruri de permutare
Definitii de baza
Exercitii
Sisteme de criptare simetrice
Cifruri cu substitutie

Exercitiul 3

Fie cifrul de permutare: Se fixeaza numerele naturale p, q.


Textul clar se imparte in blocuri de cate p ∗ q caractere.
Fiecare astfel de bloc se scrie pe liniile unei matrici de p
linii si q coloane. Criptarea blocului se realizeaza scriind
aceste matrici pe coloane.

Exemplu: pentru p = 3, q = 4, textul clar


MAINI CURATE se scrie
M A I N
I C U R
A T E X
(spatiile se completeaza cu litera X). Textul
criptat va fi MIAACTIUENRX.

Decriptati textul DTREAECRURESIAIPAT


Laborator
Cifruri de permutare
Definitii de baza
Exercitii
Sisteme de criptare simetrice
Cifruri cu substitutie

Cifruri cu substitutie

sisteme monoalfabetice: substituie fiecare caracter cu alt


caracter, totdeauna acelasi indiferent de pozitie
sistemul de criptare Polybios
sistemul cavalerilor de Malta
sistemul de criptare afin
criptanaliza
sisteme polialfabetice: substitutia unui caracter variaza in
text in functie de diversi parametrii
sistemul de criptare Vigenere
criptanaliza
exercitii

Laborator
Cifruri de permutare
Definitii de baza
Exercitii
Sisteme de criptare simetrice
Cifruri cu substitutie

Sistemul de criptare Polybios (1)


Consideram alfabetul latin, din care eliminam o litera de frecventa cat mai
redusa; fie aceasta W . Cele 25 litere ramase le asezam intr-un patrat 5 x 5
(numit careu Polybios) ca mai jos.
In operatia de criptare, fiecare caracter a va fi reprezentat printr-o pereche
(x, y ) (x, y ∈ {A, B, C, D, E}) care dau linia respectiv coloana pe care se afla
a.

Laborator
Cifruri de permutare
Definitii de baza
Exercitii
Sisteme de criptare simetrice
Cifruri cu substitutie

Sistemul de criptare Polybios (2)

Exemplu
Textul clar UNIVERSITATE este criptat in
EACDBDEBAEDCDDBDDEAADEAE.
Deci sistemul de criptare Polybios este o substitutie
monoalfabetica cu alfabetul W = {AA, AB, AC, ..., EE} de 25
caractere.

Laborator
Cifruri de permutare
Definitii de baza
Exercitii
Sisteme de criptare simetrice
Cifruri cu substitutie

Sistemul de criptare afin (1)

P = C = (Z26 )
K = (a, b)|a, b ∈ Z26 , cmmdc(a, 26) = 1
pentru k ∈ K , k = (a, b) definim
functia de criptare: ek (x) = ax + b(mod26) = y
functia de decriptare: dk (y ) = a−1 y + a−1 (26 − b)(mod26)
(cum (a, 26) = 1, ∃a−1 ∈ Z26 )
Stim ca literelor alfabetului le corespund cifrele de la 0 la 25:

A B C D E F G H I J K L M N
0 1 2 3 4 5 6 7 8 9 10 11 12 13

O P Q R S T U V W X Y Z
14 15 16 17 18 19 20 21 22 23 24 25

Laborator
Cifruri de permutare
Definitii de baza
Exercitii
Sisteme de criptare simetrice
Cifruri cu substitutie

Sistemul de criptare afin (2)

Exemplu
Pentru a = 3, b = 5 avem
e(3,5) (x) = 3x + 5
d(3,5) (y ) = 9y + 9(26 − 5)(mod26) = 9y + 7 deoarece 3−1 = 9(mod26)
Sa luam textul clar GRUPA.
 Codificarea acestuia este reprezentata de
6 17 20 15 0 . Avem:
e(3,5) (6) = 23(mod26) = 23
e(3,5) (17) = 56(mod26) = 4
e(3,5) (20) = 65(mod26) = 13
e(3,5) (15) = 50(mod26) = 24
e(3,5) (0) = 5(mod26) = 5
deci textul criptat este reprezentat
 de 
23 4 13 24 5 = X E N Y F (Decriptarea se
realizeaza analog.)

Laborator
Cifruri de permutare
Definitii de baza
Exercitii
Sisteme de criptare simetrice
Cifruri cu substitutie

Sistemul de criptare Vigenere (1)

Consideram, ca la sistemele anterioare, cele 26 litere ale


alfabetului, numerotate de la 0 (pentru A) pana la 25 (pentru Z).
Definim
P = C = Z26
+
K = Z26 unde o cheie k ∈ K este un cuvant avand
codificarea numerica 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(modp) (mod26)

Laborator
Cifruri de permutare
Definitii de baza
Exercitii
Sisteme de criptare simetrice
Cifruri cu substitutie

Sistemul de criptare Vigenere - exemplu (2)

Criptare (1)
Sa consideram cuvantul cheie
 GRUPA; deci p = 5 si
k = 23 4 13 24 5 . Daca vrem sa criptam cu aceasta
cheie textul clar CRIPTOGRAFIE, vom proceda astfel:
Codificarea textului este a = 2 17 8 15 19 14 6 17 0 5 8 4.
Sub fiecare numar din a se aseaza cate un numar din k ;
cand cheia se termina, ea se reia ciclic, pana se termina a
Linia a treia va contine suma modulo 26 a numerelor de pe
primele doua linii, iar pe ultima linie s-a scris textul criptat
rezultat

Laborator
Cifruri de permutare
Definitii de baza
Exercitii
Sisteme de criptare simetrice
Cifruri cu substitutie

Sistemul de criptare Vigenere - exemplu (3)

Criptare (2)
 
2 17 8 15 19 14 6 17 0 5 8 4
 23 4 13 24 5 23 4 13 24 5 23 4 
 
 25 21 21 13 24 11 10 4 24 10 5 8 
Z V V N Y L K E Y K F I

Decriptare
Decriptarea se realizeaza similar, scazand (modulo 26) din
codul caracterului criptat, codul caracterului corespunzator din
cheie.

Laborator
GENERATORI DE
NUMERE PSEUDO-
ALEATOARE
Asist. Drd. Morogan Maria Luciana
Ideal ar fi ca secretele cerute in algoritmii criptografici si
protocoale sa fie generate cu un generator de numere pur aleatoare.

Un asemenea generator necesita un mediu capabil sa ofere


numere aleatoare.

Creearea unui dispozitiv hardware sau a unui program


software in vederea exploatarii acestui mediu si producerii unei
secvente de biti in care anumite valori sa nu apara mai des decat altele
(ne vom referi la secventa in care anumite valori apar mai des decat
altele folosind termenul de bias) este o sarcina dificila.
Cuprins
1. Background teoretic
2. Generatori de numere pseudo – aleatoare
1. Generatori simplii de numere pseudo-aleatoare
2. Generatori bazati pe LFSR
3. Alti generatori de numere pseudo-aleatoare
3. Modelul teoretic de verificare a securitatii unui
generator
4. Teste statistice de validare
1. Distributia normala si distributia χ 2

2. Postulatele lui Golomb


3. Teste statistice de baza
4. Testul statistic universal al lui Maurer
Background teoretic

Un generator de biti aleatori este un dispozitiv sau un algoritm prin a carui iesire rezulta o
secventa de cifre binare independente din punct de vedere statistic, secventa in care probabilitatea de emitere
a valorii 1 este de exact 1 ( Termenul folosit in limba engleza pentru o secventa de acest tip este cel de
2
unbiased ).
Deci, un generator de biti pseudo-aleatori este un algoritm determinist[1] (in sensul ca fiind dat
acelasi sir de valori, generatorul va produce intotdeauna la iesire aceeasi secventa) prin care, fiind data o
secventa pur aleatoare binara de lungime k la intrare, la iesire va genera o secventa binara de lungime l, unde l
este mult mai mare decat k, secventa care “pare” a fi aleatoare.

Definitie formala : fie intregii strict pozitivi k si l, l ≥ k+1, ( unde l este obtinut din k prin
aplicatii polinomiale). Un (k, l)-generator de numere pseudo-aleatoare (pe scurt un (k, l)-PRBG), este o
functie f :Z 2k → Z 2l calculabila in timp polinomial[2] (in functie de k). Intrarea s0 ∈ Z 2k se numeste secventa initiala
de intrare, in timp ce iesirea f ( s0 ) ∈ Z 2l este numita secventa pseudo-aleatoare.

[1] Din punct de vedere informatic, un algoritm determinist este un algoritm a carui comportare este
previzibila. Fiind date aceleasi date particulare de intrare, algoritmul va produce la iesire acelasi rezultat
corect, iar masina pe care ruleaza acesta, va trece intotdeauna prin aceeasi secventa de stari.
[2] Timpul polinomial este timpul de calcul al functiei, timp marginit de un polinom de lungime l al secventei
de iesire.
In studiul securitatii unui sistem criptografic exista doua abordari fundamentale:

 Securitatea calculabila[1] care masoara cantitatea de calcul


necesar pentru spargerea unui sistem. Vom spune ca un sistem
este sigur in sensul teoriei complexitatii[2] daca cel mai bun
algoritm pentru spargerea sistemului necesita N operatii, unde N
este un numar foarte mare.
 Securitatea neconditionata masoara securitatea sistemului fara
limita a cantitatii de calcule pe care un adversar este capabil sa
le faca. Un procedeu este neconditionat sigur daca nu poate fi
spart, nici cu o putere de calcul infinita.

[1] Computational security


[2] Computationally secure
Este important de studiat informatia care poate
avea relevanta pentru un adversar in realizarea unui
atac cu text cunoscut si intr-un timp arbitrar de
calcul. Instrumentul de baza in studierea acestei
probleme il reprezinta notiunea de entropie
( Shannon, 1948, teoria informatiei).

In general, pentru un sir binar, avem:

entropia = log (numarul sirurilor posibile)

(log se refera la un logaritm in baza 2)


Generatori de numere pseudo – aleatoare

Alta clasificare:
Din punctul de vedere
al securitatii:  generatori simplii
 Generatorul liniar congruential
 Generatori Ranrot
 Generatorul Blum – Blum – Shub
 Generatori siguri  generatori bazati pe LFSR
 Generatorul Geffe
 ANSI X9.17  Generatori de tip “Stop-and-go”
 Generatorul Stop-and-go alternativ
 FISP 186  “clasa” separata
 Generatorul Mother-of-all
 Generatorul Blum – Micali
Generatorul1/p
 Generatori nesiguri: 

 Generatorul RSA
 Micali-Schnorr
 Blum-Blum-Schub
Generatori simplii de
numere pseudo-aleatoare
Generatorul liniar congruential
Face parte din clasa generatorilor nesiguri.

Un exemplu ilustrativ :

Luam M=31, a=3 si b=5. Obtinem un (5, 10) - PRBG cu un


generator liniar congruential.
Daca consideram aplicatia s → (3s + 5) mod 31 , avem 13 → 13, iar
celelate 30 de resturi sunt permutari dupa un ciclu de lungime 30 in
ordinea urmatoare: 0, 5, 20, 3, 14, 16, 22, 9, 1, 8, 29, 30, 2, 11, 7, 26,
21, 6, 23, 12, 10, 4, 17, 25, 18, 28, 27, 24, 15, 19.
Daca valoarea initiala este diferita de 13, aceasta defineste un
punct de plecare in acest ciclu, si urmatoarele 10 elemente reduse
modulo 2 formeaza sirul de numere pseudo-aleatoare.
Urmarind acest procedeu, cele 31 de siruri de numere pseudo-
aleatoare posibile sunt reprezentate in urmatorul tabel:
Generatori Ranrot
Definiti de Agner Fog[1], acestia se bazeaza pe
generatoare de numere Fibonacci[2], impreuna cu
operatia de rotatie pe biti. Se cunosc trei tipuri de
astfel de generatoare, iar relatiile dupa care se
definesc sunt urmatoarele:
 f0 = 0

 f1 = 1
f = f + f
 n +1 n n −1

[1] Agner Fog a definit in 1977 generatorii Ranrot, initial pentru algoritmi de tip Monte Carlo.
Mai multe informatii se gasesc pe internet la adresa http://www.agner.org/random/theory
[2] Sirul numerelor lui Fibonacci este dat de relatia de recurenta:
Generatorul Blum – Blum – Shub

Unul dintre cele mai des utilizate generatoare de


numere pseudo-aleatoare,este acest generator.
Generatorul Blum – Blum – Shub se bazeaza pe
problema resturilor patratice, al carei enunt este urmatorul:

Fie un intreg n = pq, unde p si q sunt numere prime


necunoscute si fie
x
x ∈ Z astfel incat   = 1
*
n
n
Intrebare: este x un rest patratic modulo n?
Definitie. Fie p si q doua numere prime. Daca
p ≡ q ≡ 3(mod 4)

atunci numarul n = pq se numeste intreg


Blum.
Algoritmul BBS prezentat ca un (k, l)-
PRBG este urmatorul:
Fie p si q doua numere prime, intregi Blum de
k/2 biti si fie n = pq. QR(n) reprezinta
ansamblul de resturi patratice modulo n.
Fie valoarea initiala: s0 ∈ QR (n), pentru i ≥ 0
si +1 = s mod n
2
i
unde
f ( s0 ) = ( z1 , z2 ,..., zl )
zi = si mod 2, pentru 1 ≤ i ≤ l.
Generatorul Blum – Blum – Shub este considerat un
generator sigur din punct de vedere criptografic, in acest
moment, fiind dealtfel considerat drept cel mai bun generator de
numere pseudo-aleatoare pentru protocoale de generare si
distributie a cheii.

Securitatea acestuia se bazeaza pe dificultate factorizarii


lui n.

n poate fi facut public (oricine poate genera o secventa


pseudo-aleatoare pe baza lui). Iar daca n nu se descompune in
factori, nimeni nu poate prezice iesirea.

Mai mult, fiind data o parte a secventei, nu exista nici o


modalitate de a prezice bitul anterior sau pe cel ulterior
secventei.
Generatori bazati pe LFSR
Un LFSR( Linear Feedback Shift Register ) este un
circuit liniar[1] format dintr-un registru serial si o functie de
intoarcere ( feedback ). Daca registrul este compus din n flip-
flopuri, vom avea un n – LFSR.

Sa consideram m registrii seriali Rm , Rm −1 ,..., R0 al caror


continut este fie 0 fie 1, care pot fi considerati dispozitive de
memorare cum ar fi flip-flopuile.

Consideram valorile initiale x0 , x1 ,..., xm −1


Un ceas electronic controleaza procesul.
La primul puls al ceasului, intrarea xm −1 este impinsa
spre dreapta pentru a ocupa registrul Rm −.2
Simultan, xm − 2 devine noua intrare in Rm−3, si asa mai departe,
pana la elementul cel mai din dreapta care va fi transferat
secventei de iesire.
De exemplu, pentru m=5 si configuratia initiala
x4 = 1, x3 = 0, x2 = 0, x1 = 1, x0 = 1

in care reprezentarea este urmatoarea:


1 0 0 1 1

R4 R3 R2 R1 R0

iar dupa primul puls al ceasului vom avea urmatoarea


configuratie: 1 0 0 1

R4 R3 R2 R1 R0

( x4 , x3 , x2 , x1 , x0 ) → ( −, x4 , x3 , x2 , x1 )
Secventa de iesire in acest moment consta in valoarea 1.
Simbolic: Aceasta secventa de elemente este numita satare
a vectorului.
In general, o relatie de recurenta (binara)
de lungime m (corespunzatoare a m registrii),
este o relatie de forma: m −1
xi + m = ∑ c j xi + j
j =0

m ≥ 0 este un intreg pozitiv fixat egal cu


numarul registrilor, toate variabilele xi sunt
binare si c0 = 1. Pentru i = 0 avem:
xm = cm−1 xm−1 + cm− 2 xm − 2 + ... + c1 x1 + c0 x0

Cele m numere cm−1 , cm−2 ,.., c0 binare se numesc


coeficientii recurentei.
Relatia de recurenta de mai sus poate fi
generata de un LFSR de lungime m si este
usor de implementat atat in software cat si in
hardware si poate fi reprezentata prin
schema de mai jos:
Generatorul Geffe

Generatorul Geffe combina, neliniar, trei LFSR, cel de al


treilea fiind folosit pentru a “alege” daca bitul rezultat provine din
primul registru sau din al doilea.
Sa consideram schema urmatoare a unui generator Geffe:

LFSR2 0

EMUX

LFSR3 1

LFSR1
Aici, LFSR1 formeaza functia de selectie a multiplexorului[1] elementar,
intrarile fiind asigurate de celelalte doua LFSR-uri.
Daca a1 , a2 , a3 sunt iesirile corespunzatoare celor trei LFSR-uri,
iesirea generatorului Geffe este data de relatia

b = (a1 ∧ a2 ) ⊕ (a1 ∧ a3 )
Perioada generatorului este cel mai mic multiplu comun al perioadelor
celor trei LFSR-uri. Deci, daca cele trei polinoame care definesc circuitele au
grade prime intre ele, perioada generatorului Geffe este produsul celor trei
perioade.

[1] Multiplexorul este un disozitiv logic care selecteaza o intrare dintr-un sir de intrari
in conformitate cu valoarea unei alte intrari a indexului. Secventele bazate pe
folosirea multiplexoarelor sunt destul de populare datorita faptului ca sunt relativ
rapide. Generatorul de chei este descris, conventional, ca folosind doua
secvente si multiplexorul este folosit pentru a combina cele doua secvente intr-
un mod neliniar.
Generatori de tip “Stop-and-go”
Generatorul Stop-and-go alternativ
Generatorul Beth-Piper (dupa numele foloseste tot trei LFSR-uri de lungimi diferite
autorilor) care controleaza ceasurile celor trei legate intr-un circuit de forma:
circuite. Structura sa este urmatoarea:

Ceasul de intrare in LFSR2 este Daca iesirea din LFSR1 este 1, atunci
controlat de iesirea din LFSR1 si, astfel, LFSR2 se activeaza LFSR2; altfel se activeaza LFSR3.
isi schimba starea la momentul t daca iesirea Iesirea finala din generator este reprezentata de
din LFSR1 era 1 la momentul t-1. un XOR intre cele doua iesiri.
Alti generatori de numere
pseudo-aleatoare
Generatorul Mother-of-all

Este un generator propus de George Marsaglia,


si consta in alegerea initiala a cinci numere intregi, nu
toate nule, memorate pe 32 de biti fiecare.
Generatorul Blum – Micali

Fie g un numar prim si p un numar prim


impar si fie x0 o valoare initiala.
Se genereaza numerele
xi +1 = g xi (mod p )
Iesirea din generator este
p −1
 1,daca xi <
2
 0, altfel.
Generatorul RSA

Fie n = pq, unde p si q reprezinta doua


numere prime mari.
Fie e un numar astfel incat
(e, (p - 1)(q - 1) ) = 1 si x0 o valoare initiala
astfel incat x0 < n. Se defineste relatia
xi +1 = x (mod n)
e
i

Iesirea generatorului este zi = xi (mod 2)


Generatorul1/p
Secventa de numere pseudo-aleatoare este generata prin
extinderea fractiei 1/p la o baza b unde p si b sunt relativ prime
[1].

[1] Fie a si b doua numere intregi, acestea sunt relativ prime


daca si numai daca (a, b) = 1.
MODELUL TEORETIC DE
VERIFICARE A SECURITATII
UNUI GENERATOR
Exista doua cerinte generale legate de securitatea unui
generator de numere pseudo-aleatoare:

 secventa rezultat a unui PRBG ar trebui sa


fie inseparabila, din punct de vedere
statistic, de o secventa de numere pur
aleatoare
 bitii rezultat ar trebui sa fie imprevizibili pentru
un adversar care dispune de resurse de
calcul limitate
Definitie. Fie X n , Yn doua distributii de probabilitate[1] pe {0,1}n
Prin t ∈ X n intelegem ca t este ales astfel incat
∀z ∈ {0,1}n , Pr[ x = z ] = X n ( z )

Spunem ca { X n } este inseparabil in timp polinomial de {Yn }


daca pentru orice algoritm probabilist A si orice polinom Q
exista n0 astfel incat ∀n, n > n0 , avem:
1
| Prt∈X n ( A(t ) = 1) − Prt∈Yn ( A(t ) = 1) |<
Q ( n)

Adica, conditia de inseparabilitate spune ca pentru siruri


suficient de lungi nu exista un algoritm probabilist care sa
decida daca sirul a fost selectat dupa distributia X n sau Yn

[1] O distributie de probabilitate pe o multime S este o


functie D : S → [0,1] ⊂ R astfel incat
∑ D( s ) = 1 s∈S
Notam distributia aleatoare uniforma cu U n si deci, pentru
orice α ∈ {0,1}n
avem 1
Prx∈U n ( x = α ) = n
2

Definitie. Spunem ca sirul X n este pseudo-aleator daca este


inseparabil in timp polinomial de U n , si deci pentru orice
algoritm probabilist A si orice polinom Q exista n0 astfel incat
∀n, n > n0 , avem:

1
| Prt∈X n ( A(t ) = 1) − Prt∈U n ( A(t ) = 1) |<
Q ( n)
Definitie. Algoritmul A din cele doua definitii anterioare este numit test
statistic. Exemple de astfel de teste se vor gasi in continuarea lucrarii de
fata.

Observatie. Daca exista A si Q astfel incat conditiile definitiei de mai


sus sunt incalcate, spunem ca X n pica, sau esueaza testul A.

Putem acum da urmatoarea definitie:

Definitie. Spunem ca un generator de biti pseudo-aleatoare trece toate


testele statistice in timp polinomial[1], teste ce vor fi detaliate mai tarziu,
daca nici un algoritm nu reuseste, in timp polinomial, sa faca distinctia
intre o secventa de iesire a generatorului si o secventa pur aleatoare de
aceeasi lungime cu o probabilitate semnificativ mai mare de ½.

[1] Timpul de rulare al testului este limitat de un polinom de lungime l al


secventei de iesire.
Definitie. Un program determinist in timp polinomial
G :{0,1}k → {0,1} p este un generator de numere pseudo-aleatoare
daca sunt indeplinite
urmatoarele conditii
1. p > k ;
2. {G p } peste pseudo-aleator, unde G p este distributia pe {0,1} p
obtinuta astfel:
pentru a obtine t ∈ G p :

a. se alege x ∈ Gk
b. se defineste t = G(x).

Adica, pentru orice algoritm probabilist A, orice polinom Q si


orice k suficient de mare, avem:
1
| Prt∈G p ( A(t ) = 1) − Prt∈U p ( A(t ) = 1) |<
Q( p )
Testul bitului urmator
Definitie. Testul bitului urmator este acel test
statistic care ia ca intrare prefixul unei secvente si in
urma caruia rezulta o predictie a urmatorului bit.

Definitie. Spunem ca un generator de numere


pseudo-aleatoare trece testul urmatorulu bit daca
nu exista algoritm in timp exponential care, la
intrarea primilor l biti ai unei secvente de iesire s, sa
poata prezice cei (l+1) biti ai lui s cu probabilitatea
semnificativ mai mare decat ½.
k
Formal, notam cu k probabilitatea de distributie pe {0,1} .
Definitie. Spunem ca un generator de numere pseudo-
aleatoare trece testul urmatorulu bit daca pentru orice polinom
Q, exista un intreg k0 astfel incat pentru orice p > k0 si m < p
avem 1 1
| Prt∈G p [ A(t1t2 ...tm ) = tm +1 ] |< +
2 Q(k )
Fapt (universalitatea testului bitului urmator). Un generator de
numere pseudo-aleatoare trece testul urmatorului bit daca si
numai daca trece toate testele statistice in timp polinomial.

Definitie. Un PRBG care trece testul urmatorului bit este


numit un generator criprografic sigur de biti pseudaleatori[1].

[1] Cryptographically secure pseudorandom bit


generator(CSPRBG).
TESTE STATISTICE DE
VALIDARE
Distributia normala si distributia χ 2

Distributia χ
2
Distributia normala
Definitie. O variabila aleatoare (continua) X
are o distributie normala de medie µ si
varianta σ , daca densitatea sa de Definitie. Fie v ≥ 1 un intreg. O variabila
2
aleatoare (continua) X are o distributie χ cu
2
probablitate este definita astfel:
v grade de libertate daca functia sa de
densitate probablistica este definita astfel:
1  −( x − µ ) 2   1
f ( x) = exp   , −∞ < x < ∞  x ( v / 2)−1 e − x / 2 , 0 ≤ x < ∞
σ 2π 2σ 2 f ( x) =  Γ(v / 2)2 v/2
 
 0, x < 0

Notatam X cu N (µ ,σ 2 )
unde Γ reprezinta functia gamma[1].
Daca X este N(0,1), atunci spunem ca X
are o distributie normala standard.
Media si varianta acestei distributii sunt µ =v
si σ 2 = 2v .
Fapt. Daca variabila aleatoare X este Fapt. Daca variabila aleatoare X este N ( µ , σ )
2

N ( µ , σ 2 ) , atunci variabila aleatoare , σ 2 > 0 atunci variabila aleatoare Z = ( X − µ ) 2 / σ 2


are o distributie χ cu 1 grad de libertate.
2

Z = (X − µ) /σ In particular, daca X este N(0,1), atunci Z = X


2

are o distributie χ cu 1 grad de libertate.


2

este N(0,1). ∞


t −1 − x
[1] Functia gamma este definita prin Γ (t ) = x e dx
unde t > 0. 0
Postulatele lui Golomb

Una din primele incercari in a stabili


cateva conditii necesare unor secvente
periodice pseudoaleatoare sa para intr-
adevar aleatoare, o reprezinta postulatele lui
Golomb. Aceste conditii sunt insa departe de
a fi suficiente pentru ca aceste secvente sa
para aleatoare, cu o singura exceptie: toate
secventele sunt binare.
Teste statistice de baza

Fie o secventa binara de lungime n:


s = s0 , s1 , s2 ,..., sn −1
Urmatoarele teste statistice determina daca
secventa binara s poseda sau nu anumite
caracteristici cum ar fi cele pe care ar trebui
sa le detina o secventa binara de numere pur
aleatoare.
Testul de frecventa (testul monobit)

Scopul acestui test este de a determina daca


numarul de 1 si, respectiv de 0, este acelasi
care ar trebui sa fie in cazul in care secventa
in cauza este aleatoare.
Testul serial (testul doi - biti)

Scopul acestui test este de a determina daca


numerele aparitiilor subsirurilor 00, 01, 10 si
11 ca subsiruri ale lui s sunt aproximativ
aceleasi, ceea ce se asteapta dealtfel de la o
secventa aleatoare.
Testul poker
n
Fie m un intreg pozitiv astfel incat  m  ≥ 5 ⋅ 2 m

n
si fie k =  m  . Se imparte secventa s in k
subsecvente, fiecare de lungime m si se
considera ni numarul aparitiilor celui de-al i-
lea tip de astfel de secventa, unde 1 ≤ i ≤
. 2 m

Testul poker determina daca fiecare secventa


de lungime m apare de un aproximativ
acelasi numar de ori in s, asa cum se
asteapta dealtfel de la o secventa aleatoare
de biti.
Testul de tip run

Determina daca numarul sirurilor de tip run


(numarul de zerouri sau de unu) de lungimi
diferite ale sirului s este acelasi cu cel al unui
sir aleator.
Testul de autocorelare

Scopul acestui test este de a verifica


eventualele corelatii dintre secventa s si
versiunea shiftata (versiunea lui s in care
aceasta secventa a fost modificata prin
aplicarea unor operatii de deplasare la
stanga sau la dreapta pe biti) eventual
neciclica, a acestuia.
Testul statistic universal al lui Maurer

Ideea de baza ce sta la baza testului statistic al lui Maurer


consta in aceea ca nu ar trebui sa se poata compresa
semnificativ si fara pierderi de informatie o secventa s de iesire a
unui generator de numere aleatoare.

In acest sens, daca o anumita secventa de iesire a unui


generator poate fi comprimata semnificativ, acesta din urma ar
trebui sa fie respins ca nefiind un bun generator.

In schimbul compresiei unei secvente s, testul statistic


universal calculeaza o cantitate care sa fie compatibila cu
lungimea secventei comprimate.
Universalitatea testului
statistic universal al lui Maurer
apare deoarece acest test este
capabil sa detecteze, orice defect
apartinand unei clase vaste de
posibile defecte pe care le poate
avea un generator.
Bibliografie
 Douglas Stinson, Cryptographie Theorie et pratique, International Thompson Publishing France, Paris
1996.
 Aiden A. Bruen, Mario A. Forcinito, Cryptography, Information Theory, and Error-Correction: a handbook
for the 21st century, Wiley-Interscience, John Wiley&Sons, Inc., Hoboken, New Jersey.
 A. Menezes, P. van Oorschot, S. Vanstone, Handbook of Applied Cryptography, CRC Press, 1996, pentru
mai multe informatii: www.cacr.math.uwaterloo.ca/hac
 A. Atanasiu, Crptografie, Note de Curs, disponibil la adresa de internet: http://
www.galaxyng.com/adrian_atanasiu/cript.htm
 S. Goldwasser, M. Bellare, Lecture Notes on Cryptography, Cambridge, Massachusetts, August 2001.
 M. J. Robshaw, Stream Ciphers, RSA Laboratories Tehnical Report TR-701, Version 2.0-July 25, 1995
 R. Davies, Hardware random number generators, articol prezentat lacea de a 15-a Australian Statistics
Conference in Julie, 2000 si la cea de-a 51-a Conference of the NZ Statistical Association in Septembrie,
2000, disponibil la adresa de internet http://www.robertnz.net/hwrng.htm
 J. Viega, Practical Random Number Generation in Software, in Proc. 19th Annual Computer Security
Applications Conference, Decembrie, 2003.
 www.agner.org/random/theory
 http://www.cs.utk.edu/~langston/projects/papers/ssst03.pdf
 http://www.crypto.wpi.edu/Research/truerandom.shtml
 http://www.cs.berkeley.edu/~daw/rnd/
Preview Sisteme sincrone Sisteme asincrone

Sisteme de criptare fluide

Luciana Morogan

Facultatea de Matematica-Informatica
Universitatea Spiru Haret

Laborator
Preview Sisteme sincrone Sisteme asincrone

Outline

1 Preview

2 Sisteme sincrone

3 Sisteme asincrone
Preview Sisteme sincrone Sisteme asincrone

Sisteme de criptare

Sistemele de criptare:
bloc(block cyphers)
elemente succesive ale textului clar sunt criptate folosind
aceeasi cheie de criptare
daca x = x1 x2 x3 . . . atunci
y = y1 y2 y3 . . . = ek (x1 )ek (x2 )ek (x3 ) . . .
fluide(stream cyphers)
sincrone
asincrone
Preview Sisteme sincrone Sisteme asincrone

Definitii formale (1)

Fie M = (P, C, K, E, D) un sistem de criptare. Secventa de


simboluri k1 k2 k3 · · · ∈ K + se numeste cheie fluida.
M = (P, C, K, E, D) este un sistem de criptare fluid daca
cipteaza textul clar x = x1 x2 x3 . . . in
y = y1 y2 y3 . . . = ek1 (x1 )ek2 (x2 )ek3 (x3 ) . . ., unde k1 k2 k3 . . .
este o cheie fluida din K +
Preview Sisteme sincrone Sisteme asincrone

Definitii formale (2)

Problema generala: generarea cheii fluide cu ajutorul unui


generator numit generator de chei fluide
Obs! Daca
cheia fluida este aleasa aleator si nu mai este foloita
ulterior
lungimea cheii = lungimea textului clar
Atunci sistemul de criptare se numeste one-time-pad
Preview Sisteme sincrone Sisteme asincrone

Definitie formala

Un sistem de criptare fluid sincron este o structura


(P, C, K, L, E, D) unde
Fie P, C, K sunt multimi finite, nevide, ale caror elemente
se numesc texte clare, texte criptate si, respectiv, chei
L este o multime finita, nevida numita alfabetul sirului de
chei
se defineste g : K → L+ generatorul de chei fluide astfel
incat ∀k ∈ K avem g(k ) = k1 k2 k3 · · · ∈ K + cheia fluida
(teoretic infinita)
∀z ∈ L,
exista regula de criptare ez ∈ E
exista regula de decriptare dz ∈ D
astfel incat ∀x ∈ P, dz (ez (x)) = x
Preview Sisteme sincrone Sisteme asincrone

Exemplu: Sistemul de criptare Vigenere

Descrierea sistemului
m lungimea cuvantului cheie
P, C, K=Z26 , K= (Z26 )m
ez (x) = x + z(mod26), dz (y ) = y − z(mod26)
cheia z1 z2 . . . definita prin

ki dc 1 ≤ i ≤ m
zi =
zi−m dc i ≥ m + 1

va genera din cheia fixa K = (k1 , k2 , . . . , km ), cheia fluida


k1 , k2 , . . . , km k1 , k2 , . . . , km k1 , k2 , . . .
Preview Sisteme sincrone Sisteme asincrone

Criptarea si decriptarea

Se realizeaza ca un automat descris de


qi+1 = δ(qi , k ), zi = g(qi , k ), yi = h(zi , xi ) unde:
q0 - starea initiala determinata din cheia k
δ - functia de tranzitie a starilor
g - functia ce produce cheia fluida zi
h - functia iesire care produce textul criptat yi pe baza
textului clar xi si a cheii fluide zi
Preview Sisteme sincrone Sisteme asincrone

Criptarea si decriptarea: schematic

Criptarea
Preview Sisteme sincrone Sisteme asincrone

Decriptarea: schematic

Decriptarea
Preview Sisteme sincrone Sisteme asincrone

Observatii

Sistemul de criptare bloc este un caz particular de sistem


de criptare fluid: ∀i ≥ 1, zi = k
(Sincronizare.) Cel care trimite mesajele si cel ce urmeaza
a le primi trebuie sa isi sincronizeze cheia fluida pentru a
obtine o criptare/decriptare corecta. Daca in timpul
transmisiei sunt inserati sau eliminati biti in textul criptat,
atunci decriptarea esueaza si poate fi reluata pe baza unor
tehnici de resincronizare (de exp. reinitializarea)
Modificarea unui bit din textul criptat (fara a se elimina sau
adauga nimic) nu afecteaza decriptarea altor caractere
(nepropagarea erorii)
Adversarul activ care elimina, insereaza sau retrimite
componente ale mesajului provoaca desincronizari si va
fidetectat la receptie
Preview Sisteme sincrone Sisteme asincrone

Sistemul aditiv fluid binar de criptare

Un sistem aditiv fluid binar de criptare este un sistem fluid


sincron in care P = C = L= Z2 iar h reprezinta functia XOR

Criptare Decriptare
Preview Sisteme sincrone Sisteme asincrone

Sistemul aditiv fluid binar de criptare - exemplu

Sa considerm exemplul in care dorim criptarea/decriptarea secventei de text


clar x = 101101 si presupunem ca iesirea generatorului de chei fluide ofera
cheia z = 1101. Vom avea: x1 = 1, x2 = 0, x3 = 1, x4 = 1, x5 = 0, x6 = 1 si
z1 = 1, z2 = 1, z3 = 0, z4 = 1, z5 = z1 = 1, z6 = z2 = 1

Criptarea Decriptarea
y1 = ez1 (x1 ) = x1 ⊕ z1 = 1 ⊕ 1 = 0 x1 = dz1 (y1 ) = y1 ⊕ z1 = 1 ⊕ 0 = 1
y2 = ez2 (x2 ) = x2 ⊕ z2 = 0 ⊕ 1 = 1 x2 = dz2 (y2 ) = y2 ⊕ z2 = 1 ⊕ 1 = 0
y3 = ez3 (x3 ) = x3 ⊕ z3 = 1 ⊕ 0 = 1 x3 = dz3 (y3 ) = y3 ⊕ z3 = 0 ⊕ 1 = 1
y4 = ez4 (x4 ) = x4 ⊕ z4 = 1 ⊕ 1 = 0 x4 = dz4 (y4 ) = y4 ⊕ z4 = 1 ⊕ 0 = 1
y5 = ez1 (x5 ) = x5 ⊕ z1 = 0 ⊕ 1 = 1 x5 = dz1 (y5 ) = y5 ⊕ z1 = 1 ⊕ 1 = 0
y6 = ez2 (x6 ) = x6 ⊕ z2 = 1 ⊕ 1 = 0 x6 = dz2 (y6 ) = y6 ⊕ z2 = 1 ⊕ 0 = 1
Se obtine astfel secventa de text cript Se obtine astfel secventa de text clar
y = 011010 x = 101101
Preview Sisteme sincrone Sisteme asincrone

Definitie formala

Un sistem de criptare fluid se numeste asincron


(auto-sincronizabil) daca functia de generare a cheii fluide
depinde de un numar de caractere criptate anterior:
qi = (yi−t , yi−t+1 , . . . , yi−1 ), zi = g(qi , k ), yi = h(zi , xi ) unde:
q0 = (y−t , y−t+1 , . . . , y−1 ) - starea initiala
k - cheia
g - functia ce produce cheia fluida
h - functia iesire care produce care cripteaza textului clar xi
Preview Sisteme sincrone Sisteme asincrone

Sisteme asincrone - Exemple

LFSR
- registrii lineari cu feedback

Criptarea cu auto-cheie
P = C = L= Z26
cheia fluida este data de z1 = k , zi = yi−1 , i ≥ 2
pentru z ∈ Z26 , definim
ez (x) = x + z(mod26)
dz (y ) = y − z(mod26)

Exercitiu Solutia
Pentru k = 11 Se va obtine textul criptatat
codificati/decodificati textul clar DSARLSSJNG.
SPIRU HARET
Preview Sisteme sincrone Sisteme asincrone

Solutia detaliata a exercitiului anterior

Codificarea textului clar SPIRU HARET este x =18 15 8 17 20 7 0 17 4 19,


iar k = z1 = 11

Modul criptare
y1 = ez1 (x1 ) = x1 + z1 (mod26) = 18 + 11(mod26) = 3 si z2 = y1 = 3
y2 = ez2 (x2 ) = x2 + z2 (mod26) = 15 + 3(mod26) = 18 si z3 = y2 = 18
y3 = ez3 (x3 ) = x3 + z3 (mod26) = 8 + 18(mod26) = 0 si z4 = y3 = 0
y4 = ez4 (x4 ) = x4 + z4 (mod26) = 17 + 0(mod26) = 17 si z5 = y4 = 17
y5 = ez5 (x5 ) = x5 + z5 (mod26) = 20 + 17(mod26) = 11 si z6 = y5 = 11
y6 = ez6 (x6 ) = x6 + z6 (mod26) = 7 + 11(mod26) = 18 si z7 = y6 = 18
y7 = ez7 (x7 ) = x7 + z7 (mod26) = 0 + 18(mod26) = 18 si z8 = y7 = 18
y8 = ez8 (x8 ) = x8 + z8 (mod26) = 17 + 18(mod26) = 9 si z9 = y8 = 9
y9 = ez9 (x9 ) = x9 + z9 (mod26) = 4 + 9(mod26) = 13 si z10 = y9 = 13
y10 = ez10 (x10 ) = x10 + z10 (mod26) = 19 + 13(mod26) = 6
Se obtine astfel textul criptat y = 3 18 0 17 11 18 18 9 13 6 si deci
codificarea DSARLSSJNG.

Decripatrea se va realiza in mod similar.


Preview Sisteme sincrone Sisteme asincrone

Observatii

Auto-sincronizare: cum h−1 depinde de un numar fixat de


caractere criptate anterior, desincronizarea rezulta din
inserarea sau stergerea de caractere criptate (se poate
evita)
Daca starea unui sistem fluid auto-sincronizabil depinde de
t caractere anterioare, atunci modificarea
(stergerea,inserarea) unui caracter va duce la decriptarea
incorecta a maxim t caractere, dupa care decriptarea
redevine corecta.
Preview Sisteme sincrone Sisteme asincrone

Alte exemple de sisteme fluide de criptare

SEAL - sistem de criptare aditiv binar


RC4 (Rist Code 4) - creat pentru RSA Data Security Inc.
(astazi RSA Security), este un sistem aditiv fluid de
criptare destinat scopurilor comerciale
Laborator

Sisteme de criptare bloc


- Moduri de utilizare -

Luciana Morogan

Facultatea de Matematica-Informatica
Universitatea Spiru Haret

Laborator
Laborator

Outline

Sisteme de criptare bloc

Modul de utilizare ECB

Modul de utilizare CBC

Modul de utilizare OFB

Modul de utilizare CFB


Laborator
Sisteme de criptare bloc

Sisteme de criptare - definitie

Sistemele de criptare bloc (block cyphers):


I elemente succesive ale textului clar sunt criptate folosind
aceeasi cheie de criptare
I daca x = x1 x2 x3 . . . atunci
y = y1 y2 y3 . . . = ek (x1 )ek (x2 )ek (x3 ) . . .
Laborator
Sisteme de criptare bloc

Moduri de utilizare

I ECB (Electonic Codebook Mode)


I CBC (Cypher Block Chaining Mode)
I OFB (Output Feedback Mode)
I CFB (Cypher Feedback Mode)
Laborator
Modul de utilizare ECB

Descrierea modului de utilizare ECB

I textul clar se descompune in blocuri de lungime n; daca


este necesar, aceasta se suplimenteaza a. i. lungimea sa
fie divizibila cu n (suplimentarea poate consta din simboluri
alese aleator)
I daca este folosita cheia de criptare k , atunci fiecare bloc
de lungime n se cripteaza folosind functia ek
I textul criptat este decriptat prin aplicarea functiei dk , unde
k reprezinta cheia de decriptare corespunzatoare lui k
Laborator
Modul de utilizare ECB

Descrierea formala a modului de utilizare ECB

I Fie x = α1 α2 α3 . . . texul clar unde fiecare bloc de text


αi , i ≥ 1 este de lungime n
I Formula de criptare cu cheia k : βi = ek (αi ), i ≥ 1
I Textul criptat este y = β1 β2 β3 . . .
Laborator
Modul de utilizare ECB

Exercitiu

I Consideram cifrul bloc care aplica permutari bitilor unui


vector de biti de lungime 4.

I Daca K =S4 , atunci pentru π ∈ S4 , avem


eπ : [0, 1]4 → [0, 1]4 , b1 b2 b3 b4 7−→ bπ(1) bπ(2) bπ(3) bπ(4)

In particular
Criptati textul clar x = 1011000101001010 folosind cheia
 
1 2 3 4
π=
2 3 4 1
Laborator
Modul de utilizare CBC

Descrierea modului de utilizare CBC

I codificarea unui boc nu mai depinde doar de cheie (a se


vedea ECB) ci si de blocurile anterioare
I aceleasi blocuri in contexte diferite, vor fi codificate diferit
I receptorul poate spune daca textul criptat a fost modificat,
deoarece decriptarea acestuia esueaza
Laborator
Modul de utilizare CBC

Descrierea formala a modului de utilizare CBC

I se defineste blocul initial IV = β0


I Formula de criptare cu cheia k : βi = ek (βi−1 ⊕ αi ), i ≥ 1,
unde ⊕ reprezinta operatia XOR pe biti
Laborator
Modul de utilizare CBC

Schematic - CBC

Criptare Decriptare
Laborator
Modul de utilizare CBC

Exercitiu

I Consideram cifrul bloc care aplica permutari bitilor unui


vector de biti de lungime 4.

I Daca K =S4 , atunci pentru π ∈ S4 , avem


eπ : [0, 1]4 → [0, 1]4 , b1 b2 b3 b4 7−→ bπ(1) bπ(2) bπ(3) bπ(4)

In particular
Criptati textul clar x = 1011000101001010 folosind cheia
 
1 2 3 4
π=
2 3 4 1

Blocul initial este IV = 1010


Laborator
Modul de utilizare OFB

Descrierea modului de utilizare OFB

I construit conform sistemelor de criptare fluide


I se genereaza intai cheia fluida, care apoi se va combina
cu textul clar
I este o criptare sincronizabila aditiva: componentele cheii
fluide sunt obtinute prin criptarea iterativa a unui bloc initial
Laborator
Modul de utilizare OFB

Descrierea formala a modului de utilizare OFB

I Obtinerea cheii fluide


n
I se defineste blocul initial γ0 = IV , IV ∈ {0, 1} si un numar
intreg pozitiv r , 1 ≤ r ≤ n
I textul clar se va descompune in blocuri de dimensiune r
I se calculeaza recursiv cheia fluida γ1 γ2 γ3 . . . dupa formula
γi = ek (γi−1 ), i ≥ 1
I Secventa de text clar x = α1 α2 α3 . . . se codifica cu
formula de criptare βi = eXk (αi ⊕ γi ), i ≥ 1
I Textul criptat este y = β1 β2 β3 . . .
Laborator
Modul de utilizare OFB

Exercitiu

I Consideram acelasi cifru bloc, text clar si cheie ca la


exercitiile anterioare
I Blocul initial este IV = 1010
Sa se realizeze criptarea/decriptarea secventei de text clar.
Laborator
Modul de utilizare CFB

Descrierea modului de utilizare CFB

I construit conform sistemelor de criptare fluide, este potrivit


pentru codificarea mesajelor mari
I in cadrul aplicatiilor in timp real, poate avea totusi
probleme de eficienta
I se genereaza intai cheia fluida, care apoi se va combina
cu textul clar
I este necesar un vector de initializare
Laborator
Modul de utilizare CFB

Descrierea formala a modului de utilizare CFB

I se defineste blocul initial IV = β0 , IV ∈ {0, 1}n si un numar


intreg pozitiv r , 1 ≤ r ≤ n
I textul clar se va descompune in blocuri de dimensiune r
I se calculeaza cheia fluida δ1 δ2 δ3 . . . criptand blocul de text
criptat anterior dupa formula δi = ek (βi−1 ), i ≥ 1
I Secventa de text clar x = α1 α2 α3 . . . se codifica cu
Xk (αi ⊕ δi ), i ≥ 1
formula de criptare βi = e
I Textul criptat este y = β1 β2 β3 . . .
Laborator
Modul de utilizare CFB

Schematic - CFB

Criptare Decriptare
Laborator
Modul de utilizare CFB

Exercitiu

I Consideram acelasi cifru bloc, text clar si cheie ca la


exercitiile anterioare
I Lungimea blocurilor in care se imparte textul clar este tot 4
I Blocul initial este IV = 1010
Sisteme de criptare cu cheie publica Sistemul RSA Sistemul El-Gamal Exercitii propuse

Sisteme de criptare cu cheie publica

Luciana Morogan

Facultatea de Matematica-Informatica
Universitatea Spiru Haret

Laborator
Sisteme de criptare cu cheie publica Sistemul RSA Sistemul El-Gamal Exercitii propuse

Outline

1 Sisteme de criptare cu cheie publica


Generalitati
Securitatea

2 Sistemul RSA
RSA

3 Sistemul El-Gamal
El-Gamal

4 Exercitii propuse
Exercitii propuse
Sisteme de criptare cu cheie publica Sistemul RSA Sistemul El-Gamal Exercitii propuse

Generalitati

Idei de baza

Regula de criptare ek poate fi pulicata intr-un registru public.

Alice (sau orice alta persoana) poate trimite lui Bob un mesaj
criptat cu ek , fara a intra in prealabil in contact, iar Bob este
singurul capabil sa descifreze textul, utilizand cheia sa secreta
de decriptare dk .
Sisteme de criptare cu cheie publica Sistemul RSA Sistemul El-Gamal Exercitii propuse

Generalitati

Cele mai cunoscute sisteme cu cheie publica

Sistemul RSA - bazat pe dificultatea descompunerii in


factori primi a numerelor mari (de sute de cifre); cel mai
larg utilizat in acest moment
Sistemul El-Gamal - bazat pe dificultatea calculului
logarimului discret intr-un corp finit
Sistemul Merkle-Hellman - primul sistem definit cu cheie
publica, bazat pe problema {0, 1} a rucsacului (problema
NP-completa1 )
Sistemul McEliece - bazat pe teoria algebrica a codurilor
(decodificarea unui cod linear este o problema
NP-completa)
Curbe eliptice - sistem ce isi desfasoara calculele pe
multimea punctelor unei curbe eliptice
1
Daca problema se reduce la o problema nepolinomiala elementara
n
(NP-tare). De exemplu: 2n , en , aa s.a.
Sisteme de criptare cu cheie publica Sistemul RSA Sistemul El-Gamal Exercitii propuse

Generalitati

Functii neinversabile (1)

Exemple
Strazile cu sens unic dintr-un oras
A→B
B → A imposibil
desi este usor sa parcurgi drumul A → B, este imposibil sa te intorci
B → A (decriptarea)

Cartea de telefon a unui oras mare


Este usor de gasit numarul de telefon al unei persoane si foarte greu
(imposibil) de aflat persoana care are un anumit numar de telefon.
Criptarea. Pentru fiecare litera a textului clar se alege un nume care
incepe cu acelasi caracter, iar numarul de telefon al persoanei
reprezinta criptarea (doua aparitii ale aceleiasi litere pot fi codificate
diferit)
Decriptarea. Bob detine cartea de teleon scrisa in ordine
crescatoare/descrescatoare a numerelor de telefon
Sisteme de criptare cu cheie publica Sistemul RSA Sistemul El-Gamal Exercitii propuse

Generalitati

Functii neinversabile (2)

O functie neinversabila trebuie sa verifice conditiile:


fiind dat x, f (x) este usor de calculat
calculul lui x din f (x) este imposibil
D. p. d. v. matematic nu se cunosc astfel de functii si deci o
problema este:
usoara - daca se poate rezolva cu un algoritm polinomial
cel mult linear
grea - daca se poate rezolva cu un algoritm polinomial
nelinear
imposibila - daca este NP-completa
Sisteme de criptare cu cheie publica Sistemul RSA Sistemul El-Gamal Exercitii propuse

Generalitati

Trapa secreta

Bob trebuie sa dispuna de un procedeu care sa-i permita sa


transforme o problema NP-completa in una usoara.
procedeu numit trapa secreta

Exemplu
In exemplul cu cartea de telefon, trapa secreta este
reprezentata de cartea de telefon ordonata dupa numere si nu
dupa abonati.
Sisteme de criptare cu cheie publica Sistemul RSA Sistemul El-Gamal Exercitii propuse

Generalitati

Principii generale de constructie a unui sistem de criptare cu cheie


publica

Se incepe cu o problema P dificila a carei rezolvare, in


termeni de complexitate, este imposibila (nu exista nici un
algoritm de complitate polinomiala care sa rezolve P)
Se alege P1 o subproblema a lui P rezolvabila in timp
polinomial (preferabil linear)
Lui P1 i se aplica o transformare si se obtine P2 care sa nu
semene cu P1 , dar sa fie apropiata P
Se face publica P2 si se descrie algoritmul de criptare
bazat pe aceasta. Trapa secreta: modul in care se obtine
P1 din P2
Se construiesc detaliile de criptare a.i. destinatarul sa
poata folosi trapa secreta si sa rezolve P1 , iar criptanalistul
sa trebuiasca sa rezolve P2 , imposibila datorita asemanarii
acesteia cu P
Sisteme de criptare cu cheie publica Sistemul RSA Sistemul El-Gamal Exercitii propuse

Securitatea

Atacuri (1)

Daca criptanalistul Oscar dispune de un text criptat y ,


atunci el poate cauta un text clar x a.i. ek (x) = y
Raspundeti la intrebarea ce modalitate de aparare
considerati a fi posibila in acest caz?
Sisteme de criptare cu cheie publica Sistemul RSA Sistemul El-Gamal Exercitii propuse

Securitatea

Atacuri (1) - raspuns

Raspuns: gradul de complexitate al sistemului


Sisteme de criptare cu cheie publica Sistemul RSA Sistemul El-Gamal Exercitii propuse

Securitatea

Atacuri (2)

Meet - in - the middle

Presupunem ipoteza in care Alice si Bob vor sa stabileasca


intre ei o legatura (un contact)
cei doi vor face publice cheile lor de criptare eA si eB
daca contactul este nepersonalizat, aunci Oscar poate
controla mesajele schimbate intre cei doi:
Oscar opacizaza cele doua chei de criptare si trimite lui
Alice ceia eB1 ca venind dpartea lui Bob. La fel procedeaza
de cealalta parte substituind eA cu eA1
daca consideram m mesajul pe care Alice doreste sa-l
trimita lui Bob, atunci aceasta codifica pe m si trimite
y1 = eB1 (m)
Oscar intercepteaza mesajul si afla m = dB1 (y1 )
Oscar recripteaza y = eB (m) si trmite y lui Bob (Oscar
poate intarzia sau modifica mesajul)
CE CONCLUZII TRAGETI DE AICI?
Sisteme de criptare cu cheie publica Sistemul RSA Sistemul El-Gamal Exercitii propuse

Securitatea

Atacuri (2) - raspuns

Apare necesitatea:
autentificarii mesajului sau expeditorului - autentificarea::
procesul princare un calculator (program sau alt uilizator)
incearca sa confirme destinatarului ca mesajul primit de
acesta provine sau nu din partea sa
confidentialtatea:: asigura accesul la informatie doar
partilor autorizate
integritatea:: siguranta ca datele la care se refera un
utilizator pot fi accesate si modificate doar de catre cei
autorizati
Sisteme de criptare cu cheie publica Sistemul RSA Sistemul El-Gamal Exercitii propuse

RSA

Algoritm

RSA:: Rivest-Shamir-Adleman
p, q numere prime impare, p 6= q si n = pq
ϕ(n) = (p − 1)(q − 1) indicatorul lui Euler
fie P = C =Zn , definim
K= {(n, p, q, a, b)|n = pq, ab ≡ 1(modϕ(n))}
pentru k = (n, p, q, a, b), ∀x, y ∈ Zn avem
ek (x) = x b (mod n)
dk (y ) = y a (mod n)
valorile n, b sunt publice; p, q, a sunt secrete
Sisteme de criptare cu cheie publica Sistemul RSA Sistemul El-Gamal Exercitii propuse

RSA

Securitatea si trapa secreta

Securitatea
Se bazeaza pe ipoteza ca ek (x) = x b (mod n) este
neinversabila d.p.d.v al complexitatii.
Pentru ca sistemul sa fie sigur, trebuie ca n sa fie suficient
de mare pentru ca factorizarea acestuia sa fie imposibila
(⇒ ϕ(n) imposibil ⇒ a imposibil)

Trapa secreta
Descompunerea lui n = pq
se calculeaza ϕ(n) = (p − 1)(q − 1)
se determina exponentul de decriptare a folosind
algoritmul lui Euclid extins (pentru aflarea cmmdc-ului si a
inversului intr-un inel Zn )
Sisteme de criptare cu cheie publica Sistemul RSA Sistemul El-Gamal Exercitii propuse

RSA

Implementarea

Decriptare
Bob trebuie sa urmareasca pasii:
genereaza numerele prime mari p si q
calculeaza n = pq si ϕ(n) = (p − 1)(q − 1)
alege aleator un b, 1 < b < ϕ(n) a.i. (b, ϕ(n)) = 1
calculeaza a = b−1 (modϕ(n)) folosind algoritmul lui Euclid
face publice n si b
Sisteme de criptare cu cheie publica Sistemul RSA Sistemul El-Gamal Exercitii propuse

El-Gamal

Problema logaritmului discret

p - prim, α, β ∈ Zp , β 6= 0
a =?, a ∈ Zp−1 a.i. αa ≡ β (mod p)
a, dc exista, este unic si a = logα β
Obs! Pentru problema logaritmilor discreti nu este obligatoriu ca p sa fie
numar prim, important este ca α sa fie radacina primitiva de ordinul p − 1 a
unitatii (∀i, 0 < i < p − 1, αi 6≡ 1 (mod p))

Teorma lui Fermat. αp−1 ≡ 1 (mod p)

Obs! Cum logritmul discret este dificil de calculat iar operatia inversa
(exponentierea) este simpla, trebuie utilizata problema logaritmului discret
dificila in Zp :
p - minim 512 biti (1024 pt securitate pe termen lung)
p − 1 - are cel putin un divizor prim mare
Pentru alegerea convenabila a lui p, problema este NP-completa.
Sisteme de criptare cu cheie publica Sistemul RSA Sistemul El-Gamal Exercitii propuse

El-Gamal

El-Gamal

Algoritm
p - prim a.i. problema logaritmilor discreti sa fie dificila in
Zp si α ∈ Z∗p primitiv
P= Z∗p , C= Z∗p ∗ Z∗p
K= {(p, α, a, β)|β ≡ αa (modp)}
valorile p, α, β - publice, iar a - secreta
pt K = (p, α, a, β) si k ∈ Zp−1 aleator(secret) definim:
eK (x, k ) = (y1 , y2 ) unde
y1 = αk (mod p)
y2 = x · β k (mod p)
pt y1 , y2 ∈ Z∗p definim dK (y1 , y2 ) = y2 · (y1a )−1 (mod p)
Sistemul este nedeterminist: criptarea depinde de x si o
variabila aleatoare k aleasa de Alice ⇒ exista mai multe texte
criptate corespunzatoare unui anumit text clar.
Sisteme de criptare cu cheie publica Sistemul RSA Sistemul El-Gamal Exercitii propuse

El-Gamal

Observatii

Dezavantaj: dublarea lungimii textului criptat comparativ cu


lungimea textului clar
Daca (y1 , y2 ), (z1 , z2 ) sunt textele criptare ale mesajelor
m1 , respectiv m2 , atunci se deduce textul criptat pentru
m1 m2 ca fiind (y1 z1 , y2 z2 )
criptarea pentru 2m1 (respectiv 2m2 ) conduce la concluzia
ca sistemul El-Gamal este sensibil la atacul cu text clar ales
ESENTIAL: doua texte diferite ce vor fi criptate trebuie sa
foloseasca valori diferite pentru k
Sisteme de criptare cu cheie publica Sistemul RSA Sistemul El-Gamal Exercitii propuse

Exercitii propuse

Sistemul RSA

Ex. 1 Ex. 2
Fie d exponentul de decriptare al Fie d = 11 exponentul de decriptare al
sistemului de criptare RSA construit sistemului de criptare RSA construit
cu numerele prime p = 3, q = 5. Daca cu numerele prime p = 7, q = 11.
exponentul de criptare este e = 7, Determinati exponentul de criptare e.
determinati d.

Ex. 3 Ex. 4
Consideram sistemul de criptare RSA Un utilizator al sistemului de criptare
construit cu numerele prime RSA are ca cheie publica
p = 3, q = 5. Daca exponentul de (n, e) = (35, 5) si cheia secreta d = 5.
criptare este e = 4 si se doreste Daca primeste textul criptat c = 3,
codificarea textului clar m = 11, atunci textul clar decodificat de
determinati textul criptat c. utilizator este ...
Sisteme de criptare cu cheie publica Sistemul RSA Sistemul El-Gamal Exercitii propuse

Exercitii propuse

Sistemul El-Gamal

Ex. 1
Fie cifrul El-Gamal asociat numarului prim p = 7 si radacinii
primitive α = 5. Cheia secreta a lui Alice este 3, iar cea a lui
Bob este 4. Daca Bob codifica textul clar x = 11 si il transmite
lui Alice, atunci aceasta primeste codificarea...

Ex. 2
Fie cifrul El-Gamal asociat numarului prim p = 11 si radacinii
primitive α = 5. Cheia secreta a lui Alice este 4, iar cea a lui
Bob este 7. Alice primeste de la Bob textul criptat (3,7) pe care
il decodifica si gaseste mesajul clar ...
Preview: Semnaturi electronice Protocoale de semnatura Functii de dispersie

Semnaturi electronice si functii de


dispersie

Luciana Morogan

Facultatea de Matematica-Informatica
Universitatea Spiru Haret

Laborator
Preview: Semnaturi electronice Protocoale de semnatura Functii de dispersie

Outline

1 Preview: Semnaturi electronice

2 Protocoale de semnatura
Protocoale de semnatura
Procedee de criptare vs. procedee de semnatura
Semnatura El-Gamal

3 Functii de dispersie
Semnaturi si functii de dispersie
Functii de dispersie cu coliziuni
Exemplu de exercitiu
Preview: Semnaturi electronice Protocoale de semnatura Functii de dispersie

Semnaturi electronice

O semnatura electronica trebuie sa fie:


1 unica - o anumita semnatura trebuie sa poata fi generata
de catre o singura persoana
2 neimitabila - nici o alta persoana nu va putea genera
semnatura utilizatorului indicat
3 usor de autentificat - orice destinatar legal si, eventual,
orice arbitru sa poata stabilii autenticitatea semnaturii
4 imposibil de negat - nici un utilizator legal sa nu-si poata
nega propria semnatura
5 usor de generat
Preview: Semnaturi electronice Protocoale de semnatura Functii de dispersie

Protocoale de semnatura

Protocoale

Protocolul este format din:


algoritmul de semnatura - secret: sig(x), unde x este
mesajul transmis
algoritmul de verificare - public: daca y este o semnatura
autentica a lui x, atunci ∀(x, y ) algoritmul ver (x, y ) ofera un
raspuns dicotomic (adevarat sau fals)
Preview: Semnaturi electronice Protocoale de semnatura Functii de dispersie

Protocoale de semnatura

Definitie formala

Un protocol de semnatura este un cvintuplu (P, A, K, S, V)


unde:
P, A, K - multimi finite, nevide ale caror elemente se
numesc mesaje, semnaturi si, respectiv, chei
exista o aplicatie biunivoca K ↔ S × V astfel incat
∀k ∈ K, ∃!(sigk , verk ) unde

sigk : P → A, verk : P × A →{T , F } au proprietatea ca


∀x ∈ P, ∀y ∈ A,
verk (x, y ) = T ⇔ y = sigk (x)
Obs! Pentru fiecare k ∈ K, functiile sigk si verk trebuie sa fie
calculabile in timp polinomial.
Preview: Semnaturi electronice Protocoale de semnatura Functii de dispersie

Procedee de criptare vs. procedee de semnatura

Procedee de criptare vs. procedee de semnatura (1)

Consideram cazul in care Alice ii trimite lui Bob un mesaj


semnat si criptat. Fie x textul in clar.
Alice:
determina semnatura y = sigAlice (x)
codifica x si y cu cheia publica a lui Bob obtinand textul
criptat z cu z = eBob ((x, y ))
trimite pe z lui Bob
Bob:
foloseste cheia sa secreta dBob si obtine perechea (x, y )
verifica semnatura lui Alice cu cheia publica verAlice (x, y )
Preview: Semnaturi electronice Protocoale de semnatura Functii de dispersie

Procedee de criptare vs. procedee de semnatura

Procedee de criptare vs. procedee de semnatura (2)

Ce se poate intampla daca Alice cripteaza inainte de a semna?


Alice:
calculeaza z = eBob (x)
calculeaza y = sigAlice (eBob (x))
trimite lui Bob mesajul (z, y )
Bob:
decripteaza z si obtine x
verifica y ca semnatura lui z cu cheia publica verAlice (x, z)
Pericolul: Oscar poate intercepta (z, y ), inlocuieste y cu propria
sa semnatura y1 = sigOscar (z) si trimite lui Bob mesajul (z, y1 )
⇒ se recomanda folosirea semnaturii inante de criptare
Preview: Semnaturi electronice Protocoale de semnatura Functii de dispersie

Semnatura El-Gamal

Semnatura El-Gamal

p - prim a.i. problema logaritmilor discreti sa fie dificila in


Zp si α ∈ Z∗p element primitiv
P= Z∗p , A= Z∗p × Zp−1
K= {(p, α, a, β)|β ≡ αa (modp)}
valorile p, α, β - publice, iar a - secreta
pt K = (p, α, a, β) si k ∈ Zp−1 aleator(secret) definim:
sigK (x, k ) = (γ, δ) unde
γ = αk (mod p)
δ = (x − aγ)k −1 (mod (p − 1))
pt x, γ ∈ Z∗p , δ ∈ Zp−1 definim
verK (x, γ, δ) =T⇔ β γ γ δ ≡ αx (mod p)
Preview: Semnaturi electronice Protocoale de semnatura Functii de dispersie

Semnatura El-Gamal

Observatii

1 Daca semnatura este corecta, verificarea autentifica


semnatura:
k
+k (x−aγ)k −1 k
β γ γ δ ≡ αaγ αk δ ≡ αaγ+k δ ≡ αaα ≡ αaα +x−aγ

k k
αaα +x−aα ≡ αx (mod p)
2 Protocolul este nedeterminist: pentru un mesaj dat, pot
exista mai multe semnaturi posibile.
Preview: Semnaturi electronice Protocoale de semnatura Functii de dispersie

Semnaturi si functii de dispersie

Trasatura generala a protocoalelor de semnatura digitala

Mesajele ce pot fi semnate sunt de dimensiune mica, insa, in


practica, documentele ce trebuiesc a fi semnate ajung la
dimensiuni mult mai mari.

Solutia: functia de dispersie ce trebuie calculata rapid. Aceasta


transforma un mesaj de lungime arbitrara intr-o amprenta
numerica de dimensiune fixata care ulterior va fi semnata:
daca se doreste semnarea unui mesaj x
1 se calculeaza amprenta numerica z = h(x)
2 aceasta se semneaza cu y = sigk (z)
3 perechea (x, y ) este transmisa prin canalul de comunicatie
oricine poate efectua verificarea calculand z = h(x) si
utilizand verk (z, y )
Preview: Semnaturi electronice Protocoale de semnatura Functii de dispersie

Functii de dispersie cu coliziuni

Functii de dispersie cu coliziuni (1)

Cum semnatura foloseste doar amprenta numerica, h trebuie


sa satisfaca cateva conditii (pt a evita falsificarea)
atacul cel mai simplu al unui mesaj (x, y ) semnat cu
y = sigk (h(x)) este urmatorul:
1 se calculeaza z = h(x)
2 se cauta x1 6= x a.i h(x1 ) = h(x)
Daca exista x1 ⇒ (x1 , y ) este un mesaj valid

=⇒ h trebuie sa fie cu coliziuni slabe1

1
Definitie. Functia de dispersie h este cu coliziuni slabe daca fiind dat un
mesaj x, este calculabil dificil sa se gaseasca un mesaj x1 6= x a.i.
h(x1 ) = h(x)
Preview: Semnaturi electronice Protocoale de semnatura Functii de dispersie

Functii de dispersie cu coliziuni

Functii de dispersie cu coliziuni (2)

atac: Oscar cauta doua mesaje x1 , x2 a.i. x1 6= x2 si


h(x1 ) = h(x2 ). Il convinge pe Bob sa semneze x1 cu
amprenta sa numerica h(x1 ) si obtine y ⇒ (x1 , y )
semnatura autentica

=⇒ h trebuie sa fie cu coliziuni tari2

Obs! O functie cu coliziuni tari este si cu coliziuni slabe.

2
Definitie. Functia de dispersie h este cu coliziuni tari daca este calculabil
dificil sa se obtina doua mesaje x1 , x2 , x1 6= x2 a.i. h(x1 ) = h(x2 )
Preview: Semnaturi electronice Protocoale de semnatura Functii de dispersie

Functii de dispersie cu coliziuni

Functii de dispersie cu coliziuni (2)

atac bazat pe observatia ca este posibil sa se obtina


aleator falsificari ale amprentelor numerice. Daca Oscar
obtine o semnatura valida a amprentei z, el cauta x a.i.
h(x) = z
=⇒ h neinversabila3

Lema. Daca o functie de dispersie este cu coliziuni tari,


atunci ea este neinversabila.

3
Definitie. h este neinversabila daca fiind data o amprenta numerica z,
este calculabil dificil sa se gaseasca mesajul x a.i. h(x) = z.
Preview: Semnaturi electronice Protocoale de semnatura Functii de dispersie

Exemplu de exercitiu

Exercitiu

Fie numarul prim p = 15 si radacina primitiva modulo 15 g = 3.


Alice doreste sa ii trimita lui Bob un document printr-un canal
de comunicatie. Pentru ca aceasta sa poata semna
documentul x ∈ {0, 1}∗ , ea alege cheia secreta a = 5 si k = 3.
Se considera publica o functie de dispersie (hash function) a.i.
h(x) = 11.
Cunoscand protocolul de semnatura El-Gamal folosit, cu
r = g k modp
s = (x − ar )k −1 mod (p − 1)
determinati (r , s).
Preview: Semnaturi electronice Protocoale de semnatura Functii de dispersie

Exemplu de exercitiu

Solutie

(r , s) =?
r = 33 mod 15 ≡ 12 mod 15
s = (11 − 5 ∗ 12)3−1 mod 14 ≡ 7 mod 14
=⇒ (r , s) = (12, 7)
Probleme

Criptografie si securitate

Ion D. Ion, Luciana Morogan

Facultatea de Matematica-Informatica
Universitatea Spiru Haret

Exemple de probleme pentru testare

Exemple de probleme pntru testare


Probleme

Outline

1 Probleme

Exemple de probleme pntru testare


Probleme

Exercitiul 1

Determinati inversa matricei (modulo 26)


 
3 2
3 5

Exemple de probleme pntru testare


Probleme

Exercitiul 2

Criptati un text clar la alegere folosind sistemul de criptare Hill


cu matricea
 
3 2
3 5

Exemple de probleme pntru testare


Probleme

Exercitiul 3

Folosind sistemul de criptare Polybios codificati textul clar


UNIVERSITATE.

Exemple de probleme pntru testare


Probleme

Exercitiul 4

Pentru a = 3, b = 5 se definesc functiile de criptare, respectiv


decriptare, ale unui sistem de criptare afin:
e(3,5) (x) = 3x + 5
d(3,5) (y ) = 9y + 9(26 − 5)(mod26) = 9y + 7
Sa luam textul clar GRUPA. Codificarea acestuia este ...

Exemple de probleme pntru testare


Probleme

Exercitiul 5

In sistemul de criptare Vigenere, sa consideram cuvantul cheie


GRUPA. Criptam cu aceasta cheie textul clar CRIPTOGRAFIE
si se obtine textul criptat...

Exemple de probleme pntru testare


Probleme

Exercitiul 6

Folosind un sistem aditiv fluid binar de criptare se cere


criptarea/decriptarea secventei de text clar x = 101101,
cunoscand chea fluida z = 1101.

Exemple de probleme pntru testare


Probleme

Exercitiul 7

Folosind un sistem de criptre asincron cu auto-cheie, pentru


k = 11, codificati/decodificati textul clar SPIRU HARET.

Exemple de probleme pntru testare


Probleme

Exercitiul 8

Consideram modul de utilizare ECB al cifrului bloc DES care


aplica permutari bitilor unui vector de biti de lungime 4.
Criptati textul clar x = 1011000101001010 folosind cheia
 
1 2 3 4
π=
2 3 4 1

Exemple de probleme pntru testare


Probleme

Exercitiul 9

Consideram modul de utilizare CBC al cifrului bloc DES care


aplica permutari bitilor unui vector de biti de lungime 4.
Criptati textul clar x = 1011000101001010 folosind cheia
 
1 2 3 4
π=
2 3 4 1

si blocul initial IV = 1010

Exemple de probleme pntru testare


Probleme

Exercitiul 10

Consideram modul de utilizare OFB al cifrului bloc DES care


aplica permutari bitilor unui vector de biti de lungime 4.
Criptati textul clar x = 1011000101001010 folosind cheia
 
1 2 3 4
π=
2 3 4 1

si blocul initial IV = 1010

Exemple de probleme pntru testare


Probleme

Exercitiul 11

Consideram modul de utilizare CFB al cifrului bloc DES care


aplica permutari bitilor unui vector de biti de lungime 4.
Criptati textul clar x = 1011000101001010 folosind cheia
 
1 2 3 4
π=
2 3 4 1

si blocul initial IV = 1010

Exemple de probleme pntru testare


Probleme

Exercitiul 12: Sistemul RSA

Problema A Problema B
Fie d exponentul de decriptare al Fie d = 11 exponentul de decriptare al
sistemului de criptare RSA construit sistemului de criptare RSA construit
cu numerele prime p = 3, q = 5. Daca cu numerele prime p = 7, q = 11.
exponentul de criptare este e = 7, Determinati exponentul de criptare e.
determinati d.

Problema C Problema D
Consideram sistemul de criptare RSA Un utilizator al sistemului de criptare
construit cu numerele prime RSA are ca cheie publica
p = 3, q = 5. Daca exponentul de (n, e) = (35, 5) si cheia secreta d = 5.
criptare este e = 4 si se doreste Daca primeste textul criptat c = 3,
codificarea textului clar m = 11, atunci textul clar decodificat de
determinati textul criptat c. utilizator este ...

Exemple de probleme pntru testare


Probleme

Exercitiul 12: Sistemul El-Gamal

Problema A
Fie cifrul El-Gamal asociat numarului prim p = 7 si radacinii
primitive, modulo 7, 5. Cheia secreta a lui Alice este 3, iar cea
a lui Bob este 4. Daca Bob codifica textul clar x = 11 si il
transmite lui Alice, atunci aceasta primeste codificarea...

Problema B
Fie cifrul El-Gamal asociat numarului prim p = 11 si radacinii
primitive, modulo 7, 5. Cheia secreta a lui Alice este 4, iar cea
a lui Bob este 7. Alice primeste de la Bob textul criptat (3,7) pe
care il decodifica si gaseste mesajul clar ...

Exemple de probleme pntru testare


RSA
Reguli generale RSA:
n = p*q
f = (p-1)*(q-1)
1<e<n astfel incat c.m.m.d.c(e,f)=1
d=e-1 (mod f) || se calculeaza folosind algoritmul lui Euclid extins
Criptare: c=me (mod n)
Decriptare: m = cd (mod n)
m – text clar, c – text criptat, e – exponentul de criptare, d – exponentul de decriptare.

Algoritmul lui Euclid extins pentru aflarea inversului unui numar intr-un mod n.

Vom nota pasii algoritmului lui Euclid pornind de la pasul 0. Coeficientul obtinut la pasul i va fi notat qi. In timp ce efectuam
fiecare pas al algoritmului, vom calcula si un numar auxiliar, pi. Pentru primii 2 pasi stim deja valorile : p0 = 0 and p1 = 1. Pentru
restul pasilor vom calcula recursiv pi = pi-2 - pi-1 qi-2 (mod n). Continuam calculul numarului auxiliar inca un pas dupa terminarea
algoritmului.

Algoritmul incepe prin impartirea lui n la x, apoi continua prin impartirea impartitorului la rest. Cand ultimul rest diferit de 0 se
afla la pasul k, daca acest rest e 1 , x admite un invers care va fi pk+2. (Daca restul nu e 1, atunci x nu admite un invers.)

EXEMPLU:

Calculam inversul lui 15 mod 26.

PAS 0: 26 /15= 1 rest 11 p0 = 0

PAS 1: 15/11 = 1 rest 4 p1 = 1

PAS 2: 11/4 = 2 rest 3 p2 = 0 - 1( 1) mod 26 = 25

PAS 3: 4/3 = 1 rest 1 => x admite invers p3 = 1 - 25( 1) mod 26 = -24 mod 26 = 2

PAS 4: 3/1 = 3 rest 0 p4 = 25 - 2( 2) mod 26 = 21

p5 = 2 - 21( 1) mod 26 = -19 mod 26 = 7

Observati ca 15*7 = 105 = 1 + 4*26 1 (mod 26).

EL-GAMAL
Reguli generale EL-GAMAL:
A – cheia privata a lui Alice
B – cheia privata a lui Bob
p – numar prim mare
α –primitiv
(p,α,αA) – Cheia publica a lui Alice
(p,α,αB) – Cheia publica a lui Bob
Criptare : Bob obtine cheia publica a lui Alice, calculeaza textul criptat c1 folosind cheia lui privata si c2 folosind αA a
lui Alice pe care-l obtine din cheia ei publica.
c1 = αB mod p ; c2 = m(αA)k mod p ; c = (c1,c2) - Trimite textul cifrat c = (c1,c2) la utilizatorul Alice.
Decriptare : Pentru a determina textul clar m din textul cifrat c, utilizatorul Alice execută următoarele:
1. Utilizează cheia sa privată a pentru a calcula: f = c1p-1-A (mod p).
2. Determină textul clar m astfel: m = f*c2 (mod p).
RSA 1) : p=3 ; q=5 ; e=7 , d=?
f=(p-1)*(q-1) = 2*4 = 8
d = e-1 (mod f) = 7-1 (mod 8)
8/7 = 1 rest 1 p0=0
7/1 = 7 rest 0 p1=1
p2=0 – 1*1 (mod 8) = -1 (mod 8) = 7
d=7

RSA 2) : p=7; q=5; d=11 ; e=?


f=(p-1)*(q-1) = 6*4 = 24
e= d-1 (mod f) = 11-1 ( mod 24 )
24/11 = 2 rest 2 p0=0
11/2 = 5 rest 1 p1=1
2/1 = 2 rest 0 p2=0 – 1*2 (mod 24) = 22
P3= 1 – 22*5 (mod 24) = -109 mod 24 = 11
e = 11

RSA 3) : n=15; e=4; m=11, c=?


c = me (mod n) = 114 (mod 15) = 14641 mod 15 = 1

RSA 4) : (n,e) = (35,5) ; d=5, c=3 , m=?


m = cd (mod n) = 35 (mod 35) = 243 mod 35 = 33

El-Gamal 1): p=11; α=2; csA=3; csB=4; m=9; c=?


c1 = αB (mod p) = 24 mod 11 = 16 mod 11 = 5
c2 = m(αA)B (mod p) = 9(23)4 mod 11 = 9*4096 (mod 11) = 3
c = (c1,c2) = (5,3)

El-Gamal 2): p=7; α=5; csA=3; csB=4; m=11; c=?


c1 = αB (mod p) = 54 mod 7 = 625 mod 7 = 2
c2 = m(αA)B (mod p) = 11(53)4 mod 7 = 11*244140625 (mod 7) = 4
c = (c1,c2) = (2,4)

El-Gamal 3): p=11; α=2; csA=3; csB=4; A primeste de la B (y1,y2)=(5,3); txt. Clar x =?
z = y1p-1-A (mod p) = 511-1-3 (mod 11) = 57 (mod 11) = 3
x = z * y2 (mod p) = 3 * 3 (mod 11) = 9

El-Gamal 4): p=11; α=2; csA=4; csB=7; (y1,y2) = (3,7); txt clar x=?
Daca (y1,y2) = (3,7) este primit de B de la A, atunci:
f = y1p-1-B (mod p) = 311-1-7 (mod 11) = 33 (mod 11) = 5
x = f * y2 (mod p) = 5 * 7 (mod 11) = 2
Daca (y1,y2) = (3,7) este primit de A de la B, atunci:
f = y1p-1-A (mod p) = 311-1-4 (mod 11) = 36 (mod 11) = 3
x = f * y2 (mod p) = 3 * 7 (mod 11) = 10
Prelegerea 1

Noţiuni de bază ale criptografiei

1.1 Definiţii şi notaţii preliminare


Criptografia este o componentă a unui domeniu mult mai larg, numit securitatea informaţiei.
Obiectivele urmărite de acesta pot fi sumarizate ı̂n:
1. Confidenţialitate (privacy): proprietatea de a păstra secretul informaţiei, pentru ca
aceasta să fie folosită numai de persoanele autorizate.

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


substituţie) neautorizată a informaţiei.

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


Este compusă din

(a) Autentificarea unei entităţi;


(b) Autentificarea sursei informaţiei;

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


Celelalte obiective legate de securitatea informaţiei (autentificarea mesajelor, semnături,
autorizare, validare, controlul accesului, certificare, timestamping, confirmarea recepţiei,
anonimitate, revocare) pot fi derivate din acestea.
Definiţia 1.1 Criptografia este studiul metodelor matematice legate de securitatea infor-
maţiei, capabile să asigure confidenţialitatea, autentificarea şi non-repudierea mesajelor,
precum şi integritatea datelor vehiculate ([1].
Termenul criptografie ı̂nseamnă scriere secretă1 . Domeniul cuprinde atât operaţia de
criptare (cifrare) a unui text, cât şi eventualele ı̂ncercări de descifrare şi de aflare a cheii
1
Cuvântul este format din cuvintele greceşti cryptos – ascuns şi grafie – scriere

1
2 PRELEGEREA 1. NOŢIUNI DE BAZĂ ALE CRIPTOGRAFIEI

de criptare. În unele lucrări, cadrul general de lucru este numit criptologie, termenul de
criptografie desemnând numai operaţia de cifrare şi descifrare legală.
Situaţia generală de care se ocupă criptografia este următoarea:

Expeditor - Destinatar
6

Criptanalist

Expeditorul (personalizat ı̂n majoritatea lucrărilor cu apelativul Alice) doreşte să trimită
destinatarului (numit Bob) un mesaj printr-un canal de comunicaţie, canal cu un grad
ridicat de nesiguranţă2 . Această insecuritate o prezintă un adversar criptanalist (Oscar)
care doreşte – din diverse motive – să cunoască şi – eventual – să modifice conţinutul
mesajului, deşi acesta nu ı̂i este destinat.
Această confidenţialitate solicitată de Alice şi Bob se rezolvă de obicei prin transfor-
marea mesajului ı̂n aşa fel ı̂ncât el să nu poată fi ı̂nţeles 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
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.
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,
numit Teoria Codurilor.
1.1. DEFINIŢII ŞI NOTAŢII PRELIMINARE 3

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= {α | ∃a ∈ P, ∃k ∈ K, α = eK (a)}.
Funcţia eK este evident injectivă3 ; dacă eK este bijectivă (şi deci dK = e−1
K ), sistemul
de criptare se numeşte ”simetric”.
Pentru ca un sistem de criptare să fie considerat bun, trebuie ı̂ndeplinite trei criterii
(enunţate de Francis Bacon ı̂n sec. XV II):
1. Fiind date eK şi α ∈ P, este uşor de determinat eK (α);
2. Fiind date dK şi w ∈ C, este uşor de determinat dK (w);
3. α este imposibil de determinat din w, fără a cunoaşte dK .
Ultimul criteriu defineşte – sub o formă vagă – ideea de ”securitate” a sistemului.
La aceste criterii, Bacon adăuga şi o a patra regulă:
4 Textul criptat trebuie să fie un text banal, fără suspiciuni.
Această condiţie este utilizată astăzi doar de un subdomeniu strict al criptografiei, numit
steganografie.
Î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ă.
3
Condiţia de injectivitate nu este obligatorie pentru funcţia de decriptare dK .
4 PRELEGEREA 1. NOŢIUNI DE BAZĂ ALE CRIPTOGRAFIEI

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


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

Exemplul 1.1 Unul din primele sisteme de criptare cunoscute este sistemul de criptare
Cezar. Conform istoricului Suetoniu, el a fost folosit de Cezar ı̂n corespondenţa sa.
Să considerăm alfabetul latin scris, ı̂n ordine
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Fie k un număr ı̂ntreg din intervalul [0, 25]. El se va numi ”cheie de criptare”. Re-
scriem alfabetul latin permutat ciclic, ı̂ncepând ı̂nsă cu litera având numărul de ordine
k (litera A are numărul de ordine 0). Această nouă scriere o aşezăm sub prima scriere,
astfel (am presupus k = 2):
ABCDEFGHIJKLMNOPQRSTUVWXYZ
CDEFGHIJKLMNOPQRSTUVWXYZAB
Dacă Alice are un text clar pe care vrea să-l cripteze cu sistemul Cezar, ea va proceda
astfel:
Să presupunem că acest text clar 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 e26−k . Pe baza ei Bob va putea construi cele doua 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 .
4
Aceasta este prima din cele cinci probleme ale mileniului, pentru rezolvarea cărora se acordă premii
de câte un milion dolari.
1.1. DEFINIŢII ŞI NOTAŢII PRELIMINARE 5

Să rescriem sistemul Cezar ı̂n termenii Definiţiei 1.2. 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,

eK (m) = m + K (mod 26)

şi
dK (α) = α − K (mod 26)

Definiţia 1.3 Procesul de determinare a unei chei K folosind un text criptat α (asociat
eventual cu alte informaţii auxiliare) se numeşte ”criptanaliză”.

Deci decriptarea şi criptanaliza au ı̂n final acelaşi scop: aflarea textului clar. Diferenţa
constă ı̂n faptul că ı̂n criptanaliză el trebuie aflat fără a şti cheia de decriptare. Există o
”regulă de aur” a creatorilor de sisteme de criptare:
Nu subestimaţi niciodată pe criptanalist.
care s-a verificat din punct de vedere istoric pentru toate sistemele create până ı̂n
prezent: acestea sau au fost sparte sau trebuie să se revizuiască periodic pentru a rezista
atacurilor permanente ale intruşilor.
Să studiem puţin poziţia unui criptanalist (Oscar). Se presupune ı̂ntotdeauna că el
are la dispoziţie facilităţi de calcul excelente, adesea superioare celor de care dispun cei
doi parteneri Alice şi Bob.
Mai mult, se poate considera că Oscar cunoaşte sistemul de criptare. S-a constatat
că – practic – acest lucru se ı̂ntâmplă totdeauna. Ce nu cunoaşte ı̂nsă criptanalistul este
cheia K ∈ K.
Cel mai simplu atac 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 folosit la criptare. Deci, ı̂n cazul când
numărul cheilor posibile este mic (ı̂n Exemplul 1.1 sunt numai 26 chei), această cheie se
poate afla foarte uşor după un număr finit 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 general 2n căută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
6 PRELEGEREA 1. NOŢIUNI DE BAZĂ ALE CRIPTOGRAFIEI

biţi; aşa că sistemele de criptare actuale folosesc ı̂n general chei de 1024 biţi sau chiar mai
mult5 .
Î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.
În sisteme simple – cum este Cezar – sunt suficiente texte scurte, pentru că o
singură potrivire produce textul - clar. Pentru sistemele mai evoluate, este necesară
o lungime mai mare a textului criptat. Metodele de criptanaliză folosesc diverse
conjecturi şi informaţii statistice relative la alfabetul textului - clar, la frecvenţa
apariţiei caracterelor etc.

2. Ştie cel puţin o pereche de caractere (text clar, text criptat); din cunoaşterea câtorva
perechi (x, eK (x)) cu x ∈ V criptanalistul 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 Cham-
pollion când a descifrat hieroglifele,folosind piatra de la Rosetta (vezi [6]).

3. Criptanalistul cunoaşte criptarea unor texte clare selectate de el; este atacul cu text
clar ales, considerat ı̂n 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. Fie d ≥ 2
un număr ı̂ntreg fixat. Se definesc
P= C= (Z26 )d , K= {M | M ∈ Md (Z26 ), det(M ) 6= 0}.
Deci o cheie de criptare este o matrice M pătrată nesingulară de dimensiune d, cu
elemente din Z26 , iar M −1 formează cheia de decriptare.
Textul clar w se ı̂mparte ı̂n blocuri de lungime d : w = α1 α2 . . . αn , |αi | = d
(ultimul bloc se completează eventual până ajunge la lungimea d). Textul criptat va
fi x = β1 β2 . . . βn unde βi = eM (αi ) = αi · M (mod 26), (1 ≤ i ≤ n).
Pentru decriptare se foloseşte relaţia dM (βi ) = βi · M −1 (mod 26).
! !
3 3 −1 15 17
Să luăm de exemplu d = 2 şi cheia M = , cu inversa M = .
2 5 20 9
5
O excepţie o constituie sistemele bazate pe curbe eliptice, datorită aparatului matematic special.
1.1. DEFINIŢII ŞI NOTAŢII PRELIMINARE 7

Dacă textul clar este w = F RAC, vom avea


α1 = (F R) = (5 17), α2 = (A C) = (0 2)
Din relaţiile
!
3 3
β1 = α1 · M (mod 26) = (5 17) · = (23 22) = (X W )
2 5
!
3 3
β2 = α2 · M (mod 26) = (0 2) · = (4 10) = (E K)
2 5
se obţine textul criptat x = XW EK.
Să ne situăm acum pe poziţia lui Oscar: presupunem că am găsit dimensiunea d = 2
şi ı̂ncercăm să aflăm matricea M (sau – echivalent – M −1 ), ştiind perechea (text
clar, text criptat)= (F RAC, XW EG).
Deci Oscar
! se află acum ı̂n faţa următoarei probleme:! care este! matricea M !=
a b 5 17 a b 23 22
cu a, b, c, d ∈ {0, 1, . . . , 25}, astfel ca · = .
c d 0 2 c d 4 10
!
5 17
Pentru a putea afla această matrice, Oscar trebuie să afle inversa lui A = .
0 2
Cum det(A) = 10 şi cmmdc(10, 26) > 1 =⇒ 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 ma-
trice este inversabilă şi ı̂i află
! criptarea. Fie BRAD acest text clar, a cărui matrice
1 17
asociată este A = . Oscar solicită criptarea lui BRAD şi primeşte LKGP
0 3
!
11 10
– de matrice B = . Deci el dispune de perechea (BRAD, LKGP ).
6 15
!
1 3
Oscar detemină ı̂ntâi A−1 = . Apoi, din ecuaţia A · M = B, va găsi soluţia
0 9
! ! !
−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 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.
8 PRELEGEREA 1. NOŢIUNI DE BAZĂ ALE CRIPTOGRAFIEI

1.2 Sisteme simetrice de criptare


În general, sistemele de criptare clasice se numesc şi sisteme simetrice. Motivul este acela
că odată cu aflarea cheii de criptare eK , cheia de decriptare dK se obţine imediat, fiind
funcţia inversă.

Exemplul 1.5 În Exemplul 1.1, la sistemul Cezar dK = e26−K este cheia de decriptare
pentru cheia de criptare eK .

Sistemele de criptare simetrice se ı̂mpart ı̂n două clase mari: cifruri de permutare şi cifruri
cu substituţie.

1.2.1 Cifruri de permutare


La aceste sisteme de criptare, textul clar se ı̂mparte ı̂n blocuri de n (n ≥ 2) caractere,
după care fiecărui bloc i se aplică o permutare fixată.
!
1 2 3
Exemplul 1.6 Să presupunem că vom lua drept cheie de criptare permutarea .
2 1 3
Atunci un text clar, de exemplu FLOARE ALBASTRA se ı̂mparte ı̂n grupuri de căte trei
caractere (s-a considerat şi caracterul spaţiu, notat )
FLO ARE AL BAS TRA
Textul criptat va fi
LFO RAE A L ABS RTA
sau – eliminând grupările, LFORAEA LABSRTA.

Exemplul 1.7 Un sistem celebru de criptare cu permutări este sistemul Richelieu, prezen-
tat ş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.

Vrem să criptăm textul


EMINESCU A FOST UN MARE POET NATIONAL
Vom scrie acest text sub forma unui tabel cu şase linii şi şase coloane, astfel:
1.2. SISTEME SIMETRICE DE CRIPTARE 9

E M I N S E
C U A F
O S T U N
M A R E P
O E T N A
T I O N A L

Aplicând cartonul peste acest text, vor rămâne vizibile 9 caractere: MNS TA AN (citite
de la stânga la dreapta şi de sus ı̂n jos).
Vom roti acum cartonul cu 90o ı̂n sensul acelor de ceasornic. El va arăta

Aşezând acum peste text, rămân vizibile caracterele F MPTNIL (primul caracter a fost
un spaţiu şi l-am marcat cu pentru a-l face vizibil).
La a treia rotire a cartonului se obţine similar textul ICSUEETOA, iar la a patra –
EEUAOURO
Deci textul criptat este
MNS TA AN F MPTNILICSUEETOAEEUAOURO
Operaţia de decriptare se realizează similar.

Să formalizăm aceste informaţii.

Definiţia 1.4 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= Pn (mulţimea permutărilor de n elemente).
Pentru o cheie (permutare) π

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

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

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

Demonstraţie: Pentru fiecare permutare π ∈ Pn putem construi o matrice de permutare


Mπ = (mi,j ) definită
mi,j = 1 ⇐⇒ i = π(j)
Se verifică uşor faptul că sistemul de criptare Hill cu matricea Mπ este echivalent cu un
cifru de permutare bazat pe cheia π. Mai mult, Mπ−1 = Mπ−1 .
10 PRELEGEREA 1. NOŢIUNI DE BAZĂ ALE CRIPTOGRAFIEI

!
1 2 3
Exemplul 1.8 Să reluăm Exemplul 1.6. Permutării ı̂i corespunde matricea
2 1 3
 
0 1 0
de permutare  1 0 0 .
 

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

 = (11 5 14)
0 0 1

adică LF O.

1.3 Exerciţii
1.1 Textul clar NUMAR este criptat ı̂n ”Orice vânt nu bate seara”. Să se descrie sistemul
de criptare.

1.2 Folosind atacul prin forţă brută, decriptaţi mesajul WYPTBSJBYZ criptat cu un
sistem Cezar.

1.3 O cheie K este ”auto-cheie” dacă dK = eK . Găsiţi toate auto-cheile sistemului de


criptare Cezar.

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

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

1.8 Determinaţi inversele matricilor (modulo 26):


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

1.9 Demonstraţi că ı̂ntr-un cifru de permutare, π este o auto-cheie dacă şi numai dacă

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

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

1.10 Considerăm următorul cifru de permutare: Se fixează numerele naturale p, q. Tex-


tul clar se ı̂mparte ı̂n blocuri de câte p · q caractere. Fiecare astfel de bloc se scrie pe liniile
unei matrici de p linii şi q coloane. Criptarea blocului se realizează scriind aceste matrici
pe coloane.
M A I N
De exemplu, pentru p = 3, q = 4, textul clar MAINI CURATE se scrie I C U R
A T E X
(textul s-a completat cu litera X). Textul criptat va fi MIAACTIUENRX.
Decriptaţi următorul text DJNOUDNAINPAPANONZ criptat ı̂ntr-un mod similar.

1.11 Să se decripteze mesajul


N T I N I I I D D N R I R T E E A D
U M I I G R A D V O B E M C I I I E
Z S R U A U C M L T A I T U I T N I
D A A L E A R A C R I A S Z T E E E
I G P S A D E A P R E Z S T C A O
A E R I D R E D D E I E S E E P E L
ştiind că a fost criptat cu matricea Richelieu definită ı̂n Exemplul 1.7.
12 PRELEGEREA 1. NOŢIUNI DE BAZĂ ALE CRIPTOGRAFIEI
Bibliografie

[1] A. Menezes, P. Oorschot, S. Vanstome, Handbook of Applied Cryptography

[2] D. Stinton, Cryptography, Theory and Practice, Chapman & Hall/CRC, 2002

[3] A. Salomaa, Criptografie cu chei publice, Ed. Militară, 1996

[4] http://www.win.tue.nl/ gwoegi/P-versus-NP.htm

[5] S. Cook, http : //www.claymath.org/millennium/P vs N P/Of f icial P roblem Description.pdf

[6] http://en.wikipedia.org/wiki/Rosetta stone

13
Prelegerea 2

Cifruri de substituţie

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

2.1 Sisteme de criptare monoalfabetice


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

2.1.1 Sistemul de criptare Cezar


Sistemul de criptare Cezar este un sistem monoalfabetic: odată stabilită cheia de criptare
eK , fiecare caracter cod x se ı̂nlocuieşte prin caracterul cod x + k (mod 26) (a se vedea
Prelegerea I). Decriptarea se realizează după formula dK (x) = x − k (mod 26).
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 sistemul ı̂nlocuind literele romane cu cele greceşti şi folosea deplasarea k = 3.
Nepotul lui Cezar, ı̂mpăratul Augustus a utlizat acelaşi sistem, cu 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 inclus ı̂n ROT 13, implementat pe sistemele UNIX ([5],[3])
Evident, Cezar este un sistem generat de permutările ciclice din P26 . 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:

1
2 PRELEGEREA 2. CIFRURI DE SUBSTITUŢIE

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 al-
fabetului. După ce se termină, şirul de completează cu literele care nu existau ı̂n cuvântul
cheie, ı̂n ordine alfabetică.
De exemplu, 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 card(P26 = 26!.

2.1.2 Sistemul de criptare afin


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

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

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

sau – scris direct pentru caractere


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

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


Deoarece 3−1 = 9 (mod 26), decriptarea se realizează matematic folosind funcţia
dK (x) = 9x + 7 (sau – practic – inversând cele două linii ale tabelului de mai sus).
Condiţia cmmdc(a, 26) = 1 asigură de asemenea injectivitatea aplicaţiei eK .
De exemplu, pentru eK (x) = 10x + 1, A şi N se transformă ambele ı̂n B, iar O nu apare
ca imagine ı̂n alfabetul substituţiei.
Să studiem spaţiul cheilor K. Orice cheie K ∈ K este determinată complet de valorile
ı̂ntregi (a, b) cu (a, 26) = 1. Sunt posibile 12 valori1 pentru a : 1, 3, 5, 7, 9, 11, 15, 19, 21, 23,
25. Pentru b sunt posibile 26 valori, care se iau independent de a, cu singura excepţie
a = 1, b = 0 (care se exclude deoarece nu conduce la nici o criptare). Deci card(K) = 311,
număr suficient de mic pentru reuşita unui atac prin forţă brută.
1
Pentru un număr dat n există φ(n) numere mai mici decât n şi prime cu n, unde phi este funcţia
Euler. În particular φ(26) = 12.
2.1. SISTEME DE CRIPTARE MONOALFABETICE 3

2.1.3 Alte sisteme de criptare monoalfabetice


Sistemul de criptare Polybios
Sistemul Cezar nu este cel mai vechi de criptare. Se pare că primul astfel de sistem a fost
Polybios (istoric grec mort cu 30 ani ı̂naintea naşterii lui Cezar). Iniţial acesta a fost doar
un sistem maritim de semnalizare cu torţe; ulterior i s-a dat o semnificaţie criptografică.
Să considerăm alfabetul latin, din care eliminam o literă de frecvenţă cât mai redusă2 ;
fie aceasta W . Cele 25 litere rămase le aşezăm ı̂ntr-un pătrat 5 × 5 (numit careu Polybios)
ı̂n felul următor:
A B C D E
A A B C D E
B F G H I J
C K L M N O
D P Q R S T
E U V X Y Z

În operaţia de criptare, fiecare caracter a va fi reprezentat printr-o pereche (x, y) (x, y ∈
{A, B, C, D, E}) care dau linia respectiv coloana pe care se află a.
Astfel, textul clar MERGEM ACASA este criptat ı̂n
CCAEDCBBAECCAAACAADDAA.
Deci sistemul de criptare Polybios este o substituţie monoalfabetică cu alfabetul W =
{AA, AB, AC, . . . , EE} de 25 caractere.
Sunt diverse variante ale sistemului Polybios. Astfel, dacă se folosesc drept coordonate
cifrele 1, 2, 3, 4, 5 ı̂n loc de A, B, C, D, E, sistemul a fost folosit ı̂n penitenciarele ruseşti3
şi de către prizonierii americani din Vietnam. Este foarte simplu de ı̂nvăţat ş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 [6]).

Sistemul cavalerilor de Malta


Ordinul cavalerilor de Malta folosea un sistem de criptare monoalfabetic bazat pe stilizarea
unei cruci. Astfel, să considerăm careurile:

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

2
În limba engleză litera eliminată este de obicei J.
3
Alfabetul cirilic are 33 litere, deci ı̂n acest caz s-a utilizat un careu 6 × 6.
4 PRELEGEREA 2. CIFRURI DE SUBSTITUŢIE

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

2.1.4 Criptanaliza sistemelor de criptare monoalfabetice


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

Î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 destul 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 sı̂ 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

Î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 decriptările 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 ı̂nlcuiri, se obţine textul
6 PRELEGEREA 2. CIFRURI DE SUBSTITUŢIE

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 ”Viata 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 limba 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 %

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 ∗ .
4
Datele statistice pentru toate tabelele – inclusiv limba română – sunt din anul 1994.
2.2. SISTEME DE CRIPTARE POLIALFABETICE 7

2.2 Sisteme de criptare polialfabetice


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

2.2.1 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.2 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 doar pe baza textului criptat, dar
cedează uşor la un atac cu text clar ales.

2.2.2 Sistemul de criptare Playfair


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

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/de-criptare 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
aceiaşi linie sau coloană (de exemplu A şi E), se cercetează colţurile dreptunghiului
determinat de cele două litere (ı̂n cazul nostru A, F, O, E). Perechea AE este crip-
tată ı̂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 aceaş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ă aceeăsi 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. SISTEME DE CRIPTARE POLIALFABETICE 9

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, Palyfair 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.

2.2.3 Sistemul de criptare Vigenere


Numele sistemului6 vine de la baronul francez Blaise de Vigenere (1523 − 1596) diplomat
la curtea regelui Henry III. A fost considerat mult timp unul din cele mai bune sisteme
de criptare.

Prezentarea sistemului
Considerăm – ca şi la sistemele anterioare – cele 26 litere ale alfabetului, numerotate de
la 0 (pentru A) până la 25 (pentru Z), conform tabelului:
A B C D E F G H I J K L M
0 1 2 3 4 5 6 7 8 9 10 11 12
N O P Q R S T U V W X Y Z
13 14 15 16 17 18 19 20 21 22 23 24 25
+
Definim P = C= Z26 , K= Z26 .
O cheie K ∈ K este un cuvânt având codificarea numerică k0 k1 . . . kp−1 .
Fie a = a0 a1 . . . an codificarea textului clar care trebuie transmis. Textul criptat va fi
eK (a) = x = x0 x1 . . . xn , unde
xi = ai + ki (mod p) (mod 26) (∗)

Exemplul 2.3 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:
Codificarea textului este a = 13 20 15 14 19 21 4 13 8 0 25 8.
Sub fiecare număr din a se aşează câte un număr din K; când cheia se termină, ea
se reia ciclic, până se termină a. Deci vom avea
6
Sursa [7] indică drept real inventator al sistemului pe Giovan Batista Belaso ı̂n 1553.
10 PRELEGEREA 2. CIFRURI DE SUBSTITUŢIE

13 20 15 14 19 21 4 13 8 0 25 8
5 14 2 0 17 5 14 2 0 17 5 14
18 8 17 14 10 0 18 15 8 17 4 22
S I R O K A S P I R E W
Linia a treia conţine suma modulo 26 a numerelor de pe primele două linii, iar pe ultima
linie s-a scris textul criptat rezultat.

Decriptarea se realizează similar, scăzând (modulo 26) din codul caracterului criptat,
codul caracterului corespunzător din cheie.
O variantă a sistemul Vigenere este sistemul Beaufort (amiral englez, autorul şi a unei
scale a vânturilor care ı̂i poartă numele); aici relaţia de criptare (∗) este ı̂nlocuită cu

xi = ki (mod p) − ai (mod 26), (i ≥ 0)

Avantajul sistemului Beaufort constă ı̂n faptul că ecuaţia de criptare se aplică şi la
decriptare (ai = ki (mod p) − xi ).
Altă variantă este sistemul Autoclave, atribuit matematicianului Cardano (autorul
formulelor de rezolvare pentru ecuaţiile de gradul 3 şi 4). Aici cheia se foloseşte o singură
dată, la ı̂nceput, după care este utilizat drept cheie textul clar.
Exemplul 2.4 Să luăm cuvântul cheie COV OR şi textul clar A VENIT TOAMNA.
Putem aranja sistemul de criptare sub forma unui tabel (s-au trecut doar caracterele, nu
şi codificările lor):
Text clar: A V E N I T T O A M N A
Cheie: C O V O R A V E N I T T
Text criptat C J Z B Z T O S N U G T
Sistemul Vigenere a fost utilizat secole de-a rândul, fiind considerat ca fiind unul din
cele mai sigure sisteme de criptare. În 1917 de exemplu, prestigioasa revistă ”Scientific
American” ı̂l considera imposibil de atacat. Numai că acest sistem a fost spart de Kasiski
ı̂ncă din 1863 (şi independent de Babbage ı̂n 1854).

Criptanaliza sistemului Vigenere


Fie x = x0 x1 . . . xn−1 textul criptat cu cheia K = k0 k1 . . . kp−1 . Putem aranja acest text
sub forma unei matrici cu p linii şi dn/pe coloane, astfel

x0 xp x2p . . .
x1 xp+1 x2p+1 . . .
..
.
xp−1 x2p−1 x3p−1 ...
Elementele de pe prima linie au fost criptate după formula

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


2.2. SISTEME DE CRIPTARE POLIALFABETICE 11

adică cu 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.5 Oscar interceptează următorul text criptat, despre care bănuie că s-a
folosit Vigenere:

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

Textul este destul de scurt (146 litere) şi nu se mai ştie nici un text trimis anterior.
Folosind metoda Kasiski, Oscar găseşte secvenţa QLN CJ care apare pe rândul al doilea.
Distanţa dintre cele două apariţii este 27. De asemenea, apar două cuvinte foarte asemă-
nătoare: AQLN şi AOLN , având ı̂ntre ele distanţa 57.
Deci putem bănui că avem de-a face cu un cuvânt cheie de lungime cmmdc(27, 57) = 3.
Rescriem textul pe coloane, fiecare coloană având trei elemente. Anume:

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

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


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

În limba română, primele litere ca frecvenţă sunt A−E −I, aflate la distanţă egală una
de alta. Deci vom căuta pe fiecare linie tripletele de litere situate pe poziţiile (k, k+4, k+8)
având frecvenţă semnificativ de mare (maximă ı̂n cazul unui text lung). Pentru linia 3,
alegerea este simplă: ea este chiar A − E − I (16 apariţii din 49 posibile), deci o deplasare
0 ı̂n codul Cezar.
Pentru prima linie, sunt două posibilităţi: O − S − W (deplasare 14) sau S − W − A
(deplasare 18), ambele cu câte 18 apariţii.
12 PRELEGEREA 2. CIFRURI DE SUBSTITUŢIE

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

A doua metodă de aflare a lungimii cheii de criptare ı̂ntr-un sistem Vigenere se bazează
pe un concept definit ı̂n 1920 de Wolfe Friedman ı̂n 1920: indexul de coincidenţe ([4]).
Definiţia 2.1 Dacă x = x1 x2 . . . xn este o secvenţăe 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). De aici se poate deduce 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 indxul 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
x0 = x0 xp x2p . . .
x1 = x1 xp+1 x2p+1 . . .
..
.
xp−1 = xp−1 x2p−1 x3p−1 ...
2.3. EXERCIŢII 13

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ţă – că este 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
2.1 Demonstraţi că funcţia de criptare afină eK (x) = ax+b (mod 26) este injectivă dacă
şi numai dacă cmmdc(a, 26) = 1.

2.2 Textul clar este scris peste alfabetul V = {a, b, c, d}. Se foloseşte un sistem de
criptare monoalfabetic dat de regulile a −→ bb, b −→ aab, c −→ bab, d −→ a. Să se
arate că funcţia de criptare este injectivă.
Dar pentru: a −→ ab, b −→ ba, c −→ a, d −→ c ?
14 PRELEGEREA 2. CIFRURI DE SUBSTITUŢIE

2.3 Se definesc două sisteme de criptare cu P= {a, b}, C= {c, d} şi regulile
a −→ ccd, b −→ c pentru primul sistem,
a −→ c, b −→ dcc la al doilea sistem.
Ce cuvinte sunt criptate la fel ı̂n cele două sisteme ?

2.4 S-a recepţionat mesajul


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

2.5 Î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 putı̂n două chei generatoare.

2.6 Decriptaţi următorul mesaj

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

criptat cu un sistem afin.

2.7 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.8 Câte chei are un sistem de criptare afin ı̂n care card(V ) = 30, 100 sau 1225 ?

2.9 Să presupunem că K = (5, 21) este 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.10 Fie K = (a, b) o cheie ı̂ntr-un sistem afin peste Zn . Arătaţi că 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.
Bibliografie

[1] A. Menezes, P. Oorschot, S. Vanstome, Handbook pf Applied Cryptography

[2] A. Salomaa, Criptografie cu chei publice, Ed. Militară, Bucureşti 1994

[3] B. Schneier, Applied Cryptography, John Wiley and Sons, 1995

[4] D. Stinton, Cryptography, Theory and Practice, Chapman& Hall/CRC, 2002

[5] http://en.wikipedia.org/wiki/Caesar cipher# History and usage

[6] http://psychcentral.com/psypsych/Polybius square

[7] http://www.answers.com/topic/vigen-re-cipher

15
Prelegerea 3

Sisteme mecanice de criptare

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

3.1 Sistemul antic Skitala


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

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

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

1
2 PRELEGEREA 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
n + i, 2n + i, 3n + i, . . . (i = 1, 2, . . . , n)
care ulterior se concatenează. Există o valoare a lui n pentru care textul astfel format este
inteligibil.

3.2 Cilindrul Jefferson


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

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


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

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

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

Cu ajutorul lui, textul clar TREI CULORI construit pe una din liniile generatoare ale
cilindrului va genera următoarele linii (oricare din ele putând fi folosit drept text criptat):
4 PRELEGEREA 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 XX 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 ı̂n serviciu până până ı̂n al doilea război
mondial.

3.3 Maşini de criptat


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

3.3.1 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ă
3.3. MAŞINI DE CRIPTAT 5

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 [1] şi [5].

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.3 ([4]). Toate exemplificările referitoare la M − 209 vor fi făcute pentru
matricea
 
0 0 0 1 0 0 0 0 1 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1
 1 0 0 0 1 0 0 0 1 0 0 1 1 0 0 0 1 0 0 1 0 0 1 0 1 0 0
 

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

M = 0 0

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

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

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

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


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

Exemplul 3.4 Structura


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

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


6 ı̂n felul următor:
6 PRELEGEREA 3. SISTEME MECANICE DE CRIPTARE

1. Primii 17 vectori sunt coloanele complete ale configuraţiei de ı̂nceput.

2. Fiecare vector linie se repetă ciclic din momentul când s-a terminat.
Pe baza acestor elemente se poate descrie sistemul de criptare al maşinii C − 36. Ream-
intim, codificarea numerică a literelor este de la A − 0 până la Z − 25; toate calculele se
vor face modulo 26.
Fie x codul celui de-al i-lea caracter din textul clar şi h ponderea celui de-al i-lea
vector generat de configuraţia de ı̂nceput ı̂n raport cu matrica lug. Atunci

y = h − x − 1.

Exemplul 3.5 Să considerăm textul clar


NU PUTEM REUSI DECAT IMPREUNA
ı̂mpreună cu matricea lug şi configuraţia de ı̂nceput din exemplele anterioare. Codifi-
carea numerică a textului este
13 20 15 20 19 4 12 17 4 20 18 8 3 4 2 0 19 8 12 15 17 4 20 13 0.
După ignorarea spaţiilor libere3 , lungimea textului clar este 25.
Vom calcula ponderile primilor 25 vectori şi vom aranja totul sub forma unui tablou:

h 10 17 16 9 9 9 7 0 0 0 0 12 0
x 13 20 15 20 19 4 12 17 4 20 18 8 3
h − x − 1 22 20 0 14 15 4 20 8 21 5 7 3 22
W W A O P E U I V F H D W
h 0 18 7 0 0 18 7 9 9 19 14 9
x 4 2 0 19 8 12 15 17 4 20 13 0
h − x − 1 21 15 6 6 17 5 17 17 4 24 0 8
V P G G R F R R E Y A I
Deci textul criptat este
WWAOPEUIVFHDWVPGGRFRREYAI

Matricea lug şi configuraţia de ı̂nceput formează cheia pentru maşina C − 36. De fapt,
maşina ı̂nsăşi este o realizare fizică a acestui sistem: ea operează conform cu o cheie
stabilită anterior prin fixarea unor roţi dinţate şi a unui disc (pentru detalii vezi [5]).
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.
3
În aplicaţiile practice, spaţiul se ı̂nlocuieşte uneori cu o literă de frecvenţă redusă.
3.3. MAŞINI DE CRIPTAT 7

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.3.2 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.
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 [2], [3].
În linii mari, ea are următoarele componente:
• Tastatură: Este o componentă mecanică formată din:
8 PRELEGEREA 3. SISTEME MECANICE DE CRIPTARE

– 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 o criptare
Beaufort (maşina să poată cripta sau decripta mesajele ı̂n acelaşi timp). În ma-
joritatea 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, lucru exploatat cu succes de criptanalişti.

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


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

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

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


utilizare;
4
plugboard ı̂n engleză.
3.3. MAŞINI DE CRIPTAT 9

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

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


primul disc.

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


tabelei de conexiuni.

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

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

După fiecare apăsare a unei taste, discurile se rotesc schimbând transformarea. De exem-
plu, dacă discul din dreapta se roteşte cu i poziţii, atunci transformarea devine ρi Rρ−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

Să calculăm numărul de variante posibile pentru criptarea unui mesaj. Vom considera
o maşină Enigma cu 3 discuri. Atunci numărul de situaţii iniţiale posibile este 26·26·26 =
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 10 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.
10 PRELEGEREA 3. SISTEME MECANICE DE CRIPTARE
Bibliografie

[1] Kahn, David - The Codebreakers, MacMillan Publishing Co, New York, 1967

[2] http : //en.wikipedia.org/wiki/Enigma machine

[3] Thomas Kelly - The myth of the skytale, Cryptologia, Iulie 1998, pp. 244 - 260.

[4] Salomaa, Aarto - Criptografie cu chei publice, Ed. Militară, 1994

[5] http : //en.wikipedia.org/wiki/M − 209

[6] Collard Brigitte - Secret Language in Graeco-Roman antiquity (teză de doctorat)


http : //bcs.f ltr.ucl.ac.be/F E/07/CRY P T /Intro.html

11
Prelegerea 4

Sisteme de criptare fluide

4.1 Sisteme sincronizabile şi auto-sincronizabile


În sistemele de criptare prezentate până acum, elementele succesive ale textului clar erau
criptate folosind aceeaşi cheie K. Deci, dacă
x = x1 x2 x3 . . .
este textul clar, textul criptat este
y = y1 y2 y3 . . . = eK (x1 )eK (x2 )eK (x3 ) . . .
Sistemele de criptare de acest tip se numesc sisteme de criptare bloc (block cyphers).
Altă manieră utilizată este aceea a sistemelor de criptare fluide (stream cyphers).
Definiţia 4.1 Fie M= (P, C, K, E, D) un sistem de criptare. O secvenţă de simboluri
k1 k2 k3 . . . ∈ K+ se numeşte cheie fluidă.
Definiţia 4.2 M= (P, C, K, E, D) este un sistem fluid dacă criptează un text clar
x = x1 x2 x3 . . .
ı̂n
y = y1 y2 y3 . . . = ek1 (x1 )ek2 (x2 )ek3 (x3 ) . . .
unde
k = k1 k 2 k3 . . .
este o cheie fluidă din K+ .
Problema principală este aceea de a genera o astfel de cheie de criptare (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.
Mai multe detalii vor fi prezentate ı̂n cadrul prelegerii dedicate generatorilor de numere
pseudo-aleatoare.

1
2 PRELEGEREA 4. SISTEME DE CRIPTARE FLUIDE

Exemplul 4.1 (sistemul de criptare Vernam):


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

y i = x i ⊕ 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 spart. 1 Î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ă” (prezentată mai târziu, ı̂n cadrul sistemului de criptare DES).
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
y i = x i ⊕ 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 şir 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
În anii 0 90 comunicarea ı̂ntre Moscova şi Washington era securizată ı̂n acest mod, transportul cheii
1

de criptare fiind asigurat de curieri.


4.1. SISTEME SINCRONIZABILE ŞI AUTO-SINCRONIZABILE 3

P = C = L =Z26 , K =(Z26 )m ,
ez (x) = x + z (mod 26), dz (y) = y − z (mod 26)

Cheia z1 z2 z3 . . . este definită


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

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


descris de relaţiile

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

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

- qi - qi
qi+1 6 qi+1 6
 xi  yi
δ 
  δ 

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

(a) Criptare (b) Decriptare

Observaţia 4.1

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


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

• (sincronizare): În sistemele de criptare fluide sincrone, Alice şi Bob trebuie să-şi
sincronizeze cheia fluidă pentru a putea obţine o criptare/decriptare corectă. Dacă ı̂n
timpul transmisiei sunt inseraţi sau eliminaţi biţi ı̂n textul criptat, atunci decriptarea
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ăă a se elimina sau adăuga nimic) nu va
afecta decriptarea altor caractere (nepropagarea erorii).
4 PRELEGEREA 4. SISTEME DE CRIPTARE FLUIDE

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

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

Un astfel de sistem este reprezentat mai jos:


xi yi
- Generator zi- ⊕ - yi - Generator zi- ⊕ - xi
? ?
k k
chei fluide chei fluide

(a) Criptare (b) Decriptare

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

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

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

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

Exemplul 4.3 (Criptare cu auto-cheie)2 :


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

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

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


ez (x) = x + z (mod 26)
dz (y) = y − z (mod 26)
Să considerăm K = 13 şi să criptăm textul clar BU CU REST I.
2
Se pare că sistemul este atribuit lui Vigenere.
4.1. SISTEME SINCRONIZABILE ŞI AUTO-SINCRONIZABILE 5

Transformat ı̂n secvenţă numerică vom avea


(x1 , x2 , x3 , x4 , x5 , x6 , x7 , x8 , x9 ) = (1, 20, 2, 20, 17, 4, 18, 19, 8)
În faza de criptare, vom calcula pe rând:
y1 = e13 (x1 ) = 1 + 13 (mod 26) = 14; y2 = e14 (x2 ) = 20 + 14 (mod 26) = 8;
y3 = e8 (x3 ) = 2 + 8 (mod 26) = 10; y4 = e10 (x4 ) = 20 + 10 (mod 26) = 4;
y5 = e4 (x5 ) = 17 + 4 (mod 26) = 21; y6 = e21 (x6 ) = 4 + 21 (mod 26) = 25;
y7 = e25 (x7 ) = 18 + 25 (mod 26) = 17; y8 = e17 (x8 ) = 19 + 17 (mod 26) = 10;
y9 = e10 (x9 ) = 8 + 10 (mod 26) = 18;
Deci textul criptat este (14, 8, 10, 4, 21, 25, 17, 10, 18) sau – ı̂n litere: OIKEV ZRKS.
Pentru decriptare, vom avea:
x1 = d13 (y1 ) = 14 − 13 (mod 26) = 1; x2 = d14 (y2 ) = 8 − 14 (mod 26) = 20; ş.a.m.d.
Se observă că textul decriptat poate fi obţinut de oricine, aproape ı̂n totalitate, fără a
cunoaşte nici o cheie (aceasta fiind necesară doar pentru decriptarea primului caracter).
Deci gradul său de securitate este nul.
Ceva mai dificil este sistemul ı̂n care generarea cheii fluide se realizează cu ecuaţia
zi = xi−1 (i ≥ 2).
În acest caz, BU CU REST I se criptează ı̂n OV W W LV W LB (pentru K = 13).
Nici acest sistem de criptare cu auto-cheie nu este sigur, deoarece – evident – sunt
posibile doar 26 chei.
Proprietăţi:
1. Auto-sincronizare: Deoarece funcţia de decriptare h−1 depinde numai de un număr
fixat de caractere criptate anterior, desincronizarea – rezultată eventual prin in-
serarea sau ştergerea de caractere criptate – se poate evita. Astfel de sisteme de
criptare pot restabili proprietatea de sincronizare afectând doar un număr finit de
caractere din textul clar.
2. Propagarea limitată a erorii: Dacă starea unui sistem fluid auto-sincronizabil de-
pinde de t caractere anterioare, atunci modificarea (eventual ştergerea sau inser-
area) unui caracter din textul criptat poate duce la decriptarea incorectă a maxim
t caractere; după aceea decriptarea redevine corectă.
3. Răspândirea 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 mod-
ifica, insera sau şterge caractere) auto-sincronizarea readucând decriptarea ı̂n faza
6 PRELEGEREA 4. SISTEME DE CRIPTARE FLUIDE

normală. De aceea sunt necesare mecanisme suplimentare pentru a asigura auten-


tificarea şi integritatea datelor.

4.2 Exemple de sisteme fluide de criptare


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

1. A: complementul lui A (pe biţi);

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

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

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

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

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

7. A||B: concatenarea lui A cu B;

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


4.2. EXEMPLE DE SISTEME FLUIDE DE CRIPTARE 7

3
Algoritmul de generare a tabelei G pentru SEAL 2.0:

Intrare: Un şir a de 160 biţi şi un ı̂ntreg i (0 ≤ i < 232 ).


Ieşire: Ga (i) – şir de 160 biţi.
Algoritm 1:

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


y1 = 0x5a827999, y2 = 0x6ed9eba1,
y3 = 0x8f 1bbcdc, y4 = 0xca62c1d6
2. a. X0 ←− i;
b. for j ←− 1 to 15 do Xj ←− 0x00000000;
c. for j ←− 16 to 79 do Xj ←− ((Xj−3 ⊕ Xj−8 ⊕ Xj−14 ⊕ Xj−16 ) << 1);
d. (A, B, C, D, E) ←− (H0 , H1 , H2 , H3 , H4 ) where a = H0 H1 H2 H3 H4 ;
e. (Runda 1): for j ←− 0 to 19 do
t ←− ((A << 5) + f (B, C, D) + E + Xj + y1 );
(A, B, C, D, E) ←− (t, A, B << 30, C, D);
f. (Runda 2): for j ←− 20 to 39 do
t ←− ((A << 5) + h(B, C, D) + E + Xj + y2 );
(A, B, C, D, E) ←− (t, A, B << 30, C, D);
g. (Runda 3): for j ←− 40 to 59 do
t ←− ((A << 5) + g(B, C, D) + E + Xj + y3 );
(A, B, C, D, E) ←− (t, A, B << 30, C, D);
h. (Runda 4): for j ←− 60 to 79 do
t ←− ((A << 5) + h(B, C, D) + E + Xj + y4 );
(A, B, C, D, E) ←− (t, A, B << 30, C, D);
i. (H0 , H1 , H2 , H3 , H4 ) ←− (H0 + A, H1 + B, H2 + C, H3 + D, H4 + E);

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

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

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

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

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


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

2. Descrierea procedurii Initialize(n, l, A, B, C, D, n1 , n2 , n3 , n4 ) cu intrările n (cuvânt)


şi l (ı̂ntreg). Ieşirile sunt A, B, C, D, n1 , n2 , n3 , n4 (cuvinte).
A ←− n ⊕ R[4 · l], B ←− (n >> 8) ⊕ R[4 · l + 1],
a.
C ←− (n >> 16) ⊕ R[4 · l + 2], D ←− (n >> 24) ⊕ R[4 · l + 3].
b. for j ←− 1 to 2 do
P ←− A ∧ 0x000007f c, B ←− B + T [P/4], A ←− (A >> 9),
P ←− B ∧ 0x000007f c, C ←− C + T [P/4], B ←− (B >> 9),
P ←− C ∧ 0x000007f c, D ←− D + T [P/4], C ←− (C >> 9),
P ←− D ∧ 0x000007f c, A ←− A + T [P/4], D ←− (D >> 9),
(n1 , n2 , n3 , n4 ) ←− (D, A, B, C);
P ←− A ∧ 0x000007f c, B ←− B + T [P/4], A ←− (A >> 9),
P ←− B ∧ 0x000007f c, C ←− C + T [P/4], B ←− (B >> 9),
P ←− C ∧ 0x000007f c, D ←− D + T [P/4], C ←− (C >> 9),
P ←− D ∧ 0x000007f c, A ←− A + T [P/4], D ←− (D >> 9),

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

4. repeat
a. Initialize(n, l, A, B, C, D, n1 , n2 , n3 , n4 );
b. for i ←− 1 to 64 do
P ←− A ∧ 0x000007f c, B ←− B + T [P/4], A ←− (A >> 9), B ←− B ⊕ A;
Q ←− B ∧ 0x000007f c, C ←− C + T [Q/4], B ←− (B >> 9), C ←− C ⊕ B;
P ←− (P + C) ∧ 0x000007f c, D ←− D + T [P/4], C ←− (C >> 9), D ←− D ⊕ C;
Q ←− (Q + D) ∧ 0x000007f c, A ←− A + T [Q/4], D ←− (D >> 9), A ←− A ⊕ D;
P ←− (P + A) ∧ 0x000007f c, B ←− B + T [P/4], A ←− (A >> 9);
Q ←− (Q + B) ∧ 0x000007f c, C ←− C + T [Q/4], B ←− (B >> 9);
4.2. EXEMPLE DE SISTEME FLUIDE DE CRIPTARE 9

P ←− (P + C) ∧ 0x000007f c, D ←− D + T [P/4], C ←− (C >> 9);


Q ←− (Q + D) ∧ 0x000007f c, A ←− A + T [Q/4], D ←− (D >> 9);
y ←− y||(B + S[4 · i − 4])||(C ⊕ S[4 · i − 3])||(D + S[4 · i − 2])||(A ⊕ S[·i − 1]).
if |y| ≥ L then return(y) STOP
else if i (mod 2) = 1 then (A, C) ←− (A + n1 , C + n2 )
else (A, C) ←− (A + n3 , C + n4 )
c. l ←− l + 1.

Observaţia 4.2 ([1]) Î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 < 232 , se pot obţine astfel chei fluide de lungimi
până la 251 , păstrând 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 se răspândeşte
rapid stârnind o serie de polemici referitor la drepturile intelectuale. Se consideră că astăzi
există mai multe implementări ilegale.
RC4 este un sistem aditiv fluid de criptare.
Printre sistemele care folosesc RC4 se pot aminti SQL (Oracle), Lotus Notes, AOCE
(Apple Computer), WEP WPA CipherSaber Secure Sockets Layer (opţional) sau Secure
shell (opţional)4 RC4 este utilizat pentru criptarea fişierelor ı̂n protocoale cum ar fi RSA
SecurPC sau ı̂n standarde de comunicaţii (WEP, WPA pentru carduri, criptarea traficului
de date sau a site-urilor de web bazate pe protocolul SSL). De asemenea, el face parte
din Cellular Digital Packet Data specification.
La acest sistem, pentru generarea cheii fluide se foloseşte o stare internă (secretă)
formată din două componente:
• Un tablou de 256 octeţi: S[0], S[1], . . . S[255], numit S − box.
• Doi pointeri de câte 8-biţi (notaţi ”i” respectiv ”j”).
S − boxul este iniţializat cu o cheie de lungime variabilă – de obicei ı̂ntre 40 şi 256
biţi, folosind un algoritm numit KSA (key-sheduling algorithm).
În faza a doua, cheia fluidă este generată folosind algoritmul P RGA (pseudo-random
generation algorithm).
4
Când un sistem de criptare este marcat opţional, ı̂nsemnă că el este una din variantele oferite pentru
implementare.
10 PRELEGEREA 4. SISTEME DE CRIPTARE FLUIDE

Algoritmul PRGA de generare a cheii fluide


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

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


6
?-+ ?
?
K  ? 6

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,
orice locaţie din S − box este modificată cel puţin odată ;a 256 iteraţii.
Formal:

i := 0
j := 0
while GeneratingOutput:
i := (i + 1) mod 256
j := (j + S[i]) mod 256
swap(S[i],S[j])
output S[(S[i] + S[j]) mod 256]

Algoritmul KSA de iniţializare


KSA este utilizat pentru iniţializarea S − boxului. Fie n (1 ≤ n ≤ 255) numărul de
octeţi din cheie5 . Iniţial ı̂n S se introduce permutarea identică. Ulterior se realizează 256
transpoziţii. Formal

for i from 0 to 255 do S[i] := i


j := 0
for i from 0 to 255 do
j := (j + S[i] + key[i mod n]) mod 256
swap(S[i],S[j])

Implementarea sistemului RC4 este foarte simpla: ea lucrează cu octeţi şi necesită
256 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).
5
În majoritatea implementărilor n este ı̂n intervalul [5, 16].
4.3. EXERCIŢII 11

Securitatea RC4
Conform cu Bruce Schneier ([2]), 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 ncesară 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 solutı̂e 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ă slabiciune este exploatată de Fluhrer, Mantin şi Shamir pentru a sparge
ulterior sistemul de criptare W EP (wired equivalent pruvacy) folosit pe reţelele fără fir
802.11.
Ulterior implementările sistemului RC4 s-au apărat eliminând primii octeţi (uzual
1024) din cheia fluidă, ı̂nainte de a o folosi.

4.3 Exerciţii
1. Construiţi coduri de autentificare a mesajelor (MAC) capabile să autentifice mesajele
primite printr-un sistem fluid de criptare. (Indicaţie: a se vedea [1], paragraf 9.5.4)

2. 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 |Σ|.

6
Un astfel de număr poartă numele de nonce (new number)
12 PRELEGEREA 4. SISTEME DE CRIPTARE FLUIDE
Bibliografie

[1] Menezes, Oorschot, Vanstome - Handbook of applied cryptography, 1997

[2] Schneier, B. - Applied Cryptography, John Wiley & Sons, second edition, 1997

[3] Stinton, D. – Cryptography, Theory and Practice, Chaptan & Hall/CRC, second edi-
tion 2002

13
Prelegerea 5

Sistemul de criptare DES

5.1 Consideraţii generale


În mai 1973, Biroul Naţional de Standarde din SUA a lansat ı̂n Registrul Federal (jurnalul
oficial al guvernului) un apel la construirea unui sistem de criptare oficial care să se
numească Data Encryption Standard (DES). Firma IBM a construit acest sistem –
publicat ı̂n Registrul Federal la 17 martie 1975, modificând un sistem de criptare mai
vechi, numit Lucif er. 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.

5.2 Descrierea sistemului DES


Sistemul DES criptează un bloc de text clar de 64 biţi ı̂ntr-un text criptat tot de 64 biţi,
utilizând o cheie de 56 biţi. Algoritmul cuprinde 3 etape:
1. Fie α textul clar iniţial, de 64 biţi. Lui i se aplică o permutare IP iniţială fixată,
obţinându-se α0 = IP (α) = L0 R0 . L0 este format din primii 32 biţi ai lui α0 , iar
R0 – din ultimii 32 biţi.
2. Se efectuează 16 iteraţii (tururi) ale unei funcţii care se va preciza. La fiecare tur
se calculează Li Ri (1 ≤ i ≤ 16) după regula

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

unde ⊕ este sau - exclusiv (XOR) a două secvenţe binare. f este o funcţie care se
va preciza, iar K1 , K2 , . . . , K16 sunt secvenţe de 48 biţi calculaţi din cheia K. Se
spune că K1 , K2 , . . . , K16 sunt obţinuţi prin diversificarea cheii (key shedule).

1
2 PRELEGEREA 5. SISTEMUL DE CRIPTARE DES

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 tur poate fi inversat
imediat pentru a obţine ecuaţiile tururilor de decriptare. Acestea sunt:

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

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

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


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

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


biţi fiecare: B = B1 B2 B3 B4 B5 B6 B7 B8 .

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


4 × 16 cu elemente numere ı̂ntregi din intervalul [0, 15]. Pentru o secvenţă Bj =
b1 b2 b3 b4 b5 b6 se calculează un şir de 4 biţi Sj (Bj ) astfel: biţii b1 b6 dau reprezentarea bi-
nară a indicelui unei linii r (0 ≤ r ≤ 3) din Sj ; ceilalţi biţi b2 b3 b4 b5 dau reprezentarea
binară a indicelui unei coloane c (0 ≤ c ≤ 15) din tablou. Atunci Cj = Sj (Bj ) =
[Sj (r, c)]2 (1 ≤ j ≤ 8). ([x]2 este reprezentarea ı̂n baza 2 a numărului ı̂ntreg x).

4. Secvenţa C = C1 C2 C3 C4 C5 C6 C7 C8 – de lungime 32 – se rearanjează folosind o


permutare fixată P . Rezultatul final este f (A, J) = P (C).

Mai rămâne să specificăm funcţiile particulare folosite de sistemul DES:

• Permutarea iniţială IP este:

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

• Permutarea inversă IP −1 este:


5.2. DESCRIEREA SISTEMULUI DES 3

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

• Funcţia de expansiune E este definită de tabloul:

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

• Cele opt cutii S (S-boxes) 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
4 PRELEGEREA 5. SISTEMUL DE CRIPTARE DES

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
S8
13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11

• Permutarea fixată P este:

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

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


de 64 biţi, din care 56 definesc cheia, iar 8 (biţii de pe poziţiile 8, 16, 24, . . . , 64) sunt biţi
de paritate, aranjaţi ı̂n aşa fel ı̂ncât fiecare octet să conţină un număr impar de 1. Aceşti
8 biţi sunt ignoraţi ı̂n procesul de diversificare.

1. Din cheie se elimină biţii de paritate, iar asupra celorlalţi se aplică o permutare
P C1 , obţinându-se P C1 (K) = C0 D0 (C0 sunt primii 28 biţi din secvenţă, iar D0 –
ceilalţi 28 biţi). Permutarea P C1 este
5.3. CONTROVERSE LEGATE DE DES 5

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. Permutarea P C2 este:

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 .

5.3 Controverse legate de DES


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

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


6 PRELEGEREA 5. SISTEMUL DE CRIPTARE DES

2. Nici o cutie nu este o funcţie liniară sau afină;

3. Modificarea unui bit din operand, o S - cutie 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.

Nici un alt criteriu referitor la S - cutii nu a mai fost recunoscut public.


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

5.4 Moduri de utilizare ale DES -ului


În istoria sa, sistemul de criptare DES a cunoscut patru moduri de utilizare, moduri
extinse ulterior şi la alte sisteme:

• 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:
5.4. MODURI DE UTILIZARE ALE DES -ULUI 7

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

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


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

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


generează ı̂ntâi cheia fluidă, care se combină apoi cu textul clar. OF B (Output
Feedback Mode) este o criptare sincronizabilă aditivă: componentele cheii fluide
sunt obţinute prin criptarea iterativă a unui bloc iniţial V I de 64 biţi; se defineşte
γ0 = V I şi se calculează γ1 , γ2 , . . . după formula
γi = eK (γi−1 ), (i ≥ 1)
Secvenţa blocurilor de text clar x = α1 , α2 , . . . este criptată apoi aditiv conform
relaţiei
βi = αi ⊕ γi , (i ≥ 1)

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


biţi) şi se calculează cheia fluidă γi criptând din nou blocul de text criptat obţinut
anterior:
γi = eK (βi−1 ), (i ≥ 1)
. Ca şi la modul OF B, ı̂n etapa a doua avem
βi = αi ⊕ γi , (i ≥ 1)
De remarcat că funcţia de criptare eK este folosită aici atât la procesul de criptare
cât şi la cel de decriptare.
α1 α2 β1 - β2 -

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

Deşi metoda prezentată a fost descrisă pentru blocuri de mărime 64, modurile OF B
şi CF B pot fi extinse la blocuri de k biţi (1 ≤ k ≤ 64).
8 PRELEGEREA 5. SISTEMUL DE CRIPTARE DES

Cele patru moduri de utilizare 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.
Î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 ver-
ificarea corectitudinii dată de M AC şi – dacă totul este ı̂n ordine – va trece la decriptare.

5.5 Sisteme de criptare ı̂nrudite cu DES


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

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

unde:
m este un bloc de text clar (64 biţi),
5.5. SISTEME DE CRIPTARE ÎNRUDITE CU DES 9

e 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 de DES (astfel, cele două sisteme
pot inter-opera).
Uneori – dar destul de rar – se foloseşte pentru Triplu DES o criptare ı̂n lanţ de trei
criptări DES (numită şi DES − eee):

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

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

Observaţia 5.2 Pentru oricare din situaţiile


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

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 are ca sistem de criptare 3DES.
10 PRELEGEREA 5. SISTEMUL DE CRIPTARE DES

5.5.2 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
2 chei posibile, unele din acestea fiind chei slabe 1 Pentru a evita un atac direct, in mai
56

1984 Rivest propune creşterea mărimii cheii K fără a modifica substantı̂al algoritmul.
DES−X foloseşte două chei suplimentare K1 , K2 de câte 64 biţi şi efectuează criptarea
unui bloc de text clar x după formula

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

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

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

1
DES are 4 chei slabe K pentru care eK (eK (x)) = x. Mai există 12 chei semi-slabe – asociate ı̂n
perechi (K1 , K1 ) – pentru care eK1 (eK2 (m)) = m. 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
chilor slabe, test care nu afectează semnificativ timpul de criptare.
5.5. SISTEME DE CRIPTARE ÎNRUDITE CU DES 11

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


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

Rezultatele paşilor 11, . . . , 14 formează ieşirea dintr-o rundă; cele patru subblocuri (după
ce subblocurile doi şi trei 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 aceeiaş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 brute: pentru a
găsi cheia prin ı̂ncercări, ar fi necesare cam 2128 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.
12 PRELEGEREA 5. SISTEMUL DE CRIPTARE DES

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 sparg-
erea sistemului de criptare ı̂ntr-un timp mai scurt. O asigurare contra alegerii (aleatoare)
a acestor chei slabe ar fi completarea algoritmului de generare a subcheilor prin operarea
fiecărei subchei generate printr-un XOR cu 0x0D, unde ”x” este o cifră hexazecimală
aleasă aleator.

5.5.4 N EW DES
N EW DES a fost creat ı̂n 1985 de Robert Scott, ca un posibil ı̂nlocuitor al sistemului
DES. Algoritmul nu este o variantă a DES-ului (cum s-ar putea ı̂nţelege din numele
său, ales destul de nefericit). El operează cu texte clare grupate ı̂n blocuri de 64 biţi, dar
cheia are lungimea 120 biţi. Ca o simplificare, aici nu vom avea permutare iniţială şi nici
finală.
Blocul unui text clar este spart ı̂n 8 subblocuri de căte 8 biţi: B0 , B1 , . . . , B7 . Aceste
subblocuri trec prin 17 runde, fiecare rundă având 8 paşi.
Cheia este ı̂mpărţită ı̂n 15 subchei K0 , K1 , . . . , K14 . Procedeul de criptare este descris
destul de clar de schema următoare:

B0 B1 B2 B3 B4 B5 B6 B7
Runda 1
K0 -
- +j - +j
? ?
- f
K1 -
- +j - +j
? ?
- f
K2 -
- +j - +j
? ?
- f
K3 -
- +j - +j
? ?
- f
Runda 2  K4
+j +j
? ?
f 

+j +j
? ?
f 

 K5
+j +j
? ?
f 
 K6
+j j
? ?
f  + 
? ? ? ? ? ? ? ?
Rundele 3 − 15
5.6. EXERCIŢII 13

 K8
Runda 16 +j
?
f  +j
?

+j +j
? ?
f 
 K9
+j +j
? ?
f 
 K10
+j +j
? ?
Runda 17 f 
K11 -
- +j - +j
? ?
- f
K12 -
- +j - +j
? ?
- f

K13 -
- +j - +j
? ?
- f
K14 -
- +j - +j
? ?
- f
? ? ? ? ? ? ? 6 ?
B0 B1 B2 B3 B4 B5 B6 B7

5.6 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 O modalitate de a ı̂ntări sistemul de criptare DES constă ı̂n dubla-rea criptării:
fiind date două chei K, K 0 , se defineşte β = eK2 (eK1 (α)). Dacă eK2 = dK1 , cheile K1
şi K2 se numesc duale (şi atunci β = α). O cheie este auto-duală dacă este propria sa
duală.
1. Să se arate că dacă C0 are toţi biţii identici şi la fel D0 , atunci K este auto-duală.
2. Să se arate că următoarele chei (scrise ı̂n hexazecimal) sunt auto-duale:
0101010101010101; F EF EF EF EF EF EF EF E;
1F 1F 1F 1F 1F 1F 1F 1F ; E0E0E0E0E0E0E0E0.
3. Să se arate că dacă C0 = 0101 . . . 01 sau C0 = 1010 . . . 10, atunci
Ci XOR C17−i = 1 . . . 1; Di XOR D17−i = 1 . . . 1 (1 ≤ i ≤ 16).
4. Să se arate că următoarele perechi de chei sunt duale:
E001E001F 101F 101, 01E001E001F 101F 1;
F E1F F E1F F E0EF E0E, 1F F E1F F E0EF E0EF E;
E01F E01F F F 10F F 10, 1F E01F E00EF 10EF 1.
14 PRELEGEREA 5. SISTEMUL DE CRIPTARE DES

5.4 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, de defineşte val-
oarea 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 dat ı̂n prelegere, cu modul CBC.

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


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

Modalităţi de atac asupra DES

În această prelegere trecem ı̂n revistă principalele modalităţi de criptanaliză dezvoltate
cu scopul de a sparge sistemul DES. Ele şi-au lărgit ulterior aria de aplicabilitate, fiind
considerate astăzi mijloace de atac standard, cărora trebuie să le reziste orice sistem nou
de criptare, pentru a putea fi luat ı̂n considerare.

6.1 Compromisul spaţiu - timp al unui atac


Vom studia aici un compromis ı̂ntre spaţiu şi timp ı̂ntr-un atac cu text clar ales. Aici
Oscar va dispune de o pereche (α, β) cu β = eK (α), şi caută să determine cheia K.
Nu vom folosi o structură particulară de implementare a sistemului DES; ştim numai
că textele clare şi cele criptate sunt de 64 biţi, iar cheia are 56 biţi.
O căutare exhaustivă constă ı̂n a ı̂ncerca toate cele 256 chei posibile. Această operaţie
nu necesită memorie, dar sunt necesare ı̂n medie 255 chei pentru a o găsi pe cea bună. Sau,
fiind dat un text clar α, Oscar poate forma anterior un tabel cu 256 perechi (βk , K), astfel
ca βK = eK (α), trierea urmând a fi făcută după βK . Când Oscar obţine textul criptat β
din textul clar α, el va căuta ı̂n tabelă şi va afla imediat cheia K. Astfel, aflarea cheii va
necesita un timp de calcul neglijabil (complexitate logaritmică), dar un spaţiu de 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 atunci 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
necesar reţinerii tuturor cheilor. Algoritmul foloseşte o funcţie de reducere R, care reduce
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

1
2 PRELEGEREA 6. MODALITĂŢI DE ATAC ASUPRA DES

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 Xm0 timest . 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. El
va căuta cheia K ı̂n cele t coloane ale matricii X, consultând tabloul 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 de 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 ı̂n unul de 256 valori, deci fiecare valoare
provine ı̂n general din 28 = 256 valori). Trebuie deci verificat că β = eX(i,t−j) (α) pentru
a decide că 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:

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

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


56
2 , atunci probabilitatea ca să avem cheia K ı̂n cele t coloane ale matricii X este de circa
0, 8mt/N . Coeficientul 0, 8 provine din faptul că valorile X(i, t) pot să nu fie distincte. O
sugestie este de a alege m ≈ t ≈ N 1/3 şi de a construi N 1/3 tabele, fiecare cu altă funcţie
de reducere R. Astfel, spaţiul de memorie necesar este de 112 · N 2/3 biţi (trebuie păstraţi
2N 2/3 valori de 56 biţi). Timpul de precalcul este liniar O(N ).
6.2. ATACUL MEET-IN-THE-MIDDLE 3

Timpul de calcul al atacului este mai dificil de evaluat. De remarcat că pasul 2.1
poate fi implementat ı̂n cel mai rău caz ı̂ntr-un timp O(log m), utilizând arbori binari de
căutare. Dacă acest pas eşuează (deci nu se găseşte nici o valoare), timpul de calcul este
O(N 2/3 ). Ceilalţi paşi care urmează cresc acest timp doar cu un factor constant.

6.2 Atacul meet-in-the-middle


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

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

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

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

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

3. Pentru fiecare din cele 2n chei posibile:

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


(b) Se caută in lista creată la pasul anterior o pereche (xi , Ki ) cu xi = xj ;

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


(deoarece eKi (m) = dKj (y), deci eKj (eKi (m)) = y).

Algoritmul se reia cu alte perechi (m, y), până ce perechea de chei folosite este determinată
ı̂n mod unic.

Exemplul 6.1 Un atac direct asupra unei duble criptări cu DES ar necesita un timp de
ordin 2112 şi un spaţiu neglijabil. Dacă se foloseşte un atac meet-in-the-middle, timpul va
fi 256 iar spaţiul 256 . Strategii complementare de genul compromisului spaţiu - timp pot
duce la variante de genul: 2p spaţiu, 2q timp, unde p + q = 112 ([1]).

Vom mai ı̂ntâlni frecvent acest atac la protocoalele de stabilire a cheilor de sesiune.
4 PRELEGEREA 6. MODALITĂŢI DE ATAC ASUPRA DES

6.3 Criptanaliza diferenţială


Unul din atacurile cele mai cunoscute ale DES-ului este criptanaliza diferenţială, intro-
dusă de Biham şi Shamir ı̂n 1991. Este un atac cu text clar cunoscut. Cu toate că nu
dă o modalitate practică de spargere a funcţiei DES ı̂n 16 tururi, ea furnizează atacuri
eficace pentru variantele de DES cu un număr redus de runde. De exemplu, un DES cu
8 runde poate fi spart ı̂n câteva minute cu un P C obişnuit.
Într-un astfel de atac se ignoră permutarea iniţială IP şi inversa sa (ele nu joacă nici
un rol ı̂n criptanaliză). Ne vom mărgini la un DES restrâns pe n (n ≤ 16) runde. Deci
textul clar este L0 R0 şi Ln Rn textul criptat (vom ignora de asemenea inversarea finală
dintre Ln şi Rn ).
Criptanaliza diferenţială consideră două texte clare L0 R0 , L∗0 R0∗ şi textele criptate
corespunzătoare Ln Rn respectiv L∗n Rn∗ . Ea va efectua studii asupra mesajelor L0 0 R0 0 =
L0 R0 ⊕ L∗0 R0∗ şi Ln 0 Rn 0 = Ln Rn ⊕ L∗n Rn∗ .

Definiţia 6.1 Fie Sj (1 ≤ j ≤ 8) o S - cutie din sistemul DES. Pentru orice pereche
(Bj , Bj∗ ) de şiruri de 6 biţi, vom defini XOR-ul de intrare pentru Sj prin Bj 0 = Bj ⊕ Bj∗ ,
iar XOR-ul de ieşire prin Sj (Bj ) ⊕ Sj (Bj∗ ).

De remarcat că un XOR de intrare este o secvenţă de 6 biţi, iar un XOR de ieşire este
o secvenţă de 4 biţi.
Definiţia 6.2 Pentru orice Bj 0 ∈ Z26 se notează ∆(Bj 0 ) mulţimea perechilor (Bj , Bj∗ ) care
prin XOR dau B 0j .

Observaţia 6.1
• O mulţime ∆(Bj 0 ) conţine 26 = 64 elemente;
• ∆(Bj 0 ) = {(Bj , Bj ⊕ Bj 0 )| Bj ∈ Z26 }.

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

Exemplul 6.2 Să considerăm prima S - cutie S1 şi XOR-ul de intrare 110100. Vom
avea:
∆(110100) = {(000000, 110100), (000001, 110101), . . . , (111111, 001011)}.
Pentru fiecare pereche din ∆(110100) vom calcula XOR-ul de ieşire al lui S1 . De exemplu,
S1 (000000) = E16 = 1110, S1 (110100) = 916 = 1001 deci XOR-ul de ieşire S1 al perechii
(000000, 110100) este 0111.
Efectuând acest calcul pentru toate cele 64 perechi din ∆(110100), vom obţine distribu-
ţia următoare a XOR-urilor de ieşire pentru S1 :
6.3. CRIPTANALIZA DIFERENŢIALĂ 5

0000 0001 0010 0011 0100 0101 0110 0111


0 8 16 6 2 0 0 12

1000 1001 1010 1011 1100 1101 1110 1111


6 0 0 0 0 8 0 6

În Exemplul 6.2 au apărut numai 8 din cele 16 valori de ieşire posibile. În general, dacă
se fixează o S-cutie Sj şi un XOR de intrare diferit de 000000, se constată că vor apare
numai 75 − 80 % din valorile posibile de ieşire.
Definiţia 6.3 Pentru 1 ≤ j ≤ 8 şi secvenţele Bj 0 , Cj 0 de 6 respectiv 4 biţi, definim
INj (Bj 0 , Cj 0 ) = {Bj ∈ Z26 | Sj (Bj ) ⊕ Sj (Bj ⊕ Bj 0 ) = Cj 0 ,
Nj (Bj 0 , Cj 0 ) = card(INj (Bj 0 , Cj 0 )).
Distribuţia dată ı̂n Exemplul 6.2 dă valorile N1 (110100, C1 0 ), C1 0 ∈ Z24 . Toate aceste
valori se găsesc ı̂n Tabelul următor:
XOR de ieşire intrări posibile
0000
0001 000011, 001111, 011110, 011111, 101010, 101011, 110111, 111011
0010 000100, 000101, 001110, 010001, 010010, 010100, 011010, 011011
100000, 100101, 010110, 101110, 101111, 110000, 110001, 111010
0011 000001, 000010, 010101, 100001, 110101, 110110
0100 010011, 100111
0101
0110
0111 000000, 001000, 001101, 010111, 011000, 011101, 100011, 101001
101100, 110100, 111001, 111100
1000 001001, 001100, 011001, 101101, 111000, 111101
1001
1010
1011
1100
1101 000110, 010000, 010110, 011100, 100010, 100100, 101000, 110010
1110
1111 000111, 001010, 001011, 110011, 111110, 111111
Pentru fiecare din cele 8 S-cutii 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-o S-cutie la turul 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 cutii) este deci
B ⊕ B ∗ = (E ⊕ J) ⊕ (E ∗ ⊕ J) = E ⊕ E ∗ .
6 PRELEGEREA 6. MODALITĂŢI DE ATAC ASUPRA DES

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


ieşire depind.
Să detaliem pe grupuri de câte 6 biţi, cuvintele cu care se lucrează;

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

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

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

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

Teorema 6.1 Dacă Ej , Ej∗ sunt subsecvenţe construite pentru intrarea ı̂n S-cutia Sj , iar
Cj 0 este XOR-ul de ieşire al lui Sj , atunci biţii cheii Jj apar ı̂n mulţimea 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.

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


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

6.3.1 Atac pe trei runde


Să vedem cum se aplică aceste idei pentru un DES construit pe 3 runde. Vom ı̂ncepe cu
o pereche de texte clare L0 R0 şi L∗0 R0∗ , criptate ı̂n L3 R3 respectiv L∗3 R3∗ . Vom avea
R3 = L2 ⊕ f (R2 , K3 ) = R1 ⊕ f (R2 , K3 ) = L0 ⊕ f (R0 , K1 ) ⊕ f (R2 , K3 ).
Construcţia pentru R3∗ este similară. Deci
R3 0 = L0 0 ⊕ f (R0 , K1 ) ⊕ f (R0∗ , K1 ) ⊕ f (R2 , K3 ) ⊕ f (R2∗ , K3 ).
Să presupunem că s-a ales R0 = R0∗ , deci R0 0 = 00 . . . 0. Atunci f (R0 , K1 ) = f (R0∗ , K1 )
şi deci R3 0 = L0 0 ⊕ f (R2 , K3 ) ⊕ f (R2∗ , K3 ).
R3 0 se poate calcula pe baza textelor criptate, iar L0 0 – pe baza textelor clare; deci se
poate determina f (R2 , K3 ) ⊕ f (R2∗ , K3 ) = R3 0 ⊕ L0 0 .
6.3. CRIPTANALIZA DIFERENŢIALĂ 7

Avem f (R2 , K3 ) = P (C), f (R2∗ , K3 ) = P (C ∗ ) unde C respectiv C ∗ sunt ieşirile core-


spunzătoare din cele 8 S-cutii (reamintim, P este o permutare fixată din descrierea sis-
temului DES). Deci P (C) ⊕ P (C ∗ ) = R3 0 ⊕ L0 , de unde

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

Acesta este XOR-ul de ieşire din cele opt S-cutii 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-cutii 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 a celor 8 biţi necunoscuţi.

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


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

6.3.2 Atacul pe şase runde


Să extindem ideile precedente ı̂n cazul unui atac probabilist asupra unui sistem de criptare
DES de 6 runde. Ideea este de a alege o pereche de texte clare cu un XOR bine ales şi de
studia comportamentul probabilist al evoluţiei acestui XOR de-alungul ı̂ntregii operaţii
de criptare. Pentru aceasta este necesar să introducem o nouă noţiune.

Definiţia 6.4 Fie n ≥ 1 un număr ı̂ntreg. O caracteristică de n runde este un şir de


forma
L0 0 , R0 0 , L1 0 , R1 0 , p1 , . . . , Ln 0 , Rn 0 , pn
care verifică condiţiile:
1. Li 0 = Ri−1 0 pentru 1 ≤ i ≤ n;

2. Pentru 1 ≤ i ≤ n se aleg Li−1 Ri−1 şi L∗i−1 Ri−1 ∗


astfel ca Li−1 ⊕ L∗i−1 = Li−1 0 şi

Ri−1 ⊕Ri−1 = Ri−1 0 ; dacă Li Ri şi L∗i Ri∗ sunt calculate la a i-a rundă DES cunoscând
Li−1 Ri−1 , probabilitatea de a obţine relaţiile Li ⊕ L∗i = Li 0 , Ri ⊕ Ri∗ = Ri 0 este pi
0 0

(probabilitatea se extinde pentru toate subcheile posibile J1 , J2 , . . . , J8 ).


Probabilitatea caracteristicii este produsul p = p1 · p2 · . . . · pn .
8 PRELEGEREA 6. MODALITĂŢI DE ATAC ASUPRA DES

Observaţia 6.2
• Dacă L0 R0 şi L∗0 R0∗ sunt alese astfel ca L0 ⊕ L∗0 = L0 0 , R0 ⊕ R0∗ = R0 0 , nu se
poate afirma că probabilitatea ca pentru orice i = 1, 2, . . . , n să avem Li ⊕ L∗i =
Li 0 , Ri ⊕ Ri∗ = Ri 0 este p1 · p2 · . . . · pn . Într-adevăr, procesul de diversificare
a cheilor nu generează distribuţia independentă a sub-cheilor K1 , . . . , Kn . Totuşi,
probabilitatea p1 · p2 · . . . · pn furnizează o estimare destul de precisă a probabilităţii
reale.

• Probabilităţile pi sunt inserate ı̂n caracteristica pentru o pereche de texte clare oare-
care, având un XOR dat, pentru o distibuţie de 48 biţi ai sub-cheii. Criptanalistul
caută o cheie fixată necunoscută. De aceea el va utiliza texte clare aleatoare (cu
XOR-ul cerut), sperând ca distribuţia obţinută de XOR-urile de la a n-a rundă să
coincidă cu cea descrisă de o cheie aleatoare, deci cu p1 , p2 , . . . , pn .

Exemplul 6.4 O caracteristică pe o rundă – care forma baza atacului pe 3 runde – este
(ı̂n notaţie hexazecimală):

L0 0 = oarecare R0 0 = 0000000016
L1 0 = 0000000016 R1 0 = L0 0 p=1

O altă caracteristică poate fi de exemplu:


L0 0 = 0000000016 R0 0 = 6000000016
L1 0 = 6000000016 R1 0 = 0080820016 p = 16/64

Într-adevăr, ı̂n calculul lui f (R0 , K1 ) şi f (R0∗ , K1 ), funcţia de expansiune operează ı̂ntâi
asupra lui R0 şi R0∗ ; XOR-ul rezultatelor este 001100 . . . 0. Deci XOR-ul de intrare al lui
S1 este 001100, iar pentru celelalte S - cutii este 000000. La ieşire XOR - ul este 0000
la aceste cutii şi 1110 pentru S1 ; deoarece N( 001100, 1110) = 14 (se poate verifica), vom
avea probabilitatea 14/64.
Se obţine deci C 0 = 11100000000000000000000000000000 cu probabilitate 14/64.
Aplicând P , vom avea
P (C) ⊕ P (C ∗ ) = 00000000 10000000 10000010 00000000,
ceea ce dă 00808200 ı̂n hexazecimal. După calculul XOR-ului cu L0 0 se obţine valoarea
lui R1 0 cu probabilitate 14/64. Vom avea bineı̂nţeles L1 0 = R0 0 .

Atacul asupra DES-ului ı̂n 6 runde este bazat pe caracteristica celui pe 3 runde ı̂n modul
următor:
L0 0 = 4008000016 R0 0 = 0400000016
L1 0 = 0400000016 R1 0 = 0000000016 p = 1/4
L2 0 = 0000000016 R2 0 = 0400000016 p=1
L3 0 = 0400000016 R3 0 = 4008000016 p = 1/4
6.3. CRIPTANALIZA DIFERENŢIALĂ 9

Se ı̂ncepe cu o pereche de texte clare (L0 R0 , L∗0 R0∗ ) cu proprietatea L0 0 = 4008000016 ,


R0 0 = 0400000016 şi cu perechea de texte criptate corespunzătoare (L6 R6 , L∗6 R6∗ ). Vom
avea
R6 = L5 ⊕ f (R5 , K6 ) = R4 ⊕ f (R5 , K6 ) = L3 ⊕ f (R3 , K4 ) ⊕ f (R5 , K6 ).
În mod similar se exprimă R6∗ . Atunci
R6 0 = L3 0 ⊕ f (R3 , K4 ) ⊕ f (R3∗ , K4 ) ⊕ f (R5 , K6 ) ⊕ f (R5∗ , K6 ) (∗)
R6 0 este cunoscut. După caracteristică, avem L3 0 = 0400000016 şi R3 0 = 4008000016
cu probabilitate 1/16. Dacă s-a obţinut ı̂ntr-adevăr aşa, se poate calcula XOR - ul de
intrare al S - cutiilor la a patra rundă, după expansiune:
00100000 00000000 01010000 0000.
XOR - urile de intrare pentru S2 , S5 , S6 , S7 , S8 sunt deci 000000, de unde rezultă că
XOR - ul de ieşire este ı̂n toate aceste cazuri 0000. Rezultă că se poate calcula XOR -
ul de ieşire al acestor cinci S - cutii la runda a şasea, pe baza relaţiei (∗). Deci se poate
calcula
C1 0 C2 0 C3 0 C4 0 C5 0 C6 0 C7 0 C8 0 = P −1 (R6 0 ⊕ 0400000016 )
unde fiecare Ci 0 are lungimea 4. C2 0 , C5 0 , C6 0 , C7 0 şi C8 0 sunt respectiv XOR - urile de
ieşire ale cutiilor S2 , S5 , S6 , S7 , S8 cu probabilitate 1/16. Intrările E2 , E5 , E6 , E7 , E8 şi
E2∗ , E5∗ , E6∗ , E7∗ , E8∗ ı̂n aceste cutii se pot calcula cu relaţiile
E1 E2 E3 E4 E5 E6 E7 E8 = E(R5 ) = E(L6 )
E1∗ E2∗ E3∗ E4∗ E5∗ E6∗ E7∗ E8∗ = E(R5∗ ) = E(L∗6 )
plecând de la textele criptate, conform algoritmului:

Intrare: L0 R0 , L∗0 R0∗ , L6 R6 , L∗6 R6∗ cu L0 0 = 4008000016 , R0 0 = 0400000016 .


1. C 0 ← P −1 (R6 0 ⊕ 4008000016 )
2. E ← E(L6 ), E ∗ ← E(L∗6 )
3. for j = 2, 5, 6, 7, 8 do testj (Ej , Ej∗ , Cj 0 )

Ar fi ideal de determinat cei 30 biţi din J2 , J5 , J6 , J7 , J8 ca la atacul asupra DES -


ului ı̂n 3 runde. Problema este că aici valorile XOR - ului de ieşire la a 6 - a rundă sunt
adevărate cu probabilitate 1/16. Deci ı̂n circa 15/16 din cazuri se obţin valori aleatoare
fără interes pentru criptanaliză, valori are trebuiesc eliminate. Ce este interesant este
faptul că acest lucru este deseori posibil.

Definiţia 6.5 Fie L0 ⊕ E0∗ = E0 0 , R0 ⊕ R0∗ = R0 0 . Spunem că perechea de texte clare
(L0 R0 , L∗0 R0∗ ) este o pereche bună pentru caracteristica dată, dacă pentru orice i (1 ≤ i ≤
n) avem Li ⊕ L∗i = Li 0 , Ri ⊕ Ri∗ = Ri 0 . Altfel, avem o perechea rea.

Strategiile de calcul pentru Ej , Ej∗ , Cj 0 şi testj pentru j = 2, 5, 6, 7, 8 a fost descrisă ante-
rior. Dacă avem o pereche bună, valoarea ei apare ı̂n testj . Pentru o pereche rea, valoarea
lui Cj 0 este incorectă şi se poate presupune că toate mulţimile testj au un conţinut aleator.
O pereche rea se poate recunoaşte astfel: dacă pentru un j avem card(testj ) = 0,
perechea este sigur rea. Fiind dată o pereche rea, probabilitatea de a avea card(testj ) = 0
10 PRELEGEREA 6. MODALITĂŢI DE ATAC ASUPRA DES

pentru un anumit j, este cam 1/5 (card(testj ) = Nj (Ej 0 , Cj 0 ) şi Nj (Ej 0 , Cj 0 ) = 0 ı̂ntr-o
cincime din cazuri). Probabilitatea ca cinci mulţimi testj să fie nevide este 0, 85 ≈ 0, 33,
deci probabilitatea ca cel puţin un testj să fie vid este 0, 67. Se pot elimina astfel cam 2/3
din perechile rele prin acest test simplu, numit operaţie de filtrare. Proporţia perechilor
rele care rămân după filtrare este ce circa (15/16) · (1/3) = 5/16. Rezultă că proporţia
perechilor bune rămse după filtrare este de 1/6.

Exemplul 6.5 Să presupunem că dispunem de următoarele perechi:

text clar text criptat


86F A1C2B1F 51D3BE 1E23ED7F 2F 553971
C6F 21C2B1B51D3BE 296DE2B687AC6340

Se verifică imediat că L0 0 = 4008000016 , R0 0 = 0400000016 . Intrările şi ieşirile din S -


cutii la turul 6 se determină astfel:

j Ej Ej∗ C 0j
2 111100 010010 1101
5 111101 111100 0001
6 011010 000101 0010
7 101111 010110 1100
8 111110 101100 1101

Cele cinci mulţimi testj vor fi atunci:

j testj
2 14, 15, 26, 30, 32, 33, 48, 52
5
6 7, 24, 36, 41, 54, 59
7
8 34, 35, 48, 49

Deoarece test5 = test7 = ∅, perechea este rea şi va fi eliminată prin operaţia de filtrare.

Să presupunem acum că avem o pereche cu proprietatea testj 6= ∅ pentru j = 2, 5, 6, 7, 8,


deci care va rămâne după operaţia de filtrare. Spunem că secvenţa de 30 biţi J2 J5 J6 J7 J8
este sugerată de pereche, dacă ∀ j ∈ {2, 5, 6, 7, 8}, Jj ∈ testj . Numărul de secvenţe
sugerate este Y
card(testj ).
j∈{2,5,6,7}

Adesea, numărul de lanţuri sugerate este destul de mare (de ordinul miilor).
6.4. CRIPTANALIZA LINIARĂ 11

Să presupunem că se construieşte tabela tuturor secvenţelor sugerate de N perechi


rămase după filtrare. Pentru fiecare pereche bună, secvenţa corectă J2 J5 J6 J7 J8 este sug-
erată; deci ea va fi sugerată de n/6 ori. O secvenţă incorectă va fi sugerată de un număr
aleator de ori, deci adesea mai puţin, comparabil cu numărul lanţurilor (230 ).
Este extrem de dificil de păstrat – ca spaţiu – tabela celor 230 numere; de aceea se va
folosi un algoritm care să folosească un spaţiu mai mic. Astfel, se codifică fiecare mulţime
testj ı̂ntr-un vector Tj de lungime 64, ı̂n care a i - a coordonată (0 ≤ i ≤ 63) este 1 dacă
secvenţa de 6 biţi care reprezintă pe i ı̂n binar este ı̂n testj , 0 ı̂n caz contrar.
Pentru fiecare pereche numărul i (1 ≤ i ≤ N ) rămasă, se construiesc vectorii Tji (j =
2, 5, 6, 7, 8). Dacă I ⊆ {1, . . . , N }, spunem că I este admisibilă, dacă pentru orice j ∈
{2, 5, 6, 7, 8} există o coordonată egală cu card(I) ı̂n vectorul
Tji
X

i∈I

Dacă perechea i este bună pentru orice i ∈ I, atunci I este admisibilă. Deci, sperăm să
avem o mulţime admisibilă de mărime aproximatic N/6, ceea ce sugerează sigur o valoare
unică de 30 biţi pentru cheie. Mulţimile admisibile I pot fi generate cu un simplu algoritm
recursiv.

6.4 Criptanaliza liniară


Criptanaliza liniară este un atac cu text clar cunoscut care seamănă destul de mult cu
criptanaliza diferenţială; principala diferenţă constă ı̂n faptul că aici comparaţia se face
ı̂ntre biţii de intrare şi cei de ieşire ai aceluiaşi mesaj, nu ı̂ntre diferenţele a două mesaje
la intrare respectiv ieşire.
Pe scurt, principiul este următorul ([2]): să presupunem că putem afla o relaţie liniară
statistică ı̂ntre o submulţime de biţi din textul clar şi o submulţime de biţi de stare
care preced imediat substituţiile din ultimul rund de criptare. Altfel spus, există un set
de biţi al căror XOR se determină aproape determinist (de exemplu ia valoarea 1 cu o
probabilitate mult peste 1/2). Să considerăm acum că Oscar deţine un număr relativ
mare de perechi (text clar, text criptat) pentru care s-a folosit aceeaşi cheie de criptare
K. Pentru fiecare astfel de pereche se ı̂ncearcă decriptarea folosind toate cheile posibile la
ultimul rund de criptare. În acest calcul se determină valorile biţilor implicaţi ı̂n relaţia
liniară presupusă, verificând veridicitatea ei. Dacă relaţia se verifică, se incrementează
un contor corespunzător acestei chei. La sfârşitul procesului, cheia al cărui contor este
(mult) peste 50% din numărul perechilor verificate, va conţine valorile biţilor determinate
de relaţia dată.
Să formalizăm această idee.
Fie X1 , X2 , . . . variabile aleatoare independente care iau valori din mulţimea {0, 1} şi
p1 , p2 , . . . ∈ [0, 1] numere reale definite prin
P r[Xi = 0] = pi , i = 1, 2, . . .
12 PRELEGEREA 6. MODALITĂŢI DE ATAC ASUPRA DES

Evident,
P r[Xi = 1] = 1 − pi , i = 1, 2 . . .
Dacă i 6= j, independenţa variabilelor Xi , Xj conduce la relaţiile
P r[Xi = 0, Xj = 0] = pi pj , P r[Xi = 0, Xj = 1] = pi (1 − pj ),
P r[Xi = 1, Xj = 0] = (1 − pi )pj , P r[Xi = 1, Xj = 1] = (1 − pi )(1 − pj ).
Fie acum variabila aleatoare discretă Xi ⊕ Xj ; se verifică uşor faptul că probabilitatea ei
de distribuţie este
P r[Xi ⊕ Xj = 0] = pi pj + (1 − pi )(1 − pj )
P r[Xi ⊕ Xj = 1] = pi (1 − pj ) + (1 − pi )pj
1
Pentru a simetriza formulele, introducem o nouă variabilă numită tendinţă definită
1 1 1
 
i = pi − , i ∈ − ,
2 2 2
Atunci
1 1
P r[Xi = 0] = + i , P r[Xi = 1] = − i
2 2
Lema 6.2 Fie X1 , X2 , . . . Xn variabile aleatoare independente şi pentru 1 ≤ i1 < i2 <
. . . < ik ≤ n, fie i1 ,i2 ,...ik tendinţa variabilei aleatoare Xi1 ⊕ Xi2 ⊕ . . . ⊕ Xik . Atunci
k
i1 ,i2 ,...ik = 2k−1
Y
ij .
j=1

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


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

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

Corolarul 6.1 Fie i1 ,i2 ,...,ik tendinţa variabilei aleatoare Xi1 ⊕. . . Xik . Dacă ∃j cu ij = 0
atunci i1 ,i2 ,...,ik = 0.
1
bias ı̂n engleză
6.4. CRIPTANALIZA LINIARĂ 13

6.4.1 Aproximări liniare ale S-cutiilor

Fie S-cutia πS : {0, 1}m −→ {0, 1}n şi X = (x1 , x2 , . . . , xm ) un m-tuplu de intrare,
ales arbitrar: matematic, aceasta ı̂nseamnă că fiecare coordonată xi defineşte o variabilă
aleatoare Xi cu valori 0 sau 1, având tendinţa i = 0. Cele m variabile aleatoare sunt
independente.
Ieşirea se poate reprezenta ca un n-tuplu Y = (y1 , y2 , . . . , yn ) unde fiecare yi defineşte
o variabilă aleatoare Yi de valori 0, 1. În general, aceste n variabile aleatoare sunt depen-
dente de intrări sau ı̂ntre ele. Are loc formula

(
0 dacă (y1 , . . . , yn ) 6= πS (x1 , . . . , xm )
P r[X1 = x1 , . . . , Xm = xm , Y1 = y1 , . . . , Yn = yn ] = −m
2 dacă (y1 , . . . , yn ) = πS (x1 , . . . , xm )

Observaţia 6.3 Ultima parte a relaţiei se bazează pe faptul că


P r[X1 = x1 , . . . , Xm = xm ] = 2−m şi
P r[Y1 = y1 , . . . , Yn = yn |X1 = x1 , . . . , Xm = xm ] = 1 dacă (y1 , . . . , yn ) = πS (x1 , . . . , xm )

Cu această formulă se poate calcula tendinţa unei variabile aleatoare de tipul


Xi1 ⊕ . . . ⊕ Xik ⊕ Yj1 ⊕ . . . ⊕ Yjp .

Exemplul 6.6 Să considerăm o S-cutie πS : {0, 1}4 −→ {0, 1}4 definită
x 0 1 2 3 4 5 6 7 8 9 A B C D E F
πS (x) E 4 D 1 2 F B 8 3 A 6 C 5 9 0 7
unde toate valorile au fost exprimate ı̂n hexazecimal. Sunt deci opt variabile aleatoare
X1 , . . . , X4 , Y1 , . . . , Y4 care pot lua valorile reprezentate pe liniile tabelului de pe pagina
următoare.
Să considerăm acum variabila aleatoare X1 ⊕ X4 ⊕ Y2 . Probabilitatea ca ea sa ia
valoarea 0 poate fi determinată numărând liniile din tabel unde X1 ⊕ X4 ⊕ Y2 = 0 şi apoi
ı̂mpărţind la 16 (numărul total de linii).
1 1
Se obţine P r[X1 ⊕ X4 ⊕ Y2 = 0] = , de unde rezultă P r[X1 ⊕ X4 ⊕ Y2 = 1] = .
2 2
Tendinţa acestei variabile aleatoare este deci 0.
14 PRELEGEREA 6. MODALITĂŢI DE ATAC ASUPRA DES

X1 X2 X3 X4 Y 1 Y 2 Y 3 Y4
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

În general ı̂n Exemplul 6.6 sunt 28 = 256 variabile aleatoare de acest gen. Pentru
fiecare din ele se poate da o reprezentare uniformă de tipul:
4 4
! !
M M
ai Xi ⊕ b i Yi
i=1 i=1

unde ai , bi ∈ {0, 1}, (1 ≤ i ≤ 4). Vectorii binari (a1 , a2 , a3 , a4 ) – numiţi sume de intrare şi
(b1 , b2 , b3 , b4 ) (sume de ieşire) vor fi codificaţi prin cifre hexazecimale. Astfel, fiecare din
cele 256 variabile aleatoare se va scrie ı̂n mod unic ca o pereche de două cifre hexazecimale.

Exemplul 6.7 Variabila X1 ⊕ X4 ⊕ Y2 va avea suma de intrare (1, 0, 1, 0) 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 variabilă aleatoare de sumă de intrare a = (a1 , a2 , a3 , a4 ) şi sumă de ieşire


b = (b1 , b2 , b3 , b4 ), fie NL (a, b) numărul octeţilor binari (x1 , x2 , x3 , x4 , y1 , y2 , y3 , y4 ) cu pro-
prietăţile

1. (y1 , y2 , y3 , y4 ) = πS (x1 , x2 , x3 , x4 )
4 4
! !
M M
2. ai Xi ⊕ b i Yi = 0
i=1 i=1

Tendinţa unei astfel de variabile aleatoare este

NL (a, b) − 8
(a, b) = .
16
6.5. EXERCIŢII 15

Exemplul 6.8 Variabila din Exemplul 6.7 are NL (9, 4) = 8, deci (9, 4) = 0. Se poate
cosntrui o tabelă cu toate valorile NL – numită ”tabela de aproximare liniară”:

a/b 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 16 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
1 8 8 6 6 8 8 6 14 10 10 8 8 10 10 8 8
2 8 8 6 6 8 8 6 6 8 8 10 10 8 8 2 10
3 8 8 8 8 8 8 8 8 10 2 6 6 10 10 6 6
4 8 10 8 6 6 4 6 8 8 6 8 10 10 4 10 8
5 8 6 6 8 6 8 12 10 6 8 4 10 8 6 6 8
6 8 10 6 12 10 8 8 10 8 6 10 12 6 8 8 6
7 8 6 8 10 10 4 10 8 6 8 10 8 12 10 8 10
8 8 8 8 8 8 8 8 8 6 10 10 6 10 6 6 2
9 8 8 6 6 8 8 6 6 4 8 6 10 8 12 10 6
A 8 12 6 10 4 8 10 6 10 10 8 8 10 10 8 8
B 8 12 8 4 12 8 12 8 8 8 8 8 8 8 8 8
C 8 6 12 6 6 8 10 8 10 8 10 12 9 10 8 6
D 8 10 10 8 6 12 8 10 4 6 10 8 10 8 8 10
E 8 10 10 8 6 4 8 10 6 8 8 6 4 10 6 8
F 8 6 4 6 6 8 10 8 8 6 12 6 6 8 10 8

Pe baza unei astfel de tabele se construieşte strategia de criptanaliză liniară prezentată


la ı̂nceputul secţiunii.

6.5 Exerciţii
6.1 Fie X1 , X2 , X3 variabile aleatoare independente cu valori ı̂n {0, 1} de tendinţe 1 , 2
respectiv 3 . Demonstraţi că X1 ⊕ X2 şi X2 ⊕ X3 sunt indepedente dacă şi numai dacă
1 = 0, 3 = 0 sau 2 = ±1/2.

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

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


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

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

b) Arătaţi că orice linie din S4 poate fi transformată ı̂n orice altă linie printr-o operaţie
similară.
16 PRELEGEREA 6. MODALITĂŢI DE ATAC ASUPRA DES

6.4 Fie πS : {0, 1}m −→ {0, 1}n o S-cutie. Demonstraţi că:


a) NL (0, 0) = 2m ;
b) NL (a, 0) = 2m − 1, ∀a ∈ [0, 2m − 1];
m −1
2X
c) ∀b ∈ [0, 2 − 1],n
NL (a, b) = 22m−1 ± 2m−1 ; ???????????
a=0
m −1 2n −1
2X
NL (a, b) ∈ {2n+2m−1 , 2n+2m−1 + 2n+m−1 }.
X
d)
a=0 b=0

6.5 O S-cutie πS : {0, 1}m −→ {0, 1}n este ”balansată” dacă

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

pentru orice y ∈ {0, 1}n . Demonstraţi următoarele afirmaţii despre NL pentru o S-cutie
balansată:
a) NL (0, b) = 2m − 1, ∀b ∈ [0, 2n − 1];
n −1
2X
b) ∀a ∈ [0, 2 − 1],m
NL (a, b) = 2m+n−1 − 2n−1 + i2n
b=0
unde i este un număr ı̂ntreg din intervalul [0, 2m−n ].

6.6 Fie S-cutia definită:


x 0 1 2 3 4 5 6 7 8 9 A B C D E F
πS (x) 8 4 2 1 C 6 3 D A 5 E 7 F B 9 0
Determinaţi tabela ei de aproximaţie liniară;

6.7 Fie un sistem de criptare P = C = K care asigură confidenţialitate 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 a noduri Y şi ca arce (βi , g(βi )) (1 ≤ i ≤ N ).

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

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


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

3. Pentru fiecare γ − j ∈ Z, definim g −1 (γj ) ca fiind acel element βi astfel că g T (β −


i) = γj , unde g T este funcţia g aplicată de T ori. Cosntruiţi tabela X a perechilor
(γj , g −1 (γj )), ordonate după prima coordonată.
Un algoritm care găseşte K astfel că β = eK (α) este următorul:
6.5. EXERCIŢII 17

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 .
18 PRELEGEREA 6. MODALITĂŢI DE ATAC ASUPRA DES
Bibliografie

[1] Menezes, A, Oorschot, P, Vanstome, S - Handbook of Applied cryptography

[2] Stinton, D - Cryptography, Theory and Practicce, Chapman & Hall/CRC, 2002

19
Prelegerea 7

Sistemul de criptare AES

7.1 Istoric
La sfârşitul anilor 0 90 se decide ı̂nlocuirea sistemului de criptare DES. Motivele sunt
multiple, dar menţionăm numai două:

• În iulie 1998 sistemul DES pe 56 biţi este spart de către organizaţia Electronic
Frontier Foundation; s-a folosit un calculator construit special ı̂n acest scop, iar
timpul necesar spargerii a fost de 3 zile.

• Î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 1 . 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;
1
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.

1
2 PRELEGEREA 7. SISTEMUL DE CRIPTARE AES

• Să poate 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 au fost: secu-
ritate, cost, implementare.
În mai 2000 N IST anunţă drept sistem ”câştigător” sistemul de criptare Rijndael,
care devine oficial AES.

7.2 Scurtă prezentare a sistemelor de criptare finale


7.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.

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


cât şi ı̂n little endian 2 .

• La intrare textul clar este ”spart” ı̂n grupuri de 128 biţi (4 numere ı̂ntregi de câte 32
biţi). Prima şi a treia parte a algoritmului amestecă aceşti biţi folosind o cheie de
dimensiune variabilă (ı̂ntre 128 şi 448 biţi) şi o S-cutie 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, rotaţii (fixe sau dependente de date)
şi ı̂nmulţiri; toate calculele se fac modulo 32. Construcţia S-cutiei s-a făcut pe baza
unui algoritm public, plecând de la o serie de condiţii iniţiale clare.

Notaţiile folosite ı̂n algoritm:


2
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 .
7.2. SCURTĂ PREZENTARE A SISTEMELOR DE CRIPTARE FINALE 3

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

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

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

Faza I (Mixare preliminară):


1. for i ←− 0 to 3 do D[i] ←− D[i] + K[i];
2. for i ←− 0 to 7 do
2.1. D[1] ←− D[1] ⊕ S0[D[0, 0]];
2.2. D[1] ←− D[1] + S1[D[0, 1]];
2.3. D[2] ←− D[2] + S0[D[0, 2]];
2.4. D[3] ←− D[3] ⊕ S1[D[0, 3]];
2.5. D[0] ←− D[0] >>> 24;
2.6. if i ∈ {0, 4} then D[0] ←− D[0] + D[3];
2.6. if i ∈ {1, 5} then D[0] ←− D[0] + D[1];
2.7. (D[0], D[1], D[2], D[3]) −→ (D[3], D[0], D[1], D[2]).
Faza II (Transformări bazate pe cheie):
1. for i ←− 0 to 15 do
1.1. (o1, o2, o3) ←− E(D[0], K[2i + 4], K[2i + 5]);
1.2. D[0] <<< 13;
1.3. D[2] ←− D[2] + o2;
1.4. if i < 8 then
1.4.1. D[1] ←− D[1] + o1;
1.4.2. D[3] ←− D[3] ⊕ o3;
else
1.4.3. D[3] ←− D[3] + o1;
1.4.4. D[1] ←− D[1] ⊕ o3;
1..5. (D[0], D[1], D[2], D[3]) ←− (D[3], D[0], D[1], D[2]).
Faza III (Mixare finală):
1. for i ←− 0 to 7 do
1.1. if i ∈ {2, 6} then D[0] ←− D[0] − D[3];
1.2. if i ∈ {3, 7} then D[0] ←− D[0] − D[1];
1.3. D[1] ←− D[1] ⊕ S1[D[0, 0]];
1.4. D[2] ←− D[2] − S0[D[0, 3]];
1.5. D[3] ←− D[3] − S1[D[0, 2]];
1.6. D[3] ←− D[3] ⊕ S0[D[0, 1]];
2.5. D[0] ←− D[0] <<< 24;
2.7. (D[0], D[1], D[2], D[3]) −→ (D[3], D[0], D[1], D[2]).
4 PRELEGEREA 7. SISTEMUL DE CRIPTARE AES

2. for i ←− 0 to 3 do D[i] ←− D[i] − K[36 + i];


3. Output(D[0], D[1], D[2], D[3]).

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


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

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 ←− 0xA4A8D57B 0x5B5D193B 0xC8A8309B 0x73F 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 to
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 to
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);
7.2. SCURTĂ PREZENTARE A SISTEMELOR DE CRIPTARE FINALE 5

4.6. K[i] ←− w ⊕ (X ∧ M ).
5. output(K[]).
Cele 512 cuvinte ale S-cutiei au fost generate ı̂n aşa fel ı̂ncât să verifice condiţiile:
- Nu are valorile 0x00000000 şi 0xF 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 MARS, algoritmul de decriptare,
moduri de implementare, componentele S-cutiei etc, a se vedea [3].

7.2.2 RC6
Sistemul de criptare RC6 este o versiune a lui RC5, elaborată de laboratoarele RSA
(sub coordonarea lui Ron Rivest) cu scopul de a ı̂ndeplini criteriile AES. Este un sistem
simplu, fără atacuri practice cunoscute (sunt elaborate doar câteva atacuri teoretice),
complet parametrizat: versiunea generală este RC6−w/r/b unde mărimea cuvintelor este
w, numărul de runde este r, iar b este mărimea (ı̂n octeţi) a cheii de criptare. Versiunea
pentru AES are w = 32, r = 20. Algoritmul lucrează pe blocuri de lungime w folosind
şase operaţii: +, −, · (toate modulo 2w ), ⊕, a <<< b (rotirea lui a spre stânga cu un
număr de pozitı̂i dat cei mai puţin semnificativi log2 w biţi din b) şi a >>> b (operaţie
similară spre dreapta).
Algoritmul de criptare
Intrare:
- Textul clar stocat ı̂n cuvintele A, B, C, D;
- Numărul r de runde;
- Cheia [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 · (2B + 1)) <<< log2 w;
3.2. u ←− (D · (2D + 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 [4].
Algoritmul de diversificare a cheii S este identic cu cel de la RC5. În [5] acesta este
prezentat ı̂mpreună cu un cod pentru RC5, scris ı̂n C + +.
6 PRELEGEREA 7. SISTEMUL DE CRIPTARE AES

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ţial:
1. S[0] ←− P ;
2. for i ←− 1 to 2(r + 1) − 1 do S[i] ←− (S[i − 1] + Q) mod 232
P = 0xB7E15163 şi Q = 0x9E3779B9 sunt constante bazate pe reprezentarea binară
a lui e şi π.
În etapa a doua se efectuează un amestec ı̂ntre L şi S:
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

7.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 3 . Ea se extinde la 256 biţi punând ı̂n faţă 1 pentru
primul bit, apoi 0 pentru ceilalţi biţi – atât cât este necesar.
Algoritmul de criptare cuprinde 3 paşi:
Intrare: P (textul clar)
Ieşire: C (Textul criptat)
Algoritm:
1. B̂0 = IP (P ): (IP - permutare iniţială);

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


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

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


3
Lungimea cheii date de utilizator este variabilă, ı̂nsă algoritmul descris foloseşte chei de lungime
128, 192 sau 256 biţi.
7.2. SCURTĂ PREZENTARE A SISTEMELOR DE CRIPTARE FINALE 7

Observaţia 7.1 S-cutiile lucrează pe 4 biţi, ca şi la DES 4 . Fiecare rundă foloseşte o
singură S-cutie ı̂n 32 copii. De exemplu, runda R0 foloseşte cutia 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. Apoi vectorul intermediar obţinut trece prin transformarea liniară, producând
B1 . Analog, R1 foloseşte 32 S- cutii identice S1 pentru biţii din B1 ⊕ K1 produând un
vector intermediar care după trecerea prin L dă B2 etc.

Detalii asupra IP, F P , conţinutul şi modul de generare a S-cutiilor, precum şi o crip-
tanaliză amănunţită pot fi găsite ı̂n [2], [7]. De remarcat că la fiecare etapă IP (Bi ) =
B̂i , IP (Ki ) = K̂i .

Transformarea liniară L:
Blocul de 128 biţi dintr-o rundă este spart ı̂n patru cuvinte (X0 , X1 , X2 , X3 ) = Si (Bi ⊕Ki ).
Se aplică apoi următorii paşi:
1. X0 ←− (X0 <<< 13); 2. X2 ←− (X2 <<< 13);
3. X1 ←− X1 ⊕ X0 ⊕ X2 ; 4. X3 ←− X3 ⊕ X2 ⊕ (X0 << 3);
5. X1 ←− (X1 <<< 1); 6. X3 ←− (X3 <<< 7)
7. X0 ←− X0 ⊕ X1 ⊕ X3 ; 8. X2 ←− X2 ⊕ X3 ⊕ (X1 << 7);
9. X0 ←− (X0 <<< 5); 10. Bi+1 ←− (X0 , X1 , X2 , X3 ).

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

Generarea cheilor de rundă:


Fiecare rundă necesită 132 fragmente de câte 32 biţi. În prima fază se completează cheia
furnizată de utilizator până la 256 biţi. Apoi ea se extinde până la 33 subchei de câte 128
biţi K0 , K1 , . . . , K32 ı̂n modul următor:
Cheia K se descompune ı̂n opt cuvinte w−8 , . . . , w−1 care se extind la o cheie interme-
diară w0 , . . . , w131 prin formula

wi ←− (wi−8 ⊕ wi−5 ⊕ wi−3 ⊕ wi−1 ⊕ φ ⊕ i) <<< 11

unde φ este partea fracţionară a raportului de aur (0x9E3779B9).


Cheile de rundă sunt calculate din cheia intermediară folosind S-cutiile:
(k0 , k1 , k2 , k3 ) ←− S3 (w0 , w1 , w2 , w3 )
(k4 , k5 , k6 , k7 ) ←− S2 (w4 , w5 , w6 , w7 )
(k8 , k9 , k10 , k11 ) ←− S1 (w8 , w9 , w10 , w11 )
4
O variantă iniţială, Serpent0 folosea aceleaşi S-cutii ca DES.
8 PRELEGEREA 7. SISTEMUL DE CRIPTARE AES

(k12 , k13 , k14 , k15 ) ←− S0 (w12 , w13 , w14 , w15 )


(k16 , k17 , k18 , k19 ) ←− S7 (w16 , w17 , w18 , w19 )
......
(k124 , k125 , k126 , k127 ) ←− S4 (w124 , w125 , w126 , w127 )
(k128 , k129 , k130 , k131 ) ←− S3 (w128 , w129 , w130 , w131 )

Cheile de rundă se regrupează ı̂n

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

7.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 [6]). 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)5
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
4)
mod 28 , (0 ≤ i ≤ 15)
2
(cele patru cuvinte din textul criptat sunt scrise ca o secvenţă de opt octeţi ı̂n sistemul
little-endian).
5
Operaţia este numită whitening şi a fost introdusă ı̂n mod independent de Merkle pentru
Khuf u/Khaf re, respectiv Rivest pentru DES − X.
7.2. SCURTĂ PREZENTARE A SISTEMELOR DE CRIPTARE FINALE 9

Funcţia F
F (R0 , R1 , r) este o funcţie ternară care ı̂ntoarce două valori (F0 , F1 ). Varianta propusă
este bazată la rdul ei pe o altă funcţie g.
1. T0 ←− g(R0 ) 2. T1 ←− g(R1 <<< 8)
32
3. F0 ←− (T0 + T1 + K2r+8 ) mod 2 4. F1 ←− (T0 + 2 · T1 + K2r+9 ) mod 232
Funcţia unară g constituie esenţa sistemului de criptare Twofish:
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-cutii, dependente de cheie.
z0 01 EF 5B 5B y0
     
 z   5B EF EF 01   y1 
 
1 
3.   ←−  ·

 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 7.2 La pasul 3 se face o corespondenţă ı̂ntre octeţi şi elementele corpului
GF (28 ). Deoarece GF (28 ) ≡ GF (2)[X]/v(X) unde v(X) = X 8 + X 6 + X 5 + X 3 + 1 este
7
ai X i ∈ GF (28 ) se identifică cu octetul
X
un polinom primitiv peste Z2 . Elementul a =
i=0
7
ai 2i . Elementele matricii 4 × 4 au fost scrise ca valori hexazecimale ale octeţilor,
X

i=0
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
10 PRELEGEREA 7. SISTEMUL DE CRIPTARE AES

Octeţii si,j se obţin printr-o codificare cu un cod Reed-Solomon, pe baza formulei 
m8i
 m8i+1 
 
  
si,0 01 A4 55 87 5A 58 DB 9E  m8i+2 
  
 
 s  A4 56 82 F 3 1E C6 68 E5    m8i+3 
  
 i,1 
= ·

 si,2   02 A1 F C C1 47 AE 3D 19   m8i+4 
 
 
si,3 A4 55 87 5A 58 DB 9E 03  m
 8i+5 

 m8i+6 
 

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

• S-cutiile din funcţia g sub forma

g(X) = h(X, S)

Pentru i = 0, 1, 2, 3, S-cutia si dependentă de cheie se formează prin aplicarea lui h


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

• Cuvintele cheii expandate:


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

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


7.3. DETALII ALE SISTEMULUI DE CRIPTARE AES 11

7.3 Detalii ale sistemului de criptare AES


Din 2000, sistemul de criptare Rijndael creat de olandezii Joan Daemen şi Vincent Rijman
devine oficial sistemul AES.6 Similar sistemulelor anterioare (inclusiv DES), şi acest
sistem criptează blocuri de text clar de lungime fixă, folosind subchei ale unei chei generate
aleator. Lungimile folosite sunt de 128, 192 sau 256 biţi.
Definiţia 7.1 Un rezultat intermediar al sistemului de criptare se numeşte ”stare”.
Vom reprezenta starea unui bloc sub forma unui tablou cu 4 linii şi Nb coloane, ale cărui
elemente sunt octeţi; deci valoarea lui Nb se determină uşor: Nb = N/32, unde N este
lungimea blocului text care se criptează.
Similar, o cheie de criptare se va reprezenta printr-un tablou 4 × Nk , unde Nk = K/32
(K fiind lungimea cheii).
Exemplul 7.1 O stare cu Nb = 6 şi o cheie cu Nk = 4 au forma următoare:
a0,0 a0,1 a0,2 a0,3 a0,4 a0,5 k0,0 k0,1 k0,2 k0,3
a1,0 a1,1 a1,2 a1,3 a1,4 a1,5 k1,0 k1,1 k1,2 k1,3
a2,0 a2,1 a2,2 a2,3 a2,4 a2,5 k2,0 k2,1 k2,2 k2,3
a3,0 a3,1 a3,2 a3,3 a3,4 a3,5 k3,0 k3,1 k3,2 k3,3
Uneori, aceste blocuri se reprezintă ca un 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 componente, numite 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, numerotate 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 exemplu, 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.
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.
6
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.
12 PRELEGEREA 7. SISTEMUL DE CRIPTARE AES

Î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 N b = 4 Nb = 6 N b = 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
7.3. DETALII ALE SISTEMULUI DE CRIPTARE AES 13

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 transforma-rea afină inversă,
după care se ia inversul multiplicativ din GF (28 ) (dacă octetul nu este nul).

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

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

Exemplul 7.2 Aplicând transformarea ShiftRow stării din Exemplul 7.1 (unde
Nb = 6), vom obţine starea

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


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

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


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

• MixColumn(Stare): În această transformare, fiecare coloană a stării este privită ca


un polinom de gradul 3 cu coeficienţi ı̂n GF (28 ). Fiecare astfel de polinom este
ı̂nmulţit cu
c(X) = 0 030 X 3 + 0 010 X 2 + 0 010 X + 0 020
ı̂n algebra polinoamelor modulo X 4 + 1; polinomul c(X) este prim cu X 4 + 1, deci
va fi inversabil.
Această transformare poate fi reprezentată şi sub forma unei ı̂nmul-ţiri matriciale,
care transformă starea coloană cu coloană; anume:

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

Operaţia inversă este similară. Fiecare coloană este transformată prin ı̂nmulţire cu
polinomul invers lui c(X) modulo X 4 + 1; acesta este
d(X) = 0 0B 0 X 3 + 0 0D0 X 2 + 0 090 X + 0 0E 0

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


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

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

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


Transformarea AddRoundKey şi inversa ei sunt identice.

Algoritmul de criptare AES este format din:

1. O transformare AddRoundKey iniţială;

2. Nr − 1 runde;

3. O rundă finală.

Înainte de aplicarea acestui algoritm (sau – eventual – ı̂n paralel) se foloseşte un algoritm
de obţinere a cheilor de rundă.

7.3.1 Prelucrarea cheii de criptare


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

• Numărul total al biţilor din toate cheile de rundă este Nb (Nr + 1).

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


7.3. DETALII ALE SISTEMULUI DE CRIPTARE AES 15

• 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 + +)
{
temp = W [i − 1];
if (i % Nk == 0)
16 PRELEGEREA 7. SISTEMUL DE CRIPTARE AES

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ă ca pentru situaţia când i − 4 este
multiplu de Nk , procedura SubByte este aplicată lui W [i − 1] ı̂nainte de XOR.
Constantele de rundă sunt independente de Nk şi sunt definite prin
Rcon[i] = (RC[i], 0 000 , 0 000 , 0 000 )
unde RC[i] = αi−1 unde α este un element generator al lui GF (28 ).

Selectarea cheii de rundă


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

[1] Joan Daemen, Vincent Rijmen - The Rijndael Block Cipher Proposal,
http://csrc.nist.gov/CryptoToolkit/aes/

[2] Ross Anderson ş.a. - Serpent: A proposal for the Advanced Encryption Standard,
http://www.ftp.cl.cam.ac.uk/ftp/users/rja14/serpent.pdf

[3] Don Coppersmith ş.a. - MARS - a candidate cypher for AES,


http://www.research.ibm.com/security/mars.pdf

[4] Ronald Rivest ş.a - The RC6T M Block Cipher,


ftp://ftp.rsasecurity.com/pub/rsalabs/rc6/rc6v11.pdf

[5] Bruce Schneier - Applied Cryptography, Second Edition, John Wiley & Sons, 1996

[6] Bruce Schneier ş.a. - Twofish, http://www.counterpane.com/twofish.html

[7] Serpent homepage, http://www.cl.cam.ac.uk/ rja14/serpent.html

[8] Douglas Stinton - Cryptography, Theroy and Practice, Ed. II (2002)

17
Prelegerea 8

Criptare cu cheie publică

8.1 Consideraţii generale


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

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


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

1
2 PRELEGEREA 8. CRIPTARE CU CHEIE PUBLICĂ

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


corp finit.

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

• 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ăsară calculele pe mulţimea
punctelor unei curbe eliptice (ı̂n locul unui inel finit Zn ).

8.2 Funcţii neinversabile


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

Exemplul 8.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 8.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ă. Criptarea
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 con-
stitui 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.
8.2. FUNCŢII NEINVERSABILE 3

S Simion Pavel 6394502


O Olaru Ştefan 7781594
L Lambru Stelian 6300037
I Ilie Romeo 3134971
S Solovean Raluca 6281142
T Tecuceanu Paul 3359962
Deci, textul criptat va fi
639450 277815 946300 037313 497162 811423 359962.
De remarcat că metoda este nedeterministă; din acelaşi text clar se pot obţine enorm
de multe texte criptate. Pe de-altă parte, orice text criptat conduce la un text clar unic.
Bob va avea la dispoziţie pentru decriptare o carte de telefon scrisă ı̂n ordinea crescătoare
a numerelor. Aceasta ı̂i va permite să decripteze mesajele cu un algoritm de complexitate
O(log n).

Deci, o funcţie neinversabilă f trebuie să verifice două condiţii:


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

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


De remarcat că, din punct de vedere strict matematic, nu se cunosc astfel de funcţii. A
demonstra că există funcţii neinversabile este echivalent cu a demonstra relaţia P =
6 N P,
conjectură care stă la baza ı̂ntregii teorii criptografice (a se vedea [4],[5]). De aceea,
termenii folosiţi sunt relativi la complexitatea calculatorie. Astfel, o problemă este:
1. uşoară dacă se poate rezolva cu un algoritm cel mult liniar;

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

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


Am listat la ı̂nceput o serie de probleme N P - complete care stau la baza principaleor
sisteme de criptare cu cheie publică.

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

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 (adăugând
eventual 0 - uri ı̂n faa).f (x)vafinumărul obţinut din A prin ı̂nsumarea tuturor nu-
merelor ai aflate pe poziţiile marcate cu 1 ı̂n reprezentarea binară a lui x. Formal,
f (x) = A · BxT
unde Bx este reprezentarea binară a lui x, scrisă ca un vector coloană.
Să definim acum un sistem de criptare bazat pe problema rucsacului. Textul clar
este codificat iniţial ı̂n binar şi segmentat apoi ı̂n blocuri de câte n biţi (eventual ultimul
bloc este completat la sfârşit cu zerouri). Fiecare bloc rezultat este apoi criptat calculând
valoarea corespunzătoare a funcţiei f .
Pentru alfabetul latin sunt suficienţi 5 biţi pentru codificarea binară a literelor şi a
spaţiului. Mai exact, dacă asociem literelor A - Z reprezentările binare ale numerelor
1 − 26, vom avea:
− 00000 A − 00001 B − 00010
C − 00010 D − 00011 E − 00101
F − 00110 G − 00111 H − 01000
I − 01001 J − 01010 K − 01011
L − 01100 M − 01101 N − 01110
O − 01111 P − 10000 Q − 10001
R − 10010 S − 10011 T − 10100
U − 10101 V − 10110 W − 10111
X − 11000 Y − 11001 Z − 11010
Să considerăm un text clar, FLOARE DE COLT de exemplu. Cum fiecare caracter
se codifică ı̂n 5 biţi, ı̂n fiecare bloc intră două caractere: FL OA RE D E CO LT.
Codificând,se obţin şapte blocuri de câte 10 biţi:
0011001100 0111100001 1001000101 0000000100 0000000101 0001101111 0110010100
care conduc la textul criptat: (1814, 3243, 3204, 1165, 1118, 5321, 1811).
Să considerăm sistemul de criptare definit ı̂n Exemplul 8.3. Dacă ı̂l privim ca un
sistem clasic, (cu cheie privată) criptanalistul trebuie să afle vectorul de bază A şi apoi să
rezolve problema rucsacului.
Dacă el foloseşte metoda textelor clare alese, ı̂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.
8.3. TRAPA SECRETĂ 5

8.3 Trapa secretă


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

Exemplul 8.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 cu creştere mare 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 k şi a1 . Algoritmul se va opri la valoarea a1 .
Să presupunem că avem vectorul rucsac cu creştere mare
A = (1, 3, 5, 11, 21, 44, 87, 175, 349, 701)
şi vrem să decodificăm mesajul 278. Vom parcurge 10 paşi, sumarizaţi ı̂n tabelul:
Număr Componenta lui A Bit rezultat
278 701 0
278 349 0
278 175 1
103 87 1
16 44 0
16 21 0
16 11 1
5 5 1
0 3 0
0 1 0
Deci se obţine secvenţa binară 00110 01100 care - conform codificării din Exemplul 8.3
corespunde perechii de litere F L.

Dacă se foloseşte ı̂nsă public o astfel de informaţie, orice utilizator – inclusiv Oscar –
poate decripta mesajele folosind un algoritm liniar. Ori s-a presupus (ı̂n prima prelegere)
6 PRELEGEREA 8. CRIPTARE CU CHEIE PUBLICĂ

că pentru orice intrus aflarea mesajului clar trebuie să se reducă la rezolvarea unei prob-
leme N P - complete.

Exemplul 8.5 Pentru sistemul bazat pe problema rucsacului, Bob va proceda astfel: va
m
X
alege un număr m (m > ai ) numit modul şi un număr t, (m, t) = 1 numit multipli-
i+1
cator. Există atunci un număr s astfel ca m · s ≡ 1 (mod m).
Plecând de la vectorul cu creştere mare A = (a1 , a2 , . . . , an ) Bob generează vectorul
B = (b1 , b2 , . . . , bn ) unde bi = t · ai (mod m).
Vectorul B este declarat public pentru criptare, iar m, t şi s vor forma trapa secretă a
lui Bob.
Astfel, dacă luăm m = 1590 şi t = 43, vectorul cu creştere mare

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

devine
B = (43, 129, 215, 473, 903, 302, 561, 1165, 697, 1523),
adică cel prezentat ı̂n exemplul 8.3. În plus, s = t−1 = 37.3
Cum se va proceda: Cel care doreşte să trimită lui Bob un mesaj criptat va folosi
vectorul rucsac B şi va cripta mesajul x ı̂n y = B · BxT , conform Exemplului 8.3.
La recepţie, Bob va calcula ı̂ntâi z = s · y (mod m), după care va decripta mesajul z
folosind vectorul cu creştere mare A. Se poate arăta uşor că soluţia este chiar x.
Astfel, de exemplu Alice poate cripta mesajul F L ı̂n 2414 (cf. Exemplului 8.3). La
primirea acestui număr, Bob va determina ı̂ntâi s · 2414 = 37 · 2414 (mod 1590) = 278. În
Exemplul 8.4 s-a văzut că decriptarea mesajului 278 cu vectorul A conduce la textul clar
F L.

Putem trasa acum câteva principii generale de construire a unui sistem de criptare cu
cheie publică:

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


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

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


liniar).

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


să nu semene cu P 0 dar să fie foarte apropiată de problema P .
3
Pentru calculul inversului unui număr se poate folosi algoritmul lui Euclid. Vom dezvolta mai târziu
această idee.
8.4. SECURITATEA SISTEMELOR DE CRIPTARE CU CHEIE PU-BLICĂ 7

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


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

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


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

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

8.4 Securitatea sistemelor de criptare cu cheie pu-


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

• Dacă criptanalistul dispune de un text criptat y, el 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.

• Un criptanalist activ poate efectua cu succes un atac de tipul meet in the middle. Să
presupunem că Alice şi Bob doresc să stabilească un contact. Ei fac publice cheile de
criptare eA respectiv eB . Dacă contactul este nepersonalizat, Oscar poate controla
mesajele schimbate ı̂ntre cei doi, ı̂n felul următor:

e1B (eA , eB ) e1A


Alice  - Bob
6 6
6
1
? y1 = eB (m) - Oscar
?
y = eB (m) -

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 .
8 PRELEGEREA 8. CRIPTARE CU CHEIE PUBLICĂ

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, Oscar poate modifica sau ı̂ntârzia mesajul m dacă doreşte.

Din această cauză, aproape ı̂n toate sistemele de criptare cu cheie publică apare nece-
sitatea autentificării mesajului sau a expeditorului, precum şi aceea a confidenţialităţii.

Definiţia 8.1 Confidenţialitatea4 asigură accesul la informaţie doar părţilor autorizate


de a avea acest acces.

Definiţia 8.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 un expeditor uman se poate autentifica 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 pe calculator
sau telefon).

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


ficare - PIN).

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

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

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

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

1. Prin alterare intenţionată (de exemplu modificarea unui cont bancar, a unei adrese
de e-mail, a unui document de indetitate);
4
conform International Standards Organization (ISO)
5
de la grecescul ”authentes” = author
8.5. COMPARAŢIE ÎNTRE CRIPTAREA SIMETRICĂ ŞI CEA CU CHEIE PUBLICĂ9

2. În mod accidental (transmisii perturbate de zgomote de canal, zgârierea harddiscului)6 .


Să presupunem că Alice şi Bob sunt doi utilizatori, cu posibile conflicte de interese.
când Alice trimite un mesaj lui Bob, ambele părţi trebuie să se asigure că:
• Mesajul nu este trimis de o terţă persoană care pretinde a fi Alice;
• Bob să nu poată obliga pe Alice să ţină cont de mesaje care nu-i aparţin, iar Alice
să poată recunoaşte public 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 8.6 MAC-ul (Message Authentication Code) definit ı̂n cadrul sistemului de
criptare DES este o variantă prin care se poate asigura atât autenticitatea cât şi integri-
tatea mesajului.
Dacă se solicită şi autentificarea partenerilor, atunci se foloseşte de obicei semnătura
electronică.
Exemplul 8.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, 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 meet-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.

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


cheie publică
Avantaje ale sistemelor de criptare cu cheie simetrică:
6
De recuperarea informaţiei pierdută ı̂n acest mod se ocupă Teworia Codurilor detectoare şi corectoare
de erori.
10 PRELEGEREA 8. CRIPTARE CU CHEIE PUBLICĂ

1. Pot transmite volume mari de date. Există implementări hard care pentru unele
sisteme de criptare pot asigura rate de criptare de sute de mega-octeţi pe secundă
(sunt şi implementări soft cu rate de mega-octeţi pe secundă).

2. Cheile sunt relativ scurte.

3. Pot fi folosite ca bază de construcţie a diverselor mecanisme de criptare, cum ar fi


generatori de numere pseudo-aleatoare, generatori de funcţii de dispersie, scheme
de semnătură.

4. Prin compunere pot conduce la sisteme de criptare puternice.

5. Au o istorie bogată ı̂n evenimente şi experienţă.


Dezavantaje ale sistemelor de criptare cu cheie simetrică:
1. Cheia trebuie să rămână permament secretă ı̂n (cel putı̂n) două locuri distincte.

2. Cu cât lungimea unui mesaj criptat este mai mare, cu atât el este mai uşor de spart.

3. În reţele mari, o gestionare a cheilor devine extrem de dificilă.

4. Necesită un canal sigur de comunicare, cel puţin pentru transmiterea cheii. Acest
lucru devine dificil mai ales pentru sistemele care necesită schimbări frecvente ale
cehilor de criptare/decriptare.
Avantaje ale sistemelor de criptare cu cheie punlică
1. Sistemul este ideal pentru transmiterea informaţiei prin canale nesigure.

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

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

4. În funţie de modul de utilizare, o pereche de chei (publică,privată) poate fi păstrată


o perioadă mai lungă de timp.

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


care, componente de comerţ electronic etc.
Dezavantaje ale sistemelor de criptare cu cheie publică:
1. Sunt semnificativ mai lente decât sistemele simetrice.

2. Sunt necesare chei de lungimi mult mai mari.

3. Nu se poate garanta securitatea absolută a nici unei scheme de criptare cu cheie


publică.
8.5. COMPARAŢIE ÎNTRE CRIPTAREA SIMETRICĂ ŞI CEA CU CHEIE PUBLICĂ11

4. Implementarea trebuie realizată cu foarte mare grijă. Sisteme cu grad ridicat teo-
retic 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 8.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 autentcitate a mesajelor.
12 PRELEGEREA 8. CRIPTARE CU CHEIE PUBLICĂ
Bibliografie

[1] W. Diffie, M.E. Hellman - New Directions in Cryptography, IEEE Transactions on


Information Theory, IT-22, 6 (1976), pp. 644-654

[2] D. Stinton - Cryptographie, theorie et pratique, International Thompson Publishing


France, 1995

[3] A. Salomaa - Criptografie cu chei publice, ed. Militara, 1994

[4] P versus NP homepage, http://www.win.tue.nl/ gwoegi/P-versus-NP.htm

[5] http://en.wikipedia.org/wiki/Complexity classes P and NP

13
Prelegerea 10

Sistemul de criptare RSA

10.1 Descrierea sistemului RSA


Sistemul de criptare RSA (Rivest - Shamir - Adleman) este ı̂n acest moment cel mai
cunoscut şi uzitat sistem cu cheie publică1 . Aceasta se datorează ı̂n primul rând modalităţii
foarte simple de criptare şi decriptare, care se realizează similar – cu aceleaşi module de
calcul (proprietate ı̂ntâlnită ı̂n special la multe sisteme simetrice).
Iată ı̂n ce constă sistemul de criptare RSA:
Fie p, q numere prime impare distincte şi n = pq.
Indicatorul său Euler este φ(n) = (p − 1)(q − 1).
Fie P = C= Zn . Se defineşte
K= {(n, p, q, a, b)| n = pq, ab ≡ 1 (mod φ(n))}
Pentru K = (n, p, q, a, b) se definesc (∀x, y ∈ Zn ):
eK (x) = xb (mod n)
şi
dK (y) = y a (mod n)
Valorile n şi b sunt publice, iar p, q şi a sunt secrete.
Deoarece ab ≡ 1 (mod φ(n)), avem ab = tφ(n) + 1.
Atunci, pentru un x ∈ Zn∗ = Zn \ {0}, putem scrie (toate calculele se fac ı̂n Zn ):
 t
(xb )a ≡ xtφ(n)+1 ≡ xφ(n) x ≡ 1t x ≡ x.
Pentru x = 0 afirmaţia este banală.

Exemplul 10.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 criptare dacă
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).

1
2 PRELEGEREA 10. SISTEMUL DE CRIPTARE RSA

şi numai dacă nu este divizibil cu 2, 5 sau 7 (practic, Bob nu trebuie să factorizeze φ(n);
este suficient să verifice dacă (φ(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 9726, ea calculează
97263533 mod 11413 = 5761
şi trimite prin canal textul criptat 5761. Când Bob primeşte acest număr, el determină
57616597 mod 11413 = 9726.

Securitatea sistemului de criptare RSA se bazează pe ipoteza că funcţia eK (x) = xb mod n
este neinversabilă din punct de vedere al complexităţii, deci este imposibil pentru Oscar
să o determine. Trapa secretă de care dispune Bob pentru decriptare este descompunerea
n = pq. Deoarece Bob ştie această factorizare, el poate calcula φ(n) = (p − 1)(q − 1)
şi apoi determina exponentul de decriptare a folosind algoritmul lui Euclid extins (a se
vedea Anexa).

10.2 Implementarea sistemului RSA


Pentru a realiza criptarea, Bob trebuie să efectueze următorii paşi (fiecare din ei va fi
detaliat mai târziu):

Tabelul 10.1:

1. Generează două numere prime mari p, q;

2. Calculează n = pq şi φ(n) = (p − 1)(q − 1);

3. Alege aleator un număr b (1 < b < φ(n)) astfel ca (b, φ(n)) = 1;

4. Calculează a = b−1 mod φ(n) folosind algoritmul lui Euclid;

5. Face public n şi b.

Un atac evident al sistemului constă ı̂n ı̂ncercarea de factorizare a lui n. Dacă se


realizează aceasta, este uşor de determinat φ(n) = (p − 1)(q − 1) şi de calculat exponentul
de decriptare a plecând de la b.
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). Algo-
ritmii de factorizare actuali pot descompune numere de până la 200 cifre zecimale. Se
10.2. IMPLEMENTAREA SISTEMULUI RSA 3

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 ). Conform prelegerii anterioare, vom numi
aceasta 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 complex-
itate O(k 3 ) (deci polinomial). Acesta utilizează descompunerea binară a lui c,

s−1
ci 2i
X
c=
i=0

unde s (s ≤ k) este numărul de biţi ai lui c, iar ci ∈ {0, 1}. Exponenţierea se face doar
prin ridicări la pătrat şi maxim s ı̂nmulţiri modulare, conform algoritmului:

z ←− 1;
for i ←− s − 1 downto 0 do
z ←− z 2 mod n;
if ci = 1 then z ←− z · x mod n

Exemplul 10.2 Să reluăm datele din Exemplul 10.1. 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.
4 PRELEGEREA 10. 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, trebuiesc generate ı̂ntâi numerele prime
p, q - despre care ne ocupăm ı̂n secţiunea următoare. Etapa a doua (din Tabelul 10.1) 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 (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, cam de 100 ori la o implementare software. În [3] se dau câteva
tabele cu astfel de valori comparative, la nivelul anului 1995.

10.3 Teste de primalitate probabiliste


În realizarea sistemului de criptare RSA trebuiesc generate aleator numere prime cu număr
mare de cifre. Practic, se realizează aleator numere, a căror primalitate se testează, până se
ajunge la un număr prim. Pentru teste se folosesc algoritmi probabilişti al căror avantaj
este rapiditatea (complexitatea lor este log n) dar care pot afirma uneori primalitatea
unor numere care nu sunt prime. Aceste erori se pot reduce la o marjă acceptabilă prin
multiplicarea testelor.
Problema generării aleatoare este posibilă din următorul considerent. Un rezultat din
teoria numerelor (numit Teorema rarefierii numerelor prime) afirmă că sunt circa n/log n
numere prime mai mici decât n. Astfel, pentru un modul de 512 biţi, un număr p de 256
biţi are o probabilitate 1/logp ≈ 1/177 de a fi prim. Deci se fac ı̂n medie cam 177 generări
de numere p pentru a obţine un număr prim (dacă se foloseşte şi faptul că se generează
numai numere impare, aceasta reduce la jumătate numărul de ı̂ncercări). Rezultă că este
practic să se construiască numere mari, care sunt probabil prime, pe baza cărora să se
realizeze criptarea RSA. Vom detalia acest procedeu.
Definiţia 10.1 O problemă de decizie este o problemă care pune o ı̂ntrebare al cărui
răspuns este dicotomic (Da/Nu).
10.3. TESTE DE PRIMALITATE PROBABILISTE 5

Un algoritm probabilist este un algoritm care foloseşte numere aleatoare.


Definiţia 10.2 Un algoritm Monte - Carlo pozitiv este un algoritm probabilist care re-
zolvă o problemă de decizie ı̂n care orice răspuns pozitiv este corect, dar pentru care un
răspuns negativ poate fi incorect.
În mod similar se defineşte algoritmul Monte - Carlo negativ.
Un algoritm Monte - Carlo pozitiv are o probabilitate de eroare  dacă pentru orice
problemă al cărei răspuns ar trebui să fie pozitiv, algoritmul dă un răspuns negativ cu
probabilitatea cel mult .
Problema de decizie folosită aici, numită Problema de descompunere este
Fiind dat un număr ı̂ntreg n, se poate el descompune ı̂n produs de alte numere mai
mici ?
Vom prezenta ı̂n această secţiune doi algoritmi de tip Monte Carlo pozitiv care rezolvă
această problemă de de decizie.

10.3.1 Algoritmul Solovay - Strassen


Să reamintim ı̂ntâi câteva noţiuni matematice:
Definiţia 10.3 Fie p ≥ 3 număr prim şi a ∈ Zp∗ . Spunem că a este rest (reziduu) pătratic
modulo p dacă ecuaţia x2 ≡ a (mod p) are soluţie ı̂n Zp . În caz contrar, un număr a 6= 0
nu este rest pătratic.
Exemplul 10.3 Resturile pătratice modulo 11 sunt 1, 3, 4, 5, 9 Aceasta deoarece ı̂n Z11
avem (±1)2 = 1, (±5)2 = 3, (±2)2 = 4, (±4)2 = 5, (±3)2 = 9.
Problema resturilor pătratice constă ı̂n a decide dacă un număr n dat este sau nu un rest
pătratic. Un algoritm determinist pentru rezolvarea acestei probleme se bazează pe
Teorema 10.1 (Criteriul lui Euler). Dacă p ≥ 3 este prim, un număr a este rest pătratic
modulo p dacă şi numai dacă
p−1
a 2 ≡ 1 (mod p)
Demonstraţie: Să presupunem a ≡ x2 (mod p). Cum xp−1 ≡ 1 (mod p) (Teorema lui
Fermat) pentru x 6≡ 0 (mod p),vom avea
p−1 p−1
a 2 ≡ (x2 ) 2 ≡ xp−1 ≡ 1 (mod p).
p−1
Invers, fie a 2 ≡ 1 (mod p) şi b ∈ Zp un element primitiv (de ordin p − 1). Atunci
a ≡ bi (mod p) pentru un anumit i. Calculăm
p−1 p−1 i(p−1)
1≡a 2 ≡ (bi ) 2 ≡b 2 (mod p).
Ordinul p − 1 al lui b va divide i(p − 1)/2. Deci i este par şi rădăcinile pătrate ale lui a
sunt ±bi/2 . 2
6 PRELEGEREA 10. SISTEMUL DE CRIPTARE RSA

Definiţia 10.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 10.1 asigură că a(p−1)/2 ≡ 1 (mod p) dacă şi numai dacă a este rest pătratic
modulo p. Dacă a este multiplu de p, evident a(p−1)/2 ≡ 0 (mod p). În sfârşit, dacă a nu
este rest pătratic modulo p, avem a(p−1)/2 ≡ −1 (mod p) deoarece ap−1 ≡ 1, a(p−1)/2 6≡
1 (mod p) şi −1 este singura rădăcină pătrată diferită de 1 modulo p. Este deci adevărată
teorema următoare:

Teorema 10.2 Dacă p este număr prim impar, atunci


!
a p−1
≡a 2 (mod p)
p

Simbolul lui Legendre se poate generaliza astfel:

Definiţia 10.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 10.4 Să calculăm simbolul Jacobi . Descompunerea ı̂n factori primi
9975
2
a lui 9975este9975 = 3 · 5 · 7 ·19. Avem
  atunci
6278 2 6278
   2    
6278 6278 6278 2 3 6 8
 
= = = (−1)(−1)2 (−1)(−1) =
9975 3 5 7 19 3 5 7 19
−1

a
 
Fie n > 1 un număr impar. Dacă n este prim, atunci pentru orice a, avem ≡
n−1
n
a (mod n).
2

Invers, dacă n nu este prim, este posibil ca egalitatea de sus să fie falsă. Dacă
congruenţa se verifică, spunem că n este număr Euler pseudo - prim pentru baza a.
De exemplu, 91 este pseudo-prim pentru baza 10 deoarece
10
 
= −1 = 1045 (mod 91).
91
Putem enunţa acum testul de primalitate Solovay - Strassen pentru un număr impar
n:
10.3. TESTE DE PRIMALITATE PROBABILISTE 7

1. Se generează aleator un număr a ∈ Zn∗ ;


a
 
2. x ←− ;
n
3. if x = 0 then ”n nu este prim”
n−1
4. y ←− a 2 (mod n);

5. if x ≡ y (mod n) then ”n este prim”,


else ”n nu este prim”.

n−1
Pentru evaluarea a (mod n) se poate folosi un algoritm
2 de complexitate O((log n)3 ).
a
 
Problema este cum putem evalua simbolul Jacobi x ←− fără a factoriza pe n (altfel
n
ne ı̂nvârtim ı̂ntr-un cerc vicios !!).
Acest lucru se poate realiza folosind câteva proprietăţi. Anume:

Lema 10.1 Fie n un ı̂ntreg pozitiv impar. Atunci


x y
   
1. Dacă x ≡ y (mod n) atunci = ;
n n
(
2 1 dacă n ≡ ±1 (mod 8)
 
2. =
n −1 dacă n ≡ ±3 (mod 8)

x·y x y
     
3. = · ;
n n n

Lema 10.2 Fie m, n două numere ı̂ntregi pozitive impare. Atunci


  

m
  − n dacă m ≡ n ≡ 3 (mod 4)
= m
n n

m
altfel

Lăsăm ca exerciţiu demonstraţiile celor două leme.


7411
 
Exemplul 10.5 Să calculăm simbolul Jacobi . Vom avea succesiv:
9283
4 
7411 9283 1872 2 117 117 7411
           
=− =− =− =− =− =
9283 7411
3 
7411 7411 7411 7411 117
40 2 5 5 117 2
         
− =− = = = = −1
117 117 117 117 5 5
8 PRELEGEREA 10. SISTEMUL DE CRIPTARE RSA

 
O analiză sumară arată că se poate calcula simbolul Jacobi m n
folosind cel mult O(log n)
2
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 probabilităţii de eroare se poate găsi ı̂n [1].

10.3.2 Algoritmul Miller - Rabin


Acest algoritm este cunoscut şi sub numele de testul de tare pseudo - primalitate. Forma
sa este:

1. Se descompune n − 1 = 2k m unde m este impar;

2. Se alege aleator ı̂ntregul a ∈ [2, n − 2];

3. b ←− am (mod n)

4. if b ≡ 1 (mod n) then ”n este prim”, Stop;

5. for i ←− 0 to k − 1 do

6. if b ≡ −1 (mod n) then ”n este prim”, Stop,


else b ←− b2 (mod n)

7. ”n nu este prim”, Stop

Evident, algoritmul este polinomial, de complexitate O((log n)3 ).

Teorema 10.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 ).
10.3. TESTE DE PRIMALITATE PROBABILISTE 9

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 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 [4] 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, algorituml Miller-Rabin este un algoritm Monte-Carlo pozitiv de probabilitate
 = 1/4. 2
În general se consideră că testul Miller - Rabin este mai bun decât Solovay - Strassen.
Câteva motive:

1. Solovay - Strassen este computaţional mai complex.

2. Implementarea lui Solovay - Strasen este mai dificilă din cauza calculului simbolului
Jacobi.

3. Probabilitatea de eroare pentru Solovay - Strasen este 1/2, pe când la Miller - rabin
ea se reduce la 1/4.

4. Deoarece orice valoare a lui a pentru care testul Miller - Rabin este greşit este
un număr Euler pseudo-prim (vezi Exerciţiul 10.8), un test Miler - Rabin nu este
niciodată inferior unui test Solovay - Strasen.

Deoarece orice implementare a unui sistem RSA trebuie ı̂nsoţită de un generator de


numere prime mari, sunt necesare construcţii care să genereze rapid astfel de numere.
Schneier propune următoarea variantă ([3]):

1. Se generează un număr aleator p de n biţi.

2. Se verifică dacă primul şi ultimul bit sunt 1.


10 PRELEGEREA 10. SISTEMUL DE CRIPTARE RSA

3. Se verifică dacă p nu este divizibil cu numere prime mici (3, 5, 7, 11, . . .)4 .

4. Se aplică testul Miller - Rabin cu o valoare aleatoare a. Dacă p trece testul, se ia


altă valoare pentru a. Cinci teste sunt suficiente. Pentru viteză, se recomandă să se
ia valori mici pentru a. Dacă p eşuează la unul din cele cinci teste, se reia algoritmul.
Se apreciază că utilizarea pasului 3, cu o testare a tuturor numerelor prime până la 256
elimină aproape 80% din cazurile nefavorabile.

10.4 Anexă
10.4.1 Algoritmul lui Euclid extins
După cum se ştie, algoritmul lui Euclid constituie o modalitate eficace de determinare a
celui mai mare divizor comun a două numere ı̂ntregi pozitive. El poate fi extins pentru a
determina şi inversele elementelor dintr-un corp finit Zn .
Să reamintim ı̂ntâi algoritmul lui Euclid (forma clasică):
Fie r0 , r1 ∈ N ∗ . Se efectuează secvenţa de ı̂mpărţiri succesive:
r 0 = q1 r 1 + r 2 0 < r2 < r1
r 1 = q2 r 2 + r 3 0 < r3 < r2
..
. (1)
rm−2 = qm−1 rm−1 + rm 0 < rm < rm−1
rm−1 = qm rm .
Deoarece (r0 , r1 ) = (r1 , r2 ) = . . . = (rm−1 , rm ) = rm , rezultă că cel mai mare divizor
comun dintre r0 şi r1 este rm .
Să definim acum şirul t0 , t1 , . . . , tm astfel:
t0 = 0, t1 = 1
tj = tj−2 − qj−1 tj−1 (mod r0 ), j ≥ 2 (2)
Teorema 10.4 Pentru 0 ≤ j ≤ m avem rj ≡ tj r1 (mod r0 ) unde rj şi tj sunt definite de
(1) respectiv (2).
Demonstraţie: Se foloseşte o inducţie după j. Pentru j = 0 şi j = 1 afirmaţia este banală.
O presupunem adevărată pentru j = i − 1 şi j = i − 2 (i ≥ 2) şi să o arătăm pentru j = i.
Toate calculele se fac modulo r0 .
Conform ipotezei de inducţie, ri−2 = ti−2 r1 , ri−1 = ti−1 t1 . Acum:
ri = ri−2 − qi−1 ri−1 = ti−2 r1 − qi−1 ti−1 r1 = (ti−2 − qi−1 ri−1 )r1 = ti r1 . 2
Corolarul 10.1 Dacă (r0 , r1 ) = 1 atunci tm = r1−1 (mod r0 ).
4
Multe implementări testează divizibilitatea cu numerele prime mai mici decât 256. Eficienţa este
crescută dacă se merge până la 2000
10.4. ANEXĂ 11

Se poate da acum algoritmul extins al lui Euclid care pentru n > 1 şi b ∈ Zn∗ va determina
b−1 mod n (dacă există).

1. n0 ←− n, b0 ←− b, t0 ←− 0, t ←− 1
n0
2. q ←− , r ←− n0 − q · b0
b0
3. while r > 0 do
3.1. temp ←− t0 − q · t
3.2. if temp ≥ 0 then temp ←− temp (mod n)
else temp ←− n − ((−temp) (mod n))
3.3. n0 ←− b0 ,b0 ←− r, t0 ←− t, t ←− temp
n0
3.4. q ←− , r ←− n0 − q · b0
b0
4. if b0 6= 1 then b nu are inversă mod n
else b−1 (mod n) = t.

Exemplul 10.6 Să calculăm 28−1 mod 75, folosind algoritmului lui Euclid extins. Vom
avea pe rând:
n 0 b0 q r t0 t temp
75 28 2 19 0 1 73
28 19 1 9 1 73 3
19 9 2 1 73 3 67
9 1 9 0 3 67

Deci 28−1 mod 75 = 67.

10.4.2 Teorema chineză a resturilor


Teorema 10.5 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, (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 |(n/pi ), avem · yi ≡ 0 (mod pj ).
pi
Alegem
r
X n
x= · yi · ai (mod n).
i=1 pi
12 PRELEGEREA 10. SISTEMUL DE CRIPTARE RSA

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 . 2
pi
n
Exemplul 10.7 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 13.

10.5 Exerciţii
10.1 Demonstraţi lemele 10.1 şi 10.2.

10.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.

10.3 Să se arate că pentru orice număr n egal cu produsul primelor k (k ≥ 2) numere
prime impare testul Miller - Rabin dă rezultat corect pentru orice ı̂ntreg a ∈ [2, n − 2].

10.4 O modalitate curentă de a mări viteza de decriptare foloseşte teorema chineză a


restului. 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).
10.5. EXERCIŢII 13

(a) Demonstraţi că valoarea x returnată este de fapt y d (mod n).


(b) Pentru p = 1511, q = 2003 calculaţi dp , dq , Mp , Mq şi apoi decriptaţi textul y =
152702 folosind algoritmul din acest exerciţiu.

10.5 Pentru n = 837, 851 1189 aflaţi numărul de baze b pentru care n este un numărul
n este Euler pseudo-prim.

10.6 Scrieţi un program pentru calculul simbolului Jacobi, folosind lemele 10.1 şi 10.2.
Singura operaţie de factorizare permisă este ı̂mpărţirea la 2. valori de test:

610 20964 1234567


     
, ,
987 1987 11111111

10.7 Fie
a
   
n−1
G(n) = a|a ∈ Zn∗ , ≡ a 2 (mod n) .
n
(a) Demonstraţi că G(n) este subgrup al lui Zn . Deci, conform Teoremei lui Lan-
grance, dacă subgrupul este propriu, atunci

|Zn∗ | n−1
|G(n)| ≤ ≤ .
2 2

(b) Să presupunem că n = pk · q, unde p şi q sunt numere impare prime ı̂ntre ele, p
este prim şi k ≥ 2. Fie a = 1 + pk−1 · q. Demonstraţi că
a
 
n−1
6≡ a 2 (mod n).
n

(c) Fie n = p1 p2 . . . ps unde pi sunt numere prime impare distincte. Să presupunem
că a ≡ 1 (mod p1 ) şi a ≡ 1 (mod p2 p3 . . . ps ), unde u este un non-reziduu pătratic modulo
p1 (un astfel de a există, conform teoremei chineze a restului). Demonstraţi că
a
 
n−1
≡ −1 (mod n), a 2 6≡ −1 (mod p2 p3 . . . ps )
n
n−1
(deci a 2 6≡ −1 (mod n).
n−1
(d) Dacă n este un număr neprim impar, arătaţi că |G(n)| ≤ .
2
(e) Pe baza celor de mai sus, arătaţi că probabiltatea de eroare a testului de primalitate
Solovay - Strassen este cel mult 1/2.

10.8 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).
14 PRELEGEREA 10. SISTEMUL DE CRIPTARE RSA

10.9 Fie p un număr prim impar şi cmmdc(a, p) = 1.


a) Să presupunem că i ≥ 2 şi b2 ≡ a (mod pi−1 ). Demonstraţi că există un x ∈ Zp
unic astfel ca x2 ≡ a (mod pi ) şi x ≡ b (mod pi−1 ). Găsiţi o modalitate eifcientă de calcul
a lui x.
(b) Aplicaţi punctul anterior ı̂n următoarea situaţie: plecând de la congruenţa 62 ≡
17 (mod 19), aflaţi rădăcinile pătrate ale lui 17 modulo 192 şi modulo 193 .
(c) ∀i ≥ 1, arătaţi că numărul soluţiilor congruenţei x2 ≡ a (mod pi ) este 0 sau 2.

10.10 Folosind algoritmul lui Euclid extins, calculaţi inversele:

17−1 (mod 101), 357−1 (mod 1234), 3125−1 (mod 9987)

10.11 Fie aplicaţia u : Z105 −→ Z3 × Z5 × Z7 definită prin

u(x) = (x (mod 3), x (mod 5), x (mod 7))

Să se găsească o formulă pentru u−1 şi să se determine cu ajutorul ei u−1 (2, 2, 3).

10.12 Să se rezolve sistemul de congruenţe

x ≡ 12 (mod 25), x ≡ 9 (mod 26), x ≡ 23 (mod 27)

10.13 Să se rezolve sistemul de congruenţe

13 · x ≡ 4 (mod 99), 15 · x ≡ 56 (mod 101)


Bibliografie

[1] D. Stinton, Cryptography, Theory et Pratice, Second Edition, Chapman & Hall/CRC
2002

[2] A. Salomaa, Criptografie cu chei publice, Ed. Militară, 1994

[3] B. Schneier, Applied Cryptography, Second Edition, John Wiley & Sons, 1996

[4] A. Menezes, P. Oorschot, S. Vanstome, Handbook of Applied Cryptography,

[5] R. Rivest, A. Shamir, L. Adleman, A Method for Obtaining Digital Signatures and
Public-Key Cryptosystems, Communications of the ACM, Vol. 21 (2), 1978, pages
120–126.

15
Prelegerea 11

Securitatea sistemului RSA

Vom trece ı̂n revistă câteva modalităţi de atac ale sistemelor de criptare RSA.
Ca o primă observaţie, RSA nu rezistă la un atac de tipul meet-in-the middle, strategia
fiind cea prezentată ı̂n cazul general al sistemelor de criptare cu cheie publică. De aceea,
un sistem RSA este ı̂nsoţit permanent de un certificat generat conform unui protocol
P KI (Public Key Infrastructure) şi – bineı̂nţeles – de un generator de numere prime.

11.1 Informaţii despre p şi q


Evident, cunoaşterea lui φ(n) este suficientă pentru spargerea sistemului. În acest caz,
totul se reduce la rezolvarea ı̂n N 0 timesN a sistemului
(
pq = n
(p − 1)(q − 1) = φ(n)
sau - după substituţie - a ecuaţiei
X 2 − (n − φ(n) + 1)X + n = 0
Deci, dacă Oscar determină φ(n), el poate factoriza n şi sparge sistemul. Cu alte cuvinte,
calculul lui φ(n) nu este mai simplu decât factorizarea lui n.
De asemenea, o slăbiciune constă ı̂n alegerea unor numere p, q prime apropiate unul
de altul. În acest caz (cu p >√q), vom avea (p − q)/2 un număr foarte mic, iar (p + q)/2
un număr foarte apropiat de n. În plus,
(p + q)2 (p − q)2
−n= ,
4 4
deci membrul stâng este pătrat perfect. √
Atunci, pentru factorizarea lui n se testează toate numerele ı̂ntregi x > n până se
găseşte unul astfel ı̂ncât x2 − n este pătrat perfect; fie acesta y 2 . Atunci vom avea imediat
p = x + y, q = x − y.

1
2 PRELEGEREA 11. SECURITATEA SISTEMULUI RSA


Exemplul 11.1 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 prin lungime.

11.2 Exponentul de decriptare


11.2.1 Factorizarea modulului ştiind exponentul de decriptare
Dacă există un algoritm care calculează exponentul de decriptare a, acesta poate fi utilizat
ca oracol1 ı̂ntr-un algoritm probabilist care descompune n. Deci, se poate spune că dacă
a este descoperit, secretul factorizării lui n este compromis; deci Bob va trebui să schimbe
nu numai exponentul de decriptare, ci şi modulul n.
Algoritmul de descompunere care va fi descris este de tip Las Vegas.

Definiţia 11.1 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 11.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 rezultă că 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 11.2 Fie n = 403 = 13 · 31. Cele patru rădăcini pătrate ale lui 1 modulo 403
sunt 1, 92, 311 şi 402.
1
program care răspunde numai cu Da/Nu la o ı̂ntrebare - tip a utilizatorului
11.2. EXPONENTUL DE DECRIPTARE 3

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, construind 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ă des-compunerea
lui n printr-un calcul de complexitate polinomială.
Exemplul 11.3 Fie n = 89855713, b = 34986517, a = 82330933 şi să considerăm că
s-a tras 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 11.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. 2
Se poate arăta ([2]) că acest algoritm se termină cu succes cu probabilitate 1/2.
4 PRELEGEREA 11. SECURITATEA SISTEMULUI RSA

11.2.2 Atacul lui Wiener


În [4] este dezvoltat un atac asupra sistemului de criptare RSA ı̂n care exponentul de
decriptare a este mic; mai exact, trebuie verificate condiţiile

3a < n1/4 , q < p < 2q.

Deci, dacă n are j biţi, atunci atacul va fi eficient pentru orice sistem de criptare RSA ı̂n
care a are mai puţin de j/4 − 1 biţi, iar p şi q sunt suficient de apropiaţi2 .
Din condiţia a · b ≡ 1 (mod φ(n)) rezultă că există un număr ı̂ntreg t astfel ca

a · b − t · φ(n) = 1.

Pe de-altă parte, din n = pq > q 2 rezultă q < n, deci

0 < n − φ(n) = pq − (p − 1)(q − 1) = p + q − 1 < 2q + q − 1 < 3q < 3 n

Pe baza acestor relaţii, putem evalua



b t ab − tn 1 + t(φ(n) − n) 3t n 3·t
− =

= < = √
n a an an an a n

Deoarece t < a (evident), vom avea 3 · t < 3 · a < n1/4 şi deci

b t 1 1
− < < .

n a a · n 1/4 3 · a2

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 11.2 O fracţie continuă (finită) este un m-tuplu de numere naturale [q1 , q2 , . . . , qm ]
care reprezintă notarea expresiei
1
q1 + 1
q2 + q3 +...+ q1
m

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.
2
Bob poate fi tentat să aleagă astfel de parametri, pentru creşterea vitezei de decriptare; reamintim,
RSA este un sistem relativ lent.
11.2. EXPONENTUL DE DECRIPTARE 5

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 = q1 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 11.4 Să dezvoltăm ı̂n fracţie continuă 34/99. Folosind algoritmul lui Euclid
se obţine [0, 2, 1, 10, 3], care este notarea fracţiei
34 1
=0+
99 2 + 1+ 1 1
10+ 1
3

Convergenţele acestei fracţii sunt:


[0] = 0
[0, 2] = 1/2
[0, 2, 1] = 1/3
[0, 2, 1, 10] = 11/32
[0, 2, 1, 10, 3] = 34/99
Este adevărată următoarea teoremă ([4],[2]):
Teorema 11.1 Dacă cmmdc(a, b) = cmmdc(c, d) = 1 şi
a c 1

− <

b
d 2 · d2
atunci c/d este una din convergenţele dezvoltării ı̂n fracţie continuă a lui a/b.
Să revenim acum la sistemul de criptare RSA. În condiţiile 3a < n1/4 şi q < p < 2q,
putem da următorul algoritm de factorizare a lui n:

1. Plecând de la n şi b (publice), se află dezvoltarea ı̂n fracţie continuă a lui b/n
(folosind algoritmul lui Euclid).

2. Se parcurg pe rând convergenţele acestei dezvoltări. Dacă există convergenţa t/a


a·b−1
care verifică t|(a · b − 1), se calculează φ(n) = .
t
3. Cu n şi φ(n) se află p şi q conform metodei din prima secţiune a acestei prelegeri.

Dacă sunt ı̂ndeplinite ipotezele de la ı̂nceputul acestui paragraf, Teorema 11.1 asigură că
există o convergenţă care satisface pasul 2 al algoritmului.
Ţinând cont de observaţiile anterioare, algoritmul lui Wiener poate fi detaliat:
6 PRELEGEREA 11. SECURITATEA SISTEMULUI RSA

Intrare: [q1 , q2 , . . . , qm ] - dezvoltarea ı̂n fracţie continuă a lui b/n.


Algoritm:
1 c0 ←− 1, c1 ←− q1 , d0 ←− 0, d1 ←− 1;
2. for j ←− 1 to m do
2.1. if cj |(dj · b − 1) then
2.1.1. m ←− (dj · b − 1)/cj ;
2.1.2. Fie p, q rădăcinile ecuaţiei x2 − (n − m + 1)x + n = 0
2.1.3. if p, q ∈ Zn then return(p, q);
2.2. j ←− j + 1;
2.3. cj ←− qj · cj−1 + ck−2 , dj ←− qj · dj−1 + dj−2 ;
3. return(”eşec”);

Exemplul 11.5 Să presupunem că n = 160523347, b = 60728973. Dezvoltarea ı̂n fracţie
continuă a lui b/n este

[0, 2, 1, 1, 1, 4, 12, 102, 1, 1, 2, 3, 2, 2, 36]


1 1 2 3 14
Primele convergenţe sunt: 0, , , , , ...
2 3 5 8 37
Primele cinci convergenţe nu verifică condiţia de divizibilitate. Pentru 14/37 avem
ı̂nsă:
37 · 60728973 − 1
m= = 160498000
14
Rezolvând ecuaţia x2 − 25348x + 160523347 = 0 obţinem rădăcinile 12347 şi 13001. Deci
avem factorizarea
160523347 = 12347 · 13001

11.3 Informaţie parţială despre textul clar


Să studiem puţin informaţia din textul clar care ar putea trăda sistemul de criptare RSA.
Ştiind că y = eK (x), vom considera două exemple de informaţie parţială dată de y despre
x:

1. par(y) - dă valoarea ultimului bit din scrierea binară a lui x;

2. jum(y) - va da 0 dacă 0 ≤ x < n/2, 1 dacă n/2 ≤ x ≤ n − 1.

Vom arăta ([3]) că orice algoritm care poate calcula par(y) sau jum(y) poate fi utilizat ca
oracol pentru regăsirea textului clar x. Altfel spus, a calcula una din aceste funcţii este
la fel de dificil cu a decripta tot textul y.
Faptul că cele două funcţii sunt polinomial echivalente rezultă din

jum(y) = par(y · eK (2) mod n) par(y) = jum(y · eK (2−1 ) mod n)


11.3. INFORMAŢIE PARŢIALĂ DESPRE TEXTUL CLAR 7

şi din relaţia eK (x1 x2 ) = eK (x1 )eK (x2 ).


Să arătăm acum cum se poate calcula x = dK (y) cu ajutorul unui oracol care dă
valoarea jum(y):

1. k ←− [log2 n];
2. for i = 0 to k do
2.1. yi ←− jum(y)
2.2. y ←− (y · eK (2)) mod n
3. jos ←− 0;
4. sus ←− n;
5. for i = 0 to k do
5.1. mijloc ←− (jos + sus)/2;
5.2. if yi = 1 then jos ←− mijloc
else sus ←− mijloc
6. x ←− [sus]

La pasul 2 se calculează yi = jum(y · (eK (2))i ) = jum(eK (x · 2i )) pentru 0 ≤ i ≤ [log2 n].


Se observă că
n
 
jum(eK (x)) = 0 ⇐⇒ x ∈ 0,
2
n n 3n
   
jum(eK (2x)) = 0 ⇐⇒ x ∈ 0, ∪ ,
4 2 4
n n 3n n 5n 3n 7n
       
jum(eK (4x)) = 0 ⇐⇒ x ∈ 0, ∪ , ∪ , ∪ , , etc.
8 4 8 2 8 4 8
În acest mod, x se poate localiza printr-o căutare binară, realizată la paşii 7 − 11.

Exemplul 11.6 Fie n = 1457, b = 779, iar textul criptat este y = 722. Calculăm
eK (2) = 946. Să presupunem că oracolul jum din pasul 3 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 PRELEGEREA 11. SECURITATEA SISTEMULUI RSA

i jos mijloc sus


0 0, 00 728, 50 1457, 00
1 728, 50 1092, 75 1457, 00
2 728, 50 910, 62 1092, 75
3 910, 62 1001, 69 1092, 75
4 910, 62 956, 16 1001, 69
5 956, 16 978, 92 1001, 69
6 978, 92 990, 30 1001, 69
7 990, 30 996, 00 1001, 69
8 996, 00 998, 84 1001, 69
9 998, 84 1000, 26 1001, 69
10 998, 84 999, 55 1000, 26
998, 84 999, 55 999, 55
Textul clar este deci x = [999, 55] = 999.

11.4 Algoritmi de descompunere ı̂n factori primi


Sunt extrem de numeroase lucrările care tratează descompunerea numerelor ı̂n factori
primi. De aceea aici vom face doar o trecere ı̂n revistă a celor mai cunoscuţi algoritmi de
factorizare.
Astfel, cel mai simplu pare a fi ciurul lui Eratostene care constă ı̂n ı̂ncercarea
√ de
ı̂mpărţi numărul n impar prin toate numerele ı̂ntregi impare din intervalul [3, n]. Pentru
n < 1012 tehnica este destul de eficientă.

11.4.1 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. El foloseşte esenţial trei variabile de intrare: numărul
n (impar) care trebuie descompus, o margine B şi un număr oarecare g ∈ [2, n − 1].
Descrierea algoritmului este:
Intrare: n, B, g.
1. a ←− g
2. for j = 2 to B do a ←− aj mod n
3. d ←− cmmdc(a − 1, n)
4. if d > 1 then ”d este factor al lui n”, Stop
else ”nu s-a găsit divizor al lui n”
Să vedem cum funcţionează acest algoritm:
Presupunem că p este un divizor prim al lui n şi că toţi divizorii primi ai lui p − 1 – la
puterile la care apar ı̂n descompunerea lui p − 1 – sunt mai mici decât B. Atunci p − 1|B!.
La terminarea ciclului de la pasul 2, avem
a ≡ g B! (mod n) deci a ≡ g B! (mod p)
11.4. ALGORITMI DE DESCOMPUNERE ÎN FACTORI PRIMI 9

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 = (a − 1, n).
Numărul d este un divizor netrivial al lui n (ı̂n afară de cazul a = 1 la pasul 3). Având
un divizor netrivial d, procesul se poate itera.

Exemplul 11.7 Să considerăm n = 15770708441. Aplicând metoda p − 1 cu B = 180,


se găseşte a = 11620221425, iar d = 135979. Se ajunge la descompunerea finală
15770708441 = 135979 · 115979.
Descompunerea a reuşit deoarece 135978 are numai factori primi ”mici”:
135978 = 2 · 3 · 131 · 173. Luând deci B ≥ 173 se obţine 135978|B!.

Observaţia 11.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 considera că
doar divizorii primi să verifice această condiţie, rezultatul ar fi fals. Astfel, să considerăm
p = 17 şi B = 3. Atunci p − 1 = 24 . Vom avea 2 < 3 dar 16 nu este un divixor al lui 3 !!

Pentru valori relativ mici ale lui B algoritmul


√ este de complexitate polinomial scăzută
3
(O(BlogB(log n) )). Dacă B creşte până la n, el va reuşi totdeauna, dar nu va fi mai
rapid decât ciurul lui Eratostene.
Deci slăbiciunea metodei rezidă ı̂n faptul că n trebuie să admită un divizor p cu
proprietatea că p − 1 să aibă numai factori primi mici. Pentru a rezista la acest atac, se
recomandă folosirea numerelor prime tari.

Definiţia 11.3 Se numeşte număr prim tare un număr prim p care verifică condiţiile:
1. p − 1 are un divizor prim mare r;
2. p + 1 are un divizor prim mare;
3. r − 1 are un divizor prim mare.

Există diverşi algoritmi pentru generarea numerelor prime tari. Pentru exemplificare am
ales algoritmul lui Gordon:

1. Se generează aleator două numere prime mari s, t distincte.


2. Se alege un număr aleator i0 . Se află primul număr prim de forma 2 · i · t + 1, unde
i ←− i0 , i0 + 1, . . .. Fie r = 2 · i · t + 1 acest număr prim.
3. p0 ←− 2 · (sr−2 (mod r)) · s − 1;
4. Se alege un număr aleator j0 . Se află primul număr prim de forma p0 + 2 · j · r · s,
unde j ←− j0 , j0 + 1, . . .. Fie p = p0 + 2 · j · r · s acest număr prim.
5. return(p)

Teorema 11.2 Numărul p generat de algoritmul Gordon este un număr prim tare.
10 PRELEGEREA 11. SECURITATEA SISTEMULUI RSA

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. 2
Practic, generarea unui număr prim tare se realizează ı̂n trei paşi:
- Cu un generator de numere aleatoare, se generează numerele s, t, i0 , j0 ;
- Se testează dacă s şi t sunt numere prime, folosind algoritmul Miller - Rabin;
- Î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 11.8 Î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 des şi 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
ı̂nmulţire modulară.

11.4.2 Algoritmul lui Dixon şi sita pătratică


Algoritmul lui Dixon se bazează pe o idee extrem de simplă: dacă se pot afla două
numere x, y cu x 6≡ y (mod n) dar x2 ≡ y 2 (mod n), atunci cmmdc(x − y, n) este un
divizor netrivial al lui n.
Metoda utilizează o bază B de factori primi ”mici”. Se caută ı̂ntâi mai multe numere
x pentru care divizorii primi ai lui x2 mod n sunt ı̂n B. Se formează apoi produse cu
aceste numere ı̂n aşa fel ca fiecare factor prim al pătratului produsului să apară de un
număr par de ori. Aceasta conduce la o relaţie x2 ≡ y 2 (mod n) care va da – eventual –
o descompunere a lui n.

Exemplul 11.9 Fie n = 15770708441 şi alegem mulţimea B= {2, 3, 5, 7, 11, 13}. Se-
lectăm
83409341562 ≡ 3 · 7 (mod n)
120449429442 ≡ 2 · 7 · 13 (mod n)
27737000112 ≡ 2 · 3 · 13 (mod n)
Dacă se ia produsul acestor trei congruenţe, se ajunge la

(8340934156 · 12044942944 · 2773700011)2 ≡ (2 · 3 · 7 · 13)2 (mod n)


11.5. ALTE TIPURI DE ATAC 11

Reducând conţinutul parantezelor modulo n, se obţine


95034357852 ≡ 5462 (mod n).
Vom calcula acum cmmdc(9503435785 − 546, 15770708441) = 115759,
care va da un divizor 115759 al lui n.
Fie B= {p1 , p2 , . . . , pB }; considerăm un număr C ”puţin” mai mare decât B (de exemplu
C = B + 10) şi presupunem că am găsit C relaţii de forma
α α α
x2j ≡ p1 1j · p2 2j · . . . · pBBj 1≤j≤C
Pentru fiecare j se consideră vectorul binar (elementele sale se iau modulo 2)
αj = (α1j , . . . , αBj ) ∈ Z2B .
Dacă se poate determina o submulţime a acestor vectori a căror sumă modulo 2 este
(0, 0, . . . , 0), pătratul produsului elementelor xj corespunzătoare va avea fiecare divizor ı̂n
B de un număr par de ori.
Exemplul 11.10 Revenind la Exemplul 11.9, cei trei vectori care se construiesc sunt
α1 = (0, 1, 0, 1, 0, 0), α2 = (1, 0, 0, 1, 0, 1), α3 = (1, 1, 0, 0, 0, 1).
Se verifică imediat că α1 + α2 + α3 ≡ (0, 0, 0, 0, 0, 0) (mod 2).
Evident, a căuta o submulţime de C vectori de sumă nulă modulo 2 revine la a căuta o
relaţie de dependenţă liniară (ı̂n Z2 ) ı̂ntre aceşti vectori. Dacă C > B, o asemenea relaţie
există şi poate fi găsită uşor prin eliminare gaussiană.
Ar mai fi de văzut cum să se obţină acei xj pentru care x2j se descompun ı̂n factori
primi din baza B. Sunt mai multe metode posibile pentru aceasta; de exemplu, ciurul
pătratic - construit de Pomerance - foloseşte numere ı̂ntregi de forma

xj = j + [ n], j = 1, 2, . . . .

De remarcat că dacă B este mare, este foarte posibil ca un ı̂ntreg xj să se descompună
ı̂n B, dar numărul acestor xj trebuie să crească pentru a căuta relaţiile de dependenţă.
Se arată că alegerea optimă pentru Bqeste ı̂n jur de

e logn log logn .

11.5 Alte tipuri de atac


11.5.1 Atac bazat pe proprietăţi multiplicative ale criptării RSA
Fie m1 , m2 două texte clare şi c1 respectiv c2 textele criptate corespunzătoare. Vom avea

(m1 m2 )b ≡ mb1 mb2 ≡ c1 c2 (mod n)

Această proprietate de hmomorfism a criptării poate oferi unui adversar activ posibilitatea
unui atac cu text clar ales.
12 PRELEGEREA 11. SECURITATEA SISTEMULUI RSA

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.

11.5.2 Atac bazat pe un exponent mic de criptare


Asa cum s-a arătat ı̂n Exemplul 11.8, pentru mărirea vitezei de criptare se preferă
exponenţi mici de criptare (cum este b = 3). Această alegere are unele slabiciuni, care
permit atacuri ı̂n anumite condiţii.
Astfel, să presupunem că Alice doreşte să trimită acelaşi text clar m la trei destinatari
diferiţi, care au modulele ni , dar acelaşi exponent de criptare b = 3. Deci textele criptate
vor fi ci = m3 (mod ni ) i = 1, 2, 3. Oscar le interceptează şi rezolvă sistemul

x ≡ c1 (mod n1 ), x ≡ c2 (mod n2 ), x ≡ c3 (mod n3 )

folosind teorema chineză a resturilor, care asigură existenţa unui x ∈ [0, n1 · n2 · n3 ).


Deoarece m3 < n1 · n2 · n3 , va rezulta că x = m3 . Deci Oscar va afla textul clar m
extrăgând rădăcina de ordinul 3 din solutı̂a x.
În general, exponenţi mici de criptare asigură o securitate redusă pentru mesajele mici
m: dacă m < n1/b atunci textul clar poate fi dedus din textul criptat c = mb calculând
rădăcina de ordin b a lui c.
Folosirea unui modul comun de criptare de către mai mulţi utilizatori permite de
asemenea un atac uşor. Să presupunem că Alice trimite acelaşi mesaj m către doi utiliza-
otri care au cheile publice b1 , b2 dar acelaşi modul n. Deci

c1 ≡ mb1 (mod n), c2 ≡ mb2 (mod n).

Fără a micşora generalitatea, putem presupune că cmmdc(b1 , b2 ) = 1. Oscar va folosi


algoritmul lui Euclid pentru a determina numerele ı̂ntregi r, s astfel ca

r · b1 + s · b2 = 1

Unul din numerele r, s este negativ; să presupunem că este r (pentru s negativ se pro-
cedează analog). Atunci Oscar obţine textul clar m folosind egalitatea

(c−1
1 )
−r
· cs2 ≡ m (mod n)
11.6. ALTE SISTEME DE CRIPTARE ÎNRUDITE CU RSA 13

11.5.3 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 i =
k k−1
1, 2, . . . până găseşte un k astfel ca cb ≡ c (mod n). Atunci va decripta c ı̂n 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şicb ≡ c (mod n)
k−1
În acest caz s-a reusţi decriptarea m = cb (mod n).
Folosirea unor numere prime tari asigură o protecţie suficientă pentru acest gen de
atac.

11.6 Alte sisteme de criptare ı̂nrudite cu RSA


11.6.1 Sistemul de criptare Rabin
Sistemul de criptare Rabin este o variantă a sistemului RSA (propusă ı̂n 1979), care oferă
o securitate de calcul echivalentă. Descrierea sa este:

Fie n = pq unde p, q sunt numere prime distincte, p, q ≡ 3 (mod 4). Se ia


P = C= Zn şi K= {(n, p, q, B) | 0 ≤ B ≤ n − 1}.
Pentru cheia K = (n, p, q, B) se definesc: s
B2 B
eK (x) = x(x + B) (mod n) dK (y) = +y−
4 2
14 PRELEGEREA 11. SECURITATEA SISTEMULUI RSA

Observaţia 11.3 Numerele prime n cu n ≡ 3 (mod 4) se numesc ”numere Blum”.

Există patru texte clare distincte care se pot cripta ı̂n acelaşi text. Să detaliem această
afirmaţie:
Fie α una din cele patru rădăcini pătrate modulo n ale unităţii, şi x ∈ Zn . Efectuăm
calculele
B 2
 2
B B B
     
eK α x + − = α2 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ă a unităţii modulo n.
Verificarea este imediată.
În general, Bob nu are nici un mijloc de a distinge care din cele patru mesaje este cel
corect, dacă nu dispune de informaţii suplimentare.
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. Aceasta echivalează 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 mo-dulo n.
Într-o criptare corectă, C este totdeauna un rest pătratic modulo p şi q. Dacă p ≡
3 (mod 4), există o formulă simplă pentru extragerea rădăcinilor pătrate dintr-un rest
pătratic C modulo p. Avem (calculele se fac modulo p):
 2
±C (p+1)/4 ≡ C (p+1)/2 ≡ C (p−1)/2 C ≡ C

(s-a folosit Teorema 10.1). Avem deci cele patru rădăcini pătratice

±C (p+1)/4 (mod p), ±C (q+1)/4 (mod q)

care – prin combinare pe baza teoremei chineze a resturilor – dau cele patru rădăcini
pătrate ale lui C.
11.6. ALTE SISTEME DE CRIPTARE ÎNRUDITE CU RSA 15

Observaţia 11.4 De remarcat că nu se cunoaşte un algoritm polinomial determinist pen-


tru extragerea rădăcinilor pătratice modulo p pentru p ≡ 1 (mod 4); ı̂n această situaţie
există doar algoritmi Las Vegas.

După determinarea acestor rădăcini x1 , se află x = x1 − B/2. Aceasta dă formula de


decriptare din enunţul metodei Rabin.

Exemplul 11.11 Fie n = 77 = 7 · 11 şi B = 9. Funcţia de criptare este


eK (x) = x2 + 9x (mod 77)
iar cea de decriptare q
dK (y) = 1 + y − 43 (mod 77).
Să presupunem că Bob vrea să decripteze textul y = 22. El va trebui să determine
rădăcinile pătrate ale lui 23 modulo 7 şi 11. Cum aceste două module sunt congruente cu
3 modulo 4, se poate aplica formula arătată anterior:

23(7+1)/4 ≡ 22 ≡ 4 (mod 7) 23(11+1)/4 ≡ 13 ≡ 1 (mod 11).

Utilizând teorema chineză a resturilor, se obţin rădăcinile pătrate ale lui 23 modulo 77:

11 · 2 · a + 7 · 8 · b (mod 77)

unde a = ±4, b = ±1. Calculând, se obţin valorile ±10, ±32. Cele patru texte clare
posibile (calculate modulo 77) vor fi deci:

10 − 43 = 44, 67 − 43 = 24, 32 − 43 = 66, 45 − 43 = 2.

Se verifică imediat că toate aceste patru texte clare se criptează ı̂n 22.

Să studiem acum securitatea sistemului de criptare Rabin. Să presupunem că există un
algoritm de decriptare A; acesta poate fi atunci utilizat ı̂ntr-un algoritm Las Vegas care
descompune modulul n cu probabilitate 1/2; algoritmul este următorul:

1. Se alege aleator r ∈ Zn ;
2. y ←− r2 − B 2 /4 mod n;
3. x ←− A(y);
4. x1 ←− x + B/2;
5. if x1 ≡ ±r (mod n) then Stop (eşec)
else cmmdc(x1 + r, n) = p sau q, Stop

B
 
Să observăm ı̂ntâi că y = eK r − , deci la pasul 3 se decriptează x sub forma r − B/2.
2
Cum la pasul 5. avem x21 ≡ r2 (mod n), rezultă x1 ≡ ±r (mod n) sau x1 ≡ ±αr (mod n),
unde α este o rădăcină netrivială modulo n a unităţii. În al doilea caz, n|(x1 − r)(x1 + r)
16 PRELEGEREA 11. SECURITATEA SISTEMULUI RSA

ş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 ([2]), din n − 1 extrageri posibile
ale lui r. Pentru două resturi nenule r1 , r2 , se defineşte

r1 ∼ r2 ⇐⇒ r12 ≡ r22 (mod n)

Aceasta este evident o relaţie de echivalenţṪoate clasele de echivalenţă din Zn∗ sunt de
cardinal patru, fiecare fiind de forma [r] = {±r, ±0 alr}. Î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 = ±0 alr, 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.

11.7 Exerciţii
11.1 Folosind metoda p − 1 şi diverse margini B, factorizaţi 262063 şi 9420457. Cât
este B pentru fiecare caz ?

11.2 Fie n = 317940011 şi b = 7753781. Descompuneţi n ı̂n factori, folosind algoritmul
lui Wiener.

11.3 Considerăm algoritmul lui Rabin cu p = 199, q = 211, n = pq şi B = 1357.


(a) Criptaţi mesajul 32767;
(b) Determinaţi cele 4 mesaje clare care duc la textul criptat y = eK (32767).
Bibliografie

[1] A. Menezes, P. Oorschot, S. Vanstome, Handbook of applied cryptography

[2] D. Stinton, Cryptography, theory et practice, Chapman & Hall/CRC, 2002

[3] A. Salomaa, Criptografie cu chei publice, Ed. Militară, 1994

[4] M.J. Wiener - Cryptanalysis of short RSA secret exponents, IEEE Trans on Informa-
tion Theory, 36 (1990), 553-558

17
Prelegerea 12

Sistemul de criptare El Gamal

12.1 Descrierea algoritmului de criptare El Gamal


Sistemul de criptare El Gamal1 , prezentat ı̂n 1985 (vezi [1]) de Taher ElGamal, se bazează
pe problema logaritmului discret, care este următoarea:
Fie p număr prim şi α, β ∈ Zp , β 6= 0.
Să se determine a ∈ Zp−1 astfel ca

αa ≡ β (mod p).

Acest ı̂ntreg a – dacă există – este unic şi se notează logα β.



Exemplul 12.1 Fie p = 11 şi α = 6. Toate elementele din Z11 pot fi exprimate ca puteri
ale lui α:
a 0 1 2 3 4 5 6 7 8 9
a
6 (mod 11) 1 6 3 7 9 10 5 8 4 2
De aici rezultă imediat tabelul logaritmilor ı̂n baza 6:
β 1 2 3 4 5 6 7 8 9 10
log6 β 0 9 2 8 6 1 3 7 4 5

Pentru α = 3 ı̂nsă nu vom avea totdeauna soluţie. Deoarece


a 0 1 2 3 4 5 6 7 8 9
a
3 (mod 11) 1 3 9 5 4 1 3 9 5 4

valorile β ∈ {2, 6, 7, 8, 10} nu pot fi exprimate ca logaritmi ı̂n baza 3. Altfel spus, ecuaţia
log3 x = β nu are soluţie ı̂n Z11 pentru aceste valori ale lui b.
1
Implementări ale sistemului sunt conţinute ı̂n softuri pentru GNU Privacy Guard şi PGP – pentru a
lista cele mai cunoscute aplicaţii.

1
2 PRELEGEREA 12. SISTEMUL DE CRIPTARE EL GAMAL

Observaţia 12.1 Pentru problema logaritmului discret, nu este obligatoriu ca p să fie
număr prim. Important este ca α să fie rădăcină primitivă de ordinul p − 1 a unităţii:
∀i (0 < i < p − 1), αi 6≡ 1 (mod p). Teorema lui Fermat asigură αp−1 ≡ 1 (mod p).

La o alegere convenabilă a lui p, problema este N P - completă. Pentru siguranţă, p


se alege de minim 512 biţi2 iar p − 1 să aibă cel puţin un divizor prim ”mare”. Pentru un
astfel de modul p, spunem că problema logaritmului discret este dificilă ı̂n Zp . Utilitatea
acestei cerinţe rezidă ı̂n faptul că, deşi este foarte dificil de calculat un logaritm discret,
operaţia inversă – de exponenţiere – este foarte simplă (după cum s-a văzut la sistemul
RSA).
Sistemul de criptare El Gamal este următorul:
Fie p număr prim pentru care problema logaritmului discret ı̂n Zp este dificilă, şi
α ∈ Zp∗ primitiv.
Fie P= Zp∗ , C= Zp∗ × Zp∗ şi
K= {(p, α, a, β)| β ≡ αa (mod p)}.
Valorile p, α, β sunt publice, iar a este secret.
Pentru K = (p, α, a, β) şi k ∈ Zp−1 aleator (secret) se defineşte

eK (x, k) = (y1 , y2 )

unde y1 = αk (mod p), y2 = x · β k (mod p).


Pentru y1 , y2 ∈ Zp∗ se defineşte

dK (y1 , y2 ) = y2 · (y1a )−1 (mod p)

Verificarea este imediată:


y2 · (y1a )−1 ≡ x · β k · (αka )−1 ≡ x · β k (β k )−1 ≡ x (mod p)
Sistemul este evident nedeterminist: criptarea depinde de x şi de o valoare aleatoare
aleasă de Alice. Există deci mai multe texte criptate corespunzătoare unui anumit text
clar.
Exemplul 12.2 Să alegem p = 2579, α = 2, a = 765. Prin calcul se obţine β =
2765 (mod 2579) = 949.
Să presupunem că Alice vrea să trimită mesajul x = 1299. Ea alege aleator k (să
spunem k = 853) şi calculează y1 = 2853 = 435, apoi y2 = 1299 · 949853 = 2396 (toate
calculele se fac modulo 2579).
Când Bob primeşte mesajul criptat y = (435, 2396), el va determina
x = 2396 · (435765 )−1 = 1299 (mod 2579).
2
Pentru o securitate pe termen lung se recomandă 1024 biţi ([3]).
12.2. CALCULUL LOGARITMULUI DISCRET 3

Observaţia 12.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 sensibil 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 ı̂n determină imediat pe celălalt.

12.2 Calculul logaritmului discret


În cele de mai jos presupunem că p este număr prim, iar α este o rădăcină primitivă de
ordinul p − 1 a unităţii. Aceste două valori fiind fixate, problema logaritmului se poate
reformula astfel:
Fiind dat un β ∈ Zp∗ , să se determine exponentul a ∈ Zp−1 astfel ca αa ≡ β (mod p).

Evident această problemă se poate rezolva printr-o căutare directă (se calculează puterile
lui α) ı̂n timp O(p) şi folosind O(1) memorie. Pe de-altă parte, dacă se calculează anterior
ı̂ntr-o tabelă toate valorile (a, αa mod p), aflarea valorii căutate se poate face ı̂n O(1), dar
cu un spaţiu de complexitate O(p).
Toţi algoritmii construiţi pentru calculul logaritmului discret stabilesc un compromis
spaţiu - timp.

12.2.1 Algoritmul Shanks


q 
Fie m = p − 1 . Algoritmul Shanks este:

1. Se construieşte lista L1 = {(j, αmj (mod p)) | 0 ≤ j ≤ m − 1};


2. Se construieşte lista L2 = {(i, βα−i (mod p)) | 0 ≤ i ≤ m − 1};
3. Se determină perechile (j, y) ∈ L1 , (i, y) ∈ L2 (identice pe a doua poziţie);
4. Se defineşte logα β = m · j + i (mod (p − 1))
De remarcat că prin alegerea perechilor (j, y) ∈ L1 , (i, y) ∈ L2 vom avea
αmj = y = βα−i , deci αmj+i = β.
Invers, pentru orice β putem scrie logα β = m · j + i cu 0 ≤ i, j ≤ m − 1, deci căutarea
de la pasul 3 se termină totdeauna cu succes.
Implementarea acestui algoritm se poate face ı̂n timp O(m) şi spaţiu O(m).
4 PRELEGEREA 12. SISTEMUL DE CRIPTARE EL GAMAL

Exemplul 12.3 Fie p √ = 809 şi să determinăm log3 525. Avem deci
α = 3, β = 525, m = d 808e = 29, iar α29 mod 809 = 99.
Lista L1 a perechilor (j, 99j (mod 809)), 0 ≤ j ≤ 28 este:

(0, 1) (1, 99) (2, 93) (3, 308) (4, 559)


(5, 329) (6, 211) (7, 664) (8, 207) (9, 268)
(10, 644) (11, 654) (12, 26) (13, 147) (14, 800)
(15, 727) (16, 781) (17, 464) (18, 632) (19, 275)
(20, 528) (21, 496) (22, 564) (23, 15) (24, 676)
(25, 586) (26, 575) (27, 295) (28, 81)

Lista L2 a cuplurilor (i, 525 · (3i )−1 (mod 809)), 0 ≤ i ≤ 28 este:

(0, 525) (1, 175) (2, 328) (3, 379) (4, 396)
(5, 132) (6, 44) (7, 554) (8, 724) (9, 511)
(10, 440) (11, 686) (12, 768) (13, 256) (14, 355)
(15, 388) (16, 399) (17, 133) (18, 314) (19, 644)
(20, 754) (21, 521) (22, 713) (23, 777) (24, 259)
(25, 356) (26, 658) (27, 489) (28, 163)

Parcurgând (eventual simultan) cele două liste se găseşte (10, 644) ∈ L1 , (19, 644) ∈ L2 .
Se poate scrie deci
log3 525 = 29 · 10 + 19 = 309.
Se verifică uşor că 3309 ≡ 525 (mod 809).

12.2.2 Algoritmul Pohlig - Hellman


Mai ı̂ntâi, un rezultat matematic:

Lema 12.1 Fie x ∈ Zp un element primitiv. Atunci

xm ≡ xn (mod p) ⇐⇒ m ≡ n (mod (p − 1))

Demonstraţie: Relaţia xm ≡ xn (mod p) se poate rescrie xm−n ≡ 1 (mod p). Dar –


conform Teoremei lui Fermat – xp−1 ≡ 1 (mod p) şi xi 6≡ 1 (mod p) pentru 0 < i < p − 1.
Deci p − 1|m − n, sau m − n ≡ 0 (mod (p − 1)), relaţie echivalentă cu m ≡ n (mod p − 1)).
2
Revenind la sistemul de criptare El Gamal, să considerăm descompunerea ı̂n factori
primi
k
qici .
Y
p−1=
i=1
12.2. CALCULUL LOGARITMULUI DISCRET 5

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).
Să presupunem deci că q este 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, 0 ≤ i ≤ c − 1
i=0

Atunci, se poate scrie a = x + q c · s pentru un anumit număr ı̂ntreg pozitiv s.


La primul pas trebuie calculat a0 . Se porneşte de la observaţ ia că
β (p−1)/q ≡ α(p−1)a0 /q (mod p).
c s)/q
Pentru a arăta aceasta, deoarece β (p−1)/q ≡ α(p−1)(x+q (mod p), este suficient să se
c
verifice că α(p−1)(x+q s)/q ≡ α(p−1)a0 /q (mod p).
Această relaţie este adevărată dacăşi numai dacă
(p − 1)(x + q c s) (p − 1)a0
≡ (mod p − 1),
q q
ceea ce se poate verifica prin calcul direct:
(p − 1)(x + q c s) (p − 1)a0 p − 1 c−1
!
p−1 c
X
i c
− = (x + q s − a0 ) = ai q + q s − a0
q q q q i=0
p − 1 c−1 c−1
! !
i c i−1 c−1
X X
= ai q + q s = (p − 1) ai q + q s ≡ 0 (mod p − 1).
q i=1 i=1

Putem acum să ı̂ncepem calculul lui β (p−1)/q (mod p). Dacă β (p−1)/q ≡ 1 (mod p),
atunci a0 = 0. Altfel se calculează ı̂n Zp γ = α(p−1)/q , γ 2 , . . . până se obţ ine un număr
ı̂ntreg pozitiv i pentru care γ i ≡ β (p−1)/q . Atunci a0 = i.
Dacă c = 1, algoritmul se termină; altfel, (c > 1), se caută valoarea lui a1 . Pentru
aceasta se defineşte
β1 = βα−a0
şi se notează x1 = logα β1 (mod q c ).
c−1
(p−1)/q 2
ai q i , se va obţine β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 .
Formal, algoritmul Pohlig - Hellman este următorul:
6 PRELEGEREA 12. SISTEMUL DE CRIPTARE EL GAMAL

1. Se calculează γ i = α(p−1)i/q (mod p), 0 ≤ i ≤ q − 1;


2. β0 ←− β;
3. for j = 0 to c − 1 do
(p−1)/q j+1
3.1 δ ←− βj (mod p);
3.2. Se caută i astfel ca δ = γ i ;
3.3. aj ←− i;
j
3.4. βj+1 ←− βj α−aj q mod p.
Reamintim, α este o rădăcină primitivă de ordinul p a unităţii, iar q este număr prim; ı̂n
plus, p − 1 ≡ 0 (mod q c ), p − 1 6≡ 0 (mod q c+1 ).
c−1
ai q i .
X
c
Algoritmul calculează a0 , a1 , . . . , ac−1 unde logα β (mod q ) =
i=0

Exemplul 12.4 Fie p = 29. Avem n = p − 1 = 28 = 22 71 .


Să alegem α = 2, β = 18 şi ne punem problema determinării lui a = log2 18. Pentru
aceasta se va calcula a (mod 4) şi a (mod 7).
Să ı̂ncepem cu q = 2, c = 2. Avem (toate calculele se efectuează modulo 29):
γ 0 = 1, γ 1 = α28/2 = 214 = 28, deci δ = β 28/2 = 1814 = 28, de unde rezultă a0 = 1.
28/4
β1 = β0 · α−1 = 9, β1 = 97 = 28. Cum γ1 = 28, rezultă a1 = 1. Avem deci
a ≡ 3 (mod 4).
Să considerăm acum q = 7, c = 1. Vom avea (modulo 29):
β 28/7 = 184 = 25, γ 1 = α28/7 = 24 = 16, apoi γ 2 = 24, γ 3 = 7, γ 4 = 25, deci a0 = 4
şi a ≡ 4 (mod 7).
Se obţine sistemul a ≡ 3 (mod 4), a ≡ 4 (mod 7), de unde – folosind teorema chineză
a resturilor – a ≡ 11 (mod 28). Deci, log2 18 = 11 ı̂n Z29 .

12.2.3 Algoritmul Pollard Rho


Fie p un număr prim şi α ∈ Zp un element de ordin n. Vom considera Gα ⊆ Zp subgrupul
ciclic generat de α. Ne punem problema calculării lui logα β, unde β ∈ Gα este arbitrar.
Fie Zp = S1 ∪ S2 ∪ S3 o partiţie a lui Zp ı̂n mulţimi de cardinale aproximativ egale;
considerăm funcţia
f : Gα × Zn × Zn −→ Gα × Zn × Zn
definită prin 
 (βx, a, b + 1)
 dacă x ∈ S1
2
f (x, a, b) =  (x , 2a, 2b) dacă x ∈ S2

(αx, a + 1, b) dacă x ∈ S3
Pe baza acestei funcţii vom genera recursiv triplete (x, a, b) cu proprietatea x = αa β b . 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
12.2. CALCULUL LOGARITMULUI DISCRET 7

În continuare se compară tripletele (x2i , a2i , b2i ) şi (xi , ai , bi ) până se găseşte o valoare a
lui i pentru care x2i = xi . În acel moment,

αa2i β b2i = αai β bi

Notând c = logα β, relaţia poate fi rescrisă

αa2i +cb2i = αai +cbi

Cum α are ordinul n, rezultă

a2i + cb2i ≡ ai + cbi (mod n)

sau
c(b2i − bi ) ≡ ai − a2i (mod n)
Dacă cmmdc(b2i − bi , n) = 1, atunci se poate obţine c:
ai − a2i
c= (mod n)
b2i − bi

Exemplul 12.5 Să considerăm p = 809 şi α = 89; ordinul lui α ı̂n Z809 este n = 101.
Se verifică uşor că β = 618 ∈ G89 . Vom calcula log89 618.
Să presupunem că alegem partiţia
S1 = {x | x ∈ Z809 , x ≡ 1 (mod 3)}
S2 = {x | x ∈ Z809 , x ≡ 0 (mod 3)}
S3 = {x | x ∈ Z809 , x ≡ 2 (mod 3)}
Pentru i = 1, 2, 3, . . . obţinem următoarele triplete:
i (xi , ai , bi ) (x2i , a2i , b2i )
1 (618, 0, 1) (76, 0, 2)
2 (76, 0, 2) (113, 0, 4)
3 (46, 0, 3) (488, 1, 5)
4 (113, 0, 4) (605, 4, 10)
5 (349, 1, 4) (422, 5, 11)
6 (488, 1, 5) (683, 7, 11)
7 (555, 2, 5) (451, 8, 12)
8 (605, 4, 10) (344, 9, 13)
9 (451, 5, 10) (112, 11, 13)
10 (422, 5, 11) (422, 11, 15)
Deci x10 = x20 = 422. Se poate calcula atunci
log89 618 = (11 − 5) · (11 − 15)−1 (mod 101) = 6 · 25 (mod 101) = 49

(ı̂n grupul multiplicativ Z809 ).
8 PRELEGEREA 12. SISTEMUL DE CRIPTARE EL GAMAL

O formalizare a algoritmului Pollard Rho pentru calculul logaritmului discret3 este:

Algoritm Pollard Rho(Zp , n, α, β)


1 Se defineşte partiţia Zp = S1 ∪ S2 ∪ S3 ;
2. (x, a, b) ←− f (1, 0, 0), (x1 , a1 , b1 ) ←− f (x, a, b)
3. while x 6= x1 do
3.1. (x, a, b) ←− f (x, a, b);
3.2. (x1 , a1 , b1 ) ←− f (x1 , a1 , b1 ), (x1 , a1 , b1 ) ←− f (x1 , a1 , b1 );
4. if cmmdc(b1 − b, n) > 1 then return(Eşec)
else return((a − a1 ) · (b1 − b)−1 (mod n))
procedure f (x, a, b)
1. if x ∈ S1 then f ←− (β · x, a, (b + 1) (mod n));
2. if x ∈ S2 then f ←− (x · x, 2 · a (mod n), 2 · b (mod n));
3. if x ∈ S3 then f ←− (α · x, (a + 1) (mod n), b);
4. return(f ).
end procedure

În cazul cmmdc(b1 − b, n) = d > 1, congruenţa c · (b1 − b) ≡ a − a1 (mod n) are d soluţii


posibile. Dacă d este destul de mic, aceste soluţii se pot afla şi o simplă operaţie de
verificare găseşte soluţia corectă.

12.2.4 Metoda de calcul a indicelui


Această metodă seamănă cu unul din cei mai buni algoritmi de descompunere ı̂n factori.
Vom da doar o descriere informală a acestui algoritm.
Se foloseşte o bază de divizori B compusă din B numere prime ”mici” Prima etapă
constă ı̂n aflarea logaritmilor elementelor din baza B.
În a doua etapă, folosind aceşti logaritmi, se va determina logaritmul discret al lui β.
I: Se construiesc C = B + 10 congruenţe modulo p de forma
a a a
αxj ≡ p1ij p22j . . . pBBj (mod p), 1≤j≤C
Cu aceste C ecuaţii de necunoscute logα pi (1 ≤ i ≤ B) se ı̂ncearcă aflarea unei soluţii
unice modulo (p − 1). În caz de reuşită, primul pas este ı̂ncheiat.
Problema ar fi cum să se găsească aceste C congruenţe. O metodă elementară constă
din trei paşi: alegerea aleatoare a unui x, calculul lui αx (mod p) şi verificarea dacă acest
număr are toţi divizorii ı̂n B.
II: Acum se poate determina logα β cu un algoritm de tip Las Vegas. Se alege aleator
un număr ı̂ntreg s (1 ≤ s ≤ p − 2) şi se determinăγ = βαs (mod p).
3
Un algoritm similar Pollard Rho poate fi construit pentru factorizarea unui număr. Detalii se găsesc
de exemplu ı̂n [4].
12.3. SECURITATEA LOGARITMILOR DISCREŢI FAŢĂ DE INFORMAŢII PARŢIALE9

Se ı̂ncearcă apoi descompunerea lui γ ı̂n baza B. Dacă acest lucru este posibil, se
obţine o relaţie de forma
βαs ≡ pc11 pc22 . . . pcBB (mod p)
care poate fi transformată ı̂n

logα β + s ≡ c1 logα p1 + . . . + cB logα pB (mod p − 1).

De aici - prin evaluarea membrului drept, se poate determina logα β.

Exemplul 12.6 Fie p = 10007 şi α = 5 (element primitiv). Să considerăm


B= {2, 3, 5, 7} ca bază de divizori. Cum – evident – log5 5 = 1, trebuiesc determinaţi doar
trei logaritmi de bază.
Trei numere aleatoare ”norocoase” pot fi 4063, 5136, 9865.
Pentru x = 4063 calculăm 54063 (mod 10007) = 42 = 2 · 3 · 7, care conduce la congruenţa
log5 2 + log5 3 + log5 7 ≡ 4063 (mod 10006).
În mod similar se obţin 55136 (mod 10007) = 54 = 2·33 , 59865 (mod 10007) = 189 =
33 · 7.
Ele dau relaţiile
log5 2 + 3log5 3 ≡ 5136 (mod 10006),
3log5 3 + log5 7 ≡ 9865 (mod 10006).
Rezolvarea acestui sistem de trei ecuaţii ı̂n Z10006 conduce la soluţia unică

log5 2 = 6578, log5 3 = 6190, log5 7 = 1301.

Să presupunem acum că se caută log5 9451. Dacă se generează aleator numărul s =
7736, avem 9451 · 57736 (mod 10007) = 8400 = 24 31 52 71 .
Cum acesta se poate factoriza ı̂n B, avem
log5 9451 = 4log5 2 + log5 3 + 2log5 5 + log5 7 − s = 4 · 6578 + 6190 + 2 · 1 + 1301 − 7736 = 6057,
calculele fiind realizate modulo 10006.
Se verifică uşor că 56057 ≡ 9451 (mod 10007).

12.3 Securitatea logaritmilor discreţi faţă de informaţii


parţiale
În această secţiune vom considera un tip de atac care ı̂ncearcă să determine valoarea unuia
sau mai multor biţi din reprezentarea binară a logaritmilor discreţi.
Mai exact se ı̂ncearcă calculul lui Li (β): al i-lea bit (numărând de la cel mai puţin
reprezentativ) din scrierea ı̂n binar a lui logα β peste Zp∗ ; deci 1 ≤ i ≤ dlog2 (p − 1)e.

Afirmaţia 12.1 L1 (β) poate fi calculat printr-un algoritm de complexitate polinomială.


10 PRELEGEREA 12. SISTEMUL DE CRIPTARE EL GAMAL

Demonstraţie: Să considerăm funcţia f : Zp∗ ←− Zp∗ definită


f (x) = x2 (mod p)
Notăm RP (p) mulţimea resturilor pătratice modulo p:
RP (p) = {x | ∃y ∈ Zp∗ , x ≡ y 2 (mod p)}
Pe baza observaţiilor
1. f (x) = f (p − x),
2. x2 ≡ y 2 (mod p) ⇐⇒ x = ±y (mod p)
rezultă card(RP (p)) = (p − 1)/2 (deci exact jumătate din elementele lui Zp∗ sunt resturi
pătratice).
Să presupunem acum că α ∈ Zp este primitiv. Deci αi ∈ RP (p) pentru i par. Cum
(p − 1)/2 astfel de puteri sunt distincte, rezultă
p−3
 
2i

RP (p) = α 0 ≤ i ≤
2
Deci β este rest pătratic dacă şi numai dacă logα β este par, adică L1 (β) = 0.
Conform teoremei 10.1 (Prelegerea 10), β este rest pătratic dacă şi numai dacă
p−1
β 2 ≡ 1 (mod p)
fapt care poate fi testat cu un algoritm de compmexitate polinomială. Deci putem da o
formulă pentru calculul lui L1 (β):
(
0 dacă β (p−1)/2 ≡ 1 (mod p)
L1 (β) =
1 altfel
2
Afirmaţia 12.2 Dacă p − 1 = 2s (2t + 1), atunci
1. Calculul lui Li (β) pentru 1 ≤ i ≤ s este uşor.
2. Orice algoritm (sau oracol) care poate calcula Ls+1 (β) permite rezolvarea problemei
logaritmului discret ı̂n Zp .
Prima parte a afirmaţiei este simplă.
Vom demonstra a doua parte pentru cazul s = 1. Deci vom arăta că dacă p este prim
şi p ≡ 3 (mod 4), atunci orice oracol care dă L2 (β) poate fi folosit la rezolvarea problemei
logaritmului discret ı̂n Zp .
Se ştie (Prelegerea 11, algoritmul lui Rabin) că dacă β este rest pătratic ı̂n Zp şi
p ≡ 3 (mod 4), atunci rădăcinile pătrate ale lui β modulo p sunt ±β (p+1)/4 (mod p).
Lema 12.2 Dacă p ≡ 3 (mod 4) şi β 6= 0, atunci L1 (p − β) = 1 − L1 (β).
Demonstraţia lemei: Fie αa ≡ β (mod p). Atunci αa+(p−1)/2 ≡ −β (mod p). Deoarece
p ≡ 3 (mod 4), numărul (p − 1)/2 este impar. Deci L1 (β) 6= L1 (p − β). 2
12.3. SECURITATEA LOGARITMILOR DISCREŢI FAŢĂ DE INFORMAŢII PARŢIALE11

Fie acum β = αa pentru un exponent par a, necunoscut. Atunci


±β (p+1)/4 ≡ αa/2 (mod p)
Cum L2 (β) = L1 (αa/2 ), valoarea L2 (β) poate determina care din cele două variante (cu
+ sau −) este corectă. Acest lucru este folosit de următorul algoritm care dă valoarea
logaritmului discret logα β (s-a presupus că valoarea L2 (β) se poate afla – folosind de
exemplu un oracol):

Algoritm aflare bit(p, α, β)


1. x0 ←− L1 (β);
2. β ←− β/αx0 (mod p)
3. i ←− 1;
4. while β 6= 1 do
4.1. xi ←− L2 (β);
4.2. γ ←− β (p+1)/4 (mod p);
4.3. if L1 (γ) = xi then β ←− γ
else β ←− p − γ;
4.4. β ←− β/αxi (mod p);
4.5. i ←− i + 1;
5. return(xi−1 , xi−2 , . . . , x0 ).

În final, se obţine


xj · 2j .
X
logα β =
j≥0

Exemplul 12.7 Fie p = 19, α = 2, β = 6. Deoarece numerele sunt foarte mici, se pot
determina uşor valorile pentru L1 şi L2 . Ele sunt adunate ı̂n tabelul
x L1 (x) L2 (x) x L1 (x) L2 (x) x L1 (x) L2 (x)
1 0 0 7 0 1 13 1 0
2 1 0 8 1 1 14 1 1
3 1 0 9 0 0 15 1 1
4 0 1 10 1 0 16 0 0
5 0 0 11 0 0 17 0 1
6 0 1 12 1 1 18 1 0
Pe baza acestor informaţii, aplicăm algoritmul. Se obţine:
x0 ←− 0, β ←− 6, i ←− 1;
x1 ←− L2 (6) = 1, γ ←− 5, L1 (5) = 0 6= x1 , β ←− 14, β ←− 7, i ←− 2;
x2 ←− L2 (7) = 1, γ ←− 11, L1 (11) = 0 6= x2 , β ←− 8, β ←− 4, i ←− 3;
x3 ←− L2 (4) = 1, γ ←− 17, L1 (17) = 0 6= x3 , β ←− 2, β ←− 1, i ←− 4.
return(1, 1, 1, 0).
Deci log2 6 = 11102 = 14.
12 PRELEGEREA 12. SISTEMUL DE CRIPTARE EL GAMAL

12.4 Generalizarea sistemului de criptare El Gamal


Sistemul de criptare El Gamal se poate construi pe orice grup (ı̂n loc de Zn∗ ) ı̂n care
problema logaritmului (definită corespunzător) este dificilă.
Fie (G, ◦) un grup finit. Problema logaritmului discret se defineşte ı̂n G astfel:

Fie α ∈ G şi H = {αi | i ≥ 0} subgrupul generat de α. Dacă β ∈ H, să se determine


un a (unic) (0 ≤ a ≤ card(H) − 1) cu αa = β, unde αa = α | ◦ α ◦{z. . . ◦ α}
a ori

Definirea sistemului de criptare El Gamal ı̂n subgrupul H ı̂n loc de Zn∗ este uşor de
realizat; anume:
Fie (G, ◦) un grup şi α ∈ G pentru care problema logaritmului discret ı̂n H =
{αi | i ≥ 0} este dificilă.
Fie P= G, C= G × G şi K= {(G, α, a, β)|β = αa }.
Valorile α, β sunt publice iar a este secret.
Pentru K = (G, α, a, β) şi un k ∈ Zcard(H) aleator (secret), se defineşte

eK (x, k) = (y1 , y2 ) unde y1 = αk , y2 = x ◦ β k .

Pentru y = (y1 , y2 ), decriptarea este

dK (y) = y2 ◦ (y1a )−1 .

De remarcat că pentru criptare/decriptare nu este necesară cunoaşterea ordinului card(H)


de mărime al subgrupului; Alice poate alege aleator un k, (0 ≤ k ≤ card(G) − 1) cu care
cele două procese funcţionează fără probleme.
Se poate observa de asemenea că G nu este neapărat abelian (H ı̂n schimb este, fiind
ciclic).
Să studiem acum problema logaritmului discret ”generalizat”. Deoarece H este sub-
grup ciclic, orice versiune a problemei este echivalentă cu problema logaritmului dis-
cret ı̂ntr-un grup ciclic. În schimb, se pare că dificultatea problemei depinde mult de
reprezentarea grupului utilizat.
Astfel ı̂n grupul aditiv Zn , problema este simplă; aici exponenţierea αa este de fapt
ı̂nmulţirea cu a modulo n. Deci, problema logaritmului discret constă ı̂n aflarea unui
număr ı̂ntreg a astfel ca
aα ≡ β (mod n).
Dacă se alege α astfel ca (α, n) = 1 (α este generator al grupului), α are un invers
multiplicativ modulo n, care se determină uşor cu algoritmul lui Euclid. Atunci,

a = logα β = βα−1 (mod n)


12.5. EXERCIŢII 13

Să vedem cum se reprezintă problema logaritmului discret ı̂n grupul multiplicativ Zp∗ cu
p prim. Acest grup este ciclic de ordin p − 1, deci izomorf cu grupul aditiv Zp−1 . Deoarece
problema logaritmului discret ı̂n grupul aditiv se poate rezolva uşor, apare ı̂ntrebarea dacă
se poate rezolva această problemă ı̂n Zp∗ reducând-o la Zp−1 .
Ştim că existăun izomorfism φ : Zp∗ −→ Zp−1 , deci pentru care

φ(xy mod p) = (φ(x) + φ(y)) (mod p − 1)

În particular, φ(αa mod p) = aφ(α) (mod p − 1), adică

β ≡ αa (mod p) ⇐⇒ aφ(a) ≡ φ(β) (mod p − 1).

Acum, căutarea lui a se realizează cu logα β = φ(β)(φ(α))−1 (mod (p − 1)).


Deci, dacă se găseşte o metodă eficace pentru calculul izomorfismului φ, se obţine
un algoritm eficace pentru calculul logaritmului discret ı̂n Zp∗ . Problema este că nu se
cunoaşte nici o metodă generală de construcţie a lui φ pentru un număr prim p oarecare.
Deşi se ştie că cele două grupuri sunt izomorfe, nu există ı̂ncă un algoritm eficient pentru
construcţia explicită a unui izomorfism.
Această metodă se poate aplica problemei logaritmului discret ı̂ntr-un grup finit ar-
bitrar. Implementările au fost realizate ı̂n general pentru Zp , GF (2p ) (unde problema
logaritmului discret este dificilă) sau curbe eliptice.

12.5 Exerciţii
12.1 Implementaţi algoritmul Shanks pentru aflarea logaritmului discret. Aplicaţii pen-
∗ ∗
tru aflarea log106 12375 ı̂n Z24691 şi log6 248388 ı̂n Z458009 .

12.2 Numărul p = 458009 este prim şi α = 2 are ordinul 57251 ı̂n Zp∗ . Folosind algorit-
mul Pollard Rho, calculaţi log2 56851 ı̂n Zp∗ . Luaţi valoarea iniţială x0 = 1 şi partiţia din
Exemplul 12.5.
12.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ătăţoi ı̂ntâi că dacă α este o rădăcină primitivă modulor 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 .
14 PRELEGEREA 12. SISTEMUL DE CRIPTARE EL GAMAL

12.4 Implementaţi algoritmul Pohlig Hellman. Aplicaţie pentru log5 8563 ı̂n Z28703 şi
log10 12611 ı̂n Z31153 .

12.5 Fie p = 227. Elementul α = 2 este primitiv ı̂n Zp∗ .


(a) Calculaţi α32 , α40 , α59 şi α156 modulo p şi apoi factorizaţi-le pentru baza de factori
{2, 3, 5, 7, 11}.
(b) Folosind faptul că log2 2 = 1, calculaţi log2 3, log2 5, log2 7, log2 11 folosind factor-
izarea anterioară.
(c) Să presupunem că vrem să calculăm log2 173. Înmulţim 173 cu valoarea ”aleatoare”
177
2 (mod p). Factorizaţi rezultatul peste baza de factori dată mai sus şi determinatı̂
log2 173.

12.6 Să implementăm sistemul El Gamal ı̂n GF (33 ). Polinomul x3 + 2x2 + 1 este ire-
ductibil peste Z3 [x] şi deci GF (33 ) = Z[ x]/(x3 + 2x2 + 1). Asociem cele 26 luitere 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
2
P ↔ x + 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)
Bibliografie

[1] T. El Gamal, A public key cryptosystem and a signature scheme based on discrete
algorithms, IEEE Transactions on Information Theory, 31 (1985), 469-472

[2] J. Gibson, Discrete logarithm hash function that is collision free and one way. IEEE
Proceedings-E, 138 (1991), 407-410.

[3] A. Menezes, P. Oorschot, S. Vanstome, Handbook of applied cryptography

[4] D. Stinton; Cryptography, theory et pratice, Chapman & Hall/CRC, 2002

[5] A. Salomaa, Criptografie cu chei publice, ed. Militara, 1994

15
Prelegerea 13

Alte sisteme de criptare cu cheie


publică

13.1 Criptarea folosind curbe eliptice


Pentru ı̂nceput, să definim noţiunea de curbă eliptică.

Definiţia 13.1 Fie p (p > 3) un număr prim. Curba eliptică y 2 = x3 + ax + b peste Zp


este mulţimea soluţiilor (x, y) ∈ Zp × Zp ecuaţiei
y 2 ≡ x3 + ax + b (mod p) (1)
unde a, b ∈ Zp sunt constante astfel ca 4a3 + 27b2 6≡ 0 (mod p)
şi dintr-un punct O numit ”punct la infinit”.

O curbă eliptică E se poate structura ca un grup abelian finit. Legea de compoziţie


(notată aditiv) este definită astfel:
Fie P, Q ∈ E, P = (x1 , y1 ), Q = (x2 , y2 ).
Dacă x2 = x1 , y2 = −y1 , atunci P + Q = O; altfel, P + Q = (x3 , y3 ) unde

x 3 = λ2 − x 1 − x 2 , y3 = λ(x1 − x3 ) − y1 ,
iar 
y2 −y1

x2 −x1
dacă P 6= Q
λ= 3x21 +a

2y1
dacă P = Q
Se mai defineşte P + O= O+P = P, ∀P ∈ E.
Verificarea proprietăţilor de grup este banală. Elementul neutru este O.
De remarcat că inversa lui (x, y) (notată −(x, y)) este (x, −y).

Exemplul 13.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.

1
2 PRELEGEREA 13. ALTE SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

În caz afirmativ, deoarece 19 ≡ 3 (mod 4), există o formulă (Prelegerea 10) pe care o
vom aplica direct, obţinând rădăcinile 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 −

Curba eliptică E admite deci 15 puncte; cum ordinul grupului nu este număr prim,
grupul nu este ciclic. Vom alege un element primitiv drept generator. Fie acesta α =
(0, 9). Calculăm ”puterile” lui α (de fapt multiplii, grupul fiind aditiv). Pentru 2α se
calculează ı̂ntâi (modulo 19):

λ = (3 · 02 + 1)(2 · 9)−1 = 1 · 18−1 = 18.

Acum se pot determina


x3 = 182 − 0 − 0 = 361 ≡ 1 (mod 19), y3 = 18 · (0 − 1) − 9 = −27 ≡ 11 (mod 19),
deci 2α = (1, 11).
Multiplul următor este 3α = 2α + α = (1, 11) + (0, 9). Avem:
λ = (9 − 11) · (0 − 1)−1 = 2, deci
2
x3 = 2 − 1 − 0 = 3, y3 = 2 · (1 − 3) − 11 = −15 ≡ 4 (mod 19),
de unde rezultă 3α = (3, 4).
În mod similar se obţin toate punctele curbei eliptice E:

α = (0, 9) 2α = (1, 11) 3α = (3, 4) 4α = (4, 4) 5α = (13, 12)


6α = (11, 6) 7α = (12, 15) 8α = (12, 4) 9α = (11, 13) 10α = (13, 7)
11α = (4, 15) 12α = (3, 15) 13α = (1, 8) 14α = (0, 10) 15α = O

De remarcat că – de exemplu – (3, 4) nu este element primitiv, având ordinul 5.

O curbă eliptică definită pe Zp (p > 3 prim) are aproximativ p puncte. O teoremă a


lui Hasse ([2]) stabileşte un interval pentru acest număr:
√ √
p + 1 − 2 p ≤ card(E) ≤ p + 1 + 2 p
13.1. CRIPTAREA FOLOSIND CURBE ELIPTICE 3

Calculul efectiv al lui card(E) este destul de dificil şi vom trece peste el1 . Există
un algoritm al lui Schoof ([2], pag 137-140) de numărare a punctelor unei curbe eliptice,
dar complexitatea lui este destul de mare: O(log 6 p) (O(log 9 p) ı̂n versiunea originală)
ı̂nmulţiri şi inversiuni, şi O(log 3 p) spaţiu de memorie. În plus implementarea sa este
destul de greoaie şi nu a fost realizată complet până ı̂n prezent.
Altă problemă dificilă constă ı̂n aflarea unui subgrup ciclic al lui E ı̂n care problema
logaritmului discret să fie dificilă. O informaţie utilă este dată de teorema următoare:

Teorema 13.1 (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 să fie izomorfă cu Zn1 0 timesZn2 , iar

n2 |n1 , n2 |(p − 1).

Demonstraţia poate fi găsită ı̂n [2], pag. 107.


Pe spaţiul curbelor eliptice se pot realiza diverse tehnici de criptare cu cheie pub-
lică; unele din ele sunt doar adaptări ale sistemelor deja prezentate, altele sunt aplicaţii
specifice.
Principala atracţie a sistemelor construite pe curbe eliptice constă ı̂n dimensiuni mici
ale cheilor, ceea ce la face aplicabile pe sisteme portabile (smartcarduri de exemplu).

Exemplul 13.2 Să vedem cum se realizează o criptare El Gamal pentru curba eliptică
definită ı̂n Exemplul 13.1.
Fie α = (0, 9) şi să presupunem că exponentul secret este a = 7. Atunci β = 7α =
(12, 15), iar operaţia de criptare este:

eK (x, k) = (k · (0, 9), x + k · (12, 15)), unde x ∈ E, 0 ≤ k ≤ 14.

Pentru decriptare se foloseşte operaţia

dK (y1 , y2 ) = y2 − 7y1

Să presupunem că Alice vrea să cripteze mesajul x = (3, 4) (care este un punct din
E); dacă ea alege aleator valoarea k = 8, va calcula
y1 = 8 · (0, 9) = (12, 4), şi
y2 = (3, 4) + 8 · (12, 15) = (3, 4) + (4, 15) = 3α + 8 · 7α = 3α + 11α = 14α = (0, 10)
(coeficienţii se calculează modulo 15).
Deci y = ((12, 4), (0, 10)). După recepţie, Bob decriptează mesajul astfel:
x = (0, 10) − 7 · (12, 4) = 14α − 7 · 8α = 3α.
1
Nu se cunoaşte nici o formulă care să dea valoarea card(E); există o conjectură Birch and Swinnerton-
Dyer ı̂n legătură cu acest subiect, conjectură inclusă printre cele şapte probleme ale mileniului (ı̂mpreună
cu ”problema ”P versus N P ”).
4 PRELEGEREA 13. ALTE SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

13.1.1 Criptarea Menezes - Vanstone


În acest sistem de criptare – de fapt o variantă a lui El Gamal – curba eliptică este
utilizată pentru ”mascare”, domeniile de valori al textelor clare şi criptate fiind mult mai
larg. Prezentarea algoritmului este:

Fie E o curbă eliptică peste Zp (p > 3 prim) care conţine un subgrup ciclic H ı̂n
care problema logaritmului discret este dificilă.
Alegem P= Zp∗ × Zp∗ , C= E × Zp∗ × Zp∗ şi
K= {(E, α, a, β)|α ∈ E, a ∈ Zp∗ , β = aα}.
Valorile α, β sunt publice, iar a este secret.
Pentru K = (E, α, a, β), k ∈ Zcard(H) ales aleator (secret) şi x = (x1 , x2 ) ∈ P,
definim
eK (x, k) = (y0 , y1 , y2 ),
unde y0 = k · α, (c1 , c2 ) = k · β, yi = ci · xi (mod p), i = 1, 2.
Pentru un text criptat y = (y0 , y1 , y2 ) se defineşte

dK (y) = (y1 · c−1 −1


1 (mod p), y2 · c2 (mod p)),

unde a · y0 = (c1 , c2 ).

Exemplul 13.3 Revenind la curba y 2 = x3 + x + 5 peste Z19 definită ı̂n Exemplul 13.1,
criptarea Menezes - Vanstone autorizează 18 × 18 = 324 texte clare, faţă de numai 15 ı̂n
sistemul El Gamal adaptat.
Să luăm din nou α = (0, 9) şi exponentul a = 7. Atunci β = 7α = (12, 15).
Dacă Alice doreşte să transmită textul clar x = (x1 , x2 ) = (5, 11) (de remarcat că
acesta nu este un punct din E) şi alege k = 4, ea va ı̂ncepe prin a calcula

y0 = k · α = 4 · (2, 7) = (4, 4)şik · β = 4(12, 15) = (1, 8)

deci c1 = 1, c2 = 8.
Apoi se calculează (modulo 19):

y1 = c1 · x1 = 1 · 5 = 5 şi y2 = c2 · x2 = 8 · 11 = 12.

Alice trimite deci lui Bob mesajul criptat y = (y0 , y1 , y2 ) = ((4, 4), 5, 12).
După recepţie, Bob calculează (c1 , c2 ) = a · y0 = 7 · (4, 4) = 7 · 4α = 13α = (1, 8), apoi

x = (y1 · c−1 −1 −1 −1
1 (mod 19), y2 · c2 (mod 19)) = (5 · 1 , 12 · 8 ) = (5, 12 · 12) = (5, 11).
13.2. SISTEMUL DE CRIPTARE WILLIAMS 5

13.2 Sistemul de criptare Williams


Acest sistem de criptare este bazat pe exponenţ ieri ı̂n corpuri pătratice, având multe
asemănări cu sistemele RSA şi El Gamal. Se pare că el are toate avantajele sistemului
RSA; oricum, se poate demonstra că orice ı̂ncercare de spargere a sistemului prin pre-
lucrarea mesajelor criptate conduce la o operaţie de factorizare a modulului. Modul de
criptare şi decriptare sunt la fel de rapide ca la RSA.
Să abordăm ı̂ntâi baza matematică a sistemului de criptare Williams.
Fie c ∈ Z un număr ı̂ntreg fixat, ne-pătrat perfect. Considerăm mulţimea

{x = a + b c|a, b ∈ Z, a2 − cb2 = 1}.

Numerele x pot fi privite şi ca perechi (a, b), pe baza cărora această mulţime se poate
structura algebric ca inel, folosind operaţiile
(a1 , b1 ) + (a2 , b2 ) = (a1 + a2 , b1 + b2 )
(a1 , b1 )(a2 , b2 ) = (a1 a2 + cb1 b2 , a1 b2 + a2 b1 ).

Notăm x = a − b c conjugatul lui x.
Pentru i = 0, 1, 2, . . . se definesc funcţiile Xi (x), Yi (x) astfel:

xi + xi
Xi (x) = Xi ((a, b)) =
2

xi − xi xi − xi
Yi (x) = Yi ((a, b)) = b = √
x−x 2 c
De aici se pot scoate relaţiile
√ √
xi = Xi (x) + Yi (x) c, xi = Xi (x) − Yi (x) c.

Evident, Xi (x) şi Yi (x) sunt numere ı̂ntregi; ı̂n continuare vom scrie aceste numere fără a
mai preciza şi argumentul x, decât dacă este necesar.
Din condiţia a2 − cb2 = 1 rezultăxx = 1, Xi2 − cYi2 = 1.

Lema 13.1 Au loc relaţ iile:


Xi+j = Xi Xj + cYi Yj , Yi+j = Yi Xj + Xi Yj , ∀i, j ∈ N
Xi+j = 2Xi Xj − Xj−i , Yi+j = 2Xi Yj − Yj−i , ∀i, j, i ≤ j.

Demonstraţie: Este lăsată ca exerciţiu.


Din lema 13.1 se deduc formulele recursive de calcul
X2i = Xi2 + cYi2 = 2Xi2 − 1, Y2i = 2Xi Yi ,
X2i+1 = 2Xi Xi+1 − X1 , Y2i+1 = 2Xi Yi+1 − Y1 .
6 PRELEGEREA 13. ALTE SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

Acestea conduc la o evaluare rapidă a valorilor Xi şi Yi .


Deoarece X0 = 1, X1 = a, rezultă că Xi nu depinde de b.
Relaţiile astfel definite se pot extinde ı̂n mod natural la congruenţe modulo un număr
natural nenul n:
√ √
a1 + b 1 c ≡ a2 + b 2 c ⇐⇒ a1 ≡ a2 (mod n) şi b1 ≡ b2 (mod n)

Folosind şi a2 −cb2 ≡ 1 (mod n) ı̂n loc de a2 −cb2 = 1, relaţiile de sus rămân adevărate.

Lema 13.2 Se dau numerele:


n = pq cu p, q numere prime mari;
a, b, c care verifică congruenţa
 
a2 − cb2 ≡ 1(mod n) (2)
c c
Simbolurile Legendre p = p , q = q care verifică relaţiile i ≡
−i (mod 4) pentru i = p, q.  
Presupunem verificate condiţiile (b · c, n) = 1 şi simbolul Jacobi 2(a+1)
n
= 1.
(p − p )(q − q )
Notăm m = .
4
m+1
Fie d, e două numere astfel ı̂ncât d · e ≡ (mod m).
2 √
În toate aceste ipoteze, x2de ≡ ±x (mod n) unde x = a + b c.

Demonstraţie: Se realizează prin calcul direct.


Pe baza acestei leme se pot stabili metode de criptare şi decriptare similare celor din
RSA.
Săconstruim acum ı̂n detaliu sistemul de criptare Williams. Prezentarea va consta din
patru părţi: descrierea sistemului, criptarea, decriptarea şi criptanaliza.
A (Prezentarea): În prima fază se aleg două numere prime mari p, q şi se calculează
n = pq.
Se alege apoi un număr c astfel ca simbolurile Legendre p şi q să verifice condiţiile
din Lema 13.2 (c se poate obţine foarte rapid deoarece cam un număr din patru satisface
congruenţele cerute).
Se determină apoi un număr s astfel ı̂ncât simbolul Jacobi să verifice

s2 − c
!
= −1 şi (s, n) = 1
n

m este dat ca ı̂n Lema 13.2; se aleg apoi d cu (d, m) = 1 şi e care să satisfacă
congruenţele cerute.
Numerele n, c, e, s sunt publice iar p, q, m, d sunt secrete.
13.2. SISTEMUL DE CRIPTARE WILLIAMS 7

5
 
Exemplul 13.4 Să alegem p = 11, q = 13, deci n = 143. Pentru că = 1 ≡ −11 şi
11
5
 
= −1 ≡ −13 (ambele modulo 4), putem alege c = 5.
13
s2 − c
!
−1 −1
  
De asemenea se poate lua s = 2 pentru că = = −1 · 1 = −1.
n 11 13
Se obţine m = 10 · 14/4 = 35. Pentru că 23 · 16 ≡ 18 (mod 35), se pot folosi drept
exponenţi de criptare/decriptare e = 23 respectiv d = 16.

B (Criptarea): Textele clare sunt numere w (0 < w < n). În prima etapă w este codificat
ca un număr x (metoda este prezentată mai jos); criptarea va fi xe (mod n).
Codificarea: Notăm

b1 = 0, γ = w + c sau
√ √
b1 = 1, γ = (w + c)(s + c)
2
!
w −c
după cum simbolul Jacobi are valoarea +1 sau respectiv −1. Cazul când
n
el este 0 trebuie evitat.
γγ
 
Ambele variante conduc la = 1; relaţia este evidentă ı̂n primul caz, rezultă prin
n
calcul din alegerea lui s ı̂n cazul al doilea.
γ
În final, se noteazăx = .
γ √
Scrierea lui x sub forma a + b c este posibilă ı̂n ambele cazuri; astfel (toate calculele
se fac modulo n): √
γ w+ c w2 + c 2w √
pentru b1 = 0 : x = = √ = 2 + 2 c (mod n)
γ w − √c w √−c w −c
γ (w + c)(s + c)
pentru b1 = 1 : x = = √ √ =
γ (w − c)(s − c)
(w2 + c)(s2 + c) + 4scw 2s(w2 + c) + 2w(s2 + c) √
= + c (mod n).
(w2 − c)(s2 − c) (w2 − c)(s2 − c)
Definiţia lui x asigură ı̂n ambele situaţii relaţia xx = a2 − cb2 ≡ 1 (mod n).
x+x γ γ (γ + γ)2
 
Mai avem 2(a + 1) = 2 +1 = + +2= (mod n),
2 γ !γ γγ
2(a + 1)
ceea ce duce la simbolul Jacobi = 1, cum se cere ı̂n Lema 13.2.
n

După codificarea textului clar w ca x = a + b c, textul criptat este xe (mod n), număr
care poate fi exprimat ı̂n funcţie de Xe şi Ye , calculate recursiv pe baza relaţiilor din Lema
13.1. Notăm
E = Xe Ye−1 (mod n).
Textul criptat este tripletul (E, b1 , b2 ), unde b1 s-a definit anterior, iar b2 este dat de relaţia
b2 ≡ a (mod 2).
8 PRELEGEREA 13. ALTE SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

Deoarece fiecărui text criptat ı̂i corespund patru texte clare distincte, biţii b1 şi b2
asigură unicitatea decriptării.
Exemplul! 13.5 Revenind la Exemplul 13.4, să considerăm textul clar w = 21. Deoarece
2
21 − 5 7
  
7 √
= = (−1)(−1) = 1, avem b1 = 0, deci γ = 21 + 5 şi x =
143√ 11 √13 √
21 + 5 446 + 42 5 17 + 42 5 √ √
√ = = = 41(17 + 42 5) = 125 + 6 5 (mod 143).
21 − 5 436 7
Deci a = 125, b = 6. Deoarece a este impar, rezultă b2 = 1.
Vom calcula recursiv pe X23 şi Y23 :
X1 = 125 Y1 = 6 X2 = 75 Y2 = 70 X3 = 35 Y3 = 48
X5 = 120 Y5 = 44 X6 = 18 Y6 = 71 X11 = 48 Y11 = 17
X12 = 75 Y12 = 125 X23 = 68 Y23 = 125
Obţinem acum E = 68 · 125−1 = 68 · 135 = 28 (mod 143).
Deci textul criptat este tripletul (28, 0, 1).
C Decriptarea: Folosind prima componentăE a textului criptat, destinatarul poate deter-
mina numărul x2e :
√ √
2e x2e xe Xe + Ye c E+ c E2 + c 2E √
x = = = √ = √ = + c (mod n)
(xx)e xe Xe − Ye c E− c E2 − c E2 − c
De remarcat că acest calcul poate fi făcut şi de un criptanalist, ı̂n eventualitatea
interceptării textului criptat.
Totuşi, informaţia secretă este necesară pentru calculul ulterior:
√ √
x2ed = X2ed (x) + Y2ed (x) c = Xd (x2e ) + Yd (x2e ) c,
unde valorile lui Xd şi Yd se pot calcula recursiv pe baza lui x2e , determinat anterior.
Cum toate ipotezele Lemei 13.2 sunt satisfăcute, vom avea x2ed = ±x (mod n). Ultima
componentă b2 a textului criptat dă semnul corect al lui x.
Deci x se poate determina, iar textul clar w se obţine din x şi b1 (a doua componentă
a textului criptat)
(
ı̂n felul următor:
x dacă b1 = 0
Fie x0 = √
s−√c
x · s+ c dacă b1 = 1

0 w+ c x0 + 1 √
Atunci x = √ (mod n), ceea ce duce la w = 0 c (mod n).
w− c x −1
Exemplul 13.6 În condiţiile din Exemplul 13.4, să decriptăm mesajul (28, 0, 1). Folosim
E pentru a calcula ı̂n prima fază
282 + 5 2 · 28 √ √
x2e = + 5 = 95 + 126 5 (mod 143).
282 − 5 282 − 5
Reamintim, d = 16; deci vom calcula (modulo 143)
13.2. SISTEMUL DE CRIPTARE WILLIAMS 9

X1 (x2e ) = 95 Y1 (x2e ) = 126 X2 (x2e ) = 31 Y2 (x2e ) = 59


X4 (x2e ) = 62 Y4 (x2e ) = 83 X8 (x2e ) = 108 Y8 (x2e ) = 139
X16 (x2e ) = 18 Y16 (x2e ) = 137

S-a obţinut 18 +√137 5 = ±x √(mod 143). Pentru că b2 = 1, a trebuie să fie impar, deci
x = −(18 + 137 5) = 125 + 6 5 (mod 143).
Cum b1 = 0, avem x0 = x şi deci
√ √ √
126 + 6 5 √ (126 + 6 5)(124 − 6 5) √
w= √ 5= 2 − 5 · 62
5 = 83 · 38−1 = 21 (mod 143)
124 + 6 5 124

Deci textul clar original a fost w = 21.

Lucrând detaliat, se pare că sistemul de criptare Williams este mai dificil decât RSA.
Totuşi ordinele de complexitate ale criptării şi decriptării sunt egale ı̂n celel două sisteme.
D Criptanaliza: Dacă s-au aflat p şi q, m şi d se pot calcula imediat. Invers, să
presupunem că criptanalistul a găsit ı̂ntr-un mod oarecare un algoritm de decriptare.
Atunci el poate folosi acest algoritm la descompunerea lui n astfel.
x2 − c
!
În prima fază se alege prin ı̂ncercări un număr x care verifică = −1.
n

Apoi x este criptat alegând b1 = 0 şi γ = x + c. Deci, ca primă ipoteză, pentru
simbolul Jacobi este folosită valoarea (falsă) +1. Fie (E, 0, b2 ) textul criptat rezultat.
Acestuia, criptanalistul ı̂i aplică algoritmul pentru a stabili textul clar w corespunzător;
acest w nu este identic cu x deoarece procesul de criptare a plecat de la o ipoteză falsă.
Prin simplu calcul se arată că (x − w, n) este p sau q (vezi [6])
Aceasta ı̂nseamnă că şi criptanalistul este ı̂n măsură să descompună pe n.

Exemplul 13.7 Reluăm cadrul descris ı̂n Exemplul 13.4. Alegem x = 138, care satisface
condiţ √ia de plecare pentru criptanaliză.
√ Se iau ca valori iniţ iale false b1 = 0, γ =
138 + 5. Atunci α = γ/γ = 73 + 71 5.
Deoarece 73 este impar, se obţine b2 = 1. Pentru criptare se calculează iterativ (modulo
143):

X1 (α) = 73 Y1 (α) = 71 X2 (α) = 75 Y2 (α) = 70


X3 (α) = 9 Y3 (α) = 139 X5 (α) = 133 Y5 (α) = 44
X6 (α) = 18 Y6 (α) = 71 X11 (α) = 139 Y11 (α) = 82
X12 (α) = 75 Y12 (α) = 125 X23 (α) = 42 Y23 (α) = 73

Deducem că E = 42 · 73−1 = 28 (mod 143), deci textul criptat este (28, 0, 1).
Acesta a fost ı̂nsă criptat anterior ı̂n w = 21. Se obţine imediat factorizarea lui n
deoarece (x − w, n) = (117, 143) = 13.

Deci, sistemul Williams nu rezistă la un atac cu text clar ales.


10 PRELEGEREA 13. ALTE SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

13.3 Sistemul de criptare McEliece


Sistemul de criptare McEliece – propus ı̂n 1978 – este destul de apropiat de problema
rucsacului. El utilizează drept cadru teoria codurilor liniare (pentru detalii vezi [1]); aici,
ı̂n general decodificarea unui cod liniar binar corector de erori este o problema NP - com-
pletă. Pentru unele clase de coduri sunt construiţi algoritmi de decodificare polinomiali;
o astfel de clasă o formează codurile Goppa, care constituie baza sistemului de criptare
McEliece.

Definiţia 13.2 Fie k, n ∈ N (k ≤ n). Un (n, k) - cod liniar binar este un subspaţiu liniar
C ⊆ Z2n de dimensiune k.
O matrice generatoare a lui C este o matrice binară k × n ale cărei linii formează o
bază a lui C.
Pentru a ∈ Z2n se defineşte ponderea w(a) = numărul de elemente nenule din a.
Pentru a, b ∈ Z2n a = (a1 , . . . , an ), b = (b1 , . . . , bn ), se defineşte distanţa Hamming
prin d(a, b) = w(a − b).
Pentru un (n, k) - cod liniar binar C, distanţa minimă este

dC = min{d(a, b)|a, b ∈ C, a 6= b}

Un (n, k, d) - cod este un (n, k) - cod de distanţă minimă d.

Rolul unui cod corector de erori este de a corija modificări aleatoare care apar ı̂n trans-
miterea 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, GH T = 0.
Pentru un cuvânt r ∈ Z2n , se numeşte sindrom secvenţa de n − k biţi definită HrT .

Teorema 13.2 a este un cuvânt - cod dacă şi numai dacă HaT = 0.
În plus, dacă a ∈ C, e ∈ Z2n şi r = a + e, atunci HrT = HeT .
13.3. SISTEMUL DE CRIPTARE MCELIECE 11

Pentru demonstraţie se poate consulta de asemenea [1].


e poate fi considerat drept vectorul de erori care au apărut ı̂n transmiterea mesajului
a. Teorema anterioară afirmă că sindromul nu depinde decât de erori, nu de cuvântul -
cod transmis.
Această observaţie sugerează o metodă de decodificare bazată pe sindrom. Se cal-
culează ı̂ntâi s = HrT . Dacă s = 0, decodificarea lui r este tot r. Altfel, se ı̂ncearcă toate
cuvintele de pondere 1. Pentru fiecare astfel de cuvânt e se calculează HeT . Dacă s-a
găsit un e cu HeT = s, r se decodifică ı̂n r − e. În caz contrar se ı̂ncearcă vectorii de
pondere 2, 3, . . . , [(d − 1)/2]. Dacă nu s-a găsit nici un cuvânt e cu HeT = s, se deduce
că au apărut mai mult de [(d − 1)/2] erori ı̂n cursul transmisiei.
Metoda prezentată funcţionează pentru toate codurile liniare. Pentru anumite clase
speciale de coduri există algoritmi polinomiali de decodificare şi corectare a erorilor; ı̂n
cazul general ı̂nsă problema este N P - completă.
Algoritmul de criptare McElliece se bazează pe această idee. Trapa sa secretă o consti-
tuie o clasă de coduri pentru care există algoritmi eficace de decodificare - codurile Goppa.
În plus, există un număr mare de coduri Goppa neechivalente, având aceiaşi parametri.
Algoritmul de criptare McEliece este următorul:

Fie G matricea generatoare a unui (n, k, d) - cod Goppa cu n = 2m , d = 2t + 1, k =


n − mt.
Se definesc S o matrice inversabilă k × k peste Z2 şi P o matrice de permutare n × n
(matrice ı̂n care pe fiecare linie şi coloană există o valoare 1, iar restul elementelor
sunt 0).
Fie P= Z2k , C= Z2n , K= {(G, S, P, G0 ) | G0 = S · G · P }.
G0 este publică iar G, S, P sunt secrete.
Pentru K = (G, S, P, G0 ) se defineşte

eK (a, e) = aG0 + e

unde e ∈ Z2n este un cuvânt aleator2 de pondere t.


Bob decriptează un mesaj b ∈ Z2n astfel:
1. Calculează b1 = bP −1 ;
2. Decodifică b1 obţinând b1 = a1 + e1 unde a1 ∈ C;
3. Calculează a0 ∈ Z2k astfel ca a0 G = a1 ;
4. Calculează a = a0 S −1 .

Corectitudinea algoritmului de decriptare:


Deoarece b1 = bP −1 = (aG0 + e) · P −1 = (aS · G · P + e) · P −1 = (aS) · G + eP −1
iar eP −1 este un vector de pondere cel mult t, algoritmul de decodificare al codului de
matrice generatoare G poate decodifica corect pe b1 şi obţine un mesaj sursă a0 = aS.
La ultimul pas se află mesajul iniţial a = a0 S −1 .
12 PRELEGEREA 13. ALTE SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

Nu vom intra ı̂n detalii privind definiţia codurilor Goppa ([1]). Acestea pot fi privite
ı̂nsă drept coduri liniare cu parametrii n = 2m , d = 2t + 1, k = n − mt. Pentru o
implementare practică referitor la criptare, McEliece sugerează m = 10, t = 50, ceea ce
corespunde unui (1024, 524, 101) - cod Goppa3 . Un text clar este o secventă de 524 biţi,
iar un text criptat este o secventă de 1024 biţi. Cheia publică este o matrice binară de
dimensiuni 524 × 1024.

Exemplul 13.8 Vom exemplifica algoritmul pe un (8, 2, 5) - cod Goppa (deci n = 23 , k =


2, d = 5). Acest cod - extrem de mic (are doar 4 cuvinte) este generat de matricea
!
0 0 1 1 1 1 1 1
G=
1 1 0 0 1 0 1 1
Să presupunem că Bob alege matricile
! !
1 0 1 0
S= cu S −1 =
1 1 1 1
şi    
0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0
 0 0 0 1 0 0 0 0   1 0 0 0 0 0 0 0
   

   
 0 0 0 0 0 0 1 0   0 0 0 0 1 0 0 0 
   
 1 0 0 0 0 0 0 0   0 1 0 0 0 0 0 0 
−1
P = cu P = 
   
 0 0 1 0 0 0 0 0   0 0 0 0 0 0 1 0
 

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

0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
Matricea publică generată este deci
!
0 1 0 1 0 1 1 1 1
G = SGP =
1 1 0 1 0 1 1 0

Să presupunem că Alice vrea să cripteze textul clar a = (0, 1) folosind vectorul - eroare
e = (0, 0, 1, 0, 0, 1, 0, 0) (ales aleator) de pondere 2. Textul criptat este

b = aG0 + e = (1, 1, 1, 1, 0, 0, 1, 0).

După recepţionarea mesajului, Bob calculează ı̂ntâi


b1 = bP −1 = (1, 1, 1, 1, 1, 0, 0, 0),
pe care ı̂l scrie sub forma a1 + e1 unde a1 = (1, 1, 1, 1, 0, 1, 0, 0) este un cuvânt - cod,
iar e1 = (0, 0, 0, 0, 1, 1, 0, 0) 6= e (din cauza ı̂nmulţirii cu P −1 ).
Bob calculează apoi mesajul a0 = (1, 1), singurul cu proprietatea a0 G = a1 .
Ultimul pas este determinarea lui a = S −1 a0 = (0, 1), care este textul clar expediat de
Alice.
3
O analiză a securităţii recomandă parametrii n = 1024, t = 38, k ≥ 644.
13.4. EXERCIŢII 13

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 cunoasţe 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 aG0k = bk + ek . Dacă bk = 0 şi G0k este nesingulară,
atunci a poate fi aflat rezolvând sistemul liniar aG0k = bk . Probabilitatea ca cei k
k
biţi selectaţi să nu facă parte din eroare (deci ek = bf 0 este Cn−t /Cnk , neglijabilă
pentru valorile alese ale parametrior n, k, t.

Interesant, dar această securitate este mult diminuată dacă se folosesţe 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.

13.4 Exerciţii
13.1 Fie E curba eliptică y 2 = x3 + x + 28 peste Z71 .

1. Determinaţi numărul de puncte din E;

2. Arătaţi căE nu este ciclic;

3. Care este ordinul maxim al unui element din E ? Găsiţi un astfel de element.

13.2 Fie E curba eliptică y 2 = x3 + x + 13 definităpe Z31 . Se poate arăta că |E| = 34 ş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.

1. Calculaţi β = aα;

2. Decriptaţi textul următor:

((4, 9), 28, 7)((19, 28), 9, 13)((5, 22), 20, 17)((25, 16), 12, 27)

3. Dacă presupunem că fiecare text clar reprezintă două caractere alfabetice, convertiţi
acest text clar ı̂n engleză (s-a folosit corespondenţa A − 1, . . . , Z − 26).
14 PRELEGEREA 13. ALTE SISTEME DE CRIPTARE CU CHEIE PUBLICĂ

13.3 Fie E curba eliptică y 2 = x3 + x + 6 peste Z11 .


(a) Să se calculeze punctele lui E.
(b) Se aleg parametrii α = (2, 7) şi a = 7. Folosind sistemul de criptare El Gamal, să
se cripteze mesajul x = (10, 9) cu valoarea aleatoare k = 3.
(c) Folosind sistemul de criptare Menezes - Vanstone şi aceiaşi parametrii, să se
cripteze mesajul x = (9, 1).

13.4 Demonstraţi Lemele 13.1 şi 13.2.

13.5 Fie curba eliptică E de ecuaţie y 2 = x3 + x + 28 peste Z71 .


(a) Să se determine numărul de puncte din E.
(b) Care este ordiunul maxim al unui element din E ? Să se găsească un element de
acest ordin.

13.6 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.

13.7 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 o variantă a algoritmului Shanks.

13.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 .
Bibliografie

[1] A. Atanasiu, Teoria Codurilor, Editura Universităţii Bucureşti, 2002

[2] A. Enge, Elliptic Curves and their applications to Cryptography, Kluwer Academic
Publ, 1999

[3] M. Rosing, Implementing Elliptic Curve Cryptography, Manning, 1998

[4] D. Stinton, Cryptography, theory and pratice, International Thompson Publishing


France, 1995

[5] A. Salomaa, Criptografie cu chei publice, Ed. Militară, 1994

[6] H.C.Williams, Some public-key criptofunctions as intractable as factorisation, Cryp-


tologia, 9 (1985), 224-237.

15
Prelegerea 1

Codificare şi decodificare

1.1 Codificare
Definiţia 1.1 Fiind date mulţimile A (alfabetul sursă) şi B (alfabetul cod), o co-
dificare este o aplicaţie injectivă K : A → B ∗ .

Elementele mulţimii K(A) ⊆ B ∗ se numesc cuvinte-cod, iar K(A) se numeşte cod.


Dacă B are numai două simboluri, codificarea K se numeşte binară.

Exemplul 1.1 Printre secvenţele binare de lungime 5, numărul celor care au doi
de 1 este C52 = 10. Ele pot fi folosite pentru a codifica cifrele din scrierea zecimală
(Tabelul 1.1).

Tabelul 1.1: Codul ”doi-din-cinci”

Simbol zecimal Cuvânt cod


1 11000
2 10100
3 01100
4 10010
5 01010
6 00110
7 10001
8 01001
9 00101
0 00011

Mesajul 00 17300 are codul 110001000101100. De remarcat că ı̂ntre cuvintele cod
nu se lasă nici un spaţiu, deoarece ”spaţiu” poate fi el ı̂nsusi un simbol-cod. Astfel
de exemplu, codul Morse are alfabetul B = {., −, spaţiu}.
Decodificarea se face foarte simplu: se ı̂mparte mesajul codificat ı̂n grupe de câte
cinci caractere şi se vede cifra din tabel corespunzătoare grupei respective. Repar-
tizarea cuvintelor cod a fost făcută pentru a realiza şi o decodificare pe baza unei

1
2 PRELEGEREA 1. CODIFICARE ŞI DECODIFICARE

formule. Astfel, dacă a0 a1 a2 a3 a4 este cuvântul - cod, el corespunde cifrei k dată de


algoritmul:
begin
x := a1 + 2a2 + 4a3 + 7a4 ;
if x = 11 then k := 0 else k := x;
end.

Definiţia 1.2 Pentru o codificare K : A → B ∗ , se numeşte ”codificare a mesajelor


(textului) sursă” aplicaţia K ∗ : A∗ → B ∗ definită recursiv prin:
• K ∗ (²) = ² (² este cuvântul vid);

• K ∗ (aα) = K ∗ (a)K ∗ (α), ∀a ∈ A, α ∈ A∗ .

Definiţia 1.3 Codificarea K este ”unic decodabilă” dacă K ∗ este injectivă.

Codificarea dată ı̂n Exemplul 1.1 este - după cum s-a observat - unic decodabilă.
Acest lucru nu este totdeauna posibil. Dacă luăm de exemplu codificarea

K(a) = 00, K(b) = 10, K(c) = 101, K(d) = 110, K(e) = 1001,

ea nu este unic decodabilă; astfel K ∗ (bd) = K ∗ (cb) = 101110 .

Definiţia 1.4 1. O codificare K : A → B ∗ ı̂n care toate cuvintele cod au lungi-


mea n se numeşte ”codificare-bloc de lungime n”, iar K(A) este un ”cod-bloc
de lungime n”.

2. O codificare K : A → B ∗ se numeşte ”instantanee” dacă K(A) are proprietatea


prefixului (dacă α, αβ ∈ K(B) atunci β = ²).

Codul definit ı̂n Exemplul 1.1 este un cod - bloc de lungime 5.


Codurile bloc sunt eficiente ı̂n cazul când simbolurile sursă au frecvenţe egale de
apariţie; ı̂n caz contrar, ele devin greoaie şi sunt preferabile codurile instantanee cu
lungimi variabile ale cuvintelor cod.
Exemplul 1.2 Codul Morse, dat ı̂n Tabelul 1.2 este un cod instantaneu cu alfabetul
cod B = {., −, }. Deoarece spaţiul este folosit numai la sfârşitul fiecărui cuvânt -
cod, procedura de decodificare este simplă: orice cuvânt - cod se află ı̂ntre două
spaţii, de la ı̂nceputul mesajului până la primul spaţiu, sau de la ultimul spaţiu până
la sfârşit. Motivul pentru care nu se foloseşte un cod - bloc este simplu: frecvenţele
literelor ı̂ntr-o limbă diferă foarte mult.

Exemplul 1.3 Un alt exemplu de cod - bloc este codul octal:

0 000 4 100
1 001 5 101
2 010 6 110
3 011 7 111
1.2. EXEMPLE DE CODURI - BLOC IMPORTANTE 3
Tabelul 1.2: Codul Morse

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

Exemplul 1.4 Să presupunem că vrem să construim un cod binar pentru alfabetul
{0, 1, 2, 3} şi observăm că 0 apare ı̂n mesajele sursă mai des decât orice alt simbol.
Atunci următoarea schemă de codificare pare rezonabilă:

K(0) = 0, K(1) = 01, K(2) = 011, K(3) = 111.

Decodificarea sa este foarte simplă: se aplică recursiv regula:


”Se consideră sufixul 01k ; valoarea lui k reprezintă numărul codificat.”
Totuşi această codificare nu este instantanee. Într-adevăr, dacă se primeşte un
mesaj lung de forma
0111111111111111 . . .
nu vom şti dacă primul simbol sursă este 0, 1 sau 2 până nu se termină mesajul.

1.2 Exemple de coduri - bloc importante


Codurile binare sunt de obicei lungi şi deci greu de manipulat. Este deci convenabil
să grupăm simbolurile binare formând alfabete mai complexe.
Astfel, formând grupuri de câte trei simboluri, se obţin codurile octale (Exemplul
1.3). Reprezentarea ı̂n octal se indică de obicei prin indicele 8 aşezat la sfârşit. De
exemplu,
(01)8 = 000001
În mod similar, prin gruparea a câte patru simboluri binare se obţine codul hexa-
zecimal.
Un cod foarte important folosit ı̂n reprezentarea standard a simbolurilor alfa-
betice şi numerice este codul ASCII (American Standard Code for Information
Interchange) - Tabelul 1.3.
4 PRELEGEREA 1. CODIFICARE ŞI DECODIFICARE
Tabelul 1.3: Codul ASCII (7 biţi de informaţie)
Simbol Cod Simbol Cod Simbol Cod Simbol Cod
sursă sursă sursă sursă
@ 1(00)8 ’ 1(40)8 NUL 0(00)8 SP 0(40)8
A 1(01)8 a 1(41)8 SOH 0(01)8 ! 0(41)8
B 1(02)8 b 1(42)8 STX 0(02)8 ” 0(42)8
C 1(03)8 c 1(43)8 ETX 0(03)8 # 0(43)8
D 1(04)8 d 1(44)8 EOT 0(04)8 $ 0(44)8
E 1(05)8 e 1(45)8 ENQ 0(05)8 % 0(45)8
F 1(06)8 f 1(46)8 ACK 0(06)8 & 0(46)8
G 1(07)8 g 1(47)8 BEL 0(07)8 ’ 0(47)8
H 1(10)8 h 1(50)8 BS 0(10)8 ( 0(50)8
I 1(11)8 i 1(51)8 HT 0(11)8 ) 0(51)8
J 1(12)8 j 1(52)8 LF 0(12)8 * 0(52)8
K 1(13)8 k 1(53)8 VT 0(13)8 + 0(53)8
L 1(14)8 l 1(54)8 FF 0(14)8 ‘ 0(54)8
M 1(15)8 m 1(55)8 CR 0(15)8 - 0(55)8
N 1(16)8 n 1(56)8 SO 0(16)8 . 0(56)8
O 1(17)8 o 1(57)8 SI 0(17)8 / 0(57)8
P 1(20)8 p 1(60)8 DLE 0(20)8 0 0(60)8
Q 1(21)8 q 1(61)8 DCI 0(21)8 1 0(61)8
R 1(22)8 r 1(62)8 DC2 0(22)8 2 0(62)8
S 1(23)8 s 1(63)8 DC3 0(23)8 3 0(63)8
T 1(24)8 t 1(64)8 DC4 0(24)8 4 0(64)8
U 1(25)8 u 1(65)8 NAK 0(25)8 5 0(65)8
V 1(26)8 v 1(66)8 SYN 0(26)8 6 0(66)8
W 1(27)8 w 1(67)8 ETB 0(27)8 7 0(67)8
X 1(30)8 x 1(70)8 CAN 0(30)8 8 0(70)8
Y 1(31)8 y 1(71)8 EM 0(31)8 9 0(71)8
Z 1(32)8 z 1(72)8 SUB 0(32)8 : 0(72)8
[ 1(33)8 { 1(73)8 ESC 0(33)8 ; 0(73)8
1(34)8 — 1(74)8 FS 0(34)8 ¡ 0(74)8
] 1(35)8 } 1(75)8 GS 0(35)8 = 0(75)8
1(36)8 1(76)8 RS 0(36)8 ¿ 0(76)8
1(37)8 DEL 1(77)8 US 0(37)8 ? 0(77)8

El are 27 = 128 simboluri sursă codificate ı̂n secvenţe binare de lungime 8;


primele 7 conţin infomaţia, iar ultimul - numit bit de paritate dă un prim control
asupra corectitudinii secvenţei. Valoarea acestui caracter este suma modulo 2 a
primilor şapte biţi.
De exemplu, litera A, va avea codul 10000010; primele şapte simboluri provin
din Tabelul 1.3 iar ultimul are valoarea 0 deoarece anterior au fost două (număr
par) simboluri binare cu valoarea 1.
Un ultim cod, folosit internaţional pentru toate cărţile este Internaţional Stan-
dard Book Number (ISBN). El este un cod - bloc de lungime 10 (lungimea cuvintelor
- cod creşte prin folosirea simbolului ’-’ pe diverse poziţii, dar acest caracter este ig-
1.3. CONSTRUCŢIA CODURILOR INSTANTANEE 5

norat la prelucrarea automată). Alfabetul cod este B = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, X},


(X pentru numărul 10).
De exemplu, cartea S. Lin, P. Costello - Teoria Codurilor are codul
ISBN 0 − 13 − 283796 − X
Primul număr (0) reprezintă ţara (SUA), 13 reprezintă editura (Prentice-Hall),
iar următoarele şase cifre sunt asignate de editură ca număr de identificare al cărţii.
Ultimul simbol este de control (similar cu bitul de paritate definit anterior) şi definit
astfel:
10
X
Pentru codul ISBN a1 a2 . . . a10 , ia11−i = 0 (mod 11).
i=1
Astfel,ı̂n ISBN -ul de sus,
10 · 0 + 9 · 1 + 8 · 3 + 7 · 2 + 6 · 8 + 5 · 3 + 4 · 7 + 3 · 9 + 2 · 6 + 1 · 10 = 187 ≡ 0 (mod 11)
Unele publicaţii au codul de identificare de trei cifre (de exemplu Wiley-Inter-
science are 471); ı̂n acest caz numărul pentru fiecare publicaţie are numai cinci
simboluri. Pentru România, codul de ţară este 973.

1.3 Construcţia codurilor instantanee


Ne punem problema construirii unui cod binar instantaneu peste alfabetul sursă
A = {a1 , . . . , an }.
Iniţial se specifică lungimile d1 , d2 , . . . , dn ale cuvintelor cod. Fără a micşora
generalitatea, putem presupune d1 ≤ d2 ≤ . . . ≤ dn .
Se alege un cuvânt - cod binar arbitrar K(a1 ) de lungime d1 .
Se alege un cuvânt - cod arbitrar K(a2 ) din mulţimea cuvintelor binare de
lungime d2 care nu au pe K(a1 ) ca prefix. Aceasta este totdeauna posibil pentru că:
Numărul tuturor secvenţelor binare de lungime d2 este 2d2 ; dintre acestea, numă-
rul celor care nu au prefixul K(a1 ) este 2d2 −d1 . Cum 2d2 ≥ 2d2 −d1 + 1, există cel
puţin o alegere posibilă pentru K(a2 ) de lungime d2 .
Va trebui să selectăm ı̂n continuare un cuvânt de lungime d3 care nu are ca prefix
K(a1 ) sau K(a2 ). Deci, din cele 2d3 secvenţe binare posibile trebuiesc eliminate cele
2d3 −d1 secvenţe cu prefixul K(a1 ) şi 2d3 −d2 secvenţe cu prefixul K(a2 ). Aceasta este
posibil dacă şi numai dacă

2d3 ≥ 2d3 −d2 + 2d3 −d1 + 1

Împărţind această inegalitate cu 2d3 se obţine

1 ≥ 2−d1 + 2−d2 + 2−d3 .

În mod analog se poate arăta inegalitatea

1 ≥ 2−d1 + 2−d2 + . . . + 2−dn

din care rezultă construcţia. De remarcat că ea este o condiţie necesară şi suficientă
pentru construcţia codurilor instantanee.
6 PRELEGEREA 1. CODIFICARE ŞI DECODIFICARE

Teorema 1.1 Fiind dat un alfabet sursă de n simboluri şi un alfabet cod de k sim-
boluri, se poate construi un cod instantaneu cu lungimile cuvintelor cod d1 , d2 , . . . , dn
dacă şi numai dacă este verificată inegalitatea (Kraft):

k −d1 + k −d2 + . . . + k −dn ≤ 1.

Demonstraţie: Fie A = {a1 , a2 , . . . , an } şi putem presupune relaţia d1 ≤ d2 ≤ . . . ≤


dn . Construim codificarea instantanee K prin inducţie astfel:

• Se alege K(a1 ) arbitrar.

• Presupunem că au fost alese K(a1 ), K(a2 ), . . . K(as−1 ). Atunci se va alege un


cuvânt arbitrar K(as ) care nu are ca prefix nici unul din cuvintele selectate
anterior. Aceasta este posibil deoarece numărul cuvintelor cu prefixul K(ai )
este 2ds −di (1 ≤ i ≤ s − 1); deci alegerea poate fi făcută din
s−1
X
k ds − k ds −di elemente.
i=1

Din inegalitatea lui Kraft avem


s−1
X
1− k −di ≥ k −ds
i=1

care, prin multiplicare cu k ds conduce la


s−1
X
k ds − k ds −di ≥ 1.
i=1

Afirmaţia reciprocă se demonstrează similar (pentru k = 2 ea a fost dată anterior).


2

Teorema 1.2 (McMillan) Orice codificare unic decodabilă satisface inegalitatea lui
Kraft.

Demonstraţie: Fie K o codificare unic decodabilă. Notăm cu di lungimea cuvântului


cod K(ai ), (1 ≤ i ≤ n). Se observă că ∀j, (j ≥ 1) se pot forma k j cuvinte de lungime
j peste alfabetul - cod cu k simboluri. Din proprietatea de unic decodabilitate,
numărul mesajelor sursă α = ai1 ai2 . . . air al căror cod are lungimea j nu depăşeşte
k j . Lungimea codului pentru α este di1 +di2 +. . .+dir ; deci numărul tuturor sumelor
de forma
di1 + di2 + . . . + dir = j
este cel mult k j . n
X
Rămâne de demonstrat că numărul c = k −di este cel mult 1. Pentru aceasta,
i=1
cr
vom arăta că ∀r ≥ 1, este mărginit.
r
1.4. CODURI HUFFMAN 7

Să calculăm puterile lui c:


à n ! n 
n
X X X
c2 = k −di  k −dj  = k −(di +dj )
i=1 j=1 i,j=1

şi, ı̂n general,


n
X
cr = k −(di1 +di2 +...+dir )
i1 ,i2 ,...,ir =1

Această sumă se poate re-ordona grupând toţi termenii de forma k −j unde j satisface
egalitatea anterioară. Cel mai mare j posibil este j = d + d + . . . + d = rd, unde
d = max{d1 , d2 , . . . , dn }.
Numărul tuturor termenilor de forma k −j din sumă este cel mult k j . Deci,
rd
X rd
X
cr ≤ k j k −j = 1 = rd.
j=1 j=1

cr cr
Deci, ≤ d, de unde va rezulta c ≤ 1 (pentru c > 1 şirul ar = → ∞, deci nu
r r
este mărginit). 2
Corolarul 1.1 Pentru orice cod unic decodabil există un cod instantaneu care are
toate cuvintele - cod de lungimi egale.
Demonstraţie: Rezultă din demonstraţia teoremei precedente.
Exemplul 1.5 Să considerăm alfabetul sursă = {a, b, c} şi alfabetul - cod
B = {0, 1}; deci n = |A| = 3, k = |B| = 2. Vrem să construim o codificare
instantanee K : A → B care are toate cuvintele - cod de lungime d. Inegalitatea
1
Kraft va da 2−d + 2−d + 2−d ≤ 1, deci 2−d ≤ . Cel mai mic d care o verifică este
3
d = 2. Deci orice mulţime de 3 secvenţe binare de lungime 2 va putea fi folosită
drept cod. Sunt 4 astfel de mulţimi:

{00, 01, 10}, {00, 01, 11}, {00, 10, 11}, {01, 10, 11}

1.4 Coduri Huffman


Am menţionat anterior faptul că dacă frecvenţa simbolurilor sursă variază, atunci co-
durile instantanee sunt preferabile codurilor bloc, deoarece simbolurile care apar mai
frecvent vor fi codificate cu cuvinte cod mai scurte. Ne punem problema aflării unor
codificări cât mai eficiente, ı̂n ipoteza că frecvenţele simbolurilor sursă sunt cunos-
cute exact (de exemplu probabilitatea distribuţiei simbolurilor sursă ı̂n mesaje).
Definiţia 1.5 O sursă de informaţie este o pereche S = (A, P ) unde
• A = {a1 , a2 , . . . , an } este alfabetul sursă(mulţime ordonată);
• P = {P (a1 ), P (a2 ), . . . , P (an )} este mulţimea ordonată a probabilităţilor ele-
mentelor lui A, deci
8 PRELEGEREA 1. CODIFICARE ŞI DECODIFICARE

– 0 ≤ P (ai ) ≤ 1, (1 ≤ i ≤ n);
n
X
– P (ai ) = 1.
i=1

Fie K o codificare a unei surse de informaţie. Dacă se notează cu di = |K(ai )| (|α|


reprezintă lungimea secvenţei α), se poate defini lungimea medie L a cuvintelor cod
prin
n
X
L= di P (ai ).
i=1

O codificare este eficientă dacă lungimea medie a secvenţelor cod este cât mai mică.
Definiţia 1.6 Fiind dată o sursă de informaţie S şi un alfabet cod, un cod Huffman
este un cod instantaneu cu lungimea medie minimă.
Lungimea medie minimă a unui cod Huffmann se notează cu Lmin (S).
Exemplul 1.6 Să se determine un cod Huffman binar pentru alfabetul sursă A =
{a, b, c, d, e, f } ştiind că ’a’ apare de două ori mai des decât ’e’ şi ’e’ de două ori
mai des decât orice consoană.
Deci, vom avea sursa de informaţie

Simbol a b c d e f
Probabilitate 0.4 0.1 0.1 0.1 0.2 0.1

Putem asigna deci un cuvânt cod de lungime 1 lui ’a’ şi unul de lungime doi lui ’e’.
Atunci lungimile cuvintelor cod rămase sunt egale cu 4, iar inegalitatea lui Kraft
este saturată: 12 + 212 + 244 = 1. Un astfel de cod se poate construi:

K(a) = 0 K(c) = 1101 K(e) = 10


K(b) = 1100 K(d) = 1110 K(f ) = 1111
Lungimea sa medie este

L = 0.4 + 2 × 0.2 + 4 × 4 × 0.1 = 2.4

Deci, pentru acest exemplu, Lmin (S) ≤ 2.4

1.4.1 Construcţia codurilor Huffman binare


O sursă cu două simboluri are evident un cod Huffman de cuvinte cod {0, 1} (şi deci
Lmin (S) = 1).
O sursă cu trei simboluri {a1 , a2 , a3 } ı̂n care a1 are probabilitate maximă, poate
fi redusă la cazul a două simboluri {a1 , a2,3 } unde P (a2,3 ) = P (a2 ) + P (a3 ). Vom
găsi o codificare Huffman pentru sursa redusă

K(a1 ) = 0, K(a2,3 ) = 1.

după care ”spargem” cuvântul cod 1 ı̂n două cuvinte: 10 şi 11; ı̂n acest fel se obţine
un cod Huffman pentru sursa originală:
1.4. CODURI HUFFMAN 9

a1 a2 a3
0 10 11

În general, fie S o sursă de informaţie cu simbolurile {a1 , a2 , . . . , an } ordonate după


probabilităţi, adică:
P (a1 ) ≥ P (a2 ) ≥ . . . ≥ P (an ).
Contruim o sursă redusă S ∗ cu simbolurile {a1 , . . . , an−2 , an−1,n } unde an−1,n este un
simbol nou, cu probabilitatea P (an−1,n ) = P (an−1 ) + P (an ).
Dacă nu se poate construi un cod Huffman pentru S ∗ , se reia procedeul pentru
această sursă (reordonând eventual simbolurile după probabilitate); ı̂n final se va
ajunge la o sursă (pentru două simboluri problema a fost rezolvată) ı̂n care care
codul Huffman se poate construi.
Dacă se poate găsi o codificare Huffman K ∗ pentru sursa redusă S ∗ , atunci codul
din Tabelul 1.4 este un cod Huffman pentru S (vom demonstra această afirmaţie) .

Tabelul 1.4:

a1 a2 ... an−2 an−1 an


K ∗ (a1 ) K ∗ (a2 ) . . . K ∗ (an−2 ) K ∗ (an−1,n )0 K ∗ (an−1,n )1

Lema 1.1
L(K) = L(K ∗ ) + P (an−1 ) + P (an )
Demonstraţie: Fie d1 , d2 , . . . , dn−2 , d∗ lungimile cuvintelor cod corespunzătoare lui
K ∗ . Atunci lungimile cuvintelor cod pentru K sunt d1 , d2 , . . . , dn−2 , d∗ + 1, d∗ + 1.
Efectuând calculele, se obţine:
n−2
X
L(K) = di P (ai ) + (d∗ + 1)P (an−1 ) + (d∗ + 1)P (an ) =
i=1
n−2
X 2
= di P (ai ) + d∗ [P (an−1 ) + P (an )] + P (an−1 ) + P (an ) =
i=1
= L(K ∗ ) + P (an−1 ) + P (an ).

Teorema 1.3 Fie K ∗ o codificare Huffman pentru o sursă de informaţie redusă S ∗ .


Atunci codificarea K definită de Tabelul 1.4 este un cod Huffman pentru sursa de
informaţie S.

Demonstraţie: Fie a1 , a2 , . . . , an simbolurile sursă, ordonate descrescător după prob-


abilitate. Deoarece teorema este evidentă pentru P (an ) = 0, vom considera doar
cazul P (an ) > 0. Demonstraţia constă din trei paşi:
• S admite o codificare Huffman K0 cu lungimile cuvintelor cod ordonate:

d1 ≤ d2 ≤ . . . ≤ dn (di = |K0 (ai )|, 1 ≤ i ≤ n).

Pentru a demonstra aceasta, plecăm de la un cod Huffman arbitrar K pentru


S. Dacă există un simbol ai astfel ca di > di+1 , notăm cu K 0 codificarea
10 PRELEGEREA 1. CODIFICARE ŞI DECODIFICARE

obţinută din K prin permutarea cuvintelor cod corespunzătoare lui ai şi ai+1 .
K 0 este evident un cod instantaneu, iar diferenţa dintre lungimile medii L =
Lmin (al lui K) şi L0 (al lui K 0 ) este:
Lmin − L0 = [di P (ai ) + di+1 P (ai+1 )] − [di+1 P (ai ) + di P (ai+1 )] =
= (di − di+1 )[P (ai ) − P (ai+1 )].
Această expresie este produsul dintre un număr pozitiv şi unul nenegativ, deci
Lmin ≥ L0 , iar din proprietatea de minimalitate rezultă Lmin = L0 . Cu alte
cuvinte, K 0 este un alt cod Huffman. Procedeul continuă până se obţine codul
K0 cerut.

• S admite o codificare Huffman K1 ı̂n care ultimele cuvinte cod, K1 (an−1 ) şi
K1 (an ) diferă doar prin ultimul simbol.
Fie K0 codul Huffman anterior şi K̃0 codul rezultat din K0 eliminând ultimul
simbol din K0 (an ). Lungimea medie a lui K̃0 va fi evident mai mică decât cea
a lui K0 (pentru că P (an ) > 0), deci K̃0 nu poate fi instantaneu. Cuvântul cod
K̃0 (ai ) = K0 (ai ), (1 ≤ i ≤ n − 1) nu este prefixul nici unui cuvânt cod; deci
există un i (i ≤ n − 1) astfel ı̂ncât K̃0 (an ) este prefixul lui K0 (ai ). Aceasta
este posibil numai dacă di = dn şi deci K0 (ai ) diferă de K0 (an ) numai prin
ultimul simbol. Dacă i = n − 1, se ia K1 = K0 . Altfel, se observă că di = dn
implică di = di+1 = . . . = dn ; deci se pot permuta cuvintele cod definite ı̂n K0
pentru ai şi an−1 . Codul K1 astfel obţinut are aceeaşi lungime medie ca şi K0 ,
deci este un cod Huffman.

• Să presupunem că se dă o codificare Huffman K ∗ pentru sursa redusă S ∗


şi definim un cod K pentru S conform Tabelului 1.4. Lungimile lor medii
L(K), L(K ∗ ) verifică relaţia din Lema 1.1.
Să folosim acum codul Huffman K1 construit mai sus. Deoarece ultimele două
cuvinte cod diferă numai prin ultimul simbol, K1 poate fi obţinut dintr-un cod
K1∗ al lui S ∗ prin ”spargerea” ultimului cuvânt - cod. În plus, K1∗ este evident
instantaneu. Prin calcule se ajunge la relaţia

L(K1 ) − L(K1∗ ) = P (an−1 ) + P (an )

Cum avem şi L(K) − L(K ∗ ) = P (an−1 ) + P (an ), rezultă

L(K) = L(K1 ) − L(K1∗ ) + L(K ∗ ).

Acum, L(K ∗ ) = Lmin (S ∗ ), deci −L(K1∗ ) + L(K ∗ ) ≤ 0. Rezultă L(K) ≤


L(K1 ) = Lmin (S). Deci, K este un cod Huffman.

2
1.5. EXERCIŢII 11

1.5 Exerciţii
Exerciţiul 1.1 Care este cea mai mică lungime a unui cod bloc cu alfabetul sursă
A = {A, B, . . . , Z} şi alfabetul cod B = {., −, spaţiu} (ca la codul Morse).

Exerciţiul 1.2 Se defineşte codificarea

1 → 01 4 → 1000
2 → 011 5 → 1100
3 → 10 6 → 0111

Este ea unic decodabilă ? Este instantanee ? Se poate găsi un cod instantaneu cu


aceleaşi lungimi ale cuvintelor cod ?

Exerciţiul 1.3 Se defineşte codificarea

A → 1010 D → 0001
B → 001 E → 1101
C → 101 F → 1011

Este ea unic decodabilă ? Dacă nu, găsiţi două mesaje sursă cu acelaşi cod.

Exerciţiul 1.4 Este unic decodabilă codificarea:

0 → AA 4 → ABBAA 7 → AAAABB
1 → AABAB 5 → BABBA 8 → AAAABA
2 → ABBBBB 6 → BBBAB 9 → AAAAAB
3 → ABABA

Exerciţiul 1.5 Se poate decide unic decodabilitatea codificărilor

K(a) = 001 K(a) = 00


K(b) = 1001 K(b) = 10
K(c) = 0010 K(c) = 011
K(d) = 1110 K(d) = 101
K(e) = 1010 K(e) = 111
K(f ) = 01110 K(f ) = 110
K(g) = 0101 K(g) = 010

folosind inegalitatea lui Kraft ?

Exerciţiul 1.6 Să se construiască un cod binar instantaneu pentru următorul al-
fabet sursă cu lungimile corespunzătoare ale cuvintelor cod:

Simbol A B C D E F G H I J K L
Lungime 2 4 7 7 3 4 7 7 3 4 7 7

Exerciţiul 1.7 Să se construiască un cod ternar (trei simboluri cod) instantaneu
pentru următorul alfabet sursă, cu lungimile corespunzătoare ale cuvintelor cod:
12 PRELEGEREA 1. CODIFICARE ŞI DECODIFICARE

Simbol 1 2 3 4 5 6 7 8 9 0
Lungime 1 3 3 3 3 3 2 2 2 2

Exerciţiul 1.8 Câte simboluri cod sunt necesare pentru ca următorul alfabet sursă
să poată fi codificat ı̂ntr-un cod instantaneu cu lungimile cuvintelor cod date:
A B C D E F G H I J K L M N O P
1 2 2 2 1 2 2 2 1 2 2 2 2 2 1 2

Exerciţiul 1.9 Demonstraţi că pentru orice cod instantaneu ı̂n care inegalitatea
Kraft este strictă, este posibil să se adauge un nou simbol sursă şi să se extindă
codul dat la un nou cod instantaneu (cu acelaşi alfabet cod). Demonstraţi aceasta
pentru codul definit la Exerciţiul 1.6.
Prelegerea 2

Coduri liniare

2.1 Matrice generatoare


Definiţia 2.1 Fie q un număr prim şi n ∈ N ∗ un număr natural nenul. Se numeşte
”cod liniar” orice subspaţiu liniar al lui Zqn .
Un subspaţiu k-dimensional al lui Zqn se numeşte (n, k)- cod liniar peste alfabetul
Zq .
Să notăm ı̂n general cu An,k (An,k ⊆ Zqn ) un (n, k) - cod liniar. Elementele sale se
numesc cuvinte-cod.
Fie n, k ∈ N, k < n. O codificare este o aplicaţie injectivă φ : Zqk −→ Zqn , iar
An,k = φ(Zqk ). Elementele lui Zqk se numesc mesaje de informaţie.
Deci, x ∈ Zqk este un mesaj de informaţie scris cu caractere din alfabetul Zq .
Dacă transmitem succesiunea x de semnale printr-un canal de comunicaţie, mesajul
este supus diverselor perturbări ”de canal” care-l modifică. Ideea teoriei codurilor
este următoarea: ı̂n loc de a transmite elementele lui Zqk , să ”lungim” mesajul
informaţional scufundând (prin intermediul aplicaţiei φ) Zqk ı̂ntr-un spaţiu liniar
Zqn (n > k) astfel ı̂ncât cele n − k poziţii noi - numite poziţii de control - să asigure
redondanţa necesară refacerii mesajului de informaţie iniţial.
Astfel, cu preţul lungirii mesajului, se câştigă protecţia faţă de (anumite tipuri
de) erori.
Observaţii:
• Din definiţie rezultă că un cod liniar de lungime n este un set A de cuvinte
(secvenţe, şiruri, vectori) de lungime n cu proprietăţile:
– ∀a, b ∈ A =⇒ a + b ∈ A;
– ∀a ∈ A, t ∈ Zq =⇒ ta ∈ A.
• Orice cod - liniar conţine cuvântul cod nul 0 = (0, 0, . . . , 0).
• |Zq | = r =⇒ |An,k | = rk
An,k fiind un spaţiu liniar k-dimensional, admite o bază formată din k vectori cu n
elemente. Fie
e1 , e2 , . . . , en

13
14 PRELEGEREA 2. CODURI LINIARE

o astfel de bază. Atunci orice cuvânt cod v ∈ An,k are forma


k
X
v= ui ei
i=1

unde (u1 , u2 , . . . , uk ) ∈ Zqk este unic determinat.


Cu alte cuvinte, k simboluri de informaţie u1 , . . . , uk ∈ Zq determină ı̂n mod
unic un cuvânt - cod v ∈ An,k prin relaţia de sus, şi reciproc. Operaţia de codificare
φ face această asociere biunivocă:
k
X
u = (u1 , . . . , uk ) ∈ Zqk ⇐⇒ v = ui ei ∈ An,k
i=1

Fiecare vector - cod ı̂ntr-un cod liniar va avea deci k simboluri de informaţie; celelalte
n − k simboluri se numesc simboluri de control.
Definiţia 2.2 Fie An,k un cod liniar cu baza e1 , . . . , ek . Matricea
 
e1
 e2 
 
Gn,k =  
 ... 
ek
se numeşte ”matricea generatoare” a codului.
Deci operaţia de codificare este definită prin matricea generatoare:
∀u ∈ Zqk , φ(u) = uG.
Exemplul 2.1 Matricea
à !
1 0 0 1 1
G=
0 1 0 0 1
generează un (5, 2)-cod liniar peste Z2 . Rangul ei este 2 (primele două coloane
formează matricea unitate), deci cele două linii ale lui G sunt cuvinte - cod liniar
independente.
Mulţimea mesajelor de de informaţie este Z22 = {00, 01, 10, 11}. Înmulţind fiecare
mesaj cu matricea G se obţine spaţiul liniar al cuvintelor - cod
A4,2 = {00000, 01001, 10011, 11010}.
Funcţia de codificare este:
00 → 00000, 01 → 01001, 10 → 10011, 11 → 11010.
Un cod liniar poate fi generat de mai multe baze posibile. Deci se pot construi
mai multe matrici generatoare pentru un (n, k)-cod liniar. Ele se pot transforma
una ı̂n alta prin operaţiile liniare obişnuite, definite pentru liniile unei matrici. Prin
schimbarea matricii generatoare nu se schimbă spaţiul liniar al cuvintelor - cod, ci
numai modalitatea de codificare (funcţia φ). Cum prin termenul cod se ı̂nţelege de
obicei spaţiul liniar An,k , rezultă că două matrici diferite care se deduc una din alta
prin operaţii pe linii, reprezintă acelaşi cod.
2.1. MATRICE GENERATOARE 15

Exemplul 2.2 Reluând Exemplul 2.1, prin adunarea liniei doi la prima linie se
obţine matricea
à !
1 1 0 1 0
G0 =
0 1 0 0 1
Ea generează acelaşi spaţiu liniar A5,2 , dar codificarea diferă:

00 → 00000, 01 → 01001, 10 → 11010, 11 → 10011

Exemplul 2.3 Matricea


 
1 1 0 0 0 0
 
G= 0 0 2 2 0 0 
1 1 1 1 1 1
generează un (6, 3)-cod liniar peste Z3 . Aducând matricea la forma canonică, se
obţine
 
1 1 0 0 0 0
G = 0 0 1 1 0 0 
0 

0 0 0 0 1 1
Toate cele 33 = 27 cuvinte ale acestui cod au următoarea proprietate: fiecare simbol
este scris de două ori. Din acest motiv, codul este numit ”cod cu repetiţie”.

Cea mai convenabilă regulă de codificare constă ı̂n scrierea simbolurilor de informaţie
şi suplimentarea lor cu n − k simboluri de control. Aceasta corespunde matricii
generatoare (unice)
G = (I|B)
unde I este matricea unitate de ordin k, iar B este o matrice cu k linii şi n − k
coloane.
Definiţia 2.3 Un cod liniar este numit sistematic dacă admite o matrice genera-
toare de forma G = (I|B) unde I este matricea unitate.

Definiţia 2.4 Două coduri liniare A şi A0 de aceeaşi lungime n se numesc echiva-
lente dacă ∃π ∈ Sn astfel ı̂ncât
v1 v2 . . . vn ∈ A ⇐⇒ vπ(1) vπ(2) . . . vπ(n) ∈ A0
(s-a notat cu Sn mulţimea permutărilor de n elemente).

Exemplul 2.4 Codul din Exemplul 2.1 este un cod sistematic. Din codificare se
observă că mesajul de informaţie se află ı̂n cuvântul - cod pe primele două poziţii.
Codul cu repetiţie din Exemplul 2.3 nu este sistematic. Totuşi, folosind per-
mutarea (1, 4, 6, 2, 5, 3) (se permută simbolurile doi cu patru şi trei cu şase) se ajunge
la un cod sistematic generat de matricea
 
1 0 0 1 0 0
G = 0 1 0 0 0 1 
∗ 

0 0 1 0 1 0
16 PRELEGEREA 2. CODURI LINIARE

Teorema 2.1 Orice cod liniar este echivalent cu un cod liniar sistematic.

Demonstraţie: Matricea generatoare G a unui (n, k) - cod liniar A are rangul k; deci
ea are k coloane liniar independente.

1. Să presupunem că primele k coloane ale lui G sunt liniar independente. Deci
G = (X|Y ) unde Y este o matrice k ×k inversabilă. Există atunci o succesiune
de operaţii de linii care transformă X ı̂n matricea unitate. Aceeaşi succesiune
de operaţii efectuate acum pentru toată matricea G va conduce la matricea
G0 = (I|Y 0 ). Deoarece şi G0 este matrice generatoare pentru codul A, rezultă
că acesta este sistematic.

2. Fie (p1 , p2 , . . . , pn ) permutarea care aduce coloanele liniar independente ale


matricii G pe primele k poziţii. Se obţine ı̂n acest fel o nouă matrice G0 . Fie
A0 codul liniar obţinut prin codificarea cu matricea generatoare G0 . Atunci A
şi A0 sunt echivalente, iar A0 este sistematic, conform cazului anterior. 2

2.2 Matrice de control


Definiţia 2.5 Fie An,k un cod liniar generat de matricea G = Gk,n . Se numeşte
”matrice de control” o matrice H = Hn−k,n cu proprietatea GH T = 0.

Observaţii:

• Din definiţie rezultă că matricea de control H a unui cod liniar A are urmă-
toarea proprietate:
v ∈ A ⇐⇒ vH T = 0
Lăsăm ca exerciţiu demonstrarea acestei echivalenţe.

• Prin transpunere, relaţia de sus se poate scrie şi HGT = 0. Aceasta ı̂nseamnă
că şi H este matricea generatoare a unui (n, n − k) - cod liniar peste corpul Zq ,
cod pentru care G este matrice de control. Cele două coduri astfel definite se
numesc coduri duale. Cuvintele - cod din cele două coduri duale sunt ortogo-
nale (produsul lor scalar este zero). Într-adevăr, dacă A şi B sunt două coduri
duale generate de matricile G respectiv H, iar x ∈ A, y ∈ B sunt cuvinte -
cod arbitrare, există u, v cu x = uG, y = vH. În plus, xH T = 0, yGT = 0.
Atunci, xyT = uGyT = u(yGT )T = u0T = 0.

Exemplul 2.5 (7, 4) - codul liniar binar cu matricea generatoare


 
1 0 0 0 0 1 1
 0 1 0 0 1 0 1 
 
G= 
 0 0 1 0 1 1 0 
0 0 0 1 1 1 1

are drept matrice de control


2.2. MATRICE DE CONTROL 17
 
0 0 0 1 1 1 1

H= 0 1 1 0 0 1 1 

1 0 1 0 1 0 1
care la rândul ei este matricea generatoare a unui (7, 3) - cod liniar binar.
Se verifică imediat relaţia
 
0 0 0
 0 0 0 
 
GH T =  
 0 0 0 
0 0 0

Un cod care coincide cu codul său dual se numeşte cod auto - dual.
Teorema 2.2 Un cod sistematic cu matricea generatoare G = (I|B) admite ca
matrice de control H = (−B T |I).
Demonstraţie: Cele două matrici unitate din scrierea lui G şi H sunt de ordin k
respectiv n − k. Efectuând calculele, se obţine:
 
−B
GH = (I|B)  −− 
T 
 = −IB + BI = −B + B = 0
I
2
Corolarul 2.1 Matricea de control a unui (n, k)-cod liniar are rangul n − k.
Teorema de sus permite un algoritm de calcul extrem de simplu al matricii de control,
atunci când se cunoaşte matricea generatoare. Să arătăm aceasta pe un exemplu:
Exemplul 2.6 Plecând de la matricea generatoare construită ı̂n Exemplul 2.4, se
poate construi matricea de control (calculele se fac ı̂n Z3 ):
   
−1 0 0 1 0 0 2 0 0 1 0 0


H = 0 0 −1 0 1 0  =  0 0 2 0 1 0 
 
.
0 −1 0 0 0 1 0 2 0 0 0 1
Aplicând acum permutarea inversă coloanelor lui H ∗ , se ajunge la matricea de con-
trol a codului definit ı̂n Exemplul 2.3:
 
2 1 0 0 0 0
H= 0 0 0 0 1 2 


0 0 1 2 0 0
Relaţia xH T = 0 pe care o verifică orice cuvânt - cod x ∈ An,k permite să definim
un cod şi sub forma unui sistem de ecuaţii. Astfel, An,k este un cod peste Zq dacă
şi numai dacă elementele sale sunt soluţii ale sistemului liniar xH T = 0.
à !
1 1 0 1 0
Exemplul 2.7 Codul cu matricea de control H =
1 1 1 1 1
este definit ca mulţimea soluţiilor binare (x1 , x2 , x3 , x4 , x5 ) ale sistemului

x1 + x2 + x4 = 0, x 1 + x2 + x3 + x4 + x5 = 0
18 PRELEGEREA 2. CODURI LINIARE

2.3 Sindrom
Fie codul liniar An,k ⊂ Zqn peste Zq , cu matricea de control H şi a ∈ Zqn . Se numeşte
sindrom al vectorului a vectorul z cu n − k componente obţinut prin relaţia

zT = HaT ,

sau - echivalent - z = aH T .
Observaţie: z = 0 ⇐⇒ a ∈ An,k .
Dacă se transmite printr-un canal de comunicaţie un cuvânt a ∈ An,k pentru
care sindromul corespunzător verifică relaţia z = aH T 6= 0, ı̂nseamnă că s-a detectat
faptul că ı̂n timpul transmisiei au apărut erori.

Teorema 2.3 În Z2 , sindromul recepţionat este egal cu suma coloanelor din ma-
tricea de control corespunzătoare poziţiilor perturbate.

Demonstraţie: Fie a = (a1 , a2 , . . . , an ) ∈ An,k cuvântul-cod transmis. Fără a res-


trânge generalitatea, să presupunem că au intervenit trei erori, pe poziţiile i, j, k,
fiind recepţionat vectorul

a0 = (a1 , . . . , ai−1 , a0i , ai+1 , . . . , aj−1 , a0j , aj+1 , . . . , ak−1 , a0k , ak+1 , . . . , an )

unde a0i 6= ai , a0j 6= aj , a0k 6= ak . Avem


0 = aH T = a1 (h1 ) + . . . + ai (hi ) + . . . + aj (hj ) + . . . + ak (hk ) + . . . + an (hn )
pentru că a ∈ An,k , iar (h1 ), . . . , (hn ) sunt coloanele matricii H.
Avem, de asemenea
a0 H T = a1 (h1 ) + . . . + a0i (hi ) + . . . + a0j (hj ) + . . . + a0k (hk ) + . . . + an (hn )
Prin adunarea acestor două egalităţi se obţine:
z0 = a0 H T = aH T + a0 H T = (0) + . . . + (0) + (hi ) + . . . + (hj ) + . . . + (hk ) + (0) +
. . . + (0) = (hi ) + (hj ) + (hk ). 2

2.4 Pondere, distanţă Hamming


Pentru orice cuvânt x ∈ Zqn , se numeşte pondere numărul w(x) de componente
nenule. Evident, 0 ≤ w(x) ≤ n.
Pentru două cuvinte x, y ∈ Zqn , se numeşte distanţa Hamming ı̂ntre ele, numărul

d(x, y) = w(x − y).

Ca o remarcă, deoarece x − y ∈ Zqn , rezultă că distanţa Hamming dintre două


cuvinte este ponderea unui cuvânt din Zqn .

Definiţia 2.6 Se numeşte distanţă (Hamming) a codului liniar An,k ⊂ Zqn peste Zq
cea mai mică distanţă (Hamming) dintre elementele codului An,k , adică

d= min d(x, y)
x,y∈An,k ,x6=y
2.5. DETECTARE ŞI CORECTARE DE ERORI 19

Folosind proprietatea anterioară şi faptul că 0 ∈ An,k , rezultă că

d= min w(x).
x∈An,k ,x6=0

Se poate verifica imediat că d este o distanţă cu ajutorul căreia Zqn se poate structura
ca spaţiu metric.
Teorema 2.4 Fie H matricea de control a unui cod liniar An,k . Codul are distanţa
minimă d dacă şi numai dacă orice combinaţie liniară de d − 1 coloane ale lui H
este liniar independentă şi există cel puţin o combinaţie liniară de d coloane liniar
dependente.
Demonstraţie: Pentru orice cuvânt a, cu w(a) = s, aH T este o combinaţie liniară
de s coloane ale lui H. Cum există un cuvânt - cod de pondere minimă egală cu
distanţa d a codului, rezultă că avem cel puţin o combinaţie de d coloane liniar
dependente ale lui H. O combinaţie de mai puţin de d coloane liniar dependente ar
conduce la contradicţie. 2
Definiţia 2.7 Pentru r > 0 şi x ∈ Zqn , definim sfera de rază r şi centru x ca

Sr (x) = {y|d(x, y) ≤ r}

Teorema
"
2.5
#
Fie An,k ⊆ Zqn un cod liniar peste Zq cu distanţa Hamming d. Dacă
d−1
r= , atunci
2
∀x, y ∈ An,k , x 6= y, Sr (x) ∩ Sr (y) = ∅.

Demonstraţie: Presupunem prin absurd că există z ∈ Zqn , z ∈ Sr (x) ∩ Sr (y).


Atunci d(x, z) ≤ r, d(y, z)h ≤i r deci, conform inegalităţii triunghiului, d(x, y) ≤
d(x, z) + d(y, z) ≤ 2r = 2 d−1
2
< d, ceea ce contrazice afirmaţia că d este distanţa
codului An,k . 2
Evident, ı̂n fiecare astfel de sferă există un singur cuvânt - cod: cel aflat ı̂n
centru.
Definiţia 2.8 Un cod liniar An,k ⊂ Zqn de distanţă d peste Zq este perfect dacă
[
Zqn = Sr (x)
x∈An,k
h i
d−1
unde r = 2
.

2.5 Detectare şi corectare de erori


h i
Fie An,k ⊂ Zqn un cod liniar peste Zq , de distanţă d şi t = d−1
2
. Să presupunem că
n
s-a recepţionat cuvântul z ∈ Zq ; va exista cel mult un cuvânt x ∈ An,k astfel ı̂ncât
z ∈ St (x) (ı̂n cazul codurilor perfecte, acest cuvânt există totdeauna).
În cazul (ideal) când z = x, cuvântul a fost transmis fără erori (sau cu erori
nedetectabile).
20 PRELEGEREA 2. CODURI LINIARE

Dacă z 6= x, atunci mesajul a fost perturbat (şi avem o detectare de erori);


ı̂n ipoteza că numărul de erori apărute este minim şi există un x ∈ An,k astfel ca
d(x, z) ≤ t, atunci z provine din cuvântul - cod x - şi se va transforma ı̂n acesta
prin corectarea corespunzătoare a erorilor.
În celelalte cazuri, z sau nu se poate corecta, sau se corectează greşit, ı̂n alt
cuvânt cod.
Această ultimă situaţie nu apare la codurile perfecte.
Metoda de detectare şi corectare a erorilor descrisă mai sus se numeşte decodi-
ficarea cea mai probabilă. Pentru marea majoritate a codurilor liniare aceasta este
singura metodă utilizată.
Pentru orice cuvânt e ∈ Zqn formăm mulţimea
Ve = e + A = {e + v|v ∈ A}
Ve este mulţimea cuvintelor w = e + v care pot fi recepţionate la transmiterea
cuvântului cod v, atunci când a acţionat un vector - eroare e. e va fi numit eroare
- tip.
În particular, A = 0 + A = V0 .
Propoziţia 2.1 Pentru orice a ∈ Ve , Va = Ve .
Demonstraţie: Din a ∈ Ve , rezultă că există x ∈ A cu a = e + x. Deoarece x+A = A
(evident, A fiind subspaţiu liniar), avem Va = a + A = e + x + A = e + A = Ve . 2
Vom utiliza această propoziţie pentru definirea unei tehnici de decodificare.
Dacă vrem să detectăm o anumită eroare - tip e care modifică cuvintele din A
ı̂n cuvintele subspaţiului Ve , atunci vor fi mai uşor de depistat cuvintele din Ve cu
ponderea minimă.
Pentru fiecare Ve se alege un cuvânt numit reprezentantul lui Ve ; acesta este un
element cu cea mai mică pondere din Ve .
Se construieşte următorul tablou (numit tablou standard):

1. Pe prima linie se scriu cuvintele - cod, ı̂ncepând cu 0 (reprezentantul lui


A = V0 );

2. Pe prima coloană se scriu reprezentanţii 0, e1 , e2 , . . .;

3. Pe linia cu reprezentantul ei , sub cuvântul cod xj se scrie cuvântul


ei + xj ( mod q).

à !
1 0 0 1
Exemplul 2.8 Fie matricea generatoare G = peste Z2 . Ea va cod-
0 1 1 1
2
ifica Z2 = {00, 01, 10, 11} ı̂n A4,2 = {0000, 1001, 0111, 1110}.
Calculul mulţimilor Ve conduce la
V0000 = V1001 = V0111 = V1110
V1000 = V0001 = V0110 = V1111
V0100 = V1101 = V0011 = V1010
V0010 = V1011 = V0101 = V1100
2.5. DETECTARE ŞI CORECTARE DE ERORI 21

Alegem ca reprezentanţi pe 0000, 1000 (se poate şi 0001), 0100, 0010. Tabloul
standard va fi:

0000 1001 0111 1110


1000 0001 1111 0110
0100 1101 0011 1010
0010 1011 0101 1100

Pentru recepţie, acest tablou este ca un dicţionar care se utilizează astfel: cu-
vântul primit se decodifică ı̂n cuvântul - cod din capul coloanei pe care se află.
De exemplu, dacă se recepţionează 1101, el se va decodifica ı̂n 1001.
Evident, cuvintele de pe prima coloană se decodifică ı̂n ele ı̂nsele (ele nu au fost
perturbate de nici o eroare).
Pentru orice cod liniar, un dicţionar complet de tipul celui de mai sus constituie cea
mai simplă metodă de decodificare.
Problema apare atunci când ı̂ntr-o mulţime Ve sunt mai multe cuvinte de pondere
minimă. Atunci tabela va decodifica corect numai eroarea - tip aleasă ca reprezen-
tant.
Astfel, revenind la Exemplul 2.8, cuvântul recepţionat 1111 se decodifică ı̂n 0111
(considerând că a fost alterat primul caracter).
Dacă se ia ı̂nsă drept reprezentant pe linia a doua 0001 ı̂n loc de 1000, a doua
linie din tabloul standard este

0001 1000 0110 1111

Atunci, 1111 se decodifică ı̂n 1110 (considerı̂nd ultimul caracter ca fiind cel alterat
de canalul de transmisie). Care este cuvântul - cod corect transmis ? Acest lucru nu
poate fi decis. Singurul lucru care poate fi făcut este să se aleagă drept reprezentanţi
erorile - tip cele mai probabile.
Pentru un (n, k) - cod peste Zq , un dicţionar complet constă din toate cele q n
cuvinte posibile, lucru destul de dificil deoarece ı̂n practică codurile sunt destul de
lungi (de exemplu n = 100, k = 80). De aceea este utilizată o altă manieră de lucru
care reduce mult mărimea tabloului de lucru.
Fie H matricea de control a unui (n, k) - cod liniar A; putem considera (Corolarul
2.1) că liniile lui H sunt vectori liniar independenţi.

Teorema 2.6 Pentru orice e ∈ Zqn , toate cuvintele din Ve au acelaşi sindrom.

Demonstraţie: Fie v ∈ A arbitrar şi w = e + v. Avem

wH T = (e + v)H T = eH T + vH T = eH T + 0 = eH T .

Deci toate cuvintele din Ve au sindromul egal cu sindromul lui e. 2


Invers, pentru fiecare sindrom - deci pentru fiecare cuvânt s de lungime n − k, se
poate determina un vector - eroare e având sindromul s. Mai mult, s va fi ales astfel
ı̂ncât să aibă pondere minimă (conform decodificării cele mai probabile). Pentru
22 PRELEGEREA 2. CODURI LINIARE

aceasta, se rezolvă sistemul de ecuaţii liniare HeT = sT , care are soluţie, deoarece
liniile lui H sunt liniar independente. Din mulţimea soluţiilor alegem una de pondere
minimă, cu ajutorul căreia construim mulţimea Ve a tuturor cuvintelor de sindrom
s.
Pe baza celor de mai sus, se poate folosi următoarea procedură de decodificare:

1. La recepţionarea unui cuvânt w, se calculează sindromul s:


sT = HwT .

2. Se află eroarea - tip e cu sindromul s.

3. Se consideră cuvântul - cod corect ca fiind v = w − e.

În acest fel, nu mai este necesar să se reţină tot tabloul standard; este suficient
să se ştie reprezentanţii subspaţiilor Ve şi sindromurile corespunzătoare.
Exemplul 2.9 Reluând codul definit ı̂n Exemplul 2.8, el are ca matrice de control
à !
0 1 1 0
H=
1 1 0 1
Calculând sindromurile reprezentanţilor, se ajunge la tabloul:

Sindrom Reprezentant
00 0000
01 1000
10 0010
11 0100

care reprezintă o reducere cu 50% a datelor stocate.


La recepţionarea cuvântului 1101, i se calculează sindromul
 
à ! 1 à !
0 1 1 0  1  1
 
 =
1 1 0 1  0  1
1
Repezentantul sindromului 11 este 0100. Efectuând operaţia

1101 − 0100 = 1101 + 0100 = 1001

(ı̂n Z2 scăderea este de fapt adunare) se ajunge la cuvântul transmis, anume 1001.

Exemplul 2.10 Să considerăm codul liniar peste Z3 definit de matricea de control
à !
1 0 2 1 0
H=
0 1 2 1 2

Sindromurile sunt cuvinte de lungime 2 peste Z3 , deci ı̂n total nouă cuvinte.
Lista sindromurilor şi a reprezentanţilor este:
2.6. EXERCIŢII Sindrom Reprezentant 23
00 00000
10 10000
01 01000
22 00100
11 00010
02 00001
20 20000
12 10001
21 20002

De remarcat că un tablou standard pentru acest cod are dimensiunea 9 × 27 şi
conţine 243 cuvinte; volumul de date s-a redus deci cu 92%.
Să presupunem că s-a trimis cuvântul cod 21122 şi s-a recepţionat 11122.
Sindromul este
 
1
à !
 1

 Ã !
1 0 2 1 0 


= 2
 1 
0 1 2 1 2   0
 2 
2

deci e = 20000; decodificarea este

v = w − e = 11122 − 20000 = 21122.

Decodificarea a fost corectă deoarece eroarea - tip apărută a fost una din cele
selectate prin reprezentanţi.

2.6 Exerciţii
2.1 Să se construiască coduri liniare care să transforme cuvântul (a1 , a2 , . . . , an ) ∈
Zqn ı̂n:

1. (a1 , a1 , a1 , a2 , a2 , a2 , . . . , an , an , an );

2. (a1 , b1 , a2 , b2 , . . . , an , bn ) unde b1 = a1 , b + 2 = a1 + a2 , bn = a1 + . . . + an ;

3. (a1 , 2an , 3a2 , 4an−1 , . . .).

2.2 Un cod liniar peste Z5 are următoarea matrice generatoare:


 
1 2 3 1 2
 
G= 2 2 4 1 0 
1 1 2 2 1

Să se afle matricea de control.

2.3 Aceeaşi problemă pentru Z7 .


24 PRELEGEREA 2. CODURI LINIARE

2.4 Determinaţi dacă următorul cod liniar binar este sistematic sau nu:
 
1 1 0 0 0 0
G= 0 0 1 1 1 1 


0 0 0 0 1 1
Dacă nu, găsiţi un cod sistematic echivalent.
2.5 Găsiţi matricea generatoare a unui cod liniar binar care are matricea de control:
 
1 0 1 1 0 0 0
 1 1 1 0 1 0 0 
H=



 1 1 0 0 0 1 0 
0 0 1 0 0 0 1
2.6 Se dă matricea de control
 
1 1 0 1 0 1
 
H= 1 1 0 0 1 0 
1 0 1 1 0 0
a unui cod liniar binar.
Să se decodifice mesajele 110110, 010100.
2.7 Descrieţi dualul (6, 3) - codului binar descris de ecuaţiile:
x1 = x4 , x 2 = x5 , x 3 = x6 .
2.8 Fie A un cod liniar binar obţinut din toate sumele posibile ale cuvintelor
101011, 011101, 011010.
1. Aflaţi o matrice de control a codului.
2. Aflaţi un tablou standard şi decodificaţi 111011.
2.9 Demonstraţi că codul liniar binar descris de ecuaţiile
x3 = x1 + x2 , x 4 = x1 , x 5 = x1 + x2
corectează o eroare. Construiţi tabloul standard.
2.10 Construiţi o tabelă de sindromuri de decodificare pentru:
1. Codul cu repetiţie de lungime 7;
2. Codul din Exerciţiul 2.7;
3. Codul peste Z3 cu matricea generatoare:
 
1 0 0 2 2
 
G= 0 1 0 0 1 
0 0 1 1 0
2.11 Fie un cod liniar An,k ⊂ Zqn şi tabela de sindromuri de decodificare cores-
punzătoare. Definim o operaţie de decodificare θ : Zqn → An,k cu proprietatea:
∀v ∈ An,k , ∀e reprezentant din tabelă, θ(v + e) = v. (θ corectează erorile - tip din
tabela de decodificare). Să se arate că atunci θ nu corectează nici o altă eroare - tip:
dacă e nu este un reprezentant din tabelă, atunci există v ∈ An,k cu θ(v + e) 6= v.
(Altfel spus, decodificarea cu sindromuri este optimală).
Prelegerea 3

Coduri liniare - II

3.1 Capacităţi de detectare şi corectare de erori


După cum am văzut până acum, un cod liniar este un spaţiu liniar, codul dual este
complementul său ortogonal etc. Teoria codurilor este interesată ı̂nsă ı̂n depistarea
unor coduri cu proprietăţi deosebite ı̂n detectarea şi corectarea erorilor. Aceste
proprietăţi sunt legate ı̂n special de distanţa minimă a codului. Vom prezenta pentru
ı̂nceput câteva rezultate legate de diverse margini relativ la distanţă, numărul de
simboluri de control, informaţie etc.
Teorema 3.1 Un cod liniar An,k ⊂ Zqn are distanţa minimă d dacă şi numai dacă
poate detecta orice combinaţie de maxim d − 1 erori.
Demonstraţie: Dacă se transmite un cuvânt a ∈ An,k şi apar t(t < d) erori, se va
recepţiona cuvântul a + e ∈ Zqn cu w(e) = t.
Deoarece d(a, a + e) = t, rezultă a + e 6∈ An,k , deci se detectează eroare.
Reciproca este evidentă. 2
Teorema 3.2 Un cod liniar An,k ⊂ Zqn areh
distanţa
i
minimă d dacă şi numai dacă
poate corecta orice combinaţie de maxim d−1
2
erori.
Demonstraţie: Să presupunem prin absurd că d ≤ 2t şi vom arăta că există erori
- tip de pondere t (numite şi pachete de t erori) care nu pot fi corectate de codul
An,k . Această contradicţie
h i va duce la concluzia d ≥ 2t + 1, adică An,k poate corecta
d−1
orice pachet de t ≤ 2 erori.
Fie a, b ∈h An,ki cu d(a, b) = d şi i1 , i2 , . . . , id toţi indicii ı̂n care a diferă de b.
d+1
Alegând t = 2 , avem d ≤ 2t (t astfel ales este minim).
Să presupunem că se trimite a şi se recepţionează cuvântul a0 = (a01 , a02 , . . . , a0n )
unde 
 ai = bi dacă i 6= i1 , i2 , . . . , id ,

0
ai = ai dacă i = i1 , i3 , . . . ,


bi dacă i = i 2 , i4 , . . .
" # " #
0 d+1 d
Atunci, evident d(a, a ) = = t şi d(a0 , b) = ≤ t = d(a0 , a). Aceasta va
2 2
duce la decodificarea lui a ı̂n b - incorect.

25
26 PRELEGEREA 3. CODURI LINIARE - II

Să presupunem acum d ≥ 2t + 1. Atunci codul An,k poate corecta orice pachet
de t erori. Pentru a arăta aceasta, să presupunem că se trimite un cuvânt - cod
a şi se primeşte un cuvânt a0 cu d(a, a0 ) ≤ t. Pentru orice cuvânt cod b (deci cu
d(a, b) ≥ d ≥ 2t + 1) avem, conform inegalităţii triunghiului:

d(a, a0 ) + d(a0 , b) ≥ d(a, b) ≥ 2t + 1.

deci, d(a0 , b) ≥ 2t + 1 − d(a, a0 ) ≥ 2t + 1 − t = t + 1 > d(a, a0 ).


Deci, cu o decodificare cea mai probabilă, a0 se va decodifica ı̂n a. 2

Teorema 3.3 Distanţa minimă a unui (n, k) - cod liniar verifică relaţia

d ≤ n − k + 1.

Demonstraţie: Vom separa demonstraţia ı̂n două părţi:


A: Fie An,k un cod sistematic. Atunci primele k simboluri din orice cuvânt - cod
pot fi alese arbitrar. Fie v ∈ An,k cuvântul de forma v = 100 . . . 0vk+1 vk+2 . . . vn .
Evident, 0 < w(v) ≤ n − k + 1. Cum d este cea mai mică pondere a unui cuvânt -
cod nenul, rezultă inegalitatea cerută.
B: Fie An,k un cod liniar arbitrar şi A0n,k codul liniar sistematic echivalent. Se ob-
servă că cele două coduri au aceeaşi parametri n, k, d. Folosind acum A, inegalitatea
se obţine din nou. 2

Teorema 3.4 În orice cod liniar An,k peste Zq avem

nq k−1 (q − 1)
d≤ (marginea Plotkin)
qk − 1

Demonstraţie: Să considerăm elementele din An,k aşezate ca linii ale unui tablou. Se
obţine un tablou cu q k linii şi n coloane. Fiecare componentă nenulă din Zq apare
pe fiecare coloană ı̂n q k−1 linii. Atunci, suma ponderilor tuturor cuvintelor - cod
este egală cu nq k−1 (q − 1) deoarece fiecare componentă nenulă apare de q k−1 ori ı̂n
fiecare coloană şi avem q − 1 componente nenule distribuite pe n coloane.
Distanţa minimă a codului nu poate să depăşească ponderea medie a cuvintelor
codului, adică
nq k−1 (q − 1)
d≤
qk − 1
deoarece ı̂n An,k sunt q k − 1 cuvinte nenule. 2

Teorema 3.5 Fie An,k un cod liniar peste Zq care corectează orice combinaţie de
maxim t erori. Într-un asemenea cod sunt necesare cel puţin

n − k ≥ logq [1 + Cn1 (q − 1) + Cn2 (q − 1)2 + . . . + Cnt (q − 1)t ]

poziţii de control (marginea Hamming).


3.1. CAPACITĂŢI DE DETECTARE ŞI CORECTARE DE ERORI 27

Demonstraţie: Pentru ca An,k să corecteze orice combinaţie de cel mult t erori, este
necesar ca fiecare astfel de eroare - tip să fie reprezentată ı̂n tabloul standard, deci
să fie caracterizată printr-un sindrom distinct. Sunt q n−k sindromuri distincte, deci
acesta este numărul maxim de erori care pot fi corectate de cod. Din cele q n−k
sindromuri, 1 trebuie să fie pentru 0 erori, Cn1 (q − 1) - pentru erori - tip simple
(cuvinte e cu o singură componentă nenulă), Cn2 (q − 1)2 pentru erori duble etc.
Deci, este necesar ca

q n−k ≥ 1 + Cn1 (q − 1) + Cn2 (q − 1)2 + . . . + Cnt (q − 1)t .

Apoi se logaritmează. 2

Teorema 3.6 Dacă


1 2
n − k ≥ logq [1 + Cn−1 (q − 1) + Cn−1 (q − 1)2 + . . . + Cn−1
d−2
(q − 1)d−2 ]

atunci există un cod liniar An,k peste Zq cu distanţa minimă d (marginea Varşamov
- Gilbert).

Demonstraţie: Pentru ca să existe un cod liniar An,k peste Zq cu distanţa minimă d
este suficient (Teorema 2.4) ca orice coloană din matricea de control Hn−k,n să nu
fie combinaţie liniară a altor d − 2 coloane, ı̂n acest fel ne-existând nici o combinaţie
liniară ı̂ntre d − 1 coloane ale lui H. Această condiţie este echivalentă cu

q n−k − 1 ≥ Cn−1
1 2
(q − 1) + Cn−1 (q − 1)2 + . . . + Cn−1
d−2
(q − 1)d−2 .

Aici, q n−k − 1 reprezintă numărul total de coloane distincte nenule care pot apare
ı̂n matricea H. Semnificaţia termenilor din membrul drept este evidentă; astfel, de
2
exemplu Cn−1 (q − 1)2 reprezintă numărul combinaţiilor liniare cu coeficienţi nenuli
a două din cele n − 1 coloane etc.
Apoi se logaritmează. 2
Fie En,k un cod liniar peste Zq pentru care d ≥ 2t + 1 (deci cu capacitatea de a
corecta orice combinaţie de maxim t erori). Reamintim că ı̂n prelegerea precedentă
am definit pentru orice x ∈ An,k sfera centrată ı̂n x prin

St (x) = {y ∈ Zqn |d(x, y) ≤ t}.

Mai introducem şi suprafaţa (scoarţa) acestei sfere, definită:

At (x) = {y ∈ Zqn |d(x, y) = t}.

Vom nota numărul de elemente ale fiecăreia din cele două mulţimi prin
St = |St (x)|, At = |At (x)|
(valorile sunt aceleaşi pentru orice x ∈ Zqn ).
Au loc relaţiile evidente:
t
X
A t ≤ St , St = Ai .
i=0
28 PRELEGEREA 3. CODURI LINIARE - II

Deoarece sferele de rază t centrate ı̂n cuvintele codului An,k sunt disjuncte, avem
q k St ≤ q n .
Aici, q k reprezintă numărul de cuvinte - cod, iar q n - numărul total de cuvinte
din Zqn .
Din această relaţie se obţine imediat

n − k ≥ logq St ,

cunoscută sub numele de inegalitatea volumului. Ea mai poate fi găsită şi sub forma

k 1
≤ 1 − logq St .
n n
k
Raportul se numeşte rata de informaţie şi dă o măsură a cantităţii de informaţie
n
pe care o poartă un cuvânt - cod. O rată de informaţie mică (mai multe simboluri
de control) asigură o securitate mai mare a transmiterii datelor. În schimb, condiţii
practice de eficienţă cer o rată de informaţie cât mai mare (mai multă informaţie
pe unitatea de mesaj). Aceasta este una din solicitările contradictorii ale teoriei
codurilor.

3.2 Modificări ale codurilor liniare


Adesea este imposibil să se utilizeze un cod bun deoarece el nu satisface anumite
restricţii tehnice, cum ar fi lungimea sau rata de informaţie. De aceea este practic
să se facă anumite modificări asupra codurilor, care să nu afecteze proprietătile
principale de detectare şi corectare de erori.

Definiţia 3.1 Numim extensie a unui (n, k) - cod liniar A peste Zq , (n + 1, k) -


codul liniar A∗ obţinut din A prin adăugarea la fiecare cuvânt cod a1 a2 . . . an a unui
n+1
X
simbol nou an+1 cu proprietatea ai = 0 (mod q).
i=1

Observaţii:

• În cazul binar, noul caracter an+1 poartă numele bit de paritate.
Dacă H este matricea de control a codului An,k , atunci codul extins A∗n+1,k are
matricea de control
 
0
 .. 
 H . 
H∗ = 



 0 
1 1 ... 1 1 1
n
X
De fapt, ultima linie reprezintă ecuaţia xi = 1.
i=1
3.2. MODIFICĂRI ALE CODURILOR LINIARE 29

• Dacă un cod liniar binar A are o distanţă minimă impară d, atunci codul
extins are distanţa minimă d + 1. Într-adevăr, fie a = a1 a2 . . . an ∈ A cu
n
X
w(a) = d. Cum d este impar, rezultă ai = 1 (ı̂n Z2 ), deci an+1 = 1.
i=1
Cuvântul a0 = a1 a2 . . . an 1 ∈ A∗ , w(a0 ) = d + 1 şi nu se poate construi un alt
cuvânt - cod ı̂n A∗ de pondere mai mică.

Definiţia 3.2 Fie A un cod liniar de lungime n peste Zq .


1. ”Relaxarea” lui A este un cod liniar A de lungime n − 1 obţinut prin ştergerea
ultimului simbol din cuvintele lui A;

2. ”Completarea” lui A este un cod definit A∗ = A∪(A+1) (unde 1 este cuvântul


cu toate elementele 1, iar suma se face modulo q);

3. ”Expurgarea” lui A este codul A0 = {a ∈ A|w(a) ≡ 0 mod 2}.

Observaţii:
• Relaxarea este operaţia inversă extensiei.

• Prin completarea şi expurgarea codurilor liniare se obţin coduri liniare numai
ı̂n cazul binar. În celelalte cazuri, noile mulţimi rezultate nu sunt spaţii liniare.

Propoziţia 3.1 Prin completarea unui cod liniar binar An,k se obţine un cod liniar
binar An,k+1 cu un număr dublu de cuvinte - cod.

Demonstraţie: Completarea unui cod binar ı̂nseamnă adăugarea la cuvintele - cod


ale lui A a tuturor cuvintelor obţinute prin complementare (schimbarea lui 0 ı̂n 1 şi
a lui 1 ı̂n 0).
Fie Gk,n matricea generatoare a codului An,k . Se verifică uşor că matricea
 
G
 
G0 =  
1 1 ... 1 1

generează An,k ∪ (1 + An,k ). Acest cod are k + 1 poziţii de informaţie şi lungime
n. Fiecare din cele două submulţimi are un număr egal de elemente. 2

Propoziţia 3.2 Orice cod liniar binar are sau toate cuvintele - cod de pondere pară,
sau numărul cuvintelor - cod de pondere pară este egal cu al celor de pondere impară.

Demonstraţie: Fie A un cod liniar binar cu un cuvânt v1 de pondere impară. Să


presupunem că v1 , v2 , . . . , vr sunt toate cuvintele lui A; atunci A = A + v1 . Pentru
orice cuvânt - cod vi de pondere pară (impară), v1 + vi are pondere impară (pară).
Pentru aceasta, să presupunem că w(v1 ) = 2p + 1, w(vi ) = 2q iar vi şi v1 au 1 pe
r poziţii comune. Atunci w(vi + v1 ) = w(vi ) + w(v1 ) − 2r (pentru că 1 + 1 = 0)
= 2p + 1 + 2q − 2r = 2s + 1. Similar dacă vi are pondere impară.
Deci adunarea cu v1 defineşte o corespondenţă biunivocă ı̂ntre cuvintele - cod
de pondere pară şi cele de pondere impară, ceea ce completează demonstraţia. 2
30 PRELEGEREA 3. CODURI LINIARE - II

Corolarul 3.1 Expurgarea unui cod liniar binar A este tot A sau un cod liniar
având ca elemente jumătate din elementele lui A.
Matricea generatoare Gexp a lui Aexp se poate obţine din matricea G a lui A astfel:
dacă toate liniile lui G sunt vectori de pondere pară cele două coduri coincid. Altfel,
fie G = [e1 , e2 , . . . , er , er+1 , . . . , ek ]T ı̂n care - fără a micşora generalitatea, putem
presupune că primele r au pondere impară, iar celelalte k − r au pondere pară.
Atunci Gexp = [0, e2 + e1 , . . . , er + e1 , er+1 . . . , ek ]T .
Exemplul 3.1 Să construim codul A4,2 peste Z3 de matrice generatoare
à !
1 0 0 1
G= .
0 1 1 1
Ea codifică cele 9 elemente din Z32 ı̂n
A4,2 = {0000, 0111, 0222, 1001, 1112, 1220, 2002, 2110, 2221}.
Codul liniar relaxat A3,2 = {000, 011, 022, 100, 111, 122, 200, 211, 222} este generat
de matricea à !
1 0 0
Grel = .
0 1 1
Construcţia a fost posibilă deoarece prin eliminarea ultimei coloane, liniile rămase
sunt tot liniar independente. Dacă acest lucru nu este realizabil, se caută k cuvinte
- cod ı̂n An,k cu proprietatea că după eliminarea ultimei componente, ele sunt liniar
independente. Acestea formează liniile noii matrici generatoare.
Codul completat este
0000 0111 0222 1001 1112 1220 2002 2110 2221
1111 1222 1000 2112 2220 2001 0110 0221 0002
De remarcat că el nu este un spaţiu liniar (nu este ı̂nchis la adunarea din Z3 ).
Codul expurgat are cinci elemente: {0000, 1001, 1112, 2002, 2221}. Nici acesta
nu este cod liniar.
Exemplul 3.2 Să reluăm matricea generatoare din Exemplul 3.1, dar pentru un
cod liniar peste Z2 . Codul generat de G este A4,2 = {0000, 0111, 1001, 1110}.
Toate codurile modificate sunt ı̂n acest caz coduri liniare. Astfel
• Codul relaxat Arel = {000, 011, 100, 111} este generat de aceeaşi matrice Grel
din Exemplul 3.1.
• Codul completat Acom = {0000, 0111, 1001, 1110, 1111, 1000, 0110, 0001} este
un cod liniar generat de matricea
 
1 0 0 1
Gcom = 
 0 1 1 1 .
1 1 1 1

• Codul expurgat Aexp = {0000, 1001} este un cod liniar generat de matricea
à !
1 0 0 1
Gex = .
0 0 0 0
3.3. DETECTAREA ŞI CORECTAREA SIMULTANĂ A ERORILOR 31

3.3 Detectarea şi corectarea simultană a erorilor


Să ı̂ncepem cu un exemplu.

Exemplul 3.3 Fie (7, 4) - codul liniar binar cu matricea de control


 
0 0 0 1 1 1 1
 
H =  0 1 1 0 0 1 1 .
1 0 1 0 1 0 1

El are distanţa minimă d = 3, deci poate detecta 2 erori şi poate corecta o eroare
(Teoremele 3.1,3.2). Totuşi, codul nu poate realiza acest lucru simultan.
Mai precis, atunci când codul este utilizat pentru corectare de erori, erorile du-
ble scapă nedetectate. Astfel, dacă se trimite 0000000 şi se recepţionează 1010000,
sindromul este 010. Tabloul standard conduce la corectarea celui de-al doilea bit, şi
decodifică (incorect) ı̂n cuvântul - cod 111000.

Uneori ı̂nsă, se solicită ı̂n mod explicit un cod capabil să detecteze şi să corecteze
erori ı̂n acelaşi timp.

Definiţia 3.3 Un cod A de lungime n corectează t erori şi detectează s erori simul-
tan dacă orice cuvânt - cod v are următoarea proprietate:

∀w ∈ Zqn [d(w, v) ≤ s =⇒ ∀a ∈ A \ {v}, d(w, a) > t].

În această situaţie, detectarea şi corectarea simultană a erorilor se realizează astfel:
la recepţionarea unui cuvânt w ∈ Zqn se caută cel mai apropiat cuvânt - cod v (ı̂n
sensul distanţei Hamming). Dacă d(w, v) ≤ t atunci cuvântul se corectează ı̂n v;
altfel, se anunţă că cel puţin s simboluri sunt modificate.
Justificarea acestui procedeu rezultă imediat din definiţie.

Teorema 3.7 Un cod corectează t erori şi detectează s erori simultan dacă şi numai
dacă
d ≥ t + s + 1.

Demonstraţie: A: Să presupunem d ≥ s + t + 1. Fie v un cuvânt - cod şi w ∈ Zqn


cu d(v, w) ≤ s. Pentru orice cuvânt - cod v0 (v0 6= v) avem d(v, v0 ) ≥ d ≥ t + s + 1.
Folosind inegalitatea triunghiului,

d(v, w) + d(w, v0 ) ≥ d(v, v0 ) ≥ s + t + 1,

se deduce

d(w, v0 ) ≥ t + s + 1 − d(v, w) ≥ t + s + 1 − s = t + 1.

Deci, condiţia din definiţie este ı̂ndeplinită.


B: Să presupunem prin absurd d < t + s + 1. Fie v, v0 două cuvinte - cod cu
d(v, v0 ) = d ≤ t + s. Construim cuvântul w din v ı̂nlocuind primele s simboluri
ı̂n care acesta diferă de v0 , cu valorile lor din v0 . Atunci d(v, w) = s şi d(v0 , w) =
d − s ≤ t + s − s = t, ceea ce contrazice condiţia din definiţie. 2
32 PRELEGEREA 3. CODURI LINIARE - II

Exemplul 3.4 Să considerăm (8, 4) - codul liniar binar generat de matricea
 
1 0 0 0 1 1 1 0
 0 1 0 0 1 1 0 1 
 
G= .
 0 0 1 0 1 0 1 1 
0 0 0 1 0 1 1 1

El are distanţa minimă d = 4, deci - conform Teoremei 3.2 poate corecta maxim
o eroare, iar conform Teoremei 3.7 poate corecta o eroare şi detecta simultan două
erori.
Astfel recepţionarea cuvântului 11110010 conduce la corectarea sa ı̂n 10110010
(deoarece d(11110010, 10110010) = 1 şi 10110010 este cuvânt - cod).
În schimb recepţionarea cuvântului 00001111 anunţă că au apărut cel puţin două
erori. În această situaţie, nu mai puţin de patru cuvinte - cod (00010111, 00101011,
01001101, 10001110) sunt situate la distanţa 2 de cuvântul primit.

Exemplul 3.5 Codul binar cu repetiţie de lungime 7 (care are 2 elemente) poate
realiza una din condiţiile:

• Corectează 3 erori;

• Detectează 6 erori;

• Corectează 2 erori şi detectează 4 erori simultan.

3.4 Probabilitatea nedetectării erorilor


Să ne punem următoarea problemă: care este probabilitatea ca la transmiterea unui
cuvânt - cod a să fie recepţionat alt cuvânt - cod b (b 6= a). Altfel spus, care este
probabilitatea ca o eroare să scape nedetectată ?
Notând cu e = b − a, o eroare este nedetectată dacă şi numai dacă e este un
cuvânt - cod nenul.
Vom considera un canal de transmisie binar simetric, adică un canal ı̂n care
singurele simboluri transmise sunt 0 şi 1, iar probabilitatea p (0 ≤ p ≤ 1) ca la
transmiterea lui 0 să fie recepţionat 1 este egală cu probabilitatea ca la transmiterea
lui 1 să se recepţioneze 0. Într-un astfel de canal, dacă w(e) = i (adică au fost
perturbate la transmisie i caractere), probabilitatea de apariţie a erorii - tip e este
pi q n−i , unde q = 1 − p. Notând cu Ai numărul cuvintelor - cod cu ponderea i, prob-
abilitatea Pned a unei erori nedetectabile este suma probabilităţilor pi q n−i , fiecare
termen apărând de Ai ori pentru i = 1, 2, . . . , n. Formal,
n
X
Pned = Ai pi q n−i
i=1

n
X
Cum A1 = A2 = . . . = Ad−1 = 0, suma se reduce la Pned = pi q n−i .
i=d
3.5. IDENTITATEA MACWILLIAMS 33

Exemplul 3.6 Să considerăm un cod care are un cuvânt de pondere 0, câte şapte
cuvinte de pondere 3 şi 4 şi un cuvânt de pondere 7. Atunci
Pned = 7p3 q 4 + 7p4 q 3 + p7
Dacă folosim acest cod ı̂ntr-un canal binar simetric cu eroare de probabilitate
p = 0.01, avem
Pned = 7(0.01)3 (0.99)4 + 7(0.01)4 (0.99)3 + (0.01)7 ≈ 7 × 10−6
deci - ı̂n medie - apar cam şapte erori nedetectabile la un milion de cuvinte
transmise.

Definiţia 3.4 Polinomul de variabilă x ∈ [0, 1] definit


n
X
P (x) = A i xi
i=0

unde Ai este numărul de cuvinte din An,k de pondere i, se numeşte ”numărătorul


de ponderi” al codului An,k .

Exemplul 3.7 Codul definit ı̂n Exemplul 3.2 are numărătorul de ponderi
P (x) = 1 + x2 + 2x3

Propoziţia 3.3 Fie An,k un cod liniar binar cu numărător de ponderi P (x). Proba-
bilitatea apariţiei unei erori nedetectabile la folosirea codului An,k ı̂ntr-un canal binar
simetric este " Ã ! #
n p
Pned = q P −1 .
q

Demonstraţie: Relaţia de definiţie a lui Pned se poate rescrie


n n
à !i
X X p
qn Ai pi q −i = q n Ai .
i=1 i=1 q
Deoarece A0 = 1 (singurul cuvânt - cod de pondere 0 este cuvântul - cod 0, expresia
devine ı̂n continuare  Ã !i  " Ã ! #
X n
n p  n p
Pned = q Ai −1 =q P −1 . 2
i=0 q q

3.5 Identitatea MacWilliams


În acest paragraf vom arăta un rezultat care face posibilă determinarea numără-
torului de ponderi PA⊥ al dualului A⊥ unui cod liniar A, direct din numărătorul de
ponderi PA al codului A.
Propoziţia 3.4 Fie v ∈ Z2n şi A un (n, k) - cod liniar binar. Atunci are loc egali-
tatea (
1 X vw 1 dacă w ∈ A⊥
(−1) =
2k v∈A 0 altfel
34 PRELEGEREA 3. CODURI LINIARE - II

Demonstraţie: Dacă w ∈ A⊥ atunci evident, (−1)vw = (−1)0 = 1 şi suma este egală
cu numărul de cuvinte - cod din A, care este 2k .
Să presupunem acum că w 6∈ A⊥ , deci există un cuvânt - cod v0 ∈ A cu v0 w = 1.
Vom arăta că ı̂n acest caz, numărul cuvintelor - cod ortogonale pe w este egal cu
cel al cuvintelor - cod ne-ortogonale pe w (şi deci suma din formulă este 0).
Fie v1 , v2 , . . . , vr toate cuvintele - cod ortogonale pe w. Facem afirmaţia că
atunci v1 + v0 , v2 + v0 , . . . , vr + v0 sunt toate cuvintele - cod ne-ortogonale pe v0 .
Într-adevăr:
1. ∀i (1 ≤ i ≤ r) (vi + v0 )w = vi w + v0 w = 0 + 1 = 1;

2. Dacă v ∈ A verifică relaţia vw = 1, atunci v − v0 este un cuvânt cod -


ortogonal pe w, deci v − v0 = vi pentru un anumit i. 2

Teorema 3.8 Pentru orice (n, k) - cod liniar binar A are loc relaţia (identitatea
MacWilliams):
µ ¶
(1 + x)n 1−x
PA⊥ (x) = PA .
2k 1+x
Demonstraţie: Să rescriem numărătorul de ponderi sub o formă puţin diferită:
n
X
B(x, y) = Ai xi y n−i .
i=0
à !
n x
Evident, deoarece P (x) = B(x, 1) şi B(x, y) = y P , cele două expresii sunt
y
echivalente.
În notaţia cu polinomul B, identitatea MacWilliams se scrie
1
BA⊥ (x) = BA (y − x, y + x).
2k
Cu ajutorul ponderii cuvintelor - cod, numărătorul de ponderi are forma
n
X X
BA (x, y) = Ai xi y n−i = xw(a) y n−w(a)
i=0 a∈A

Prelucrând membrul drept al identităţii MacWilliams, avem:


X n
XY
BA (y − x, y + x) = (y − x)w(a) (y + x)n−w(a) = [y + (−1)ai x] .
a∈A a∈A i=1

În mod analog, membrul stâng se scrie:


X
BA⊥ (x, y) = xw(a) y n−w(a) .
a∈A⊥

Folosind Propoziţia 3.4, el se poate reformula:


" #
X 1 X
BA⊥ (x, y) = (−1)av xw(a) y n−w(a) .
a∈Z2n 2k v∈A
3.5. IDENTITATEA MACWILLIAMS 35

Expresia din paranteze este 0 pentru toate cuvintele a care nu sunt ı̂n A⊥ . Deci
1 X X
BA⊥ (x, y) = k
(−1)va xw(a) y n−w(a) .
2 v∈A a∈Z k
2

Suma interioară se face după toate secvenţele binare a de lungime n. Vom ordona
această sumă după ponderile lui a: pentru a = 0 sumandul este y n ; pentru cu-
vintele a de pondere 1 avem: [(−1)a1 + (−1)a2 + . . . + (−1)an ]xy n−1 etc; ı̂n final,
pentru ponderea n avem [(−1)a1 + . . . + (−1)an ]xn . Suma tuturor acestor sumanzi
n
X
[(−1)ai1 + . . . + (−1)aik ]xk y n−k se observă uşor că este egală cu
k=0
n
Y
[y + (−1)a1 x][y + (−1)a2 x] . . . [y + (−1)ak x] = [y + (−1)ai x]. Deci
i=1
n
1 XY 1
BA⊥ (x, y) = k [y + (−1)ai x] = k BA (y − x, y + x). 2
2 a∈A i=1 2

Exemplul 3.8 Să considerăm codul din Exemplul 3.2 al cărui numărător de ponderi
a fost dat ı̂n Exemplul 3.7. Pentru codul dual,"numărătorul de ponderi este#
µ ¶ µ ¶ µ ¶
(1 + x)4 1−x (1 + x)4 1−x 2 1−x 3
PA⊥ (x) = PA = 1 + + 2 =
22 1+x 4 1+x 1+x
(1 + x)4 + (1 + x)2 (1 − x)2 + 2(1 + x)(1 − x)3 4 + 4x2 + 4x3
= = = 1 + x2 + x3 .
4 4
Deci cele două coduri au acelaşi numărător de ponderi. Aceasta nu ı̂nseamnă
ı̂nsă că cele două coduri coincid (şi deci codul ar fi auto - dual); a avea acelaşi
numărător de ponderi este doar o condiţie necesară, nu şi suficientă pentru ca un
cod să coincidă cu dualul său.

Exemplul 3.9 Fie codul cu repetiţie de lungime pară n A = {00 . . . 0, 11 . . . 1};


numărătorul lui de ponderi este PA (x) = 1 + xn . Codul dual are numărătorul de
ponderi · µ ¶ ¸
(1 + x)n 1−x n
PA⊥ (x) = 1+ = 1 + Cn2 x2 + Cn4 x4 + . . . + xn .
2 1+x
Rezultă din această formă că dualul codului cu repetiţie este codul liniar al cu-
vintelor de pondere pară.
36 PRELEGEREA 3. CODURI LINIARE - II

3.6 Exerciţii
3.1 În Z2n notăm cu x cuvântul obţinut din x prin permutarea caracterelor 0 şi 1
ı̂ntre ele. Să se arate că pentru orice a, b ∈ Z2n :

1. a + b = a + b;

2. a + b = a + b = a + b;

3. d(a, b) = d(a + b) = w(a + b).

3.2 Descrieţi codurile modificate obţinute din codul liniar binar cu matricea genera-
toare  
1 1 1 0 0
 
G= 0 0 1 1 1 
1 1 1 1 0

3.3 Aceeaşi problemă pentru codul peste Z3 definit prin


 
1 0 0 2 2
 
G =  0 1 0 0 1 .
0 0 1 1 0

3.4 Fie A un (n, k) - cod liniar binar şi A0 (n, k − 1) - codul obţinut din A prin
expurgare. Ce relaţie există ı̂ntre matricile de control ale celor două coduri ?

3.5 Arătaţi cum poate codul binar cu repetiţie de lungime 7 să corecteze două erori
şi să detecteze 4 erori simultan. Câte erori poate detecta dacă corectează o eroare ?

3.6 Fie A (15, 4) - codul liniar binar ı̂n care fiecare coloană i din matricea genera-
toare este scrierea binară a lui i sub forma unui vector cu 4 componente. Să se
determine distanţa minimă, numărătorul de ponderi şi numărătorul de ponderi al
codului dual.

3.7 Fie A un (2k + 1, k) - cod binar astfel ca A⊥ ⊂ A. Descrieţi A⊥ \ A.


Prelegerea 4

Clase de coduri liniare

4.1 Coduri Hamming


Fie H matricea de control a unui cod liniar binar. Dacă se transmite un cuvânt -
cod a şi se recepţionează a + e (deci cu eroarea - tip e, atunci sindromul este eH T .
Acest sindrom este egal cu suma coloanelor lui H care corespund poziţiilor afectate
de erori (Prelegerea II, Teorema 2.3).
În particular, o eroare care apare pe o poziţie corespunzătoare unei coloane nule
din H nu influenţează sindromul. Deci, o astfel de eroare nu este detectată.
Dacă H are două coloane identice şi se ı̂ntâmplă ca pe poziţiile corespunzătoare
lor să apară simultan erori, acestea se anulează reciproc ı̂n calculul sindromului - şi
deci nu pot fi detectate.
Pe de-altă parte, dacă toate coloanele lui H sunt distincte şi nenule, o eroare
singulară pe poziţia s va face ca sindromul să fie egal cu coloana numărul s din H.
În acest caz, erorile singulare pot fi detectate şi corectate foarte uşor.
Pe baza acestor observaţii am demonstrat teorema:

Teorema 4.1 Un cod liniar binar poate corecta o eroare dacă şi numai dacă ma-
tricea sa de control are toate coloanele nenule şi distincte.

Pentru a se putea corecta toate erorile simple, trebuie să existe sindromuri distincte
pentru fiecare eroare - tip; deci, conform marginii Hamming (Prelegerea III, Teorema
3.5),
2n−k ≥ n + 1.
Pe baza acestor considerente se defineşte codul Hamming binar:

Definiţia 4.1 Codul liniar binar ı̂n care coloanele matricii H sunt reprezentarea
binară a numerelor 1, 2, . . . , 2r − 1 este numit cod Hamming binar.

Deci, pentru orice număr natural r (r ≥ 2) se poate construi un (n, k) - cod liniar
ı̂n care n = 2r − 1, k = 2r − r − 1.
De remarcat că definiţia nu determină pentru fiecare r ı̂n mod unic matricea de
control a codului Hamming. De obicei se consideră acea matrice H ı̂n care coloana
i reprezintă scrierea ı̂n binar a numărului i. Deoarece codul este sistematic (există
coloane pentru 20 , 21 , . . . , 2r−1 ), toate celelalte reprezentări au aceleaşi proprietăţi.

37
38 PRELEGEREA 4. CLASE DE CODURI LINIARE

Exemplul 4.1 Pentru r = 3 avem codul Hamming de lungime n = 23 − 1 = 7 cu


k = 23 − 3 − 1 = 4 simboluri de informaţie şi 3 simboluri de control. Matricea de
control este:
 
0 0 0 1 1 1 1
 
H3,7 =  0 1 1 0 0 1 1 
1 0 1 0 1 0 1

De aici rezultă că el este determinat de soluţiile sistemului liniar:



 x4
 + x5 + x6 + x7 = 0
x2 + x3 + x6 + x7 = 0


x1 + x3 + x5 + x7 = 0

Să determinăm matricea generatoare a acestui cod. Pentru aceasta, construim ı̂ntâi
codul echivalent, permutând coloanele pentru a aduce matricea de control la forma
eşalonată canonic:
 
0 1 1 1 1 0 0
∗  
H3,7 =  1 0 1 1 0 1 0 .
1 1 0 1 0 0 1

De aici se obţine matricea generatoare eşalonată canonic:


 
1 0 0 0 0 1 1
 0 1 0 0 1 0 1 
G∗4,7 = 



 0 0 1 0 1 1 0 
0 0 0 1 1 1 1

Aplicând permutarea inversă asupra coloanelor, se obţine matricea generatoare a


(7, 4) - codului Hamming binar:
 
1 1 1 0 0 0 0
 1 0 0 1 1 0 0 
 
G4,7 =  .
 0 1 0 1 0 1 0 
1 1 0 1 0 0 1

Codul este sistematic: coloanele corespunzătoare matricii unitate: 3, 5, 6, 7, sunt


poziţiile simbolurilor de informaţie ı̂n fiecare cuvânt - cod. Deci simbolurile x1 , x2 , x4
sunt simboluri de control. Sistemul de sus poate fi rearanjat pentru a permite calculul
simbolurilor de control din simbolurile de informaţie:

 x1
 = x3 + x5 + x7
x2 = x3 + x6 + x7


x4 = x5 + x6 + x7

Toate cuvintele codului sunt:


4.1. CODURI HAMMING
Informaţie Cuvânt cod Informaţie Cuvânt cod 39
0000 0000000 0110 0110011
1000 1000011 0101 0101010
0100 0100101 0011 0011001
0010 0010110 1110 1110000
0001 0001111 1101 1101001
1100 1100110 1011 1011010
1010 1010101 0111 0111100
1001 1001100 1111 1111111
Teorema 4.2 Un cod Hamming are distanţa minimă 3.
Demonstraţie: Evident, orice două coloane din matricea de control sunt liniar inde-
pendente. În plus, se pot găsi trei coloane (de exemplu primele trei) a căror sumă
să fie 0. Conform Teoremei 2.4 (Prelegerea II), distanţa minimă a codului este 3.2
Deci orice cod Hamming poate corecta o eroare sau poate detecta două erori. El
nu poate realiza acest lucru simultan (nu verifică condiţia d ≥ s + t + 1 din Teorema
3.7, Prelegerea III).
Decodificarea se realizează foarte simplu, conform următorului algoritm:
Algoritm A:
Fie a vectorul recepţionat.

1. Se calculează sindromul s = aH T .

2. Dacă s = 0, nu a apărut nici o eroare (sau eroarea este nedetectabilă),


deci v = a, STOP.

3. Altfel, eroarea este pe poziţia i, unde i este numărul a cărui reprezentare


ı̂n binar este sindromul s. Decodificarea este v = a + ei , unde ei este
vectorul care are 1 pe poziţia i şi 0 ı̂n rest.

Exemplul 4.2 Să considerăm din nou (7, 4) - codul Hamming din Exemplul 4.1
şi să presupunem că s-a recepţionat cuvântul x = 0011101. Calculul sindromului
conduce la valoarea  
1
xH T =  0


1
care este scrierea ı̂n binar a numărului 5. Deci a intervenit o eroare simplă pe poziţia
a cincea. Corectăm această poziţie - schimbând 1 cu 0 şi se obţine cuvântul - cod
0011001, care pe poziţiile 3, 5, 6, 7 conţine mesajul de informaţie: 1001.
Codul Hamming poate fi ı̂mbunătăţit prin extensie. Această operaţie conduce la un
(2m , 2m − m − 1) - cod liniar, cu toate cuvintele - cod de pondere pară.
Exemplul 4.3 Prin extensia (7, 4) - codului Hamming se obţine codul cu matricea
de control
 
0 0 0 1 1 1 1 0
 0 1 1 0 0 1 1 0 
H∗ = 

.
 1 0 1 0 1 0 1 0 
1 1 1 1 1 1 1 1
40 PRELEGEREA 4. CLASE DE CODURI LINIARE

De remarcat că H ∗ are rangul 4; ı̂n plus, toate liniile ei sunt cuvinte - cod ı̂n
codul Hamming extins. Deci H ∗ poate fi considerată matrice generatoare a acestui
cod. Rezultă că (8, 4) - codul Hamming extins este auto - dual.
Un cod Hamming extins este soluţia unui sistem liniar de n − k + 1 ecuaţii, ecuaţia
n+1
X
suplimentară xi = 0 fiind numită ecuaţia de control a parităţii.
i=1

Propoziţia 4.1 Un cod Hamming extins are d = 4.


Demonstraţie: Fie a1 a2 . . . an un cuvânt - cod de pondere d = 3 din codul Ham-
ming. Trecând la codul extins, cuvântul a1 a2 . . . an an+1 verifică relaţia suplimentară
n+1
X n
X
ai = 0 (reamintim, sumele se fac modulo 2). Cum ai = 1, rezultă an+1 = 1.
i=1 i=1
Noul cuvânt are evident pondere minimă, şi aceasta este 3 + 1 = 4. 2
Codurile Hamming extinse corectează o eroare simplă şi detectează 2 erori si-
multan. Algoritmul prezentat este bazat pe verificarea celor n − k + 1 ecuaţii de
control:
Algoritm B:

1. Dacă nu sunt verificate ecuaţia de control a parităţii şi cel puţin una
din primele n − k ecuaţii, ı̂nseamnă că a apărut o eroare simplă, care se
corectează cu Algoritmul A;

2. Dacă ecuaţia de control a parităţii este verificată dar cel puţin una din
primele n−k ecuaţii de control nu se verifică, s-a detectat o eroare dublă;

3. În celelalte situaţii nu au apărut erori (sau eroarea este nedetectabilă).

Faptul că se poate lua totdeauna o decizie se bazează pe următorul rezultat.


Teorema 4.3 Codul Hamming este perfect.
Demonstraţie: Reamintim (Prelegerea II, Definiţia 2.8) că un cod A este perfect
dacă [
Zqn = St (x).
x∈A
Scriind această relaţie ı̂n funcţie de numărul de elemente din fiecare sferă şi ţinând
cont că toate sferele conţin un număr egal de elemente, avem
h i
q k 1 + Cn1 (q − 1) + . . . + Cnt (q − 1)t = q n .
Pentru cazul codurilor Hamming, q = 2, n = 2r − 1, k = 2r − r − 1, t = 1, deci
totul revine la verificarea egalităţii 2k (1 + n) = 2n . 2
De remarcat că rata de informaţie a codurilor Hamming
k r
R= =1− r
n 2 −1
creşte rapid spre 1. Evident ı̂nsă că odată cu această creştere scade protecţia faţă
de erori.
4.1. CODURI HAMMING 41

4.1.1 Coduri Hamming nebinare


r
Definiţia 4.2 Fie q număr prim, r (r ≥ 2) un ı̂ntreg şi n = qq−1
−1
. Se numeşte cod
Hamming nebinar un (n, n − r) - cod liniar peste Zq ı̂n care matricea de control are
orice pereche de două coloane liniar independente (nici o coloană nu este multiplu
scalar al altei coloane).

Mulţimea coloanelor unui astfel de cod formează o mulţime maximală de vectori


liniar independenţi doi câte doi.

32 − 1
Exemplul 4.4 Să considerăm q = 3, r = 2. Atunci n = = 4. Un (4, 2) -
3−1
cod Hamming ternar poate fi dat de matricea de control
à !
0 1 1 1
H=
1 0 1 2

Decodificarea se poate face folosind tabela de sindromuri, ı̂n care s-au luat ca repre-
zentanţi toate combinaţiile posibile de o eroare:

Sindrom Reprezentant Sindrom Reprezentant


01 1000 12 0001
02 2000 20 0200
10 0100 21 0002
11 0010 22 0020

Dacă se recepţionează de exemplu 1021, calculul sindromului dă s = 02. Reprezen-


tantul este 2000. Se calculează 1021 − 2000 = 1021 + 1000 = 2021 deci cuvântul -
cod transmis a fost 2021. Ã !
2 2 1 0
Cum matricea generatoare a acestui cod este G = ultimele două
1 2 0 1
caractere formează mesajul de informaţie; deci s-a codificat mesajul 21.

Despre codurile Hamming nebinare se pot stabili următoarele rezultate:

• Deoarece pentru q, r fixaţi codurile Hamming corespunzătoare sunt echiva-


lente, se poate alege o anumită matrice de control. Uzual se foloseşte matricea
ı̂n care se scriu toate coloanele nenule de r elemente din Zq , cu condiţia ca
primul element nenul (de sus ı̂n jos) să fie 1.

• Codurile Hamming nebinare au d = 3 (evident, din construcţia matricii de


control de mai sus). Deci ele pot corecta o eroare.

• Proprietatea de a fi coduri perfecte se păstrează. Într-adevăr, deoarece un


r −1
cod Hamming conţine q n−r cuvinte - cod iar n = qq−1 , egalitatea stabilită ı̂n
demonstraţia Teoremei 4.3 se scrie q [1 + n(q − 1)] = q n , care se verifică
n−r

imediat.
42 PRELEGEREA 4. CLASE DE CODURI LINIARE

Exemplul 4.5 Să considerăm (13, 10) - codul Hamming ternar. Acest cod are o
aplicaţie interesantă ı̂n problema Pronosportului. După cum se ştie, un buletin
Pronosport conţine rezultatele (notate cu 1, 2, X) a 13 meciuri. Pentru a avea sigur
13 rezultate exacte trebuiesc completate 313 buletine. Câte buletine sunt ı̂nsă necesare
pentru a fi sigur de 12 rezultate ? La prima vedere s-ar părea că 312 . Completând
ı̂nsă buletinele cu elementele codului Hamming ternar (13, 10) (cu 0 ı̂n loc de X) -
care sunt ı̂n număr de 310 , se atinge scopul dorit. Într-adevăr, acesta fiind un cod
perfect corector de o eroare, orice element din Z313 diferă prin cel mult o poziţie de
un cuvânt - cod.
Astfel, numărul buletinelor se reduce de nouă ori.

4.2 Codul Golay


Al doilea cod liniar prezentat are capacitatea de corecţie pentru maxim 3 erori.
Vom construi ı̂ntâi varianta extinsă a codului, deoarece algoritmul de decodificare
este mai simplu şi uşor de aplicat ulterior la codul Golay normal.

4.2.1 Codul Golay binar extins


Acest cod a fost folosit de programul spaţial Voyager la ı̂nceputul anilor 0 80, la
transmiterea fotografiilor planetelor Jupiter şi Saturn.
Să considerăm matricea 12 × 12 din Figura 4.1:

Figura 4.1:
 
1 1 0 1 1 1 0 0 0 1 0 1
 


1 0 1 1 1 0 0 0 1 0 1 1 

 0 1 1 1 0 0 0 1 0 1 1 1 
 
 
 1 1 1 0 0 0 1 0 1 1 0 1 
 
 1 1 0 0 0 1 0 1 1 0 1 1 
 
 1 0 0 0 1 0 1 1 0 1 1 1 
 
B= 

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

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


0 1 0 1 1 0 1 1 1 0 0 1 

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

Fie G matricea 12 × 24 G = (I12 |B). Codul liniar binar generat de G se numeşte


codul Golay extins şi va fi notat C24 .
Observaţii:

• Matricea B este mai uşor de construit decât pare. Astfel, eliminând ultima
linie şi coloană, matricea rămasă - să spunem B1 - este generată ciclic (spre
4.2. CODUL GOLAY 43
à !
B1 1T
stânga) de cuvântul binar 11011100010. Deci B = ,
1 0
unde 1 = 11111111111. Evident, B este simetrică (B T = B).
• C24 are n = 24, k = 12 şi 212 = 4096 cuvinte - cod.
• Conform Teoremei 2.2, o matrice de control a codului este H = (B|I12 ).
Teorema 4.4 H = (I12 |B) este de asemenea matrice de control pentru C24 .
Demonstraţie: Liniile din B au pondere impară (7 sau 11); deci produsul (scalar)
al unei linii cu ea ı̂nsăşi este 1. O verificare simplă arată că produsul primei linii cu
oricare altă linie din B este 0. Structura ciclică a lui B1 asigură că atunci produsul
scalar al oricăror două linii este 0.
În concluzie, BB T = I12 . Dar B T = B, aşa că putem scrie:
à !
T I
GH = (I|B) = I 2 + B 2 = I + BB T = I + I = 0.
B
Vom folosi ambele matrici de control pentru decodificarea codului C24 . 2
Corolarul 4.1
A. C24 admite ca matrice generatoare şi pe G = (B|I12 ).

B. Codul Golay extins este auto - dual (C24 = C24 ).
Demonstraţie: Se verifică imediat. 2
Teorema 4.5 C24 are distanţa minimă d = 8.
Demonstraţie: Vom demonstra afirmaţia ı̂n trei paşi.
1. Ponderea cuvintelor din C24 este multiplu de 4.
Să observăm că liniile lui G au pondere 8 sau 12. Fie v ∈ C24 ca sumă de două
linii din G : v = ri + rj . Cum B are liniile ortogonale, rezultă că şi liniile lui
G sunt ortogonale. Deci ri şi rj au un număr par (să zicem 2x) de elemente 1
ı̂n comun. Atunci w(v) = w(ri ) + w(rj ) − 2(2x), care este multiplu de 4.
Fie acum v ∈ C24 ca sumă de trei linii din G : v = ri + rj + rs . Notăm
v1 = ri + rj . Deoarece C24 este auto - dual, v1 şi rs au un număr par (să
zicem 2y) de elemente 1 ı̂n comun. Deci w(v) = w(v1 ) + w(rs ) − 2(2y) care
este multiplu de 4.
Folosind acum un procedeu de inducţie, cum orice cuvânt - cod este combinaţie
liniară de linii din G, ponderea sa va fi multiplu de 4.
2. Primele 11 linii din G sunt cuvinte - cod de pondere 8, deci distanţa codului
C24 este 4 sau 8.
3. C24 nu are cuvinte de pondere 4.
Să presupunem că există v ∈ C24 cu w(v) = 4. Există atunci u1 , u2 ∈ Z212
cu v = u1 (I|B), v = u2 (B|I). Deoarece există o jumătate din v care are cel
puţin doi de 1, rezultă w(u1 ) ≤ 2 sau w(u2 ) ≤ 2. Pe de-altă parte, suma
a una sau două linii din B nu poate avea o pondere mai mică de 4; deci
w(v) = w(ui ) + w(ui B) > 4, contradicţie. 2
44 PRELEGEREA 4. CLASE DE CODURI LINIARE

4.2.2 Decodificarea codului Golay extins


Conform Teoremei 4.5, un cod Golay extins poate corecta orice combinaţie de maxim
3 erori.
În această secţiune vom nota cu a cuvântul recepţionat, cu v cuvântul - cod cel
mai apropiat, şi cu e eroarea - tip (v = a + e). Deoarece capacitatea de corecţie
este de 3 erori, vom considera w(e) ≤ 3.
Pentru orice cuvânt din Z224 , vom separa cu o virgulă prima jumătate a cuvântului
de cea de-a doua. Eroarea - tip va fi notată u = [u1 , u2 ], unde u1 , u2 au fiecare
lungimea 12. Evident, condiţia w(u) ≤ 3 implică w(u1 ) ≤ 1 sau w(u2 ) ≤ 1.
Folosind cele două matrici
à de
! control, seÃpot defini
! două sindromuri pentru a:
I12 I12
s1 = u = [u1 , u2 ] = u1 + u2 B,
B B
à ! à !
B B
s2 = u = [u1 , u2 ] = u1 B + u2 .
I12 I12
De aici rezultă următoarea observaţie: dacă w(u2 ) ≤ 1, atunci s1 este sau un
cuvânt de pondere maxim 3 (dacă w(u2 ) = 0), sau o linie a lui B cu cel mult doi
biţi schimbaţi (dacă w(u2 ) = 1).
Similar, dacă w(u1 ) ≤ 1, atunci s2 este sau un cuvânt de pondere maxim 3 sau
o linie a lui B cu cel mult doi biţi schimbaţi.
Dacă se foloseşte şi faptul că s2 = u1 B + u2 = (u1 + u2 B)B = s1 B (deci se
poate folosi doar prima matrice de control), putem defini următorul algoritm de
decodificare a codurilor Golay extinse:
Algoritm C:

1. Se calculează sindromul s = aH;

2. Dacă w(s) ≤ 3, atunci e = [s, 0], STOP.

3. Dacă există o linie bi a lui B cu w(s + bi ) ≤ 2, atunci e = [s + bi , ei ],


STOP.

4. Dacă w(sB) ≤ 3, atunci e = [0, sB], STOP.

5. Dacă există o linie bi a lui B cu w(sB + bi ) ≤ 2, atunci e = [ei , sB + bi ],


STOP.

6. Dacă e nu a fost determinat ı̂ncă, se cere retransmiterea.

S-a notat cu ei un cuvânt de lungime 12 cu 1 pe poziţia i şi 0 ı̂n rest.


După determinarea erorii e, cuvântul - cod transmis se determină prin v = a + e.

Exemplul 4.6 Să decodificăm cuvântul a = 101111101111, 010010010010.


Sindromul este
s = aH T = 101111101111 + 001111101110 = 100000000001.
Deoarece w(s) = 2 ≤ 3, se găseşte e = [s, 0] = 100000000001, 000000000000
deci s-a transmis cuvântul v = a + u = 001111101110, 010010010010.
4.2. CODUL GOLAY 45

Deoarece G = (I12 |B) este ı̂n forma eşalonat canonică, mesajul de informaţie (orice
cuvânt din Z212 ) apare pe primele 12 poziţii ale cuvântului - cod. Astfel, ı̂n exemplul
de sus, mesajul de informaţie a fost 001111101110.

Exemplul 4.7 Se cere decodificarea cuvântului a = 001001001101, 101000101000.


Sindromul este
s = aH = 001001001101 + 111000000100 = 110001001001.
Deoarece w(s) = 5, se trece la pasul 3 al Algoritmului C şi se calculează:

s + b1 = 000110001100
s + b2 = 011111000010
s + b3 = 101101011110
s + b4 = 001001100100
s + b5 = 000000010010

Deoarece w(s + b5 ) ≤ 2, se determină


e = [s + b5 , e5 ] = 000000010010, 000010000000
şi se decide că s-a transmis cuvântul - cod
v = a + e = 001001011111, 101010101000.

Exemplul 4.8 Să decodificăm cuvântul a = 000111000111, 011011010000.


Sindromul este
s = aH T = u1 + u2 B = 000111000111 + 101010101101 = 101101101010
care are ponderea 7. Trecând la pasul 3 se găseşte w(s + bi ) ≥ 3 pentru toate
liniile lui B; deci se continuă cu pasul 4: al doilea sindrom este sB = 111001111101
cu ponderea 8. Pasul 5 va da:

sB + b1 = 001110111000
sB + b2 = 010111110110
sB + b3 = 100101101010
sB + b4 = 000001010000

S-a ajuns la w(sB + b4 ) ≤ 2, deci se poate determina eroarea:


e = [e4 , sB + b4 ] = 000100000000, 000001010000
deci cuvântul - cod transmis a fost:
v = a + e = 000011000111, 011010000000.

4.2.3 Codul Golay


Prin relaxarea codului Golay extins (eliminarea ultimului bit din fiecare cuvânt -
cod) se ajunge la Codul Golay binar.
Fie B̂ matricea 12 × 11 obţinută din B prin eliminarea ultimei coloane. Definim
G = (I12 |B̂). Codul liniar binar generat de G se numeşte codul Golay şi este notat
cu C23 . Caracteristicile sale sunt:

n = 23, k = 12, Număr de cuvinte - cod: 212 = 4096.

Evident, extensia lui C23 este C24 .


46 PRELEGEREA 4. CLASE DE CODURI LINIARE

Teorema 4.6 Distanţa unui cod Golay este d = 7.

Demonstraţie: Demonstraţia se poate face fie direct (similar celei de la Teorema 4.5)
fie folosind faptul că C23 este relaxarea codului C24 , care are distanţa 8. 2
În consecinţă, un cod Golay va corecta orice combinaţie de maxim 3 erori.

Teorema 4.7 Codul Golay este perfect.

Demonstraţie: Se verifică relaţia:


212 (C23
0 1
+ C23 + C232
+ C233
) = 212 (1 + 23 + 253 + 1771) = 212 211 = 223 . 2
Rezultă că orice cuvânt a ∈ Z223 se află la distanţa maxim 3 de un cuvânt - cod.
Astfel, dacă se adaugă la sfârşit 0 sau 1, formând a0 respectiv a1 pentru a obţine
un cuvânt de pondere impară, acest cuvânt este la distanţă maxim 3 de un cuvânt
- cod c ∈ C24 . Se foloseşte Algoritmul C pentru a obţine acest cuvânt - cod, apoi se
elimină ultimul caracter din c; se ajunge astfel la cel mai apropiat cuvânt - cod din
C23 faţă de a.
Algoritmul D:

1. Se formează cuvântul extins de pondere impară a0 sau a1;

2. Se decodifică ai folosind Algoritmul C şi se obţine c ∈ C24 ;

3. Se elimină ultimul caracter din c.

Exemplul 4.9 Să decodificăm a = 001001001001, 11111110000.


Deoarece a are pondere impară, se construieşte
a0 = 001001001001, 111111100000.
Sindromul acestui cuvânt este s1 = 100010111110.
Pentru că s1 = b6 + e9 + e12 , a0 se decodifică ı̂n 001001000000, 111110100000,
aşa că a este decodificat ı̂n 001001000000, 11111010000.

4.3 Unicitatea codurilor perfecte binare


Ambele clase de coduri liniare prezentate aici sunt perfecte.
Se observă imediat că pentru corectarea unei erori, singurele coduri binare per-
fecte sunt codurile Hamming.
Vom mai arăta că această singularitate este valabilă şi ı̂n cazul codurilor Golay;
anume, singurul cod binar perfect corector de 3 erori este codul Golay. Pentru
aceasta sunt necesare două leme:

Lema 4.1 O condiţie necesară pentru existenţa unui (n, k) - cod binar perfect corec-
t
X
tor de t erori este Cni = 2p pentru un anumit p.
i=0

Demonstraţie: Rezultă imediat din relaţia scrisă ı̂n demonstraţia Teoremei 4.3, ı̂n
care se ia q = 2. 2
4.3. UNICITATEA CODURILOR PERFECTE BINARE 47
t
X n+1
Lema 4.2 Cni = Rt (n)
i=0 t!
unde t este număr natural impar, Rt (X) ∈ Z[X], gr(Rt (X)) = t − 1.

Demonstraţie: Pentru t = 1 se verifică imediat.


Presupumem adevărată afirmaţia pentru
" t şi o demonstrăm pentru t +# 2. Avem
t+2
X Yt
n+1 n+1
Cni = + Cnt+1 + Cnt+2 = (t + 1)(t + 2)Rt (n) + (n − i) .
i=0 t! (t + 2)! i=0
Expresia din paranteza dreaptă este un polinom de gradul t + 1; notându-l cu
Rt+2 (n), afirmaţia este demonstrată. 2
Să considerăm acum cazul t = 3. Pentru ca să existe un cod binar perfect
corector de 3 erori, cu lemele de sus, trebuie ca (n + 1)(n2 − n + 6) = 3 · 2s , sau

(n + 1)[(n + 1)2 − 3(n + 1) + 8] = 3 · 2s .

Considerată ca o ecuaţie ı̂n n + 1, singurele soluţii ı̂ntregi pozitive sunt de forma


n + 1 = 2k p unde p = 1 sau p = 3. Înlocuind, se ajunge la
22k p3 − 2k · 3p2 + 8p = 2s−k · 3 (1)
Pentru k ≤ 3 şi p = 1, 3 verificările se fac imediat. Pentru k ≥ 4 se ajunge la
contradicţie. Singurele valori care verifică ecuaţia sunt:
n = 0, 1, 2 − nu corespund nici unui cod.
n=3 − codul trivial cu un singur cuvânt - cod de lungime 3.
n=7 − codul (trivial) cu repetiţie {0000000, 1111111}.
n = 23 − codul Golay.
În acest mod am demonstrat teorema:

Teorema 4.8 Codul binar Golay este singurul cod binar perfect netrivial corector
de 3 erori.

Lemele 4.1 şi 4.2 pot fi folosite şi pentru alte valori impare ale lui t. Cercetările nu
au condus la alte coduri perfecte binare, dar nici nu s-a demonstrat că nu există
nici un cod perfect binar corector de t (t > 3 impar) erori. Afirmaţia este valabilă
deocamdată pentru t < 20.
Un alt caz interesant de studiu este q = 2, t = 2. Aici se poate da teorema:

Teorema 4.9 Nu există nici un cod netrivial binar perfect corector de 2 erori.

Demonstraţie: Lema 4.1 conduce la relaţia

(2n + 1)2 = 2s+3 − 7.

Ecuaţia x2 + 7 = 2m a fost studiată ı̂n multe articole (vezi Math. Rev. 26, #74).
Singurele soluţii sunt x = 1, 3, 5, 11, 181 cărora le corespund:
n = 0, 1 − fără coduri.
n=2 − codul trivial cu un singur cuvânt.
n=5 − codul cu repetiţie {00000, 11111}.
n = 90.
48 PRELEGEREA 4. CLASE DE CODURI LINIARE

Acest ultim caz este eliminat de următorul rezultat (Van Lindt - Coding theory,
pp. 95):
n+1
Dacă există un cod binar perfect corector de t erori, atunci este număr
t+1
ı̂ntreg. 2

4.4 Exerciţii
4.1 Fie (8, 4) - codul Hamming binar extins. Decodificaţi cuvintele
10101010 11010110 11111111.
4.2 Să se demonstreze că toate cuvintele - cod ale codului Hamming binar extins
(2r , 2r − r − 1) au pondere pară.
4.3 Construiţi codurile Hamming ternare pentru r = 2, 3 şi determinaţi decodifi-
carea pe baza sindromurilor.
4.4 Construiţi (5, 3) - codul Hamming cu q = 4. Determinaţi toate cuvintele - cod şi
tabela de decodificare cu sindromuri. Decodificaţi cuvintele: 11223, 32101 2222 1100.
4.5 Demonstraţi afirmaţiile din Corolarul 4.1.
4.6 Arătaţi că C24 conţine un cuvânt cu toate componentele egale cu 1 şi nici un
cuvânt de pondere 20.
Demonstraţi că numărătorul de ponderi al lui C24 este:
1 + 759X 8 + 2576X 12 + 759X 16 + X 24 .
4.7 În codul Golay extins C24 să se decodifice - dacă este posibil, cuvintele:
111000000000, 011011011011 111111000000, 100011100111
111111000000, 101011100111 111111000000, 111000111000
111000000000, 110111001101 110111001101, 111000000000
000111000111, 101000101101 110000000000, 101100100000
4.8 Să se determine eroarea tip cea mai probabilă pentru un cuvânt cu sindromurile:
s1 = 010010000000, s2 = 011111010000
s1 = 010010100101, s2 = 001000110000
s1 = 111111000101, s2 = 111100010111
s1 = 111111111011, s2 = 010010001110
s1 = 001101110110, s2 = 111110101101
s1 = 010111111001, s2 = 100010111111
4.9 Folosind C23 , decodificaţi cuvintele:
101011100000, 10101011011 101010000001, 11011100010
100101011000, 11100010000 011001001001, 01101101111
4.10 Detaliaţi demonstraţia Teoremei 4.6.
4.11 Rezolvaţi ecuaţia (1).
Prelegerea 5

Coduri Reed - Muller

Vom introduce o nouă clasă de coduri binare, caracterizate printr-o tehnică de de-
codificare deosebit de simplă: codurile Reed - Muller (R − M ). Ele au fost definite
de Reed, iar Muller a construit modalitatea de decodificare şi - implicit - de de-
tectare şi corectare a erorilor. Unul din aceste coduri - RM(1, 5) - a fost folosit ı̂n
1969 de sonda Mariner pentru transmiterea de imagini de pe Lună. Fiecare pixel
din imagine avea asignat una din 26 = 64 grade de umbră, iar aceşti şase biţi de
informaţie erau codificaţi ı̂ntr-un cuvânt de lungime 32. Codul poate corecta până
la 7 erori.

5.1 Definirea prin funcţii booleene


5.1.1 Funcţii şi polinoame booleene
Definiţia 5.1 O funcţie booleană de m (m ≥ 1) variabile este o aplicaţie
f : Z2m → Z2 .

O modalitate simplă folosită pentru definirea unei funcţii booleene este asocierea
unei tabele de adevăr: un tablou (m+1)×2m care conţine toate combinaţiile posibile
de m valori binare, cărora li se asociază valoarea funcţiei (de asemenea o valoare
binară). Prin convenţie, primii m biţi de pe coloana i (0 ≤ i ≤ 2m − 1) reprezintă
scrierea ı̂n baza 2 a numărului i.
Exemplul 5.1 Următoarea tabelă de adevăr defineşte o funcţie booleană de 3 vari-
abile:
x0 0 1 0 1 0 1 0 1
x1 0 0 1 1 0 0 1 1
x2 0 0 0 0 1 1 1 1
f 0 1 1 0 1 1 1 0
Observăm că o astfel de tabelă defineşte un cuvânt binar de lungime 8. Afirmaţia
este adevărată şi invers: orice cuvânt binar de lungime 8 este definit printr-o tabelă
de adevăr a unei funcţii booleene de 3 variabile. Astfel, se pot identifica funcţiile
booleene de 3 variabile prin cuvintele binare de lungime 8. În tabela de sus, cuvântul
01101110 este pus ı̂n corespondenţă biunivocă cu funcţia f .

49
50 PRELEGEREA 5. CODURI REED - MULLER

În cele ce urmează, orice cuvânt binar f = f0 f1 . . . f2m −1 de lungime 2m este conside-
rat ca o funcţie booleană de m variabile, unde
f (0, 0, . . . , 0, 0) = f0 ,
f (0, 0, . . . , 0, 1) = f1 ,
f (0, 0, . . . , 1, 0) = f2 ,
..
.
f (1, 1, . . . , 1, 1) = f2m −1
m−1
X
În general, fi = f (im−1 , . . . , i1 , i0 ), unde i = ik 2k
k=0
(im−1 . . . i1 i0 este scrierea ı̂n binar a lui i).
Exemplul 5.2 Există două funcţii booleene constante:

1 = 11 . . . 11, 0 = 00 . . . 00.

Exemplul 5.3 Orice variabilă poate fi tratată ca o funcţie booleană. De exemplu,


x0 este funcţia booleană care asignează fiecărui m-tuplu (x0 , x1 , . . . , xm−1 ) valoarea
primei coordonate x0 . Deci, valoarea este 0 pentru toate numerele pare şi 1 pentru
toate numerele impare: x0 = 0101 . . . 01 (vezi Exemplul 5.1 pentru cazul m = 3).
În general,
xi este cuvântul binar ı̂n care pe poziţia k (0 ≤ k ≤ 2m − 1) este 1 atunci şi
numai atunci când scrierea binară a lui k conţine 1 pe poziţia i.
Această observaţie rezultă din modul de scriere al tabelelor de adevăr.
De exemplu, x1 = 00110011 . . . 0011 şi xm−1 = 00 | .{z
. . 00} 11
| .{z
. . 11}.
2m−1 2m−1

Pentru m = 4, cele patru variabile sunt descrise ı̂n Tabelul 5.1:

Tabelul 5.1:

x0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
x1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
x2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
x3 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1

Pe mulţimea funcţiilor booleene se definesc două operaţii:


• Suma logică (sau exclusiv): f +g =h
unde hi = fi + gi (mod 2), 0 ≤ i ≤ 2m − 1.

• Produsul logic (şi): fg = h


unde hi = fi gi (mod 2), 0 ≤ i ≤ 2m − 1.
Observaţii:
5.1. DEFINIREA PRIN FUNCŢII BOOLEENE 51

1. Produsul logic verifică relaţia ff = f .


Deci ı̂n reprezentarea funcţiilor nu vor apare exponenţi mai mari de 1.

2. Există şi alte operaţii care pot fi exprimate cu ajutorul sumei şi produsului
logic. Astfel,

• Negaţia f =1+f
• ∨ (sau disjunctiv): f ∨ g = f + g + fg

Definiţia 5.2 Un polinom boolean de m nedeterminate este o sumă de termeni din


mulţimea
{0, 1} ∪ {xi1 xi2 . . . xik |0 ≤ i1 < i2 < . . . < ik ≤ m − 1, k ≥ 1}.

Funcţia 0 este numită polinom boolean de gradul −1, funcţia 1 este numită polinom
boolean de gradul 0, iar orice alt polinom boolean are gradul k unde k este numărul
maxim de factori dintr-un termen al lui f .

Exemplul 5.4 Polinomul boolean 1 + x0 x1 de 3 nedeterminate are gradul 2. El


este negaţia polinomului
x0 x1 = (01010101)(00110011) = 00010001.
Deci 1 + x0 x1 = 11101110.
Acelaşi polinom, considerat ca funcţie de 4 nedeterminate, este cuvântul
1110111011101110.

Exemplul 5.5 Polinomul xi xj (i 6= j) este cuvântul binar ı̂n care pe poziţia k este
1 dacă şi numai dacă reprezentarea binară a lui k are 1 pe poziţiile i şi j. Numărul
acestor situaţii este 2m−2 (deoarece celelalte m − 2 poziţii din scrierea binară a lui k
pot fi alese arbitrar). Deci w(xi xj ) = 2m−2 .

Mai general,
Dacă i1 , i2 , . . . , ir sunt valori distincte din [0, m − 1], atunci
w(xi1 xi2 . . . xir ) = 2m−r . (∗)
Fiecare polinom boolean de m variabile determină un cuvânt binar de lungime
2m : pentru o singură nedeterminată, se foloseşte Exemplul 5.3, după care se operează
adunările şi multiplicările necesare.
Invers, orice cuvânt binar f = f0 f1 . . . f2m −1 poate fi translatat ı̂ntr-un polinom
boolean pe baza următoarei propoziţii:

Propoziţia 5.1 Dacă f este o funcţie booleană de m variabile, atunci:


f (x0 , . . . , xm−2 , xm−1 ) = f (x0 , . . . , xm−2 , 0)+
+[f (x0 , . . . , xm−2 , 0) + f (x0 , . . . , xm−2 , 1)]xm−1 .

Demonstraţie: Deoarece xm−1 poate lua doar două valori (0, 1), este suficient să
verificăm identitatea pentru acestea. Cazul xm−1 = 0 se verifică banal. Pentru
xm−1 = 1 avem:
f (x0 , . . . , xm−2 , 0)+[f (x0 , . . . , xm−2 , 0)+f (x0 , . . . , xm−2 , 1)] = f (x0 , . . . , xm−2 , 1).
2
52 PRELEGEREA 5. CODURI REED - MULLER

Exemplul 5.6 Să translatăm f = 01101110 ı̂ntr-un polinom boolean de 3 variabile.


Vom aplica pe etape formula din Propoziţia 5.1:
f = 0110 + [0110 + 1110]x2 = 0110 + 1000x2 =
= (01 + [01 + 10]x1 ) + (10 + [10 + 00]x1 )x2 = 01 + 11x1 + 10x2 + 10x1 x2 =
= (0 + [0 + 1]x0 ) + (1 + [1 + 1]x0 )x1 + (1 + [1 + 0]x0 )x2 + (1 + [1 + 0]x0 )x1 x2 =
= x0 + x1 + x2 + x0 x2 + x1 x2 + x0 x1 x2 .

Teorema 5.1 Spaţiul liniar Z2n , (n = 2m ) are o bază formată din toate monoamele
booleene:
1
xi (i = 0, 1, . . . , m − 1)
xi xj (i, j = 0, 1, . . . , m − 1, i 6= j)
..
.
x0 x1 . . . xm−1

Demonstraţie: Fiecare cuvânt de lungime n = 2m este o funcţie booleană de m nede-


terminate, care poate fi exprimată printr-un polinom boolean. Monoamele booleene
pot fi considerate ı̂n Z2n şi sunt evident liniar independente. În plus, deoarece pentru
k
fiecare k = 0, 1, . . . , m sunt Cm monoame de grad k, numărul lor total va fi
m
X
k
Cm = 2m = n, adică dimensiunea spaţiului liniar. 2
k=0

5.1.2 Coduri Reed - Muller


Definiţia 5.3 Se numeşte cod Reed - Muller de lungime n = 2m şi grad r
(0 ≤ r ≤ m), codul liniar RM(r, m) al tuturor cuvintelor binare de lungime n care
au - ca polinoame booleene - gradul maxim r.

Exemplul 5.7 RM(0, m) este format din toate polinoamele de grad cel mult 0,
adică 0 şi 1. Deci RM(0, m) este codul cu repetiţie de lungime 2m .

Exemplul 5.8 RM(1, m) are baza 1, x0 , . . . , xm−1 ; orice polinom de grad cel mult
1 se poate scrie ca sumă de o parte din aceste m+1 polinoame (liniar independente).
Deci, RM(1, m) este un (2m , m + 1) - cod liniar.
De exemplu, RM(1, 3) are matricea generatoare:
   
1 1 1 1 1 1 1 1 1
 x0   0 1 0 1 0 1 0 1 
G=

 
=

.
 x1   0 0 1 1 0 0 1 1 
x2 0 0 0 0 1 1 1 1
care generează codul Hamming extins (8, 4).
Similar, RM(1, 4) este un (16, 5) - cod liniar binar, iar RM(1, 5) este un (32, 6)
- cod liniar, folosit ı̂n 1969 de programul Mariner, după cum s-a menţionat anterior.

0 1 r
Propoziţia 5.2 RM(r, m) are k = Cm + Cm + . . . + Cm simboluri de informaţie.
5.1. DEFINIREA PRIN FUNCŢII BOOLEENE 53

Demonstraţie: Codul RM(r, m) are ca bază monoamele booleene


{1} ∪ {xi1 xi2 . . . xis |s ≤ r, 0 ≤ i1 < i2 < . . . < is < m}.
0 1 r
Numărul acestor monoame este Cm + Cm + . . . + Cm . Cum ele sunt liniar in-
dependente, vor forma liniile matricii generatoare G a codului; ori numărul de linii
este egal cu numărul de simboluri de informaţie. 2
Propoziţia 5.3 Dualul codului RM(r, m) este codul RM(m − r − 1, m).
Demonstraţie: Trebuie arătat că cele două coduri au baze ortogonale şi suma di-
mensiunilor lor este egală cu suma ı̂ntregului spaţiu.
A: Fie vi1 vi2 . . . vip (p ≤ r) un monom din baza codului RM(r, m) şi
vj1 vj2 . . . vjs (s ≤ m − r − 1) un monom din baza codului RM(m − r − 1, m).
Produsul lor are t (t ≤ r + m − r − 1 = m − 1) variabile distincte (variabilele comune
apar o singură dată), deci ponderea lui este (conform (∗)) 2m−t ≥ 2. Fiind un număr
par, rezultă că produsul scalar (adică suma ı̂n binar a termenilor) este 0.
B: Suma dimensiunilor celor două coduri este:
r
X m−r−1
X r
X m
X m
X
i i i i i
Cm + Cm = Cm + Cm = Cm = 2m = n. 2
i=0 i=0 i=0 i=r+1 i=0

Exemplul 5.9 RM(m − 2, m) este codul Hamming extins de lungime 2m . Într-


adevăr, codul său dual este RM(m − (m − 2) − 1, m) = RM(1, m), deci RM(m −
2, m) are matricea de control
   
1 1 1 1 1 ... 1 1 1 1
   
 x0   0 1 0 1 ... 0 1 0 1 
H=
 .. =
  .. .

 .   . 
xm 0 0 0 0 ... 1 1 1 1
Dacă adunăm prima linie la toate celelalte şi apoi o permutăm cu ultima linie,
se obţine altă matrice de control a codului:
 
1 0 1 0 ... 1 0 1 0
 
 1 1 0 0 ... 1 1 0 0 
 

H∼ .. 
.
 . 
 1 1 1 1 ... 0 0 0 0 
 
1 1 1 1 ... 1 1 1 1
După eliminarea ultimei linii şi coloane se obţine un (2m − 1, m) - cod ale cărui
coloane sunt nenule şi diferite două câte două, adică matricea de control H0 a unui
cod Hamming binar. Deci H este matricea de control a unui cod Hamming extins.
Codificarea mesajelor cu un cod R − M se realizează normal, ı̂nmulţind mesajul de
informaţie cu matricea generatoare. În acest fel biţii de informaţie devin coeficienţii
polinomului boolean corespunzător. De exemplu, ı̂n RM(1, m) codificarea celor
m + 1 caractere de informaţie este:
 
1
 
 x0 
(a1 , a2 , . . . , am+1 ) 
 ..  = a1 1 + a2 x0 + . . . + am+1 xm−1 .

 . 
xm−1
54 PRELEGEREA 5. CODURI REED - MULLER

5.2 Definirea recursivă a codurilor R - M


Să introducem o altă modalitate de definire a codurilor Reed - Muller, nu prin
polinoame booleene, ci prin construcţie recursivă.

Definiţia 5.4 Fie m ≥ 0 un număr natural. Se defineşte codul Reed - Muller


RM(r, m) de ordin r (0 ≤ r ≤ m) şi lungime n = 2m astfel:

• RM(0, m) = {00 . . . 0, 11 . . . 1}, RM(m, m) = Z2n .

• RM(p, m) = {[a, a + b]|a ∈ RM(p, m−1), b ∈ RM(p−1, m−1)}, 0 < p ≤ r.

S-a notat cu [x, y] un cuvânt de lungime 2m scris ca alăturare de două subcuvinte


de lungimi egale (2m−1 ), separate prin virgulă.

Exemplul 5.10 RM(0, 0) = {0, 1}


RM(0, 1) = {00, 11}, RM(1, 1) = {00, 01, 10, 11}
RM(0, 2) = {0000, 1111}, RM(2, 2) = Z24
RM(1, 2) = {(a, a + b)|a ∈ {00, 01, 10, 11}, b ∈ {00, 11}} =
= {0000, 0011, 0100, 0111, 1000, 1011, 1100, 1111}

În mod similar se poate da o definiţie recursivă a matricii generatoare G(r, m) pentru
codul RM(r, m).

• G(0, m) = (11 . . . 1);


à !
G(p, m − 1) G(p, m − 1)
• pentru 0 < p < m, G(p, m) = ;
0 G(p − 1, m − 1)
à !
G(m − 1, m)
• G(m, m) = .
00 . . . 01

Teorema 5.2 G(r, m) este matrice generatoare pentru codul RM(r, m).

Demonstraţie: Se verifică prin inducţie după r. 2

Exemplul 5.11 Să considerăm r = 2; atunci lungimea este n = 22 = 4 şi pentru


r = 1, 2 avem
à ! à !
G(1, 1) G(1, 1) G(1, 2)
G(1, 2) = G(2, 2) = .
0 G(0, 1) 0001

Din definiţie, matricile generatoare pentru RM(0, 1) şi RM(1, 1) sunt


à !
1 1
G(0, 1) = (11), G(1, 1) = , aşa că
0 1
 
  1 1 1 1
1 1 1 1  
   0 1 0 1 
G(1, 2) =  0 1 0 1  , G(2, 2) =  .
 0 0 1 1 
0 0 1 1
0 0 0 1
5.3. DEFINIREA GEOMETRICĂ A CODURILOR R-M 55

Propoziţia 5.4 RM(r − 1, m) ⊆ RM(r, m).

Demonstraţie: Să considerăm iniţial matricea

à !
G(1, m − 1) G(1, m − 1)
G(1, m) = .
0 G(0, m − 1)

Pentru că 1 este prima linie a lui G(1, m − 1), cuvântul [1, 1] formează prima
linie a matricii (G(1, m − 1) G(1, m − 1)). Deci RM(0, m) = {0, 1} este conţinut
ı̂n codul RM(1, m).
În general, deoarece G(r − 1, m − 1) este submatrice a lui G(r, m − 1) şi
G(r − 2, m − 1) este o submatrice a lui G(r − 1, m − 1), este evident că

à !
G(r − 1, m − 1) G(r − 1, m − 1)
G(r − 1, m) =
0 G(r − 2, m)

este o submatrice a lui G(r, m), deci RM(r −1, m) este subcod al lui RM(r, m).
2

Teorema 5.3 RM(r, m) are distanţa d = 2m−r .

Demonstraţie: Vom folosi o inducţie după r:


Pentru r = 0, evident (RM(0, m) fiind codul cu repetiţie, distanţa sa este
d = n = 2m ).
La pasul II, deoarece
RM(r, m) = {[x, x + y]|x ∈ RM(r, m − 1), y ∈ RM(r − 1, m − 1)} şi
RM(r − 1, m − 1) ⊆ RM(r, m − 1) (Propoziţia 5.4), rezultă x + y ∈ RM(r, m − 1).
Dacă x 6= y, conform ipotezei de inducţie w(x + y) ≥ 2m−1−r . Cum şi w(x) ≥
2m−1−r , putem scrie w([x + y, x]) = w(x + y) + w(x) ≥ 2m−r .
Dacă x = y, atunci [x, x + y] = [y, 0]; dar y ∈ RM(r − 1, m − 1) şi deci
w([y, 0]) = w(y) ≥ 2m−r .
Cum orice linie a matricii generatoare este cuvânt - cod, iar ultima linie are
ponderea exact 2m−r , demonstraţia este ı̂ncheiată. 2

5.3 Definirea geometrică a codurilor R-M


Codurile Reed - Muller mai pot fi definite şi geometric - prin folosirea spaţiilor
afine. Avantajul acestei reprezentări constă ı̂n modalitatea mai simplă de aplicare
a algoritmilor de decodificare.
Pentru uşurinţa descrierii am construit ı̂ntâi cazul tridimensional. De asemenea,
pentru a vedea echivalenţa cu definirea anterioară a codurilor Reed - Muller, vom
face permanent legătura cu polinoamele booleene (sau cu funcţiile lor caracteristice).
56 PRELEGEREA 5. CODURI REED - MULLER

5.3.1 Cazul 3 -dimensional


Spaţiul euclidian 3 - dimensional binar este mulţimea {(a, b, c)|a, b, c ∈ Z2 }. Spre
deosebire de spaţiul euclidian obişnuit - unde cele trei coordonate luau valori ı̂n R
- aici numărul punctelor este finit: numai 8. Ele pot fi listate, renotându-le astfel:
Punct Funcţie caracteristică
p0 = 000 00000001
p1 = 001 00000010
p2 = 010 00000100
p3 = 011 00001000
p4 = 100 00010000
p5 = 101 00100000
p6 = 110 01000000
p7 = 111 10000000
Liniile pot fi definite ı̂n geometria euclidiană prin expresii de forma
a + tb a, b ∈ Z23 , b 6= 0.
unde t este un parametru binar (t ∈ {0, 1}). Deci o linie ı̂n spaţiul 3 - dimensional
binar are numai 2 puncte: a, a + b. Invers, orice pereche de două puncte distincte
a, a0 formează o dreaptă, anume a + t(a0 − a). Putem astfel să considerăm liniile ca
fiind totalitatea celor C82 = 28 submulţimi de câte două puncte
{p0 , p1 }, {p0 , p2 }, . . . , {p6 , p7 }.
În mod similar, planele din geometria euclidiană sunt definite
a + t1 b + t2 c, a, b, c ∈ Z23 , b, c liniar independente,
unde t1 , t2 sunt parametri binari. Un plan este format deci din patru puncte:
a, a + b, a + c, a + b + c. Aparent, deşi numărul planelor ı̂n geometria euclidiană
binară 3 - dimensională ar trebui să fie C84 = 70, condiţia de liniar independenţă
reduce acest număr la 14:
Plan Funcţie caracteristică Polinom boolean
{p1 , p3 , p5 , p7 } 10101010 x0
{p2 , p3 , p6 , p7 } 11001100 x1
{p4 , p5 , p6 , p7 } 11110000 x2
{p0 , p2 , p4 , p6 } 01010101 1 + x0
{p0 , p1 , p4 , p5 } 00110011 1 + x1
{p0 , p1 , p2 , p3 } 00001111 1 + x2
{p1 , p2 , p5 , p6 } 01100110 x0 + x1
{p1 , p3 , p4 , p6 } 01011010 x0 + x2
{p2 , p3 , p4 , p5 } 00111100 x1 + x2
{p1 , p2 , p4 , p7 } 10010110 x0 + x1 + x2
{p0 , p3 , p4 , p7 } 10011001 1 + x0 + x1
{p0 , p2 , p5 , p7 } 10100101 1 + x0 + x2
{p0 , p1 , p6 , p7 } 11000011 1 + x1 + x2
{p0 , p3 , p5 , p6 } 01101001 1 + x0 + x1 + x2
5.3. DEFINIREA GEOMETRICĂ A CODURILOR R-M 57

În general, un plan este descris de ecuaţia generală

h 0 x0 + h 1 x1 + h 2 x2 = c

care defineşte un subspaţiu 2 - dimensional al lui Z23 .


Din faptul că orice dreaptă este o intersecţie de două plane, ea poate fi descrisă
printr-o pereche de două ecuaţii:

h0 x0 + h1 x1 + h2 x2 = c, h00 x0 + h01 x1 + h02 x2 = c0 .

Liniile şi planele sunt exemple de spaţii afine. Un spaţiu afin ı̂n Z23 este o mulţime
de forma
a + A = {a + b|b ∈ A}
unde a ∈ Z23 iar A este un subspaţiu liniar din Z23 . Dacă dimensiunea lui A este s,
numim acea mulţime un s - spaţiu afin.
Deci liniile sunt 1 - spaţii afine, iar planele: 2 - spaţii afine. Pentru fiecare punct
pi avem un 0 - spaţiu afin, şi - ı̂n sfârşit - există un 3 - spaţiu afin unic - Z23 .
Orice spaţiu afin L poate fi descris de un cuvânt binar fL = f7 . . . f1 f0 definit
prin
(
1 dacă pi ∈ L,
fi =
0 altfel

Cuvântul fL (sau funcţia booleană de trei variabile corespunzătoare) se numeşte


funcţia caracteristică a spaţiului afin L (tabelele anterioare listează aceste funcţii
pentru 0 şi 2 - spaţii afine).
Fiind date spaţiile afine L, L0 , intersecţia lor L∩L0 este caracterizată de produsul
logic fL fL0 .

Exemplul 5.12 Primele două plane din tabelul de sus se intersectează după linia
{p3 , p7 }. Produsul logic al funcţiilor lor caracteristice este
x0 x1 = 10001000,
care se poate verifica imediat ca fiind funcţia caracteristică a dreptei {p3 , p7 }.

5.3.2 Cazul m - dimensional


Vom prezenta construcţiile anterioare ı̂ntr-un cadru mai general, al geometriei eu-
clidiene m - dimensionale binare. Punctele (elementele lui Z2m ) pot fi renotate după
extensia binară a indicilor; mai clar, vom scrie Z2m = {p0 , p1 , . . . , p2m −1 } unde
p0 = 000 . . . 00, p1 = 000 . . . 01, p2 = 000 . . . 10, . . . , p2m −1 = 111 . . . 11.

Definiţia 5.5 Fie A un subspaţiu liniar r - dimensional al lui Z2m şi a ∈ Z2m .
Mulţimea
Aa = a + A = {a + b|b ∈ A}
se numeşte r - spaţiu afin ı̂n geometria euclidiană m - dimensională.
Un (m − 1) - spaţiu afin se numeşte ”hiperplan”.
58 PRELEGEREA 5. CODURI REED - MULLER

Dacă b1 , . . . , br este o bază a lui A, r - spaţiul afin Aa se notează

a + t 1 b1 + . . . + t r br .

El are 2r puncte (date de variantele de alegere ale parametrilor binari ti , 1 ≤ i ≤ r).


O altă modalitate de notare a r - spaţiilor afine se realizează cu ajutorul sis-
temelor de ecuaţii liniare: astfel, dacă A este definit ca mulţimea soluţiilor sistemului
HxT = 0T , atunci Aa este dat de mulţimea soluţiilor sistemului

HxT = HaT .

Acest sistem are m − r ecuaţii. În particular, un hiperplan este definit printr-o
singură ecuaţie:
h0 x0 + h1 x1 + . . . + hm−1 xm−1 = c.
Exemplul 5.13 Un 0 - spaţiu afin cuprinde un singur punct. Există deci 2m
0 - spaţii afine distincte: {p0 }, {p1 }, . . . , {p2m −1 }.
Similar, orice 1 - spaţiu afin (sau ”linie”) este o mulţime formată din două
puncte
a + tb ≡ {a, a + b},
şi invers, orice mulţime de două puncte distincte formează un 1 - spaţiu afin.
Există deci C22m 1 - spaţii afine.

Exemplul 5.14 Fie Pi spaţiul afin definit de ecuaţia xi = 1. Deci Pi este mulţimea
punctelor pk care au 1 pe poziţia i. De exemplu P0 = {p1 , p3 , . . . , p2m −1 }.
Fiecare Pi este un hiperplan şi - deoarece p2i are un singur 1 pe poziţia i şi 0 ı̂n
rest, putem scrie
Pi ≡ p2i + A
unde A este spaţiul liniar definit de ecuaţia xi = 0, (deci tot un hiperplan).

Propoziţia 5.5 Există 2(2m − 1) hiperplane.

Demonstraţie: Deoarece se pot construi 2m −1 ecuaţii cu coeficienţi binari şi variabile


x0 , x1 , . . . , xm−1 , Z2m are 2m − 1 subspaţii A de dimensiune m − 1. Fiecare din ele
2m
are 2m−1 puncte, deci vor exista m−1 = 2 spaţii afine modulo A. 2
2
Exemplul 5.15 Pentru i 6= j, intersecţia Pi ∩ Pj (mulţimea punctelor care au 1 pe
poziţiile i şi j) este un (m − 2) - spaţiu afin. Într-adevăr, dacă se ia a = p2i +2j ,
avem
Pi ∩ Pj ≡ a + A,
unde A este determinat de ecuaţiile xi = xj = 0 (deci A are dimensiunea m − 2).

Definiţia 5.6 Funcţia caracteristică a unui r - spaţiu afin L este cuvântul binar
fL = f2m −1 . . . f1 f0 definit prin
(
1 dacă pj ∈ L,
fj =
0 altfel
5.3. DEFINIREA GEOMETRICĂ A CODURILOR R-M 59

Funcţia caracteristică poate fi interpretată ca un polinom boolean fL (x0 , . . . , xm−1 ).


Din proprietăţile acestor polinoame rezultă
a0 a1 . . . am−1 ∈ L ⇐⇒ fL (a0 , a1 , . . . am−1 ) = 1
Observaţii:
1. Singurul m - spaţiu afin (Z2m ) are funcţia caracteristică 1 = 11 . . . 1.

2. Un hiperplan Pi are funcţia fPi = xi .

3. Fie L un hiperplan definit de ecuaţia h0 x0 + . . . hm−1 xm−1 = c. Funcţia sa


caracteristică va fi un polinom boolean de gradul 1, anume

fL (x0 , . . . , xm−1 ) = h0 x0 + . . . + hm−1 xm−1 + c + 1

Această relaţie rezultă din faptul că un punct a0 . . . am−1 este ı̂n plan dacă şi
numai dacă h0 a0 + . . . + hm−1 am−1 = c, adică fL (a0 , . . . , am−1 ) = 1.

4. Pentru două spaţii afine L, L0 , funcţia caracteristică a intersecţiei L ∩ L0 este


fL fL 0 .
Astfel, pentru Pi ∩ Pj (care este un (m − 2) - spaţiu afin) funcţia caracteristică
este xi xj .
Mai general, polinomul boolean xi1 xi2 . . . xis este funcţia caracteristică a unui
(m − s) - spaţiu afin.

Teorema 5.4 Funcţia caracteristică a unui r - spaţiu afin este un polinom boolean
de gradul m − r.

Demonstraţie: Un r - spaţiu afin L este definit ca soluţia sistemului de ecuaţii


HxT = cT , sau, detaliind,
m−1
X
hij xj = ci , 1 ≤ i ≤ m − r.
j=0

Aceste ecuaţii se pot scrie


m−1
X
hij xj + ci + 1 = 1, 1 ≤ i ≤ m − r.
j=0

Atunci, polinomul boolean de grad m − r


 
m−r
Y m−1
X
f (x0 , . . . , xm−1 ) =  hij xj + ci + 1
i=1 j=0

este funcţia caracteristică a lui L. 2


Definiţia 5.7 RM(r, m) este codul liniar generat de toate funcţiile caracteristice
ale spaţiilor afine de dimensiune cel puţin m − r ı̂n geometria euclidiană m - dimen-
sională peste Z2 .
60 PRELEGEREA 5. CODURI REED - MULLER

Faptul că aceasta coincide cu definiţia anterioară a codurilor Reed - Muller rezultă
din construţia spaţiilor afine: RM(r, m) conţine toate funcţiile caracteristice ale s
- spaţiilor afine, unde s ≥ m − r. Faptul că aceste funcţii generează tot spaţiul
RM(r, m) rezultă din Observaţia 4.
Exemplul 5.16 Codul RM(1, 3) este generat de funcţiile caracteristice ale tuturor
planelor. Orice astfel de funcţie este un polinom de trei variabile de gradul 1.
Codul RM(2, 3) este generat de funcţiile caracteristice ale tuturor planelor şi
liniilor. Cum o linie este intersecţia a două plane, funcţia sa caracteristică este
produsul a două polinoame de gradul 1, deci un polinom de gradul 2 (cuvânt - cod
din RM(2, 3)).

5.4 Exerciţii
5.1 Ce polinom boolean are ultima linie a tabelei de adevăr:
10100110 1010011010100110 0101001110011100

5.2 Determinaţi tabela de adevăr a polinomului boolean 1 + x0 + x1 x2 :


1. Ca funcţie de trei variabile;

2. Ca funcţie de patru variabile.

5.3 Demonstraţi afirmaţia (∗).

5.4 Găsiţi un (15, 5) - cod liniar binar corector de 3 erori (folosiţi un cod R − M
relaxat).

5.5 Fiind dat codul RM(1, 3), codificaţi toate mesajele de informaţie posibile.
Acelaşi lucru pentru codul RM(2, 3).

5.6 Demonstraţi Teorema 5.2

5.7 Construiţi matricile generatoare G(1, 3), G(2, 3), G(r, 4), r = 0, 1, 2.

5.8 Demonstraţi că G(r, m) are k + 1 linii, unde k este dat de Propoziţia 5.2

5.9 Calculaţi numărul de 2 - spaţii afine ı̂n geometria euclidiană peste Z2m .

5.10 Este orice funcţie booleană funcţia caracteristică a unui anumit spaţiu afin ?
Caracterizaţi astfel de funcţii.

5.11 Orice funcţie caracteristică a unui (r + 1) - spaţiu afin aparţine codului dual
lui RM(r, m).

5.12 Să se arate că RM(2, 5) este auto - dual. Să se determine toate codurile
RM auto - duale.
Prelegerea 6

Decodificarea codurilor Reed -


Muller

Avantajul principal al codurilor Reed - Muller constă ı̂n facilitatea decodificării,


facilitate bazată pe o tehnică diferită de cea de până acum. Această tehnică, numită
decodificare majoritară nu apelează la ideea de sindrom, ci corectează direct biţii
modificaţi, folosind diverse proprietăţi ale cuvântului recepţionat.

6.1 Decodificarea majoritară


Să prezentăm pe scurt principiile generale ale decodificării majoritare. Vom ı̂ncepe
cu un exemplu foarte simplu:
Exemplul 6.1 Fie codul binar cu repetiţie de lungime 2n + 1 :
C = {00 . . . 0}, 11
| {z . . . 1}}.
| {z
2n+1 2n+1
Ca sistem de ecuaţii de control se poate lua


 x1 + x2 = 0


 x1 + x3 = 0
 ..



.

x1 + x2n+1 = 0
Dacă se recepţionează cuvântul y = x + e, la ı̂nlocuirea lui ı̂n sistem, acesta devine
y1 + yi = e1 + ei , 2 ≤ i ≤ 2n + 1.
Dacă mai mult de n din cele 2n expresii y1 + yi iau valoarea 1, aceasta ı̂nseamnă
că:
• Au apărut mai puţin de n erori, printre care şi pe prima poziţie (e1 = 1), sau
• Au apărut mai mult de n erori, dar nu pe prima poziţie (e1 = 0).
Din aceste două variante, prima este mai probabilă. Deci valoarea majoritară pe
care o iau cele n valori y1 + yi va fi valoarea lui e1 .

Definiţia 6.1 Fie An,k un cod liniar. Un set de ecuaţii de control pentru An,k este
ortogonal pe mulţimea de poziţii P ⊂ {1, 2, . . . , n} dacă şi numai dacă:

61
62 PRELEGEREA 6. DECODIFICAREA CODURILOR REED - MULLER

1. ∀i ∈ P , termenul xi apare (cu coeficient nenul) ı̂n fiecare ecuaţie;

2. ∀i 6∈ P , termenul xi apare cel mult ı̂ntr-o ecuaţie.

Decodificarea se realizează caracter cu caracter, după următorul procedeu:


Fie a = a1 . . . an cuvântul recepţionat şi i (1 ≤ i ≤ n) o poziţie.
Se construieşte mulţimea maximală de ecuaţii de control ortogonale pe poziţia
i.
Fie ei valoarea obţinută ı̂n majoritatea acestor ecuaţii. Al i-lea caracter de-
codificat este ai + ei .

Exemplul 6.2 Fie dualul (15, 11) - codului Hamming cu matricea de control
 
0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 
H=



 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Pentru fiecare pereche de coloane distincte din H există o a treia coloană astfel ı̂ncât
suma celor trei coloane este 0. Deci, fiecare cuvânt de pondere 3 al codului Hamming
dă o ecuaţie de control cu trei termeni pentru codul dual; ı̂n acest fel se obţine pentru
fiecare caracter xi câte un sistem de 7 ecuaţii ortogonale pe poziţia i. Astfel,
pentru x1 ele sunt: x1 = x2 + x3 = x4 + x5 = x6 + x7 = x8 + x9 = x10 + x11 =
x12 + x13 = x14 + x15 ;
pentru x2 : x2 = x1 + x3 = x4 + x6 = x5 + x7 = x8 + x10 = x9 + x11 = x12 + x14 =
x13 + x15 , etc.
Codul are distanţa d = 8; deci poate corecta maxim 3 erori.
Dacă ı̂n mesajul primit y apar cel mult 3 erori, atunci un sistem de ecuaţii
ortogonal pe x1 va avea cel mult trei ecuaţii care să dea pentru x1 o valoare greşită
şi cel puţin cinci cu valoarea calculată corect. Valoarea găsită majoritar va fi cea ı̂n
care se decodifică primul caracter.
Procedeul se reia pentru y2 , y3 , . . ..
Să presupunem de exemplu că s-a recepţionat mesajul 001011110101011. Pentru
decodificarea primului caracter vom calcula sumele
0 + 1, 0 + 1, 1 + 1, 1 + 0, 1 + 0, 1 + 0, 1 + 1.
Se obţin 5 valori de 1 şi două de 0; deci, primul simbol este 1.
Procedând similar pentru fiecare (folosind ecuaţiile ortogonale corespunzătoare
fiecărei poziţii), se ajunge la cuvântul 10101011010101010.
Această metodă este nu numai uşor de implementat, dar are adesea şi alte completări
(gen ”bitul de testare a parităţii”) care fac posibilă corectarea mai multor erori.
În această prelegere vom construi trei algoritmi de decodificare a codurilor R −
M . Doi din ei sunt bazaţi pe modurile de reprezentare (geometric şi algebric) ale
acestor coduri; al treilea este un algoritm bzat pe definirea recursivă a codurilor
R − M şi este prezentat numai pentru cazul r = 1. Toţii algoritmii sunt foarte uşor
de implementat, utilizarea unuia sau a altuia depinzând de criterii particulare ı̂n
alegerea parametrilor codului.
6.2. ALGORITM GEOMETRIC DE DECODIFICARE MAJORITARĂ 63

6.2 Algoritm geometric de decodificare majori-


tară
Deoarece distanţa unui cod RM(r, m) este d = 2m−r , el va fi capabil să corecteze
până la 2m−r−1 − 1 erori. În cele ce urmează vom presupune că s-a recepţionat
cuvântul y = y2m −1 . . . y1 y0 , ı̂n care au fost modificate maxim 2m−r−1 − 1 poziţii.
Problema este de a determina pentru fiecare i (0 ≤ i ≤ 2m − 1) dacă bitul yi trebuie
corectat sau nu. Sau - altfel spus - de a vedea dacă poziţia lui y corespunzătoare 0
- spaţiului afin {pi } trebuie sau nu corectată.
Pentru a folosi proprietăţile codurilor Reed - Muller exprimate de spaţiile afine,
vom reformula totul ı̂n maniera următoare:
Pentru fiecare s - spaţiu afin L (0 ≤ s ≤ r + 1) vom cerceta dacă poziţiile
cuvântului recepţionat y corespunzătoare punctelor lui L (adică acei biţi yi pentru
care pi ∈ L) sunt modificaţi sau nu.
Vom da ı̂ntâi câteva noţiuni şi notaţii ajutătoare pentru a simplifica demons-
traţiile.

Definiţia 6.2 Fie G un grup, A un subgrup al său şi x ∈ G. Se numeşte ”subgrup


modulo A” al lui G mulţimea

Ax = x + A = {x + a|a ∈ A}.

Lema 6.1 Subgrupurile unui grup modulo un subgrup arbitrar A, au următoarele


proprietăţi:
1. ∀a ∈ G, ∃x ∈ G, a ∈ Ax ;
2. Dacă x 6= y atunci Ax ∩ Ay = ∅ sau Ax = Ay ;
3. Dacă a, b ∈ Ax atunci a − b ∈ A;
4. ∀x, card(Ax ) = card(A).

Demonstraţie: Este lăsată ca exerciţiu.


Teorema principală a acestui paragraf este:

Teorema 6.1 Orice s - spaţiu afin din geometria binară m - dimensională este
conţinut ı̂n exact 2m−s − 1 (s + 1) - spaţii afine distincte. În plus, orice punct din
afara lui L este exact ı̂n unul din aceste (s + 1) - spaţii afine.

Demonstraţie: I: Să arătăm ı̂ntâi că orice s - subspaţiu liniar A ⊆ Z2m este conţinut
ı̂n exact 2m−s − 1 subspaţii distincte de dimensiune s + 1.
Orice (s + 1) - spaţiu care conţine A este de forma

A = A + tb ≡ {a + tb|a ∈ A, t = 0, 1},

unde b 6∈ A este un punct arbitrar fixat. Aceasta rezultă imediat din faptul că orice
bază a lui A poate fi extinsă la o bază a lui A.
Pentru două puncte b, b0 6∈ A, spaţiile liniare A + tb şi A + tb0 coincid dacă şi
numai dacă b şi b0 sunt ı̂n acelaşi subspaţiu modulo A (Lema 6.1).
64 PRELEGEREA 6. DECODIFICAREA CODURILOR REED - MULLER

2m
Din aceeaşi lemă rezultă că sunt subspaţii modulo A. Unul este chiar A, iar
2s
celelalte conţin numai puncte dinafara lui A. Deci există 2m−s − 1 spaţii distincte
A + tb pentru b 6∈ A.
II: Orice s - spaţiu afin L ≡ a + A (dimA = s) este conţinut ı̂n 2m−s − 1
(s + 1) - spaţii afine distincte de forma a + A.
Cu I, orice spaţiu care conţine L este de forma b + A. Deoarece L este de forma
a + A, rezultă că a ∈ b + A, deci a − b ∈ A, de unde rezultă (Lema 6.1) că punctele
a, b sunt ı̂n acelaşi subspaţiu modulo A.
III: Orice punct b 6∈ L = a + A este ı̂ntr-un (s + 1) - spaţiu afin care conţine L,
anume a + A unde A = A + t(b − a).
Într-adevăr, alegând t = 1 şi 0 ∈ A, avem b = a + [0 + (b − a)].
Pentru a verifica că A are dimensiunea s+1 este suficient de arătat că b − a 6∈ A;
dacă prin absurd b − a ∈ A, atunci a + (b − a) = b ∈ A, contradicţie.
În final, ar mai trebui arătat că acest (s + 1) - spaţiu afin care ı̂l conţine pe
b este unic. Orice (s + 1) - spaţiu afin care conţine a + A are forma a + A unde
dim(A) = s + 1. Dacă b ∈ a + A, atunci b − a ∈ A, deci A conţine spaţiul liniar
A + (b − a). Cum ambele spaţii au aceeaşi dimensiune (s + 1), ele coincid. 2

Corolarul 6.1 Dacă numărul de erori din cuvântul recepţionat este t < 2m−r−1 ,
atunci pentru fiecare s - spaţiu afin L (0 ≤ s ≤ r) majoritatea (s + 1) - spaţiilor
afine care conţin L au aceeaşi paritate a erorilor ca L.

Demonstraţie: Conform Teoremei 6.1, L este conţinut ı̂n 2m−r − 1 > 2t


(s + 1) - spaţii afine L0 , fiecare L0 fiind unic determinat de un punct din afara lui L.
Să considerăm toate punctele pi 6∈ L pentru care caracterul yi este modificat. Lor
le corespund cel mult t (s + 1) - spaţii afine L0 . Toate celelalte spaţii L0 rămase au
proprietatea că nu conţin nici un punct pi din afara lui L pentru care yi este greşit.
Deci aceste spaţii au aceeaşi paritate de erori ca şi L, iar numărul lor este cel puţin
(2m−r − 1) − t > t, deci majoritar. 2
Algoritm de decodificare pentru RM(r, m):
1. (Iniţializare): La recepţionarea unui cuvânt a ∈ Z2m se consideră toate
(r + 1) - spaţiile afine L. Un spaţiu L se numeşte impar dacă afL = 1 (fL este
funcţia caracteristică a spaţiului afin L). În caz contrar L este par.
2. (Inducţie): Pentru fiecare s = r, r − 1, . . . , 0 unde (s + 1) - spaţiile afine
au fost definite drept pare sau impare, se consideră toate s - spaţiile afine. Un
s - spaţiu afin L este par dacă majoritatea (s + 1) - spaţiilor afine care conţin
pe L sunt pare; altfel L este impar.
3. (Final): Pentru i = 0, 1, . . . , 2m − 1, se corectează ai dacă şi numai dacă
0 - spaţiul afin {pi } este impar.
6.2. ALGORITM GEOMETRIC DE DECODIFICARE MAJORITARĂ 65

Exemplul 6.3 Să considerăm RM(1, 3) ı̂n care s-a recepţionat cuvântul
a = 11101010.

Tabelul 6.1: Primul pas al decodificării 11101010

Plan Paritate Plan Paritate


{p1 , p3 , p5 , p7 } par {p1 , p3 , p4 , p6 } impar
{p2 , p3 , p6 , p7 } impar {p2 , p3 , p4 , p5 } par
{p4 , p5 , p6 , p7 } impar {p0 , p3 , p4 , p7 } par
{p0 , p2 , p4 , p6 } impar {p0 , p2 , p5 , p7 } par
{p0 , p1 , p4 , p5 } par {p0 , p1 , p6 , p7 } impar
{p0 , p1 , p2 , p3 } par {p1 , p2 , p4 , p7 } par
{p1 , p2 , p5 , p6 } impar {p0 , p3 , p5 , p6 } impar

Tabelul 6.2: Al doilea pas al decodificării 11101010

Linie Paritate Linie Paritate Linie Paritate


{p0 , p1 } par {p1 , p5 } par {p3 , p5 } par
{p0 , p2 } par {p1 , p6 } par {p3 , p6 } impar
{p0 , p3 } par {p1 , p7 } par {p3 , p7 } par
{p0 , p4 } par {p2 , p3 } par {p4 , p5 } par
{p0 , p5 } par {p2 , p4 } par {p4 , p6 } impar
{p0 , p6 } impar {p2 , p5 } par {p4 , p7 } par
{p0 , p7 } par {p2 , p6 } impar {p5 , p6 } impar
{p1 , p2 } par {p2 , p7 } par {p5 , p7 } par
{p1 , p3 } par {p3 , p4 } par {p6 , p7 } impar
{p1 , p4 } par

La primul pas trebuie să decidem care plane sunt pare şi care sunt impare. De
exemplu planul L = {p1 , p3 , p5 , p7 } este par deoarece afL = 11101010·10101010 = 0
(vezi Prelegerea V , Paragraful 5.3.1). Se obţine Tabelul 6.1.
La pasul următor trebuie să decidem paritatea fiecărei linii.
De exemplu, linia {p0 , p1 } este conţinută ı̂n trei plane:
{p0 , p1 , p4 , p5 } (par), {p0 , p1 , p2 , p3 } (impar), {p0 , p1 , p6 , p7 } (impar).
deci, prin majoritate, {p0 , p1 } este pară. În mod similar se efectuează calculele
pentru toate liniile, obţinându-se Tabelul 6.2.
Se poate trece acum la corectarea erorilor. RM(1, 3) poate corecta maxim
m−r−1
2 − 1 = 23−1−1 − 1 = 1 erori. {p0 } este conţinut ı̂n şapte linii, şase pare şi una
impară, deci a0 este corect, etc. Singurul bit care trebuie corectat este a6 deoarece
{p6 } este ı̂n şapte linii impare. Cuvântul trimis a fost deci 10101010.

Algoritmul de decodificare se bazează pe următoarea observaţie:


66 PRELEGEREA 6. DECODIFICAREA CODURILOR REED - MULLER

Fie codul RM(r, m) şi a ∈ Z2m un cuvânt recepţionat.

Un (r + 1) - spaţiu afin L este par ⇐⇒ afL = 0.

Într-adevăr, dacă a este cuvânt - cod, atunci afL = 0 (Prelegerea V, Exerciţiul


5.11). Acum, dacă au fost perturbate un număr par de caractere din a, cores-
punzătoare unor puncte din L, valoarea produsului scalar afL nu se modifică. Pentru
un număr impar de poziţii perturbate, valoarea produsului scalar este 1.

6.3 Algoritm algebric de decodificare majoritară


În afară de algoritmul prezentat anterior, care foloseşte reprezentarea geometrică a
codurilor R − M , se poate da şi o variantă algebrică de decodificare, bazată direct
pe definiţia decodificării majoritare.
1 r
În cele ce urmează să considerăm un cod RM(r, m) fixat şi k = 1+Cm +. . .+Cm
m
numărul simbolurilor de informaţie,
 
n = 2 - lungimea codului.
x0
 
 x1 

În matricea Um,n =  ..   care conţine pe coloane toate elementele spaţiului
 . 
xm−1
liniar Z2m , vom nota cu ui (0 ≤ i ≤ m − 1) coloanele care reprezintă baza (naturală)
a lui Z2m . Deci, orice coloană wj , 0 ≤ j ≤ n − 1 din Z2m se poate scrie

m−1
X
wj = tij ui , tij ∈ {0, 1}.
i=0

Orice cuvânt v ∈ Z2n poate fi considerat indicatorul unei mulţimi de cuvinte din Z2m :
acele coloane din U care corespund poziţiilor din v unde se află valoarea 1.

Exemplul 6.4 Pentru orice j = 0, . . . , n − 1, cuvântul ej = 00 . . . 010 . . . 0 cu 1 pe


poziţia j corespunde coloanei cuvântului de pe coloana j din U ;
Cuvântul 1 = 11 . . . 1 corespunde ı̂ntregului spaţiu Z2m .

Propoziţia 6.1
m−1
Y
ej = [xi + (1 + tij )1] , ∀j, 0 ≤ j ≤ 2m − 1.
i=0

Demonstraţie: Să arătăm ı̂ntâi că xi + (1 + tij )1 reprezintă indicatorul acelor coloane
din U care au aceeaşi componentă i ca şi coloana wj .
Într-adevăr:

1. Dacă tij = 1, atunci xi + (1 + tij )1 = xi + (1 + 1)1 = xi care este indicatorul


mulţimii coloanelor cu 1 (ca şi wj ) pe linia i.
6.3. ALGORITM ALGEBRIC DE DECODIFICARE MAJORITARĂ 67

2. Dacă tij = 0, atunci xi + (1 + tij )1 = xi + 1 care are componentele lui xi cu 0


şi 1 permutate, fiind deci indicatorul mulţimii coloanelor care au 0 (ca şi wj )
pe linia i.
m−1
Y
Cuvântul [xi + (1 + tij )1] reprezintă indicatorul mulţimii acelor coloane din ma-
i=0
tricea U care au toate componentele egale cu cele ale coloanei wj . Cum coloanele
matricii U sunt distincte, această mulţime este chiar {wj }, al cărei indicator este ej .
2
Fie mesajul de informaţie a1 a2 . . . ak ∈ Z2k . Ele se codifică cu ajutorul (2m , k) -
codului Reed - Muller ı̂n cuvântul - cod
f = (f0 , f1 , . . . , fn−1 ) =
a1 1 + a2 x0 + . . . + am+1 xm−1 + am+2 x0 x1 + . . . + ak xm−r xm−r+1 . . . xm−1 .
Putem enunţa acum rezultatul principal pe baza căruia se construieşte algoritmul
algebric de decodificare majoritară al codurilor R − M .
Teorema 6.2 Pentru fiecare componentă as din mesajul de informaţie care se ı̂n-
mulţeşte - la codificare - cu un produs de forma xi1 xi2 . . . xir , există 2m−r sume
disjuncte (cu termeni diferiţi) conţinând fiecare 2r componente ale cuvântului - cod
corespunzător f = f0 f1 . . . fn−1 , care sunt toate egale cu as .
Demonstraţie: Ţinând cont de Propoziţia 6.1 şi de faptul că e0 , e1 , . . . , en−1 consti-
tuie de asemenea o bază pentru Z2n , putem scrie:
n−1
X n−1
X m−1
Y
f = (f0 , f1 , . . . , fn−1 ) = fj e j = fj [xi + (1 + tij )1].
j=0 j=0 i=0
Prin urmare, ca un produs de forma xi1 . . . xiu să fie ı̂n această sumă, trebuie ca
tij = 0 pentru i 6∈ {i1 , i2 . . . , iu }. Dacă notăm
m−1
X
C(i1 , . . . , ij ) = {p| p = tip 2i , tip = 0 dacă i 6∈ {i1 , . . . , ij }} =
i=0
= {p| p = ti1 p 2i1 + ti2 p 2i2 + . . . + tij p 2ij , tip ∈ {0, 1}},
vom avea
 
X X
f = (f0 , f1 , . . . , fn−1 ) =  fj  xi1 xi2 . . . xiu
i1 <i2 <...<iu j∈C(i1 ,...,iu )

Pe de-altă parte,

f = (f0 , . . . , fn−1 ) = a1 1+a2 x0 +. . .+am+1 xm−1 +am+2 x0 x1 +. . .+ak xm−r . . . xm−1 .

Prin identificare, rezultă că elementul as , coeficient al produsului xi1 xi2 . . . xir este
X
as = fj (1)
j∈C(i1 ,...,ir )

Fie z ∈
6 {i1 , . . . , ir }. Deoarece baza codului RM(r, m) nu conţine monoame de
forma xi1 . . . xir xir+1 , vom obţine prin codificare
68 PRELEGEREA 6. DECODIFICAREA CODURILOR REED - MULLER

X
fj = 0 (2)
j∈C(i1 ,...,ir ,z)

Însă, C(i1 , . . . , ir , z) = C(i1 , . . . , ir ) ∪ [C(i1 , . . . , ir ) + 2z ]


unde s-a notat C + α = {x + α| x ∈ C}. Într-adevăr, putem scrie

C(i1 , . . . , ir , z) = {j| j = ti1 j 2i1 + . . . + tir j 2ir + tzj 2z } =


= {j| j = ti1 j 2i1 + . . . + tir j 2ir } ∪ {j| j = ti1 j 2i1 + . . . + tir j 2ir + 2z } =
= C(i1 , . . . , ir ) ∪ [C(i1 , . . . , ir ) + 2z ],

cele două mulţimi ale reuniuniiXfiind disjuncte.X


Deci relaţia (2) se scrie fj + fj = 0 şi - ţinând cont de (1),
j∈C(i1 ,...,ir ) j∈C(i1 ,...,ir )+2z
avem
X
as + fj = 0 (3)
j∈C(i1 ,...,ir )+2z

Din (1) şi (3) rezultă următoarea afirmaţie: dacă m = r + 1, pentru orice simbol de
informaţie as ı̂nmulţit la codificare cu un produs de forma xi1 . . . xir există 2m−r = 2
sume disjuncte ((1) şi (3)), fiecare de câte 2r componente ale lui f .
Aceste două relaţii se numesc relaţii de determinare a componentei as .
Fie acum t1 , t2 6∈ {i1 , . . . , ir }. Deoarece baza codului nu are produse de forma
xi1 . . . xir xir+1 xir+2 , vom avea
X
fj = 0. (4)
j∈C(i1 ,...,ir ,t1 ,t2 )

Dar C(i1 , . . . , ir , t1 , t2 ) = C(i1 , . . . , ir ) ∪ [C(i1 , . . . , ir ) + 2t1 ] ∪ [C(i1 , . . . , ir ) + 2t2 ] ∪


∪[C(i1 , . . . , ir ) + 2t1 + 2t2 ].
DeciX(4) se descompune X ı̂n X X
fj + fj + fj + fj = 0
j∈C(i1 ,...,ir ) j∈C(i1 ,...,ir )+2t1 j∈C(i1 ,...,ir )+2t2 j∈C(i1 ,...,ir )+2t1 +2t2
X
ceea ce, ţinând cont de (1) şi (3) devine as + as + as + fj = 0
j∈C(i1 ,...,ir )+2t1 +2t2
deci
X
as = fj (5)
j∈C(i1 ,...,ir )+2t1 +2t2

Am arătat astfel că, dacă m = r + 2, atunci există 2m−r = 22 = 4 sume ((1), de


două ori (3) pentru t1 respectiv t2 , şi (5)) care dau pe as , fiecare sumă conţinând 2r
componente ale lui f . Deci, pentru as există ı̂n acest caz patru relaţii de determinare.
Teorema rezultă ı̂n continuare printr-un procedeu de inducţie finită. 2
Să vedem cum se foloseşte Teorema 6.2 la decodificarea majoritară a codurilor
Reed - Muller:
După cum s-a văzut, pentru fiecare componentă as corespunzătoare unui produs
de forma xi1 . . . xir există 2m−r sume disjuncte, conţinând fiecare 2r componente ale
lui f care - ı̂n absenţa erorilor - vor fi toate egale cu as .
6.4. DECODIFICAREA CODURILOR RM(1, M ) 69

Deoarece sumele sunt disjuncte (deci termenii lor sunt elemente diferite ale
cuvântului - cod), orice eroare va afecta o singură relaţie de determinare a lui as .
Prin urmare, dacă apar ı̂n transmiterea cuvântului - cod f cel mult 2m−r−1 − 1 erori
independente, putem determina - prin majoritate - pe as , identificându-l cu valoarea
a jumătate plus unu din relaţiile de determinare corespunzătoare.
După ce se determină ı̂n acest mod coeficienţii tuturor produselor xi1 . . . xir , se
scade din vectorul recepţionat combinaţia liniară

ap x0 . . . xr−1 + . . . + ak xm−r . . . xm−1 .

În acest fel problema se reduce la decodificarea ı̂ntr-un cod de ordin r − 1 şi lungime
2m ; procedeul este similar, fiind determinate aici componentele de informaţie care
se codifică prin ı̂nmulţirea cu produsele de forma xj1 . . . xjr−1 , ş. a. m. d.

Exemplul 6.5 Fie codul RM(2, 4). El are lungimea n = 16, ordinul r = 2, k =
1 + C41 + C42 = 11 simboluri de informaţie şi n − k = 5 simboluri de control. Deci
este un (16, 11) - cod liniar.
Orice mesaj de informaţie (a1 , a2 , . . . , a11 ) ∈ Z211 se codifică ı̂n cuvântul
f = (f0 , . . . , f15 ) = a1 1 + a2 x0 + a3 x1 + a4 x2 + a5 x3 + a6 x0 x1 + a7 x0 x2 + a8 x0 x3 +
a9 x1 x2 + a10 x1 x3 + a11 x2 x3 .
Să stabilim de exemplu relaţiile de determinare pentru a9 , care se codifică prin
ı̂nmulţire cu x1 x2 . Trebuiesc calculate mulţimile:
C(1, 2) = {j| j = t1j 21 + t2j 22 } = {0, 2, 4, 6}
C(1, 2) + 20 = {1, 3, 5, 7}
C(1, 2) + 23 = {8, 10, 12, 14}
C(1, 2) + 20 + 23 = {9, 11, 13, 15}.
Deci relaţiile de determinare corespunzătoare lui a9 devin

a9 = f0 + f2 + f4 + f6 a9 = f1 + f3 + f5 + f7
a9 = f8 + f10 + f12 + f14 a9 = f9 + f11 + f13 + f15

Dacă intervine o eroare ı̂n timpul transmiterii cuvântului - cod f , va fi afectată o


singură relaţie de determinare, celelalte trei relaţii dând valoarea corectă a lui a9 .
După ce s-a determinat valorile a6 , a7 , a8 , a9 , a10 , a11 , se trece la etapa a doua a
decodificării, scăzând din cuvântul recepţionat combinaţia

a6 x0 x1 + a7 x0 x2 + a8 x0 x3 + a9 x1 x2 + a10 x1 x3 + a11 x2 x3

şi aplicând cuvântului obţinut procedeul de corectare a erorilor pentru codul R − M


de ordinul r − 1 = 1.

6.4 Decodificarea codurilor RM(1, m)


Pentru cazul r = 1 se poate da şi un alt algoritm de decodificare, extrem de eficient.
El foloseşte transformarea Hadamard pentru aflarea celui mai apropiat cuvânt - cod.
Vom da iniţial câteva noţiuni ajutătoare.
70 PRELEGEREA 6. DECODIFICAREA CODURILOR REED - MULLER

Definiţia 6.3 Fie Am,n , Bp,q două matrici. Se defineşte produsul Kronecker A × B
ca fiind matricea Cmp,nq = [aij B].

Acest produs este evident asociativ şi necomutativ; el va fi utilizat pe larg şi ı̂n alte
prelegeri.
à ! à !
1 1 1 0
Exemplul 6.6 Fie H = , I2 = . Atunci
1 −1 0 1
   
1 1 0 0 1 0 1 0
 1 −1 0 0   0 1 0 1 
   
I2 × H =  , H × I2 =  .
 0 0 1 1   1 0 −1 0 
0 0 1 −1 0 1 0 −1
Se consideră şirul de matrici definit
i
Hm = I2m−i × H × I2i−1 , i = 1, 2, . . .

unde H este matricea (Hadamard) definită ı̂n Exemplul 6.6.

Exemplul 6.7 Fie m = 2. Atunci


H21 = I2 × H × I1 = I2 × H, H22 = I1 × H × I2 = H × I2 .

Exemplul 6.8 Fie m = 3. Atunci:


 
1 1 0 0 0 0 0 0

 1 −1 0 0 0 0 0 0 

 
 0 0 1 1 0 0 0 0 
 
 0 0 1 −1 0 0 0 0 
1  
H3 = I4 × H × I1 =  ,

 0 0 0 0 1 1 0 0 

 0 0 0 0 1 −1 0 0 
 
 
 0 0 0 0 0 0 1 1 
0 0 0 0 0 0 1 −1
 
1 0 1 0 0 0 0 0

 0 1 0 1 0 0 0 0 

 
 1 0 −1 0 0 0 0 0 
 
 0 1 0 −1 0 0 0 0 
2  
H3 = I2 × H × I2 =  ,

 0 0 0 0 1 0 1 0 

 0 0 0 0 0 1 0 1 
 
 
 0 0 0 0 1 0 −1 0 
0 0 0 0 0 1 0 −1
6.4. DECODIFICAREA CODURILOR RM(1, M ) 71

 
1 0 0 0 1 0 0 0
 
 0 1 0 0 0 1 0 0 
 
 0 0 1 0 0 0 1 0 
 
 0 0 0 1 0 0 0 1 
3  
H3 = I1 × H × I4 =  .

 1 0 0 0 −1 0 0 0 

 0 1 0 0 0 −1 0 0 
 
 
 0 0 1 0 0 0 −1 0 
0 0 0 1 0 0 0 −1
Modalitatea recursivă de construcţie a codurilor RM(r, m) (Prelegerea V , secţiunea
5.2) sugerează existenţa unui algoritm similar de decodificare. Acest algoritm există
numai pentru RM(1, m) şi ı̂l prezentăm fără a demonstra corectitudinea lui.
Algoritm de decodificare a codurilor RM(1, m):
Fie a ∈ Z2m cuvântul recepţionat şi G(1, m) matricea generatoare a codului.

1. Se ı̂nlocuieşte 0 cu −1 ı̂n a; fie a0 noul cuvânt;

2. Se calculează a1 = a0 Hm
1
, i
ai = ai−1 Hm , 2 ≤ i ≤ m;

3. Se determină poziţia j a celei mai mari componente (ı̂n valoare absolută)


a lui am .
Fie v(j) ∈ Z2m reprezentarea binară a lui j (ı̂ncepând cu biţii cei mai
nesemnificativi). Cuvântul decodificat este:
(1, v(j)) dacă a j - a componentă a lui am este pozitivă,
(0, v(j)) dacă a j - a componentă a lui am este negativă.

Exemplul 6.9 Fie m = 3 şi G(1, 3) matricea generatoare a codului RM(1, 3). Să
presupunem că s-a recepţionat cuvântul a = 10101011.
Primul pas al algoritmului transformă acest cuvânt ı̂n
a0 = (1, −1, 1, −1, 1, −1, 1, 1). Se calculează apoi:
a1 = a0 H31 = (0, 2, 0, 2, 0, 2, 2, 0)
a2 = a1 H32 = (0, 4, 0, 0, 2, 2, −2, 2)
a3 = a2 H33 = (2, 6, −2, 2, −2, 2, 2, −2).
Cea mai mare compomentă a lui a3 este 6 pe poziţia 1. Cum v(1) = 100 şi 6 > 0,
rezultă că a fost trimis cuvântul 1100.
Dacă s-a recepţionat cuvântul a = 10001111, atunci a0 = (1, −1, −1, −1, 1, 1,
1, 1) şi
a1 = a0 H31 = (0, 2, −2, 0, 2, 0, 2, 0),
a2 = a1 H32 = (−2, 2, 2, 2, 4, 0, 0, 0),
a3 = a2 H33 = (2, 2, 2, 2, −6, 2, 2, 2).
Cea mai mare componentă a lui a3 este −6 aflată pe poziţia 4. Deoarece v(4) = 001
şi −6 < 0, mesajul transmis este 0001.
72 PRELEGEREA 6. DECODIFICAREA CODURILOR REED - MULLER

6.5 Exerciţii
6.1 În codul Hamming (15, 11) să se decodifice mesajele
111100000000000, 011101000111001.

6.2 Demonstraţi Lema 6.1.

6.3 Să se decodifice cuvântul 01111100 ı̂n RM(1, 3). Verificaţi corectitudinea de-
codificării.

6.4 Să se decodifice 0111100 ı̂n RM(2, 3).

6.5 Să se scrie toate relaţiile de determinare din codul RM(2, 4).

6.6 Aceeaşi problemă pentru codul RM(1, 3).

6.7 Să se decodifice 1111111011111111 ı̂n RM(2, 4).

6.8 Arătaţi că orice hiperplan L ı̂n geometria euclidiană peste Z2m are drept com-
plement Z2m \ L tot un hiperplan.

6.9 În codul RM(1, 3), să se decodifice cuvintele


01011110, 01100111, 00010100, 11001110.

6.10 Să se calculeze H4i pentru i = 1, 2, 3, 4.

6.11 În codul RM(1, 4), să se decodifice cuvintele:


1011011001101001, 1111000001011111.
Prelegerea 7

Alte clase de coduri elementare

Înafara codurilor Hamming şi Reed - Muller se pot construi şi alte clase de coduri
cu proprietăţi remarcabile. Vom prezenta numai câteva astfel de coduri - nu toate
liniare - punând ı̂n evidenţă la fiecare clasă caracteristicile sale specifice.

7.1 Codurile MacDonald


Fie An,k un cod liniar peste Z2 şi G matricea sa generatoare.
Vom nota cu Mk,2k −1 o matrice care conţine toate coloanele nenule posibile cu
k elemente care se pot construi peste Z2 . Ordinea acestor coloane este arbitrară
dar fixată. Coloana i din matricea M se va numi coloană de tip i. Pentru uşurinţa
notaţiei se admite aserţiunea că tipul de coloană i este reprezentarea ı̂n binar a
numărului zecimal i.
Deoarece codul An,k nu este influenţat de operaţiile elementare efectuate asupra
coloanelor din matricea generatoare (ı̂n particular permutarea de coloane), este sufi-
cient să definim acest cod indicând doar numărul coloanelor de fiecare tip care intră
ı̂n componenţa matricii generatoare.
Se obţine astfel reprezentarea modulară a codului An,k :

N = (n1 , n2 , . . . , n2k −1 ) (1)

unde ni este numărul coloanelor de tip i care apar (sau nu) ı̂n matricea G,
k −1
2X
ni = n.
i=1

à !
0 1 0
Exemplul 7.1 Să luăm k = 2, n = 3 şi matricea generatoare G =
1 1 1
à !
0 1 1
Avem matricea M = (coloanele sunt reprezentările binare ale
1 0 1
numerelor 1, 2, 3).
Reprezentarea modulară a codului generat de matricea G este atunci N = (2, 0, 1)
(pentru că ı̂n G există două coloane de tipul 1, nici una de tipul 2 şi una de tipul
3).

73
74 PRELEGEREA 7. ALTE CLASE DE CODURI ELEMENTARE

Să introducem matricea


K2k −1,n = M T G (2)
K are drept linii toate cuvintele nenule ale codului An,k .
Fie de asemenea matricea pătrată simetrică:
C2k −1,2k −1 = M T M (3)
   
1 0 1 1 1 1
   
Astfel, pentru Exemplul 7.1, K =  0 1 0 , C =  0 1 0 .
1 1 1 1 0 1
Teorema 7.1 O listă a ponderilor cuvintelor codului An,k se obţine ı̂nmulţind (ı̂n
R) matricea de reprezentare modulară cu matricea C:
W2k −1 = N C (4)
Demonstraţie: Scriem matricea M sub forma unei matrici linie
M = (v1 , v2 , . . . , v2k −1 )
unde vi (1 ≤ i ≤ 2k − 1) este coloana de tip i din matricea M .
Matricea generatoare corespunzătoare reprezentării modulare N = (n1 , n2 , . . . ,
n2k −1 ) este G = (v1 , . . . , v1 , v2 , . . . , v2 , . . . , v2k −1 , . . . , v2k −1 )
| {z } | {z } | {z }
n1 n2 n2k −1
unde n1 + n2 + . . . + n2k −1 = n. Se obţine deci
   
v1 v1 v1 v1 v2 ... v1 v2k −1
   
 v2   v2 v1 v2 v2 ... v2 v2k −1 
C=
 ..  
 (v1 , . . . , v2k −1 ) =  .. ,

 .   . 
v2k −1 v2k −1 v1 v2k −1 v2 . . . v2k −1 v2k −1
unde produsele scalare sunt efectuate ı̂n Z2 .
Acum, W = (w1 , w2 , . . . , w2k −1 ) = (n1 , n2 , . . . , n2k −1 )C, ı̂nmulţire efectuată ı̂n
R.
Prin identificare rezultă wi = n1 v1 vi + n2 v2 vi + . . . + n2k −1 v2k −1 vi .
Deoarece toate produsele scalare vj vi sunt 0 sau 1, wi este un număr natural.
El este chiar ponderea cuvântului cod care ocupă linia i ı̂n matricea K. Într-adevăr,
avem  
v1 v1 v1 v1 ... v1 v2k −1

 v2 v1 v2 v1 ... v2 v2k −1  
K2k −1,n = 
 .. ,

 . 
v2k −1 v1 v2k −1 v1 . . . v2k −1 v2k −1
produsele scalare fiind ı̂n Z2 .
Deci ponderea cuvântului situat pe linia i ı̂n matricea K este:
v v + .{z
|i 1
. . + vi v1} + . . . + vi v2k −1 + . . . + vi v2k −1 = n1 vi v1 + . . . + n2k −1 vi v2k −1 .
| {z }
n1 n2k −1
2
Ne punem problema de a determina un cod atunci când se dă vectorul ponderilor
cuvintelor sale (deci şi ponderea minimă, adică distanţa Hamming). Formal, din (4)
se obţine
7.1. CODURILE MACDONALD 75

N = W C −1 (5)
ı̂nmulţire efectuată ı̂n R. Formula este adevărată numai dacă demonstrăm că ma-
tricea C este inversabilă. În acest sens avem:
Teorema 7.2 Matricea C este nesingulară. Inversa ei se calculează ı̂nlocuind ı̂n C
pe 0 cu −1 şi ı̂mpărţind toate elementele cu 2k−1 .
Demonstraţie: I: Fiecare linie (deci şi coloană) din C conţine 1 pe 2k−1 poziţii. Două
linii (coloane) distincte din C au ı̂n comun 1 ı̂n 2k−2 poziţii.
Într-adevăr, liniile lui C - la care se adaugă linia nulă - formează un spaţiu liniar
cu 2k cuvinte binare. Să considerăm submulţimea liniilor care au 1 ı̂n componentele
2k
i şi j. Ele formează un subspaţiu liniar cu 2 = 2k−2 elemente deoarece, factorizând
2
cu acest spaţiu se obţin patru clase de resturi corepunzătoare componentelor (i, j)
de forma (0, 0), (0, 1), (1, 0), (1, 1).
Pentru a arăta că 1 apare pe fiecare linie din C de 2k−1 ori se raţionează similar.
II: În aceste condiţii, putem scrie
 k−1 
2 2k−2 . . . 2k−2
 k−2
 2 2k−1 . . . 2k−2  
2
C =  ..  = 2k−2 (I + J)

 . 
2k−2 2k−2 . . . 2k−1
unde I este matricea unitate iar J este matricea pătrată cu toate elementele
egale cu 1, ambele de ordin 2k .
Se mai observă că CJ = 2k−1 J. Deci
1 1 2C − J
I = k−1 (2C 2 − 2k−1 J) = k−1 (2C 2 − CJ) = C k−1 = CC −1 .
2 2 2
−1 1
De aici rezultă că C este inversabilă şi C = k−1 (2C − J). 2
2
Exemplul 7.2 Să luăm k = 3, n = 5. Vom avea:  
1 0 1 0 1 0 1
 
 0 1 1 0 0 1 1 
   
0 0 0 1 1 1 1  1 1 0 0 1 1 0 
 
  
M =  0 1 1 0 0 1 1 , C = MT M =  0 0 0 1 1 1 1  ,
 
1 0 1 0 1 0 1  1 0 1 1 0 1 0 
 
 0 1 1 1 1 0 0 
 
1 1 0 1 0 0 1
 
1 −1 1 −1 1 −1 1
 
 −1 1 1 −1 −1 1 1 
 
 1 1 −1 −1 1 1 −1 
1 
C −1 =  −1 −1 −1 1 1 1 1 
.
4 1 −1

 1 1 −1 1 −1  
 −1 1 1 1 1 −1 −1 
 
1 1 −1 1 −1 −1 1
 
1 0 0 1 1
 
Dacă luăm codul generat de matricea G =  0 1 0 1 0 , el are reprezenta-
0 0 1 0 1
rea modulară N = (1, 1, 0, 1, 1, 1, 0). Vectorul ponderilor cuvintelor - cod este
76 PRELEGEREA 7. ALTE CLASE DE CODURI ELEMENTARE

W = (2, 2, 4, 3, 3, 3, 3). Într-adevăr, cuvintele - cod sunt liniile matricii


 
0 0 1 0 1
 


0 1 0 1 0 

 0 1 1 1 1 
 
 
K= 1 0 0 1 1 .
 
 1 0 1 1 0 
 
 1 1 0 0 1 
 
1 1 1 0 0

Să determinăm acum reprezentarea modulară a unui cod liniar binar ı̂n care toate
cuvintele - cod au aceeaşi pondere w (şi deci distanţa minimă va fi d = w). Vom
avea prin ipoteză W = (w, w, . . . , w).
| {z }
2k −1
După cum am remarcat ı̂n demonstraţia Teoremei 7.2, 1 apare pe fiecare linie
din C ı̂n 2k−1 poziţii. Rezultă (Teorema 7.2) că ı̂n C −1 , 1 va apare pe fiecare linie
(coloană) tot ı̂n 2k−1 poziţii, ı̂n rest fiind −1. Deci
N = W C −1 = (w2−(k−1) , . . . , w2−(k−1) )
| {z }
2k −1

Problema enunţată are soluţie dacă w se divide cu 2k−1 ; ı̂n acest caz, reprezenta-
rea modulară este de forma N = (r, r, . . . , r), adică fiecare tip de coloană apare ı̂n
| {z }
2k −1
−(k−1)
matricea generatoare de r = w · 2 ori.
Plecând de la aceste considerente, McDonald a introdus o clasă de coduri pentru
care reprezentarea modulară este de forma 0i 1j . Mai exact,

n d N
k k−1
2 −1 2 (1, 1, 1, . . . , 1)
2k − 2 2k−1 − 1 (0, 1, 1, . . . , 1)
2k − 3 2k−1 − 2 (0, 0, 1, . . . , 1)
... ... ...
2k − 2u 2k−1 − 2u−1 (0, . . . , 0, 1, . . . , 1)
| {z } | {z }
2u −1 2k −2u

Aceste coduri au proprietatea că prezintă o distanţă minimă foarte apropiată de


marginea Plotkin.
Să luăm de exemplu al treilea cod din tabelul de sus. Reamintim, marginea
Plotkin este
nq k−1 (q − 1)
d≤ .
qk − 1

În cazul codului McDonald avem q = 2, n = 2k − 3, d = 2k−1 − 2, deci


nq k−1 (q − 1) (2k − 3)2k−1 k−1 2k − 2
− d = − (2 − 2) = < 1.
qk − 1 2k − 1 2k − 1
7.2. CODURI DERIVATE DIN MATRICILE HADAMARD 77

7.2 Coduri derivate din matricile Hadamard


În prelegerea anterioară am folosit o matrice Hadamard pentru a construi un al-
goritm de decodificare al codurilor RM(1, m). De fapt matricile Hadamard pot fi
utilizate ı̂n mod direct la construcţia de coduri.
Definiţia 7.1 Se numeşte matrice Hadamard Hn o matrice pătrată de ordinul n cu
elemente 1 şi −1, ale cărei linii sunt ortogonale două câte două.

Teorema 7.3 Fiind dată matricea Hadamard Hn , (n par) se poate construi un cod
n
de distanţă minimă d = , format din 2n cuvinte de lungime n.
2
Demonstraţie: În matricea Hn vom ı̂nlocui 1 cu 0 şi −1 cu 1. Vom nota v1 , v2 , . . . , vn
vectorii care formează liniile noii matrici. Codul căutat este

C = {v1 , v2 , . . . , vn , −v1 , −v2 , . . . , −vn }.

Acest cod (care nu este neapărat liniar) are 2n cuvinte de lungime n. Mai trebuie
arătat că distanţa sa minimă este n/2.
Deoarece v şi −v diferă ı̂n toate componentele, distanţa Hamming dintre ele este
n. Pe de-altă parte, din proprietatea matricilor Hadamard rezultă

vi (±vj ) = 0, ∀i, j ∈ {1, . . . , n}, i 6= j.

Pentru ca această egalitate să fie adevărată, este necesar ca vi şi vj să coincidă ı̂n
jumătate din componente şi să difere ı̂n cealaltă jumătate (atenţie, calculele se fac
n
ı̂n R, nu ı̂n Z2 !). Rezultă că distanţa Hamming dintre cele două cuvinte este .
2
n
Deci d = . 2
2
Pentru n = 32 un astfel de cod a fost folosit de programul spaţial Mariner.
à !
Hn Hn
Teorema 7.4 Dacă Hn este matrice Hadamard, atunci H2n =
Hn −Hn
este matrice Hadamard.

Demonstraţie: Evident, H2n este o matrice 2n × 2n cu elemente ±1. Mai trebuie


arătat că liniile sale sunt ortogonale două câte două.
Avem: [vi , vi ][vi , −vi ] = vi vi − vi vi = n − n = 0.
De asemenea, pentru i 6= j, [vi , vi ][vj , ±vj ] = [vi , vj ] ± [vi , vj ] = 0 ± 0 = 0. 2
Pe baza acestei teoreme, putem construi coduri Hadamard a căror distanţă să
fie oricât de mare. Este suficient să găsim o matrice Hadamard iniţială, pe care
(folosind Teorema 7.4) să o ”dilatăm” ulterior cât este nevoie. O astfel de matrice
Hadamard iniţială a fost dată ı̂n Prelegerea anterioară: ea este
à !
1 1
H2 = .
1 −1
Pentru construcţia altor matrici (şi coduri) Hadamard mai generale au fost elaborate
diverse tehnici. Una din cele mai cunoscute este cea a lui Paley şi Hall.
78 PRELEGEREA 7. ALTE CLASE DE CODURI ELEMENTARE

Definiţia 7.2 O matrice pătrată C de ordin n cu 0 pe diagonala principală şi ±1


ı̂nafara ei, astfel ca CC T = (n−1)In se numeşte matrice de conjunctură (conference
matrix).
 
à ! 0 1 1 1
0 1  −1 0 −1 1 
 
Exemplul 7.3 Matricile ,  
1 0  −1 1 0 −1 
−1 −1 1 0
sunt matrici de conjunctură.

Fie q = pr cu p număr prim impar, r ≥ 1. Pe Zq definim funcţia χ astfel:



0
 dacă x = 0
χ(x) =  1 dacă x este un pătrat nenul

−1 ı̂n rest
Vom nota elementele lui Zq cu a0 , a1 , . . . , aq−1 unde a0 = 0, cu In matricea unitate
de ordin n şi cu Jn matricea pătrată de ordin n cu toate elementele egale cu 1.
Teorema 7.5 Matricea Paley Sq = (sij ) de ordin q definită prin sij = χ(ai − aj ),
0 ≤ i, j < q are următoarele proprietăţi:
1. Sq Jq = Jq Sq = 0;

2. Sq SqT = qIq − Jq ;
q−1
3. SqT = (−1) 2 Sq .
Demonstraţie: Este lăsată ca exerciţiu.
 
0 −1 1

Exemplul 7.4 Pentru q = 3, matricea Paley este S3 =  1 0 −1 
,
−1 1 0
 
0 1 −1 −1 1
 
 1 0 1 −1 −1 
 
iar pentru q = 5, 
S5 =  −1 1 0 1 −1 .
 
 −1 −1 1 0 1 
1 −1 −1 1 0
De remarcat că S3T = −S3 , S5T = S5 .

Teorema 7.6 Dacă q = pr (p număr prim impar, r ≥ 1) astfel ı̂ncât q ≡ 3 (mod 4),
atunci există o matrice Hadamard de ordin q + 1.

Demonstraţie: Din ipoteză şi Teorema 7.5, există o matrice Paley S de ordin q.
Construim matricea C de ordin q + 1 astfel:
 
0 1 ... 1
 −1 
C=



 −1 S 
−1
7.3. CODURI PRODUS 79

Se verifică faptul că C este o matrice de conjunctură cu proprietatea C T = −C


(q ≡ 3 mod 4 conduce la relaţia S T = −S). Fie H = Iq+1 + C.
Avem HH T = (Iq+1 + C)(Iq+1 + C)T = (Iq+1 + C)(Iq+1 + C T ) = Iq+1 + C +
C + CC T = Iq+1 + qIq+1 = (q + 1)Iq+1 , deci orice două linii distincte ale lui H sunt
T

ortogonale. Rezultă că H este matrice Hadamard de ordin q + 1. 2


Plecând de la matricile Paley se pot construi alte coduri Hadamard.
Fie S o matrice Paley de ordin n (conform Teoremei 7.5). Un cod Hadamard de
1 1
ordin n poate fi definit cu 0, 1 şi cu liniile matricilor (S +In +Jn ), (−S +In +Jn ).
2 2
Acesta este un cod care conţine 2n + 2 cuvinte - cod de lungime n şi are distanţa
n−1
d= .
2
Exemplul 7.5 Pentru n = 9 = 32 , codul este format din cele 20 cuvinte care
formează linile matricii
 
00 0 0 0 0 0 0 0
 
 J P2 P 
 2 
 P J P 
 
 P 2
P J 
 
 

 I J − P2 J − P  
 J − P I J − P2 
 
 
 J − P2 J − P I 
1 1 1 1 1 1 1 1 1
 
0 1 0

unde P =  0 0 1 
, iar I şi J sunt matricile unitate, respectiv cu toate ele-
1 0 0
mentele egale cu 1, ambele de ordin 3.

7.3 Coduri produs


Să considerăm un cod de lungime n = n1 n2 . În loc să scriem cuvintele sale sub
formă de linii de lungime n, le putem reprezenta ca matrici cu n1 linii şi n2 coloane.
Un mod simplu de a realiza acest lucru este de a scrie cuvântul cod a = a0 a1 . . . an−1
ca o matrice X = [xij ], 0 ≤ i ≤ n1 − 1, 0 ≤ j ≤ n2 − 1, unde xij = ain2 +j . Aceasta
va fi numită scrierea canonică.

Definiţia 7.3 Fie A1 , A2 două coduri liniare de lungime n1 respectiv n2 . Se cons-


truieşte codul A de lungime n1 n2 ca mai sus (cu scrierea canonică). Spunem că
A = A1 × A2 este codul produs al lui A1 cu A2 dacă şi numai dacă A constă din
toate cuvintele - cod ı̂n care reprezentarea matricială verifică proprietăţile:

• Fiecare coloană a unei matrici este un cuvânt - cod din A1 ;

• Fiecare linie a unei matrici este un cuvânt - cod din A2 .

De remarcat că prin permutarea lui A1 cu A2 se obţine un cod echivalent.


80 PRELEGEREA 7. ALTE CLASE DE CODURI ELEMENTARE

Teorema 7.7 Dacă A1 este un (n1 , k1 ) - cod liniar şi A2 este un (n2 , k2 ) - cod
liniar, atunci A1 × A2 este un (n1 n2 , k1 k2 ) - cod liniar.

Demonstraţie: Fie Gi , i = 1, 2 matricile generatoare ale celor două coduri, pe care


le presupunem ı̂n forma eşalonat canonică, deci Gi = [Iki Bni −ki ]. Vom nota cu
(1) (2)
gi (1 ≤ i ≤ k1 ) respectiv gi (1 ≤ i ≤ k2 ) liniile celor două matrici.
Definim matricile Xij (1 ≤ i < k1 , 1 ≤ j < k2 ) de dimensiune n1 × n2 , astfel:
(2)
• Primele k1 linii sunt 0 cu excepţia liniei i care este gj ;

(1) T
• Primele k2 coloane sunt 0 cu excepţia coloanei j care este gi .
(1) (2)
• Pentru k > k1 , linia k este gik gj ;

(2) (1) T
• Pentru k > k2 , coloana k este gjk gi .

Schematic, o astfel de matrice arată astfel:


 
0 ... 0 0 ... 0
 
 ... ... ... ... ... ... 
 
 1 x x x 
 
 ... ... ... ... ... ... 
 
Xij = 
 0 ... 0


0 . . . 0 

 0 x 0 
 
 
 ... x ... X 
0 x 0
Evident, Xij reprezintă un cuvânt - cod din A1 × A2 şi orice alt cuvânt - cod este
o combinaţie liniară formată din aceste matrici. Deci Xij , 1 ≤ i ≤ k1 , 1 ≤ j ≤ k2
formează o bază a codului A1 × A2 .
Submatricile formate din primele k1 linii şi k2 coloane din Xij formează mulţimea
mesajelor de informaţie. 2

Exemplul 7.6 Să considerăm


à codurile
! liniare binare Ã
A 1 , A2 generate
! de matricile
1 0 1 1 0 1
G1 = respectiv G2 = .
0 1 1 0 1 0
Deci n1 = n2 = 3, k1 = k2 = 2. Sunt 4 matrici Xij , toate de dimensiune 3 × 3:
   
1 0 1 0 1 0

X11 =  0 0 0 


X12 =  0 0 0 

1 0 1 0 1 0
   
0 0 0 0 0 0

X21 =  1 0 1 


X22 =  0 1 0 
.
1 0 1 0 1 0
Să considerăm
à mesajul
! de informaţie 1011 pe care ı̂l aşezăm sub forma unei matrici
1 0
2×2: . Matricea - cod va fi
1 1
7.3. CODURI PRODUS 81
       
1 0 1 0 0 0 0 0 0 1 0 1
      
X11 + X21 + X22 =  0 0 0  +  1 0 1 + 0 1 0  =  1 1 1 
.
1 0 1 1 0 1 0 1 0 0 1 0
Se observă că liniile sunt cuvinte - cod din A2 , iar coloanele sunt cuvinte - cod
din A1 .

Propoziţia 7.1 Matricea generatoare a codului produs A1 × A2 este G1 × G2 unde


G1 şi G2 sunt matricile generatoare ale celor două coduri, iar 00 ×00 este produsul
Kronecker.

Demonstraţie: Fie (n1 , k1 ), (n2 , k2 ) cele două coduri, cu matricile generatoare G1


respectiv G2 , şi să considerăm matricea G1 × G2 obţinută prin produsul Kronecker
(Prelegerea 6, Definiţia 6.3). Dacă se ia linia k2 i + j din această matrice şi se
reprezintă sub formă canonică ca o matrice n1 × n2 , se obţine exact matricea Xij din
construcţia Teoremei 7.7. Cum Xij reprezintă o bază pentru codul A1 × A2 , rezultă
că G1 × G2 este matricea sa generatoare.
Din acest motiv, ı̂n primii ani, codurile produs erau numite şi coduri Kronecker.
2
Exemplul 7.7 Matricea generatoare a codului produs A1 × A2 din Exemplul 7.6
este:
 
à ! 1 0 1 0 0 0 1 0 1
G2 0 G2  0 1 0 0 0 0 0 1 0 
 
G = G1 × G2 = = .
0 G2 G2  0 0 0 1 0 1 1 0 1 
0 0 0 0 1 0 0 1 0
Se observă imediat că prin ”plierea” celor patru linii din această matrice se obţin
matricile Xij din Exemplul 7.6.
Să considerăm din nou mesajul de informaţie 1011. Prin ı̂nmulţirea cu matricea
G se ajunge la cuvântul - cod 101111010 care - scris ca o matrice 3 × 3 - coincide
cu rezultatul din Exemplul 7.6.

Teorema 7.8 Distanţa codului A1 × A2 este egală cu d1 · d2 (d1 şi d2 fiind distanţele
codurilor A1 respectiv A2 ).

Demonstraţie: Dacă Ai are lungimea ni (i = 1, 2), să considerăm o matrice X


reprezentând un cuvânt - cod nenul din A1 × A2 (am văzut că asemenea cuvinte
există). Putem găsi deci cel puţin o linie cu minim d2 elemente nenule. Fiecare
astfel de element se află pe o coloană cu minim d1 elemente nenule; deci matricea
X are minim d1 · d2 elemente nenule. 2
Exemplul 7.8 Cele două coduri din Exemplul 7.6 au d1 = d2 = 2 (se găsesc imediat
cuvintele - cod şi se observă că ponderea lor nenulă minimă este 2). Deci codul produs
va avea distanţa d = 2 · 2 = 4. De remarcat că - deşi A1 şi A2 nu pot corecta erori,
A1 × A2 este capabil să corecteze o eroare.
Codurile produs - deşi cunoscute de la ı̂nceputul anilor 0 60, au devenit foarte impor-
tante odată cu folosirea lor ı̂n transmisiile telefonice fără fir şi codificarea informaţiei
pe CD - uri. Vom relua ulterior - pe larg - analiza acestor coduri.
82 PRELEGEREA 7. ALTE CLASE DE CODURI ELEMENTARE

7.4 Coduri optimal maximale


Fie mulţimea A ⊆ Zqn . Se numeşte diametrul mulţimii A numărul

d(A) = min d(x, y), x 6= y.


x,y∈A

De remarcat că, dacă A este cod liniar, atunci d(A) este chiar distanţa minimă a
codului.

Definiţia 7.4 A este mulţime optimală de distanţă minimă d dacă:

• d(A) = d;

• ∀x ∈ Zqn \ A, d(A ∪ {x}) < d.

Exemplul 7.9 În Z26 , următoarele mulţimi sunt optimale de distanţă minimă 3:
A = {000000, 010101, 101010, 111111}
B = {000000, 101010, 011001, 000111, 110100, 111111}

Definiţia 7.5 Se numeşte mulţime optimală cardinal maximală de distanţă d o


mulţime optimală cu un număr maxim de elemente.

Vom nota acest număr cu a(n, d).

Exemplul 7.10 Mulţimile date ı̂n Exemplul 7.9 sunt optimale dar nu cardinal ma-
ximale pentru distanţa 3. O mulţime optimală cardinal maximală din Z26 pentru
d = 3 este:
C = {000000, 001011, 010101, 011110, 100110, 101101, 110011, 111000},
deci a(6, 3) = 8.

Definiţia 7.6 Un cod liniar A de distanţă d este optimal dacă A este mulţime
optimală cardinal maximală de distanţă d.

Spunem că un astfel de cod satisface condiţia max - min, deoarece are un număr
maxim de vectori aflaţi la distanţa minimă d.
Nu se cunosc algoritmi de construcţie a unor astfel de coduri. În această secţiune
vom da câteva condiţii necesare pentru codurile optimale.

Teorema 7.9 Într-un cod optimal maximal A de distanţă minimă d (d < n),

a(n, d) ≤ q · a(n − 1, d).

Demonstraţie: Putem presupune - fără a micşora generalitatea - că primul caracter


al codului este caracter de informaţie.
Fie K mulţimea cuvintelor din A care au 0 pe prima componentă. Cum pe prima
componentă pot apare q caractere distincte, va rezulta
a(n, d)
card(K) = .
q
7.4. CODURI OPTIMAL MAXIMALE 83

K este un cod cu distanţa d ı̂n care toate cuvintele au 0 pe prima poziţie. Dacă
eliminăm această componentă, se obţine un cod din Zqn−1 , tot de distanţă d, cu
acelaşi număr de cuvinte. Acest cod nu este neapărat optim, deci condiţia va fi
a(n, d)
a(n − 1, d) ≥
q
Mai trebuie făcută observaţia că a(n − 1, n − 1) = q pentru că un cod cu repetiţie
este optimal maximal de distanţă minimă egală cu lungimea cuvintelor - cod. 2
Corolarul 7.1 Dacă j ≥ d, atunci q n−j a(j, d) ≥ a(n, d).
Demonstraţie: Din Teorema 7.9 rezultă inegalităţile:
q · a(n − 1, d) ≥ a(n, d)
q · a(n − 2, d) ≥ a(n − 1, d)
...
q · a(n − i, d) ≥ a(n − i + 1, d)
Prin ı̂nmulţire se obţine q i · a(n − i, d) ≥ a(n, d), după care se face notaţia n − i = j.
2
Teorema 7.10 Fie A un cod liniar optimal maximal de distanţă minimă d.
qd
Dacă n < , atunci numărul simbolurilor de informaţie verifică inegalitatea
q−1
dq − 1
k ≤n− + 1 + logq d.
q−1
Demonstraţie: Deoarece A este cod liniar, numărul de simboluri de informaţie va fi
dat de relaţia a(n, d) = q k .
Rescriem inegalitatea lui Plotkin sub forma d(q k − 1) ≤ nq k−1 (q − 1), sau
q k−1 (dq + n − nq) ≤ n.