Sunteți pe pagina 1din 696

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.
dq
Deoarece - din ipoteză - dq + n − nq > 0, avem q k ≤ , sau
dq + n − nq
dq
a(n, d) ≤ .
dq + n − nq" # ( )
dq − 1 dq − 1 dq − 1
Fie = i + f unde i = , f= .
q−1 q−1 q−1
Deci qd − 1 = (q − 1)i + (q − 1)f şi avem
dq dq dq
a(i, d) ≤ = = .
dq + i − iq dq − (q − 1)i 1 "+ (q − 1)f
# " #
dq − 1 d−1
Folosind Corolarul 7.1 şi i ≥ d (deoarece = d+ ≥ d), rezultă
q−1 q−1
dq−1

n−i q n− q−1 +f
a(n, d) ≤ q a(i, d) ≤ qd
1 + (q − 1)f
Dezvoltând ı̂n serie Taylor, q f ≤ 1 + (q − 1)f (f < 1) şi deci
n− dq−1
a(n, d) ≤ q q−1 qd,
n− dq−1
sau q k ≤ q q−1 qd, de unde - prin logaritmare - se obţine relaţia din enunţ. 2
84 PRELEGEREA 7. ALTE CLASE DE CODURI ELEMENTARE

7.5 Exerciţii
7.1 Să se construiască vectorul ponderilor pentru codurile Hamming (7, 4) şi
RM(1, 3).

7.2 Folosind vectorul ponderilor, să se construiască numărătorul de ponderi al unui


cod liniar.

7.3 Să se construiască matricile generatoare şi matricile K pentru codurile


McDonald cu k = 2, 3, 4.

7.4 Să se construiască matricile şi codurile Hadamard pentru n = 4 şi n = 8.

7.5 Să se arate că dacă Hn este o matrice Hadamard, atunci Hn HTn = nIn .

7.6 Să se construiască o matrice Hadamard de ordin 12.

7.7 Să se arate că matricea Hadamard H8 generează (8, 4) - codul Hamming binar
extins.

7.8 Să se construiască codurile produs pentru codul cu repetiţie de lungime n (A1 )
şi codul cu repetiţie de lungime p (A2 ).

7.9 Să se construiască matricea generatoare a codului produs A1 ×A2 unde A1 = A2


este codul Hamming (7, 4).

7.10 Aceeaşi problemă pentru codul RM(1, 3).

7.11 Demonstraţi Teorema 7.5.

7.12 Folosind matricile Paley, să se construiască codurile Hadamard de ordin 5 şi
respectiv 7.

7.13 Să se arate că un cod binar liniar optimal maximal de distanţă minimă d are
cel puţin 2d − 1 − log2 d simboluri de control.
Prelegerea 8

Circuite liniare şi extensii Galois

8.1 Circuite liniare pentru operaţii elementare


În această secţiune presupunem că toate calculele se realizează ı̂n Zq (q număr prim).

Un circuit liniar este un graf orientat, cu trei tipuri de noduri (conectori):


• sumator - este un conector cu cel puţin două intrări şi o ieşire. Efectul este
acela de a scoate suma modulo q a elementelor aflate la intrare. Operaţia se
execută instantaneu. Sumatorul se notează astfel:

?
¾»
- +
-
½¼

• Multiplicator - este un conector cu o singură intrare şi o ieşire unde se obţine


rezultatul ı̂nmulţirii cu c ∈ Zq a elementului de la intrare. Operaţia se execută
(de asemenea) instantaneu. Notaţie:
¾»
- - c
½¼

• Element de ı̂nmagazinare - Este un registru buffer cu o intrare şi o ieşire; efectul


este ı̂ntârzierea cu un tact a intrării: elementul a ∈ Zq intră ı̂n momentul k şi
iese ı̂n momentul k + 1. Notaţie:

- -

Aceste trei tipuri de conectori se pot grupa arbitrar - folosind eventual şi noduri
obişnuite. Utilizarea practică revine la obţinerea de circuite liniare care pot realiza
automat operaţii uzuale cu polinoame: adunări, scăderi, ı̂nmulţiri şi ı̂mpărţiri.

În cele ce urmează, vom identifica un vector cu n + 1 componente


a = (a0 , a1 , . . . , an )
cu polinomul de gradul n cu o variabilă
a(x) = a0 + a1 X + . . . + an X n .

85
86 PRELEGEREA 8. CIRCUITE LINIARE ŞI EXTENSII GALOIS

În cursul transmisiei mesajului a, ordinea de prelucrare (transmisie) se face după


puterile descrescătoare ale lui X; deci, sensul de circulaţie a semnalelor va fi:

a0 a1 ... an −→

8.1.1 Construcţia unor circuite liniare uzuale


A Circuit de ı̂nmulţire cu un polinom.
Fie h(X) = b0 +b1 X +. . .+bn X n un polinom fixat şi a(X) = a0 +a1 X +. . .+ak X k
un polinom arbitrar. Coeficienţii ambelor polinoame pot fi luaţi ı̂ntr-un inel arbitrar
(din considerente pur aplicative, acesta este de obicei Zq , dar construcţiile rămân
valabile ı̂n general).
Un circuit de ı̂nmulţire cu h(X) este:

Figura 8.1:
- +n - ... - +n - +n -
6
6 6 6
º· º· º· º·
bn bn−1 b1 b0
¹¸ ¹¸ ¹¸ ¹¸
6 6 6 6
a(X) s - s - - ... - s - -

Iniţial elementele de ı̂nmagazinare conţin 0; coeficienţii polinomului a(X) intră


ı̂n stânga jos - după puterile descrescătoare ale lui X - câte unul la un tact, iar
coeficienţii produsului ies ı̂n dreapta sus. Circuitul funcţionează n+k +1 tacţi; după
k + 1 tacţi, la intrare se introduc zerouri ı̂n cei n tacţi rămaşi, pı̂nă ce elementele de
ı̂nmagazinare conţin din nou numai 0.
De remarcat că un element de ı̂nmagazinare funcţionează după principiile unei
variabile de memorie (aducerea unei valori face să dispară vechea valoare din locaţie).
Circuitul lucrează după formula de ı̂nmulţire obişnuită:
a(X)h(X) = a0 b0 + (a0 b1 + a1 b0 )X + . . . + (ak−1 bn + ak bn−1 )X k+n−1 + ak bn X n+k

Exemplul 8.1 Să luăm polinomul h(X) = X 3 − 5X 2 + 2 ∈ Z[X] (vectorul core-


spunzător este h = (2, 0, −5, 1)). Circuitul de ı̂nmulţire cu h(X) va fi:
²¯ ²¯
-+ - +-
6 ±° ±°
6 6
¾» ¾»
−5 2
½¼ ½¼
6 6
s- s - - -

De remarcat că multiplicarea cu 1 se face prin arc simplu (fără conector), iar
multiplicarea cu 0 revine la suprimarea arcului. În cazul operaţiilor cu polinoame
din Z2 [X], toţi multiplicatorii se reduc la aceste două cazuri.
8.1. CIRCUITE LINIARE PENTRU OPERAŢII ELEMENTARE 87

Dacă dorim să ı̂nmulţim h(X) cu polinomul a(X) = 2X + 8 (vector a = (8, 2)),
circuitul liniar va funcţiona 5 tacţi (până când toate elementele de ı̂nmagazinare
revin la 0); comportarea sa este relatată de tabelul:

Nr. tact Intrare Înmagazinare Ieşire


0 0 0 0 0 0
1 2 0 0 0 2
2 8 2 0 0 −2
3 0 8 2 0 −40
4 0 0 8 2 4
5 0 0 0 8 16
6 0 0 0 0 0

Deci, polinomul produs este 2X 4 − 2X 3 − 40X 2 + 4X + 16; sau - ı̂n termeni de


vectori, (16, 4, −40, −2, 2).

Aceeaşi operaţie de ı̂nmulţire este realizată şi de circuitul liniar:

Figura 8.2:
²¯ ²¯ ²¯ ²¯
- -+ - - + - ... -+ - -+ -
6 ±° ±° ±° ±°
6 6 6 6
¾» ¾» ¾» ¾» ¾»
b0 b1 b2 bn−1 bn
½¼ ½¼ ½¼ ½¼ ½¼
6 6 6 6 6
s s s - ... s -

Exemplul 8.2 Circuitul liniar care realizează ı̂nmulţirea cu polinomul


h(X) = 1 + X + X 4 peste Z2 este
²¯ ²¯
- -+ - - - -+ -
6 ±° ±°
6 6
s s -

deoarece vectorul corespunzător polinomului h(X) este h = (1, 1, 0, 0, 1).

B. Fie h(X) = h0 + h1 X + . . . + hn X n şi g(X) = g0 + g1 X + . . . + gn X n două


polinoame fixate. Un circuit liniar care să realizeze operaţia

a(X)h(X) + b(X)g(X)

pentru două polinoame arbitrare a(X), b(X), este:


88 PRELEGEREA 8. CIRCUITE LINIARE ŞI EXTENSII GALOIS
b(X) s s - ... s -
?
¾» ?
¾» ?
¾» ¾»?
g0 g1 gn−1 gn
½¼ ½¼ ½¼ ½¼
?
²¯ ?
²¯ ?
²¯ ?
²¯
+ - - + - - ... -+ - -+ -
±° ±° ±° ±°
6 6 6 6
¾» ¾» ¾» ¾»
h0 h1 hn−1 hn
½¼ ½¼ ½¼ ½¼
6
s 6
s - ... 6
s -6
a(X)

De remarcat că polinoamele g(X) şi h(X) pot avea grade diferite; ı̂n acest caz se
alege n ca fiind gradul cel mai mare şi se completează celălalt polinom cu coeficienţi
nuli până la gradul n.
Exemplul 8.3 Fie polinoamele g(X) = 1 + X 2 , h(X) = X + X 2 + X 4 cu coeficienţi
ı̂n Z2 ; deci vectorii corespunzători vor fi h = (0, 1, 1, 0, 1), g = (1, 0, 1, 0, 0). Cir-
cuitul liniar care realizează expresia a(X)h(X) + b(X)g(X) este:
b(X) s -
²¯ ²¯? ²¯
? - -+ - -+ - - -+ -
±° ±° ±°
6
s s6 -6
a(X)

C. Circuit liniar de ı̂mpărţire cu un polinom.


Fie polinomul (fixat) g(X) = g0 + g1 X + . . . + gk X k , gk 6= 0. Un circuit liniar
care realizează ı̂mpărţirea unui polinom arbitrar a(X) = a0 + a1 X + . . . + an X n la
g(X) este:

Figura 8.3:
¾ s ... ¾ s -

? #Ã
? #Ã
? 6

−g0 −g1 −gk−1 gk−1


"! "! "! "!
6
?
²¯ ?
²¯ ?
²¯
a(X) -±°
+ - -+ - ... - -+ - -
±° ±°

Iniţial, toate cele k elemente de ı̂nmagazinare conţin 0. La intrare, timp de


n + 1 tacţi se introduc coeficienţii polinomului a(X) (ı̂n ordinea descrescătoare a
puterilor). În primii k tacţi, ieşirea va scoate numai 0. Primul coeficient nenul
apare la ieşire la momentul k + 1 şi este an gk−1 (operaţii ı̂n inelul coeficienţilor celor
două polinoame) - coeficientul termenului X n−k din cât.
Pentru fiecare coeficient qj al câtului, polinomul qj g(X) trebuie scăzut din deı̂m-
părţit; această operaţie se realizează printr-un procedeu de conexiune inversă (feed-
back).
8.1. CIRCUITE LINIARE PENTRU OPERAŢII ELEMENTARE 89

După momentul n + 1 (când au intrat toţi coeficienţii polinomului a(X)) la ieşire


s-a obţinut câtul q(X) al ı̂mpărţirii la g(X), iar ı̂n elementele de ı̂nmagazinare se
găsesc coeficienţii restului.

Exemplul 8.4 Un circuit liniar de ı̂mpărţire (peste Q) la polinomul g(X) = 2 + X


este: ¾»
−2 ¾ -
½¼ 6

?
²¯
-+ - -
±°

Exemplul 8.5 Fie polinomul g(X) = 1 + X 2 + X 5 + X 6 ∈ Z2 [X]. Circuitul care


realizează ı̂mpărţirea este:
¾ s s -
?
²¯ ?
²¯ ?
²¯ 6
- + - - -+ - - - -+ -
±° ±° ±°

Să luăm polinomul a(X) = 1 + X 4 + X 5 + X 7 + X 9 + X 10 pe care să-l ı̂mpărţim ı̂n


Z2 la polinomul g(X). Se obţine câtul X 4 + X şi restul X 5 + X 3 + X + 1.
Circuitul funcţionează 11 tacţi. Etapele prin care trece ı̂n efectuarea acestei
ı̂mpărţiri sunt reprezentate de tabelul următor:

Nr. tact Intrare Elemente de ı̂nmagazinare Ieşire


0 − 0 0 0 0 0 0 −
1 1 1 0 0 0 0 0 0
2 1 1 1 0 0 0 0 0
3 0 0 1 1 0 0 0 0
4 1 1 0 1 1 0 0 0
5 0 0 1 0 1 1 0 0
6 1 1 0 1 0 1 1 0
7 1 0 1 1 1 0 0 1
8 0 0 0 1 1 1 0 0
9 0 0 0 0 1 1 1 0
10 0 1 0 1 0 1 0 1
11 1 1 1 0 1 0 1 0

Vectorii (1, 1, 0, 1, 0, 1) - de pe ultima linie şi (0, 1, 0, 0, 1) - scris mai gros şi ı̂n
ordine inversă pe ultima coloană - reprezintă restul 1 + X + X 3 + X 5 respectiv câtul
X + X 4 ı̂mpărţirii lui a(X) la g(X).
90 PRELEGEREA 8. CIRCUITE LINIARE ŞI EXTENSII GALOIS

D. Circuitul liniar are realizează ı̂nmulţirea cu polinomul h(X) = h0 + h1 X +


. . . + hn X n urmată de ı̂mpărţirea la polinomul g(X) = g0 + g1 X + . . . + gn X n este:
¾ s ... ¾ s -
?
¾» ?
¾» ?
¾» 6
¾»
−g0 −g1 −gn−1 gn−1
½¼ ½¼ ½¼ ½¼
?
²¯ ?
²¯ ?
²¯ 6
²¯
+ - -+ - - ... - -+ - -+
±° ±° ±° ±°
6
¾» ¾»6 ¾»6 ¾»6

h0 h1 hn−1 hn
½¼ ½¼ ½¼ ½¼
6 6
s - ... 6
s -6

Când gradele polinoamelor sunt diferite, se construieşte ı̂ntâi circuitul liniar co-
respunzător polinomului de grad maxim, după care se completează cu circuitul cores-
punzător celuilalt polinom.

Exemplul 8.6 Să luăm polinoamele h(X) = 1 + X + X 3 , g(X) = 2 + X + X 4 cu


coeficienţi ı̂n Z3 . Circuitul liniar care realizează ı̂nmulţirea cu h(X) şi ı̂mpărţirea la
g(X) este
¾ s -
? 6
º·
2
¹¸
?
²¯ ?
²¯ ²¯
+ - -+ - - - +` - -
±° ±° ±°
6
s 6
s -6

Deoarece calculele se fac ı̂n Z3 , −2 = 1, −1 = 2, şi 1−1 = 1.


Pentru intrarea a(X) = 1 + 2X + 2X 2 , comportarea circuitului este următoarea:

− 0 0 0 0 −
2 2 2 0 2 −
2 1 2 2 2 2
1 0 0 2 0 2

ceea ce corespunde câtului 2 + 2X şi restului 2X 2 .


De remarcat că primul coeficient (de grad maxim) al câtului este scos de circuit
cu o ı̂ntârziere de grad(g(X)) − grad(f (X)) = 1 tact.
8.2. EXTENSII GALOIS 91

Exemplul 8.7 Un circuit liniar pentru ı̂nmulţirea cu h(X) = 1 − X 2 + 2X 4 şi


ı̂mpărţirea la g(X) = 3 − 2X + X 2 , ambele din Z[X], este:
¾ s -
¾»
? ¾»
? 6

−3 2
½¼ ½¼
?
²¯ ?
²¯ ²¯
- - -+ - -+ - -+
6 ±° ±° ±°
6 6
¾» ¾»
−1 2
½¼ ½¼
6
s -6

Fie intrarea a(X) = −2 + X; comportarea circuitului este:

− 0 0 0 0 −
1 1 0 −7 4 2
−2 −2 1 2 −7 0
0 0 −2 22 −12 −7
0 0 0 34 −2 −12

deci câtul este 2X 3 − 7X − 12 iar restul 34 − 2X.


De remarcat că circuitul este lăsat să funcţioneze grad(h(X)) − grad(f (X)) = 2
tacţi ı̂n plus (prin introducerea de zero-uri), pentru golirea elementelor de ı̂nmagazi-
nare necontrolate de ı̂mpărţitor.

8.2 Extensii Galois


Fie q un număr prim şi g(X) = g0 + g1 X + . . . + gn X n ∈ Zq [X]. Vom considera
algebra polinoamelor modulo g(X).
Fiind dat un polinom oarecare din Zq [X], clasa sa de resturi modulo g(X) se
găseşte ı̂mpărţind polinomul respectiv cu g(X). Restul ı̂mpărţirii specifică clasa de
resturi respectivă.
Două polinoame cărora le corespunde acelaşi rest la ı̂mpărţirea cu g(X) sunt
echivalente, intrând ı̂n aceeaşi clasă de resturi modulo g(X).
Fiecare clasă de resturi modulo g(X) se reprezintă prin polinomul (unic) de grad
strict mai mic decât n, care aparţine clasei respective. Toţi aceşti reprezentanţi pot
fi consideraţi ca polinoame de gradul n − 1, având eventual coeficienţi nuli.
Vom nota cu {f (X)} clasa de resturi a polinomului f (X) modulo g(X). Deci
f (X) va corespunde unui vector (distinct) de lungime n, cu componente din Zq (prin
completare eventual cu zerouri).
Operaţiile ı̂n algebra claselor de resturi sunt:

{a(X)} + {b(X)} = {a(X) + b(X)}


c{a(X)} = {ca(X)}, c ∈ Zq
{a(X)}{b(X)} = {a(X)b(X)}
92 PRELEGEREA 8. CIRCUITE LINIARE ŞI EXTENSII GALOIS

toate calculele fiind făcute modulo g(X).


Evident, {0} = {g(X)}, unde {0} este polinomul de grad n−1 cu toţi coeficienţii
nuli (sau vectorul cu n componente zero). Vom nota {0} = 0.
Pentru un polinom s(X) ∈ Zq [X], clasa de resturi modulo g(X) se obţine foarte
uşor. Teorema ı̂mpărţirii cu rest dă:
s(X) = a(X)g(X) + r(X) unde grad(r(X)) < grad(g(X)) = n. Atunci:
{s(X)} − {r(X)} = {s(X) − r(X)} = {a(X)g(X)} = {a(X)}{g(X)} = 0.
Să reluăm circuitul liniar de ı̂mpărţire definit ı̂n Figura 8.3, ı̂n care facem urmă-
toarele modificări (vezi Figura 8.4):

• Se neglijează intrarea şi ieşirea;

• La momentul iniţial elementele de ı̂nmagazinare conţin coeficienţii unui poli-


nom b(X) = b0 + b1 X + . . . + bn−1 X n−1 .

Figura 8.4:
¾ s ... ¾ s

? #Ã
? #Ã
? 6

−g0 −g1 −gn−1 gn−1


"! "! "! "!
?
²¯ ?
²¯ 6
?
-
b0 -+ -
b1 - ... -+ - b
n−1
-
±° ±°

La următorul tact, ı̂n elementele de ı̂nmagazinare se obţin coeficienţii polinomu-


lui:
b0 (X) = −g0 gn−1 bn−1 + (b0 − g1 gn−1 bn−1 )X + (b1 − g2 gn−1 bn−1 )X 2 + . . .
+(bn−2 − gn−1 gn−1 bn−1 )X n−1 =
= b0 X + b1 X 2 + . . . + bn−1 X n − bn−1 X n − gn−1 bn−1 (g0 + g1 X + . . . + gn−1 X n−1 ) =
= Xb(X) − gn−1 bn−1 g(X).
Dacă notăm α = {X} ({X} este clasa de resturi a polinomului X), din relaţia
de mai sus se obţine:

b0 (α) = {b0 (X)} = {Xb(X)} = {X}{b(X)} = {X}b({X}) = αb(α).

Deci circuitul de ı̂mpărţire cu polinomul g(X) poate fi utilizat pentru ı̂nmulţirea lui
b(α) cu α.

Teorema 8.1 În algebra polinoamelor modulo g(X), grad(g(X)) = n, avem:

1. g(α) = 0 unde α = {X};

2. g este polinomul de grad minim care are pe α ca rădăcină.

Demonstraţie:
8.2. EXTENSII GALOIS 93

1. Fie g(X) = g0 + g1 X + . . . + gn Xn ∈ Zq [X], gn 6= 0. Vom avea g(α) =


g0 +g1 α+. . .+gn αn = g0 +g1 {X}+. . .+gn {X}n = g0 +g1 {X}+. . .+gn {X n } =
{g0 + g1 X + . . . + gn X n } = {g(X)} = 0.
2. Folosind acelaşi raţionament, se obţine pentru orice polinom f (X) cu
grad(f (X)) < n, că f (α) = {f (X)} 6= 0, deoarece toate polinoamele ne-
identic nule de grad strict mai mic decât n aparţin la clase de resturi distincte.
2
Să presupunem acum că g(X) ∈ Zq [X] este un polinom ireductibil. Conform
Teoremei 8.1, α = {X} este rădăcină a lui g(X). Acest element α poate fi considerat
fie ca polinom de grad n − 1 (cu toţi coeficienţii nuli ı̂nafară de cel al lui X), fie ca
vector cu n componente (0, 1, 0, . . . , 0).
Vom nota cu GF (q n ) mulţimea vectorilor din Zqn , sau - echivalent:
- mulţimea polinoamelor de grad n − 1 cu coeficienţi ı̂n Zq , sau
- mulţimea claselor de resturi modulo polinomul g(X) ∈ Zq [X], ireductibil
peste Zq .
GF (q n ) se numeşte extensia Galois de grad n a lui Zq .
Spunem că GF (q n ) se obţine prin adăugarea la Zq a unei rădăcini a polinomului
g(X) ∈ Zq [X] de grad n, ireductibil peste corpul de bază Zq .
Observaţie: Procedeul de trecere de la Zq la GF (q n ) este similar trecerii de la
corpul numerelor reale R la cel complex C, prin adăugarea rădăcinii i = {X} ı̂n
algebra claselor de resturi modulo 1 + X 2 , ireductibil peste R. Putem considera
mulţimea C a numerelor complexe fie ca mulţimea polinoamelor de grad 2 − 1 =
1, a + bi cu a, b ∈ R, fie ca mulţimea vectorilor (a, b) cu două componente reale.
Dacă polinomul g(X) ∈ Zq [X] este ireductibil peste Zq şi primitiv, puterile lui
α = {X} vor genera toate elementele lui GF (q n ) \ {0} unde n = grad(g(X)). Acest
lucru se poate realiza cu circuitul liniar din Figura 8.4, introducând la momentul
iniţial ı̂n elementele de ı̂nmagazinare coeficienţii polinomului b(X) = 1 (adică vec-
torul (1, 0, . . . , 0)). Conform celor observate mai sus, la momentul următor se obţine
{Xb(X)} = {X} = α, după care urmează pe rând α2 , α3 , . . .. Cum g(X) a fost ales
primitiv, el va genera toate elementele nenule din GF (q n ).
Exemplul 8.8 Fie polinomul 1 + X + X 4 ireductibil peste Z2 şi α = {X} ı̂n algebra
claselor de resturi modulo 1+X +X 4 . Circuitul liniar care va genera toate elementele
nenule din GF (24 ) este:
¾ s
?
²¯ 6
?
- -+ - - - -
±°

unde, la momentul iniţial, ı̂n elementele de ı̂nmagazinare este vectorul (1, 0, 0, 0).
Conform Teoremei 8.1, α este o rădăcină a polinomului 1 + X + X 4 , adică
1 + α + α4 = 0.
Lăsând circuitul să funcţioneze, ı̂n elementele de ı̂nmagazinare se obţin toate ele-
mentele lui GF (24 ), pe care le interpretăm fie ca vectori cu patru componente peste
Z2 , fie ca polinoame de gradul 3 ı̂n α cu coeficienţi ı̂n Z2
94 α0 PRELEGEREA
= 1 8. CIRCUITE LINIARE
1 0ŞI EXTENSII
0 0 GALOIS
α1 = α 0 1 0 0
α2 = α 2
0 0 1 0
α3 = α 3
0 0 0 1
α4 = 1 + α 1 1 0 0
α5 = α + α 2
0 1 1 0
α6 = α2 + α3 0 0 1 1
α7 = 1 + α + α 3
1 1 0 1
α8 = 1 + α 2
1 0 1 0
α9 = α + α3 0 1 0 1
α10 = 1 + α + α 2
1 1 1 0
α11 = α + α2 + α3 0 1 1 1
α12 = 1 + α + α + α2 3
1 1 1 1
α13 = 1 2
+ α + α 3
1 0 1 1
α14 = 1 + α3 1 0 0 1
α15 = 1 1 0 0 0

Vedem deci că polinomul 1 + X + X 4 este primitiv, puterile lui α epuizând toţi
vectorii nenuli din GF (24 ) = {0, α0 , α, . . . , α14 }.

Exemplul 8.9 Tabelul din exemplul precedent descrie operaţia de ı̂nmulţire din
GF (24 ), generată de rădăcina α a polinomului primitiv 1 + X + X 4 . Dacă s-ar
alege α ca rădăcină a altui polinom primitiv - de exemplu 1 + X 3 + X 4 , se va genera
tot GF (24 ), dar ı̂ntr-o altă ordine. Lăsăm ca exerciţiu această generare.
În GF (24 ) se poate defini şi operaţia de adunare, ı̂nsumând modulo 2 cei doi
operanzi, pe componente. Astfel, dacă reluăm GF (24 ) generat ı̂n Exemplul 8.8 de
rădăcina polinomului 1 + X + X 4 , tabela de adunare va fi:

+ 0 α0 α α2 α3 α4 α5 α6 α7 α8 α9 α10 α11 α12 α13 α14


0 0 α0 α α2 α3 α4 α5 α6 α7 α8 α9 α10 α11 α12 α13 α14
α0 α0 0 α4 α8 α14 α α10 α13 α9 α2 α7 α5 α12 α11 α6 α3
α α α4 0 α5 α9 α0 α2 α11 α14 α10 α3 α8 α6 α13 α12 α7
α2 α2 α8 α5 0 α6 α10 α α3 α12 α0 α11 α4 α9 α7 α14 α13
α3 α3 α14 α9 α6 0 α7 α11 α2 α4 α13 α α12 α9 α10 α8 α0
α4 α4 α α0 α10 α7 0 α8 α12 α3 α5 α14 α2 α13 α6 α11 α9
α5 α5 α10 α2 α α11 α8 0 α9 α13 α4 α6 α0 α3 α14 α7 α12
α6 α6 α13 α11 α3 α2 α12 α9 0 α10 α14 α3 α7 α α4 α0 α8
α7 α7 α9 α14 α12 α4 α3 α13 α10 0 α11 α0 α6 α8 α2 α9 α
α8 α8 α2 α10 α0 α13 α5 α4 α14 α11 0 α12 α α7 α9 α3 α6
α9 α9 α7 α3 α11 α α14 α6 α5 α0 α12 0 α13 α2 α8 α10 α4
α10 α10 α5 α8 α4 α12 α2 α0 α7 α6 α α13 0 α14 α3 α9 α11
α11 α11 α12 α6 α9 α5 α13 α3 α α8 α7 α2 α14 0 α0 α4 α10
α12 α12 α11 α13 α7 α10 α6 α14 α4 α2 α9 α8 α3 α0 0 α α5
α13 α13 α6 α12 α14 α8 α11 α7 α0 α5 α3 α10 α9 α4 α 0 α2
α14 α14 α3 α7 α13 α0 α9 α12 α8 α α6 α4 α11 α10 α5 α2 0

Fie acum a(X) = a0 + a1 X + . . . + ak−1 X k−1 ∈ Zq [X]. Valoarea a(α) se obţine


folosind circuitul de ı̂mpărţire dat ı̂n Figura 8.3, cu următoarele observaţii:
8.2. EXTENSII GALOIS 95

• Se ignoră ieşirea;

• Coeficienţii lui a(X) se introduc la intrare ı̂n ordinea descrescătoare a puterilor;

• Iniţial, elementele de ı̂nmagazinare conţin valorile (0, 0, . . . , 0).

Pentru calculul unei valori de forma a(α)αj , (j ≥ 0 fixat), se pot construi circuite
liniare care să realizeze direct acest produs.

Exemplul 8.10 Fie α ∈ GF (24 ) element primitiv, soluţie a ecuaţiei 1+X+X 4 = 0.


Polinomul a(X) va avea atunci gradul maxim 3. Fie a(X) = a0 +a1 X +a2 X 2 +a3 X 3 .
Să construim un circuit liniar care să efectueze a(α)α5 .
Folosind tabelul din Exemplul 8.8, avem:
(a0 + a1 α + a2 α2 + a3 α3 )α5 = a0 α5 + a1 α6 + a2 α7 + a3 α8 = a0 (α + α2 ) + a1 (α2 +
α3 )+a2 (1+α+α2 )+a3 (1+α2 ) = (a2 +a3 )+(a0 +a2 )α+(a0 +a1 +a3 )α2 +(a1 +a2 )α3
Pentru acest polinom se va construi circuitul liniar:
-
6 -
6
a0 a1 a2 - a3 -
6 6 6 6
²¯ ²¯ ²¯ ²¯
-+ +¾ ? -+¾ ? -+
6 ±° ±° ±° ±°
¾
6 6 6 ? -6
¾ ?

La momentul iniţial, ı̂n elementele de ı̂nmagazinare se găsesc coeficienţii lui a(α);


după un tact, aici vor fi coeficienţii polinomului a(α)α5 .
96 PRELEGEREA 8. CIRCUITE LINIARE ŞI EXTENSII GALOIS

8.3 Exerciţii
8.1 Să se realizeze circuite liniar (ı̂n ambele modalităţi de construcţie) care să
efectueze ı̂nmulţiri cu polinoamele:
h(X) = 1 + 2X + 3X 2 + 4X 3 ∈ Z[X]
h(X) = 1 + 2X + X 5 ∈ Z7 [X]

8.2 Să se reprezinte comportamentul circuitelor realizate anterior, la ı̂nmulţirea cu


polinoamele:
a(X) = 2 + 5X + X 3 , a(X) = X − X 3 − 2X 4 , a(X) = 0.

8.3 Se dă cavântul g = (1, 0, 0, −1, 0, 1). Să se realizeze circuitul de ı̂nmulţire
cu polinomul corespunzător şi să se reprezinte comportamentul acestui circuit la
ı̂nmulţirea cu a = (1) şi a = (1, 1, 1, 0, 0, 0, 1).

8.4 Să se realizeze un circuit liniar care realizează produsul a(X)g(X) + b(X)h(X)
pentru polinoamele:
g(X) = 1 + X + X 3 , h(X) = 1 − 5X − 2X 2 + 3X 3 ;
g(X) = −4X 3 + X 5 − 2X 8 , h(X) = X 2 + 2X 4 + X 6 ;
g(X) = X − X 3 + 3X 4 , h(X) = 2X 3 + X 5 + X 9 .

8.5 Să se facă ı̂mpărţirea ı̂n Q[X] la polinomul g(X) = X 2 −2X +1 a polinoamelor
a(X) = X 5 − 4X 3 − 2X + 5, a(X) = X + 7.

8.6 Aceeaşi problemă pentru polinoamele g(X) = 2X −1 şi respectiv a(X) = X 3 −3.
(1) : În Q[X];
(2) : În Z3 [X].

8.7 Să realizeze un circuit care să efectueze (ı̂n Q) ı̂nmulţirea cu polinomul
g(X) = 1 − 2X + X 3 şi ı̂mpărţirea cu polinomul h(X) = g(X).

8.8 Aceeaşi problemă pentru polinoamele:


g(X) = X − 2X 3 − X 4 , h(X) = 2 + X + X 3 ı̂n Z5 [X];
g(X) = −1 + X − X 6 , h(X) = X 2 − 4X 3 − 2X 5 + 3X 7 ı̂n Z11 [X].

8.9 Să se rezolve problema enunţată ı̂n Exemplul 8.9.

8.10 Să se genereze toate puterile lui α, rădăcină a polinomului 1 + X 2 + X 5 ∈


Z2 [X] şi 1 + X + X 3 ∈ Z3 [X].

8.11 Folosind elementele din Exemplul 8.10 să se construiască circuite de generare
pentru a(α)α, a(α)α2 şi a(α)α7 .

8.12 Să se construiască circuite de generare ı̂n GF (25 ) pentru a(α) şi a(α)α10 ,
unde α este rădăcină a polinomului 1 + X 2 + X 5 ∈ Z2 [X].
Prelegerea 9

Coduri ciclice

9.1 Relaţii de recurenţă liniară


Teorema 9.1 Fie q prim şi f (X) ∈ Zq [X], grad(f (X) = n. În algebra poli-
noamelor modulo f (X), fie I un ideal şi g(X) polinomul de grad minim a cărui
clasă de resturi aparţine lui I : {g(X)} ∈ I. Atunci:

1. {s(X)} ∈ I ⇐⇒ g(X)|s(X);

2. g(X)|f (X).

Demonstraţie: (1): Fie {s(X)} ∈ I. Folosind identitatea ı̂mpărţirii, avem


s(X) = b(X)g(X) + r(X), grad(r(X)) < grad(g(X)).
Trecând la clasele de resturi respective, se obţine {s(X)} = {b(X)}{g(X)} +
{r(X)}. Cum {s(X)} ∈ I, {b(X)}{g(X)} ∈ I deoarece I este ideal, rezultă
{r(X)} ∈ I, absurd, deoarece g(X) este polinomul de grad minim a cărui clasă de
resturi aparţine idealului I. Deci r(X) ≡ 0, adică s(X) = b(X)g(X).
Reciproca este imediată, deoarece din s(X) = b(X)g(X) rezultă {s(X)} =
{b(X)}{g(X)} ∈ I.
(2): Prin ı̂mpărţirea polinomului f (X) cu g(X) se obţine
f (X) = c(X)g(X) + r(X) unde grad(r(X)) < grad(g(X)).
Avem 0 = {f (X)} = {c(X)}{g(X)} + {r(X)} de unde rezultă {r(X)} ∈ I, absurd;
deci r(X) ≡ 0. 2

Teorema 9.2 În algebra polinoamelor modulo f (X), pentru orice ideal I există un
polinom normat unic g(X) de grad minim, cu {g(X)} ∈ I.
Reciproc, pentru orice divizor normat al lui f (X) există un ideal generat de acel
divizor.

g(X) se numeşte generatorul idealului I şi scriem I = ({g(X)}).


Demonstraţie: Fie h(X) un polinom de grad minim cu {h(X)} ∈ I; vom nota
g(X) = h−1n h(X) unde hn este coeficientul termenului de grad maxim din polinomul
h(X)).
Să presupunem că g(X), g 0 (X) sunt două astfel de polinoame de grad minim,
normate, ale căror clase de resturi sunt ı̂n I. Conform Teoremei 9.1, g(X) şi g 0 (X)

97
98 PRELEGEREA 9. CODURI CICLICE

se divid unul pe altul şi - având acelaşi grad - diferă printr-o constantă. Polinoamele
fiind normate, această constantă este 1. Deci g(X) = g 0 (X).
Reciproc, fie g(X) un divizor normat al polinomului f (X) şi ({g(X)}) idealul
generat de el. Un element al acestui ideal este {a(X)} ∈ ({g(X)}), deci are forma
{a(X)} = {b(X)}{g(X)} = {b(X)g(X)}. 2
Teorema 9.3 Fie q un număr prim, f (X) ∈ Zq [X], normat, cu grad(f (X)) = n
şi fie f (X) = g(X)h(X). Dacă grad(h(X)) = k, atunci ı̂n algebra polinoamelor
modulo f (X), idealul ({g(X)}) are dimensiunea k.
Demonstraţie: Să observăm că vectorii (asociaţi polinoamelor)

{g(X)}, {Xg(X)}, . . . , {X k−1 g(X)}

sunt liniar independenţi. Într-adevăr, pentru orice k elemente c0 , . . . , ck−1 ∈ Zq , nu


toate nule, avem
c0 {g(X)} + c1 {Xg(X)} + . . . + ck−1 {X k−1 } = {(c0 + c1 X + . . . + ck−1 X k−1 )g(X)} 6= 0
deoarece s-a obţinut un polinom de grad cel mult n − k + k − 1 = n − 1 < n.
În acelaşi timp, pentru orice {s(X)} ∈ ({g(X)}) avem
{s(X)} = {a(X)g(X)} = {(a0 + a1 X + . . . + ak−1 X k−1 )g(X)} = a0 {g(X)} +
a1 {Xg(X)} + . . . + ak−1 {X k−1 g(X)}, unde unii din coeficienţii a0 , a1 , . . . , ak−1 pot
fi nuli.
Deci vectorii de sus formează o bază a subspaţiului liniar ({g(X)}), care are deci
dimensiunea k. 2
Teorema 9.4 Fie f (X) ∈ Zq [X] un polinom normat şi f (X) = g(X)h(X). În
algebra polinoamelor modulo f (X),
{a(X)} ∈ ({g(X)}) ⇐⇒ {a(X)} este ı̂n spaţiul nul al idealului ({h(X)}).
Demonstraţie: 00 =⇒00 : Fie {a(X) ∈ ({g(X)}), deci {a(X)} = {v(X)g(X)}.
Fie de asemenea {b(X)} ∈ ({h(X)}), deci {b(X)} ∈ {w(X)h(X)}. Vom avea
{a(X)}{b(X)} = {v(x)w(X)g(X)h(X)} = {v(X)w(X)f (X)} =
= {v(X)w(X)}{f (X)} = 0.
00
⇐=00 : Să considerăm {a(X)} ı̂n spaţiul nul al idealului ({h(X)}). Atunci
{a(X)}{h(X)} = 0, adică a(X)h(X) = c(X)f (X) = c(X)g(X)h(X) de unde
rezultă a(X) = c(X)g(X). Deci {a(X)} ∈ ({g(X)}). 2
Definiţia 9.1 Se numeşte relaţie de recurenţă liniară egalitatea
k
X
hj ai+j = 0 (1)
j=0
unde i ≥ 0, hk = 1, h0 6= 0, hj ∈ Zq , ai+j ∈ Zq .
Realţiile de recurenţă liniară se pot scrie şi
k−1
X
ai+k = − hj ai+j , i = 0, 1, . . .
j=0

O soluţie a unei astfel de relaţii de recurenţă liniară este orice succesiune infinită de
forma a0 , a1 , . . . , ap , . . . care verifică relaţia dată, cu h0 , h1 , . . . , hk date, h0 6= 0,
9.1. RELAŢII DE RECURENŢĂ LINIARĂ 99

hk = 1. Relaţia va determina succesiv pe ak din a0 , . . . , ak−1 , apoi pe ak+1 din


a1 , . . . , ak , ş.a.m.d.
Altfel spus, ”condiţiile iniţiale” a0 , a1 , . . . , ak−1 determină o soluţie a relaţiei de
recurenţă liniară.
Observaţii:

• Orice combinaţie liniară de soluţii ale unei relaţii de recurenţă liniară este tot
o soluţie.

• Soluţiile pentru care condiţiile iniţiale sunt respectiv (1, 0, . . . , 0), (0, 1, . . . , 0),
. . . , (0, 0, . . . , 1) determină orice altă soluţie. Deci, spaţiul soluţiilor relaţiei de
recurenţă (1) are dimensiunea cel mult k.

Fiind date condiţiile iniţiale (arbitrare) a0 , a1 , . . . , ak−1 , soluţia relaţiei de recurenţă


liniară (1) corespunzătoare lor se poate obţine folosind circuitul liniar
- +j - . . . - +j - +j -
6
º· º· 6 6
º· 6
º·
−h0 −h1 −hk−2 −hk−1
¹¸ ¹¸ ¹¸ ¹¸
¾ 6 aj ¾ 6
r aj+1 ¾ . . . ¾ 6
r aj+k−2 ¾ 6
r aj+k−1 ¾ ?

ı̂n care, la momentul iniţial, ı̂n elementele de ı̂nmagazinare se găsesc a0 , a1 , . . . , ak−1 .

Să considerăm acum polinomul (fixat) h(X) ∈ Zq [X], h(X) = h0 + h1 X + . . . +


hk X k , h0 6= 0, hk = 1, şi fie n cel mai mic număr natural pentru care X n − 1 se
divide cu h(X). Notăm
Xn − 1
g(X) = (2)
h(X)
Pe baza acestor date construim relaţia de recurenţă liniară
k−1
X
ai+k = − hj ai+j , i ≥ 0 (3)
j=0

Teorema 9.5

1. Soluţiile relaţiei de recurenţă (3) sunt periodice, de perioadă n.

2. Mulţimea formată din prima perioadă a fiecărei soluţii, scrisă ca polinom


a(X) = a0 X n−1 + . . . + an−2 X + an−1 constituie idealul ({g(X)}) ı̂n algebra
polinoamelor modulo X n − 1.

Demonstraţie: (a): Vom arăta că oricărui element {a(X)} ∈ ({g(X)}) cu


a(X) = a0 X n−1 + . . . + an−2 X + an−1 ı̂i corespunde o soluţie periodică
a1 , a1 , . . . , an−1 , a0 , a1 , . . . , an−1 , a0 , . . .
a relaţiei de recurenţă (3). Evident, nu este obligatoriu ca toţi coeficienţii ai să
fie nuli, gradul real al polinomului f (X) putând fi chiar zero.
100 PRELEGEREA 9. CODURI CICLICE

Fie {a(X)}{h(X)} = {c(X)}. Vom nota c(X) = c0 + c1 X + . . . + cn−1 X n−1 .


Avem:
- pentru k ≤ p ≤ n − 1, cp = h0 an−1−p + h1 an−1−p+1 + . . . + hk an−1−p+k (4)
- pentru 0 ≤ p < k, cp = h0 an−1−p + h1 an−1−p+1 + . . . + hp an−1 + hp+1 a0 + . . . +
hk ak−p−1 . (5)
Conform Teoremei 9.4, dacă {a(X)} ∈ ({g(X)}) atunci {a(X)}{h(X)} = 0,
adică cp = 0, (0 ≤ p ≤ n − 1).
Considerând (ai )i ca o succesiune periodică, vom avea evident ai+n = ai , i =
0, 1, . . .. Ţinând cont de aceasta introducând cp = 0 ı̂n (4) şi (5), se obţine (3).
(b): Idealul ({g(X)}) are dimensiunea k = grad(h(X)) (Teorema 9.3) şi fiecare
element al acestui ideal (polinom sau vector - după cum este scris) va da (conform
cu (a)) o soluţie a relaţiei de recurenţă liniară (3). Dar spaţiul soluţiilor relaţiei (3)
are dimensiunea cel mult k. Deci idealul ({g(X)} va da toate soluţiile relaţiei de
recurenţă liniară (3). Mai trebuie arătat că perioada acestor soluţii este chiar n.
Din cele de până acum a rezultat că perioada este cel mult n. Vom arăta că
soluţia corespunzătoare clasei de resturi {g(X)} are perioada n.
Să presupunem prin absurd că soluţia corespunzătoare lui {g(X)} are perioada
m < n. Dar n este divizibil cu m şi deci coeficienţii polinomului g(X) - considerat
n
ca fiind de grad n − 1 (prin completare cu coeficienţi nuli) formează blocuri care
m
se repetă.
Deci g(X) = q(X)(1 + X m + x2m + . . . + X n−m ) unde q(X) este un polinom de
Xn − 1
gradul m − 1. Relaţia se poate scrie şi g(X) = q(X) m .
X −1
Vom avea acum (X n − 1)(X m − 1) = g(X)h(X)(X m − 1) = q(X)h(X)(X n − 1)
adică X m − 1 = q(X)h(X), ceea ce contrazice definiţia numărului n (minim).
Deci m = n. 2

Exemplul 9.1 Să considerăm polinomul h(X) = 1+X +X 2 +X 4 ∈ Z2 [X]. Relaţia


de recurenţă liniară asociată este
ai+4 = ai+2 + ai+1 + ai , i ≥ 0.
Circuitul liniar corespunzător are forma
²¯ ²¯
-+ -+ -
6 ±° ±°
6 6
¾ ¾s ¾s ¾ ¾?

Cel mai mic n pentru care X n − 1 se divide cu h(X) este n = 7. Cum g(X) =
X7 − 1
= X 3 + X + 1, rezultă că circuitul va genera cuvintele idealului ({g(X)}).
h(X)
Fiecare din ele este caracterizat de cele patru valori binare iniţiale din elementele
de ı̂nmagazinare. Vor fi deci 24 = 16 cuvinte de lungime 7. Ele corespund tuturor
polinoamelor de grad maxim 6 din Z2 [X], care se divid cu g(X).
De exemplu, pentru valorile iniţiale (1, 0, 1, 1), funcţionarea circuitului timp de
şapte tacţi este:
9.2. DEFINIREA CODURILOR
Ieşire CICLICE 101
− 1 0 1 1
1 0 1 1 0
0 1 1 0 0
1 1 0 0 0
1 0 0 0 1
0 0 0 1 0
0 0 1 0 1
0 1 0 1 1

În elementele de ı̂nmagazinare se regăsesc valorile iniţiale, iar la ieşire s-a obţinut
polinomul f (X) = X 6 + X 4 + X 3 = X 3 g(X).

Exemplul 9.2 Circuitul liniar corespunzător polinomului


h(X) = 1 + X 3 + X 5 + X 6 +²¯
X 8 ∈ Z2 [X] este
²¯ ²¯
-+ -+ -+ -
6 ±° ±° ±°
6 6 6
¾ ¾ ¾ ¾r ¾ ¾r ¾r ¾ ¾ ?

El dă soluţiile relaţiei de recurenţă liniară ai + ai+3 + ai+5 + ai+6 + ai+8 = 0,


X 255 − 1
care formează idealul generat de polinomul g(X) = ideal compus din
h(X)
28 = 256 cuvinte de lungime 255.

9.2 Definirea codurilor ciclice


Fie n ≥ 2 un număr natural. Să notăm cu An algebra polinoamelor din Zq [X],
modulo X n − 1. După cum s-a convenit, identificăm cuvântul cuvântul a0 a1 . . . an−1
cu vectorul (a0 , a1 , . . . , an−1 ) şi cu polinomul a(X) = a0 + a1 X + . . . + an−1 X n−1 .
În cadrul dualismului vector - polinom vom face o deosebire: anularea produsului
a două polinoame nu ı̂nseamnă ortogonalitatea vectorilor corespunzători. Pentru
această situaţie se foloseşte următoarea propoziţie:

Propoziţia 9.1 Produsul a două polinoame este zero dacă şi numai dacă toate
produsele scalare dintre vectorul unui polinom şi permutările ciclice ale vectorilor
celuilalt polinom sunt zero.
n−1
X n−1
X
i
Demonstraţie: Fie a(X), b(X) ∈ Zq [X], a(X) = ai X , b(X) = bi X i .
i=0 i=0
Atunci {c(X)} = {a(X)}{b(X)} = {c0 + c1 X + . . . + cn−1 X n−1 } unde
j
X n−1
X
cj = ai bj−i + ai bj+n−i = (a0 a1 . . . an−1 ) · (bj bj−1 . . . b0 bn−1 bn−2 . . . bj+1 )T
i=0 i=j+1
şi Propoziţia rezultă din faptul că cj = 0 ∀j. 2

Definiţia 9.2 Un subspaţiu liniar Vn ⊂ An se numeşte ciclic dacă

(a0 , a1 , . . . , an−1 ) ∈ Vn =⇒ (an−1 , a0 , . . . , an−2 ) ∈ Vn .

Teorema 9.6 Un subspaţiu liniar Vn ⊆ An este ciclic dacă şi numai dacă este ideal.
102 PRELEGEREA 9. CODURI CICLICE

Demonstraţie: Înmulţirea cu clasa de resturi {X} ı̂nseamnă de fapt permutarea


ciclică a componentelor cu o unitate spre dreapta, pentru că:
{X}{a0 + a1 X + . . . + an−1 X n−1 } = {an−1 + a0 X + . . . + an−2 X n−1 }
”⇐=”: Dacă Vn ⊆ An este ideal, atunci pentru orice v ∈ Vn avem v0 = {X}v ∈ Vn
(s-a notat tot cu v clasa de resturi modulo X n − 1 corespunzătoare polinomului ai
cărui coeficienţi sunt componentele vectorului v). Deci Vn este ciclic.
”=⇒”: Presupunem că subspaţiul liniar Vn ⊆ An este ciclic şi fie v ∈ Vn . Atunci,
din {X}v ∈ Vn rezultă {X j }v ∈ Vn , ∀j = 1, . . . , n − 1. Deci
{c0 + c1 X + . . . + cn−1 X n−1 }v ∈ Vn , adică Vn este ideal ı̂n An . 2
Definiţia 9.3 Se numeşte cod ciclic un ideal din An .
Codurile ciclice au fost introduse de Prange (1957), care a evidenţiat bogăţia de
informaţie rezultată din structura lor algebrică.

9.3 Generarea codurilor ciclice


Pentru a construi un cod ciclic se foloseşte structura idealelor ı̂n algebra modulo
X n −1. Fie I un ideal ı̂n An şi g(X) polinomul normat de grad minim cu {g(X)} ∈ I.
Atunci (Teorema 9.1) {f (X)} ∈ I dacă şi numai dacă g(X)|f (X).
De asemenea, g(X)|X n − 1. Oricărui divizor al lui X n − 1 ı̂i corespunde un ideal
ı̂n An , generat de el.
Pentru a da un cod ciclic este suficient să dăm generatorul său g(X), divizor al
lui X n − 1. Fie g(X) = g0 + g1 X + . . . + gn−k X n−k , (k < n). O bază a idealului
({g(X)}) se poate alege (Teorema 9.3)

{g(X)}, {Xg(X)}, . . . , {X k−1 g(X)}.

Matricea generatoare

corespunzătoare codului ciclic va fi 
g0 g1 . . . gn−k 0 0 ... 0

 0 g 0 . . . g n−k−1 gn−k 0 ... 0 

Gn,k = 
 .
..


 
0 0 ... 0 g0 g1 . . . gn−k
Rezultă că un cod ciclic poate fi organizat ca un (n, k) - cod liniar, unde n este
Xn − 1
gradul polinomului X n − 1 iar k este gradul polinomului h(X) = .
g(X)
Exemplul 9.3 Codul cu repetiţie este un cod ciclic al cărui polinom generator este
g(X) = 1 + X + X 2 + . . . + X n−1 .

Exemplul 9.4 Să considerăm codul ciclic binar A de lungime 7, cu polinomul gen-
erator g(X) = 1 + X + X 3 (vezi şi Exemplul 9.1). El are matricea generatoare
 
1 1 0 1 0 0 0
 0 1 1 0 1 0 0 
G= 

.
 0 0 1 1 0 1 0 
0 0 0 1 1 0 1
9.3. GENERAREA CODURILOR CICLICE 103

Exemplul 9.5 Fie codul ciclic de lungime 6 peste Z3 , de polinom generator g(X) =
2 + X 2 . Matricea sa generatoare

este 
2 0 1 0 0 0
 0 2 0 1 0 0 
 
G= .
 0 0 2 0 1 0 
0 0 0 2 0 1
El este deci un (6, 4) - cod ternar.

Idealul generat de {g(X)} este spaţiul nul al idealului ({h(X)}) unde


Xn − 1
h(X) = . Acest ideal ({h(X)}) se construieşte luând ca bază polinoamele
g(X)

{h(X)}, {Xh(X)} . . . , {X n−k−1 h(X)}.

Ţinând cont de Propoziţia 9.1, pentru a construi matricea de control H a codului


ciclic ({g(X)}), luăm ca linii ale matricii cele n − k polinoame de sus, cu ordinea
componentelor inversată.

Exemplul 9.6 Să reluăm codul din Exemplul 9.4. Deoarece X 7 − 1 = (1 + X)(1 +
X + X 3 )(1 + X 2 + X 3 ), pentru acest cod, avem
h(X) = (1 + X)(1 + X + X 3 ) = 1 + X 2 + X 3 + X 4 .
Matricea generatoare  a codului ({h(X)}) este
1 0 1 1 1 0 0
 
 0 1 0 1 1 1 0 .
0 0 1 0 1 1 1
deci matricea de control
 asociată codului din
 Exemplul 9.4 va fi
0 0 1 1 1 0 1
 
H =  0 1 1 1 0 1 0 .
1 1 1 0 1 0 0
Deoarece coloanele sale sunt nenule şi distincte două câte două, codul astfel cons-
truit este echivalent cu un cod Hamming (7, 4).

Pentru a obţine un cod ciclic sistematic, este convenabil să alegem o altă bază pentru
idealul ({g(X)}). Să observăm că pentru i = n − k, n − k + 1, . . . , n − 1, putem scrie

X i = qi (X)g(X) + ri (X) cu grad(ri (X)) < grad(g(X)) = n − k.

Deci {X i − ri (X)} ∈ ({g(X)}), i = n − k, n − k + 1, . . . , n − 1.


Această mulţime de vectori este liniar independentă şi conduce la o matrice
generatoare de forma
G = [−R I]
unde linia j din matricea R este vectorul coeficienţilor lui rj (X) pentru j = n −
k, . . . , n − 1. Codul obţinut este deci sistematic, iar matricea sa de control se scrie
imediat:
H = [I RT ]
De remarcat că matricea H T are pe linii componentele resturilor ri (X) pentru i =
0, 1, . . . , n − 1.
104 PRELEGEREA 9. CODURI CICLICE

Exemplul 9.7 Să luăm din nou X 7 − 1 = g(X)h(X) peste Z2 , unde


g(X) = 1 + X 2 + X 3 , h(X) = 1 + X 2 + X 3 + X 4 (deci n = 7, k = 4). Avem
X0 = 0g(X) + 1
X1 = 0g(X) + X
X2 = 0g(X) + X2
X3 = g(X) + 1 + X2
X4 = (1 + X)g(X) + 1 + X + X2
X5 = (1 + X + X 2 )g(X) + 1 + X
X6 = (X + X 2 + X 3 )g(X) + X + X2
Baza corespunzătoare idealului ({g(X)}) este
{1 + X 2 + X 3 }, {1 + X + X 2 + X 4 }, {1 + X + X 5 }, {X + X 2 + X 6 }
care conduce la matricea generatoare

a unui cod sistematic:

1 0 1 1 0 0 0
 1 1 1 0 1 0 0 
G7,4 = 

 = [−R4,3 I4 ].
 1 1 0 0 0 1 0 
0 1 1 0 0 0 1
Matricea de control corespunzătoare
 se scrie simplu:

1 0 0 1 1 1 0
H7,3 =  
 0 1 0 0 1 1 1  = [I3 R3,4 T
].
0 0 1 1 1 0 1

9.4 Generarea automată a codurilor ciclice


Codurile ciclice sunt coduri a căror implementare este mult facilitată de circuitele
liniare. Cu ajutorul acestora se poate realiza automat codificarea, calculul sindro-
mului, corectarea şi detectarea erorilor.
În construcţia practică vom distinge două cazuri:

9.4.1 Circuit cu k elemente de ı̂nmagazinare


Este o metodă de generare a codurilor ciclice, avantajoasă dacă sunt mai puţine
simboluri de informaţie decât de control: k < n − k.
Xn − 1
Fie codul ciclic ({g(X)}) ⊆ An şi h(X) = = h0 + h1 X + . . . + hk X k cu
g(X)
h0 6= 0, hk = 1. Conform Teoremei 9.5, idealul ({g(X)}) este generat de circuitul
liniar care construieşte secvenţial soluţiile relaţiei de recurenţă liniară
k
X
hj ai+j = 0, i = 0, 1, . . .
j=0

Mesajul de informaţie care trebuie codificat - conţinând k simboluri pe fiecare bloc


- se introduce la momentul iniţial ı̂n elementele de ı̂nmagazinare ale circuitului,
sub formă de ”condiţii iniţiale”. Lăsând circuitul să funcţioneze, obţinem după n
momente cuvântul - cod corespunzător, aparţinând idealului ({g(X)}) şi având pe
primele k poziţii elementele de informaţie.
9.4. GENERAREA AUTOMATĂ A CODURILOR CICLICE 105

Exemplul 9.8 Circuitul liniar construit ı̂n Exemplul 9.1 este un circuit de codificare
pentru codul generat de polinomul g(X) = 1 + X + X 3 . Exemplul descrie şi un mod
de funcţionare pentru cuvântul de informaţie 1011.
Dacă s-ar lua drept polinom generator 1 + X 2 + X 3 + X 4 , idealul generat de el
este dat de circuitul liniar
²¯
- + -
6 ±°
¾ ¾ ¾ s6 ¾ ?

X7 − 1
deoarece h(X) = 2 3 4
= 1 + X 2 + X 3.
1+X +X +X

9.4.2 Circuit cu n − k elemente de ı̂nmagazinare


Este o strategie avantajos de utilizat ı̂n cazul n − k < k.
Dacă interpretăm mesajul de informaţie ca un polinom de gradul k − 1, atunci
codificarea se poate face utilizând un circuit de ı̂nmulţire cu polinomul generator
g(X) (vezi Prelegerea anterioară). La decodificare se recapătă mesajul iniţial (dacă
nu au apărut erori) folosind un circuit de ı̂mpărţire cu g(X).
Exemplul 9.9 Codul ciclic de polinom generator g(X) = 1 + X + X 3 poate codifica
mesajele de informaţie folosind circuitul liniar:
²¯ ²¯
- + - + -
6 ±° ±°
u3 u2 u1 u0 - - 6
s- -6

Astfel, mesajul de informaţie u = 1001 se codifică ı̂n v = 1100101, conform


calculelor:
v(X) = u(X)g(X) = (1 + X 3 )(1 + X + X 3 ) = 1 + X + X 4 + X 6
Pentru decodificare se foloseşte circuitul
¾ s - u(X)
?
²¯ ?
²¯ 6
v(X) - ±°
+ - -+ -
±°
- -

Dezavantajul unei asemenea metode ı̂l constituie faptul că, nefiind un cod sis-
tematic, prin codificare poziţiile de informaţie se pierd. Pentru a obţine un cod
sistematic, procedăm ı̂n felul următor: mesajul de informaţie este considerat un
polinom u0 (X) de gradul n − 1 având poziţiile de informaţie drept coeficienţii lui
X n−k , . . . , X n−1 , restul coeficienţilor fiind nuli. Atunci avem u0 (X) = q(X)g(X) +
r(X) cu grad(r(X)) < grad(g(X)) = n − k de unde

{u0 (X) − r(X)} ∈ ({g(X)}).

{u0 (X) − r(X)} reprezintă un cuvânt - cod ı̂n care coeficienţii lui X n−k , . . . , X n−1
sunt poziţiile de informaţie nealterate, iar coeficienţii lui r(X) cu semnul schimbat
(deci coeficienţii lui X 0 , X 1 , . . . , X n−k−1 ) sunt caracterele de control.
Circuitul care realizează această codificare este următorul:
106 PRELEGEREA 9. CODURI CICLICE
i
P
PP
¾ s s ... ¾ s P¾

? #Ã
? #Ã
? #Ã
? #Ã6
−1
−g0 −g1 −g2 −gn−k−1 gn−k

"! "!"! "!"!


?
²¯ ?
²¯ ?
²¯ ²¯6
?
- -+ - - +- ... - + - -r +
±° ±° ±° ?±°
²¯
−1 6-´3́ -
±°
u(X) s - Canal

El funcţionează astfel:
• Iniţial cele n − k elemente de ı̂nmagazinare conţin 0, ı̂ntrerupătorul de ieşire
este decuplat iar cel de feedback - cuplat.
• Se introduc cele k elemente ale mesajului de informaţie atât ı̂n circuit cât şi
ı̂n canalul de comunicaţie. După k momente, ı̂n elementele de ı̂nmagazinare
avem coeficienţii restului r(X).
• Se decuplează feedbackul şi se cuplează circuitul la canalul de comunicaţie.
• Coeficienţii restului - cu semn schimbat - se transmit ı̂n canal imediat după
poziţiile de informaţie.
Deoarece provine din circuitul de ı̂mpărţire cu g(X), acelaşi circuit poate fi folosit
şi pentru detectarea erorilor la recepţie. Pentru aceasta, după decuplarea ı̂ntrerupă-
torului de ieşire şi cuplarea celui de feedback, se introduce ı̂n circuit cuvântul
recepţionat. Dacă ı̂n momentul n restul nu este nul (cel puţin un element de
ı̂nmagazinare conţine un element nenul) ı̂nseamnă că a apărut cel puţin o eroare
ı̂n transmisie.
Exemplul 9.10 Codul de lungime 7 generat de g(X) = 1 + X 2 + X 3 , poate fi
construit folosind circuitul liniar:
¾ r Z
}

? 6
?
- - - +j - -
r +j
? -½ >-
½
6 - Canal
u3 u2 u1 u0 r

9.5 Exerciţii
9.1 Să se determine toate codurile ciclice de lungime 5
(a) : peste Z2 ; (b) : peste Z3 .

9.2 Construiţi o bază pentru cel mai mic cod ciclic de lungime n care conţine
cuvântul v:
(a) v = 1101000, n = 7;
(b) v = 010101, n = 6;
(c) v = 11011000, n = 8.

9.3 Pentru fiecare din cuvintele de mai jos găsiţi polinomul generator al celui mai
mic cod ciclic care conţine cuvântul:
9.5. EXERCIŢII 107

010010 01100110 0101100


001000101110000 000010010000000 010111010000000

9.4 Să se afle polinomul generator al codului ciclic C ştiind o bază S a sa:
S = {010, 011, 111};
S = {1010, 0101, 1111};
S = {0101, 1010, 1100};
S = {1000, 0100, 0010, 0001};
S = {11000, 01111, 11110, 01010}.

9.5 Într-o codificare sistematică, codificaţi mesajul de informaţie 1101 ı̂ntr-un cu-
vânt - cod al unui cod binar ciclic de lungime 7 cu polinomul generator g(X) =
1 + X 2 + X 3.

9.6 Pentru codul definit mai sus codificaţi mesajele de informaţie date de poli-
noamele: 1 + X 2 , X, X + X 2 + X 3 .
Fiind date cuvintele - cod X 2 + X 4 + X 5 , 1 + X + X 2 + X 4 , X 2 + X 3 + X 4 + X 6 ,
găsiţi mesajele de informaţie corepunzătoare.

9.7 Construiţi circuite liniare pentru codificare şi decodificare ale codului ciclic bi-
nar de lungime 7 generat de polinomul g(X) = (1 + X 2 + X 3 )(1 + X).

9.8 Care este lungimea minimă a unui cod ciclic binar de polinom generator
g(X) = 1 + X 2 + X 3 + X 4 ?
Construiţi circuite liniare pentru codificarea şi decodificarea sa.

9.9 Construiţi un circuit liniar pentru codificarea (15, 11) - codului Hamming binar.

9.10 Construiţi matricea de control a codului ciclic binar de lungime n şi polinom
generator g(X):
n = 6, g(X) = 1 + X 2 ;
n = 8, g(X) = 1 + X 2 ;
n = 9, g(X) = 1 + X 3 + X 6 ;
n = 15, g(X) = 1 + X + X 4 (generează codul Hamming);
n = 23, g(X) = 1 + X + X 5 + X 6 + X 7 + X 9 + X 11 (generează codul Golay);
n = 15, g(X) = 1 + X 4 + X 6 + X 7 + X 8 .

9.11 Sunt ciclice codurile liniare binare definite de matricile generatoare definite
mai jos ?
   
1 0 1 1 1 0 0 1 1 1 1 0 0 0
 1 1 0 1 0 0 0   0 1 1 1 1 0 0 
   
   
 1 1 0 0 1 0 1   0 0 1 1 1 1 0 
0 0 1 0 1 1 1 0 0 0 1 1 1 1

9.12 Arătaţi că dacă polinomul generator al unui cod binar se divide cu polinomul
1 + X, atunci toate cuvintele sale au pondere pară.
Reciproca este adevărată ?
108 PRELEGEREA 9. CODURI CICLICE

9.13 Daţi o condiţie necesară şi suficientă pentru polinomul generator al unui cod
ciclic de lungime impară pentru ca 11 . . . 1 să fie cuvânt - cod.

9.14 Arătaţi că dacă g(X) generează un (n, k) - cod ciclic, atunci g(X i ) generează
un (in, kn) - cod ciclic.
Descrieţi codurile pentru g(X) = 1 + X şi g(X) = 1 + X + X 3 cu n = 7.

9.15 Arătaţi că intersecţia a două coduri ciclice de aceeaşi lungime este tot un cod
ciclic.
Care este polinomul său generator ?
Prelegerea 10

Decodificarea codurilor ciclice

După cum se ştie de la codurile liniare, o caracterizare importantă a tipurilor de


erori care pot apare ı̂n transmisia mesajelor este dată de sindrom. În cazul codurilor
ciclice este convenabil să lucrăm cu un sindrom polinomial.
Definiţia 10.1 Fie A un cod ciclic de lungime n cu polinomul generator g(X). Se
numeşte ”sindrom polinomial” s(X) al cuvântului a de lungime n, restul ı̂mpărţirii
polinomului corespunzător a(X) la g(X).
Deci, dacă se transmite cuvântul - cod q(X)g(X) şi se primeşte a(X), sindromul va
fi
e(X) = a(X) − q(X)g(X), grad(e(X) < grad(g(X)).
Observaţii:
• Deoarece a(X) − e(X) este divizibil cu g(X), rezultă că resturile ı̂mpărţirii lui
a(X) şi e(X) la g(X) coincid. Deci se poate vorbi despre ”tipul de eroare” e.
• Similar cu raţionamentul de la coduri liniare, sindromurile vor fi toate poli-
noamele din Zq [X] de grad < n − k; pentru fiecare sindrom s(X) putem alege
o eroare - tip e(X) de pondere minimă care are acel sindrom.
Structura algebrică a codurilor ciclice permite construcţia de metode de decodificare
(cu corectarea posibilelor erori aferente) mai eficiente decât algoritmii similari de la
codurile liniare.
Vom ı̂ncepe cu prezentarea unui exemplu.
Exemplul 10.1 Fie A codul Hamming de lungime 7, care are polinomul generator
g(X) = 1 + X + X 3 (Prelegerea 9, Exemplele 9.4 şi 9.6).
Eroare - tip Sindrom
0 0
1 1
X X
X2 X2
X3 1+X
X4 X + X2
X5 1 + X + X2
X6 1 + X2

109
110 PRELEGEREA 10. DECODIFICAREA CODURILOR CICLICE

Sindromul cuvântului recepţionat a = 1011001 este restul ı̂mpărţirii lui X 6 + X 3 +


X 2 + 1 la X 3 + X + 1, adică s(X) = X + 1. Se ştie că orice cod Hamming corectează
o eroare, deci va fi util să avem un tabel cu sindromurile tuturor erorilor - tip
e(X) = X i (0 ≤ i ≤ 6). Pentru că X + 1 este sindromul lui e(X) = X 3 , tragem
concluzia că a fost perturbat al treilea bit şi vom decodifica

a(X) − e(X) = 1011001 − 0001000 = 1010001.

O dificultate ı̂n această metodă de decodificare bazată pe sindrom constă ı̂n necesi-
tatea de a lista toate erorile - tip corespunzătoare sindromurilor şi de a le parcurge la
recepţia fiecărui cuvânt. O simplificare este ı̂nsă propusă de Meggitt (1960), bazată
pe structura ciclică a codurilor. Vom face corecţia numai pentru ultimul caracter
(de grad maxim) al cuvântului a recepţionat. După aceea se efectuează o permutare
ciclică şi se studiază din nou ultimul caracter. În acest fel, după n permutări ciclice,
toate poziţiile au fost corectate.
Metoda prezintă două avantaje majore:

1. Se foloseşte o listă a erorilor - tip numai pentru sindromurile de grad n − 1.


(Astfel, ı̂n Exemplul 10.1 numai un sindrom are gradul 6).

2. Calculul sindromului se efectuează o singură dată– la ı̂nceput – folosind cir-


cuitul liniar de ı̂mpărţire cu g(X). După ce a funcţionat n momente, ı̂n ele-
mentele de ı̂nmagazinare se găseşte sindromul. După aceea se neglijează ieşirea
şi se lasă să funcţioneze circuitul. La fiecare pas (Prelegerea 8, Figura 8.4) sin-
dromul se ı̂nmulţeşte cu X, având ca efect permutarea sa ciclică cu o poziţie.

Propoziţia 10.1 Dacă un cuvânt a = (a0 , a1 , . . . , an−1 ) are sindromul s(X), atunci
permutarea sa ciclică are sindromul s0 (X), care este restul ı̂mpărţirii lui Xs(X) la
polinomul generator g(X).

Demonstraţie: Sindromul s(X) este dat de identitatea ı̂mpărţirii


a(X) = q(X)g(X) + s(X)
unde q(X) este câtul ı̂mpărţirii lui a(X) la g(X). Deoarece se lucrează ı̂n alge-
bra polinoamelor modulo X n − 1, permutarea ciclică a lui {a(X)} este {a0 (X)} =
{Xa(X)}, construit astfel:
a0 (X) = Xa(X) − an−1 X n + an−1 = Xa(X) − an−1 (X n − 1) =
= Xa(X) − an−1 g(X)h(X) = Xq(X)g(X) + Xs(X) − an−1 g(X)h(X) =
= Xs(X) + g(X)[Xq(X) − an−1 h(X)].
Rezultă de aici că resturile ı̂mpărţirii lui a0 (X) şi Xs(X) la polinomul generator
g(X) sunt aceleaşi. 2
Se poate da acum
111

Algoritmul de decodificare Meggitt pntru (n, k) - codurile ciclice


binare:

1. Se listează toate sindromurile reprezentate prin polinoame de grad


n − k − 1;

2. Cuvântul recepţionat a este introdus ı̂n circuitul liniar de ı̂mpărţire cu


g(X), care va funcţiona n tacţi;

3. Dacă sindromul rezultat este ı̂n listă, se modifică bitul cel mai din dreapta
al cuvântului primit;

4. Simultan se permută ciclic cuvântul primit şi şi se lasă să funcţioneze un
tact circuitul liniar (neglijând ieşirea), după care se reia Pasul (3).
Se repetă acest procedeu de n − 1 ori.

Exemplul 10.2 Reluând codul Hamming din Exemplul 10.1, algoritmul va lucra
astfel:
- Singurul sindrom din listă este 1 + X 2 .
- Dacă se recepţionează de exemplu a = 1011001, el se introduce ı̂n circuitul
liniar
¾
6
? ? -
1011001 - +j
- 1 - +j
- 1 - 0

După 7 tacţi, ı̂n elementele de ı̂nmagazinare se obţine sindromul 110.


- 110 nu este pe listă, deci a6 a fost corect.
- Se permută circular a ı̂n 1101100 şi se lasă circuitul să funcţioneze un tact;
elementele de ı̂nmagazinare vor conţine 011.
- Nici acest sindrom nu este pe listă, deci a5 a fost corect, etc.
Paşii de lucru ai algoritmului sunt reprezentaţi ı̂n tabloul:
Pas Bit Sindrom
7 a6 110
8 a5 011
9 a4 111
10 a3 101
11 a2 100
12 a1 010
13 a0 001
Deci singurul bit corectat (unde se transformă 1 ı̂n 0) este a3 .

Exemplul 10.3 Să considerăm codul ciclic binar generat de polinomul g(X) = 1 +
X 4 + X 6 + X 7 + X 8 . El este un (15, 7) - cod de distanţă d = 5 (după cum vom
vedea mai târziu) deci poate corecta 2 erori. Lista completă a sindromurilor (deci a
0 1 2
tuturor erorilor - tip de pondere 0, 1, 2) are C15 +C15 +C15 = 121 elemente. Folosind
algoritmul Meggitt, numărul lor se reduce la 15, anume
112 PRELEGEREA 10. DECODIFICAREA CODURILOR CICLICE

Tip eroare Sindrom


14
X X + X6 + X5 + X3
7

1 + X 14 X7 + X6 + X5 + X3 + 1
14
X +X X7 + X6 + X5 + X
X 2 + X 14 X7 + X6 + X5 + X3 + X2
3 14
X +X X7 + X6 + X5
X 4 + X 14 X7 + X6 + X5 + X4 + X3
X 5 + X 14 X7 + X6 + X3
6 14
X +X X7 + X5 + X3
X 7 + X 14 X6 + X5 + X3
8 14
X +X X + X4 + X3 + 1
5

X 9 + X 14 X7 + X4 + X3 + X + 1
X 10 + X 14 X3 + X2 + X
11 14
X +X X + X + X + X4 + X2 + X
7 6 5

X 12 + X 14 X7 + X6 + X4 + X
13 14
X +X X7 + X4 + X3 + X2

Deci, la primirea unui cuvânt a de lungime 15, vom calcula sindromul şi - dacă
acesta se află ı̂n tabelul de sus - vom modifica bitul a14 . Apoi se face o permutare
ciclică şi se corectează a13 , ş.a.m.d.

De remarcat că ı̂n Exemplul 10.3 decodificarea nu este completă: algoritmul Meggitt
corectează ı̂n total 121 erori - tip. Privit ı̂nsă ca un cod liniar tabela de decodificare
va avea 215 /27 = 256 linii. Deci cu algoritmul Meggitt se vor corecta toate erorile
simple sau duble ignorând complet posibilitatea altor tipuri de erori.
Vom ı̂ncerca ı̂n continuare să ı̂mbunătăţim această situaţie.

10.1 Corectarea pachetelor de erori


Fie A ⊆ An un (n, k) - cod ciclic peste Zq capabil să corecteze t erori.

Definiţia 10.2 Pentru un polinom e(X) = X s e0 (X) ∈ Zq [X] cu e0 (0) = 1, spunem


că ”lungimea pachet” a lui e este 1 + grad(e0 (X)).
Cuvântul e ∈ Zqn este un ”pachet - tip de lungime j” dacă gradul minim al
polinoamelor {X s e(X)} este j − 1.

Dacă se trimite un cuvânt v şi se recepţionează a, spunem că erorile au afectat


j poziţii dacă eroarea - tip e = a − v este un pachet - tip de lungime j.

Exemplul 10.4 Fie n = 7 şi e = 0101100. Atunci e(X) = X + X 3 + X 4 =


X(1 + X 2 + X 3 ). Efectuând toate permutările ciclice, se obţine că toate au grad mai
mare decât 3, ı̂nafară de {X 6 e(X)} = {1 + X 2 + X 3 }, tot de gradul 3. Deci e este
un pachet - tip de lungime 4.
Dacă se ia e = 1000100, 1 + X 4 are gradul 4, dar permutarea ciclică {X 3 (1 +
X 4 )} = {1 + X 3 } are gradul 3, deci şi acesta este un pachet - tip de lungime 4.
10.2. DETECTAREA PACHETELOR DE ERORI 113

Reamintim că la codurile liniare se construia un tablou standard ı̂n care pe fiecare
linie se aflau toate cuvintele cu acelaşi sindrom. Codul era corector de t erori dacă
toate cuvintele din Zqn de pondere cel mult t erau pe linii diferite; acestea constituiau
reprezentanţii sindromurilor şi apăreau pe prima coloană, fiind considerate erori -
tip pentru fiecare linie.
Astfel de tabele se pot construi şi pentru codurile ciclice; aici se iau ca reprezen-
tanţi ı̂n fiecare linie, pachetele de erori de lungime minimă. În acest fel, un cod
liniar corector de t erori (independente) este corector de pachete de j erori dacă
toate cuvintele de lungime - pachet cel mult j sunt reprezentanţi.
Lema 10.1 Dacă un cod A este corector de t erori independente şi corector de
pachete de j erori, atunci t ≤ j.
Demonstraţie: Exerciţiu. 2

Definiţia 10.3 Un (n, k) - cod ciclic corectează pachetele de j erori dacă orice
pachet - tip de lungime cel mult j este un sindrom.

Exemplul 10.5 Să considerăm toate pachetele - tip nenule de lungime cel mult 3
ı̂n Z215 . Fiecare astfel de cuvânt este de forma
{e(X)} = {X s e0 (X)} cu 0 ≤ s ≤ 14 şi e0 (X) ∈ {1, 1 + X, 1 + X 2 , 1 + X + X 2 }.
În total sunt 15 · 4 = 60 astfel de pachete de erori.

Exemplul 10.6 Fie g(X) = 1 + X + X 2 + X 3 + X 6 polinomul generator al unui


(15, 9) - cod ciclic binar. El nu este un cod corector de 3 erori independente pentru
că sunt 576 tipuri de erori de pondere cel mult 3 şi numai 215 /29 = 64 sindromuri.
În schimb sunt numai 61 pachete - tip de lungime maxim 3 (Exemplul 10.5, la care
se adaugă pachetul nul), deci acest cod poate corecta pachetele de 3 erori. Faptul că
este un cod ciclic corector de pachete de 3 erori rezultă din calculul sindromurilor
polinoamelor {X s e0 (X)} unde 0 ≤ s ≤ 14 şi e0 (X) ∈ {1, 1 + X, 1 + X 2 , 1 + X + X 2 }.

10.2 Detectarea pachetelor de erori


Teorema 10.1 Un (n, k) - cod ciclic detectează orice pachet de maxim n − k erori.

Demonstraţie: Dacă {e(X)} este o eroare - tip de lungime cel mult n − k, atunci
e(X) = X s e0 (X) cu grad(e0 (X)) < n − k. Fie g(X) polinomul generator al codului,
cu grad(g(X)) = n − k.
Ştim că {e(X)} este cuvânt - cod ⇐⇒ g(X)|e(X).
Cum g(X)|X n − 1, el va fi prim cu X s ; deci {e(X)} este ı̂n cod dacă şi numai
dacă g(X)|e0 (X), absurd deoarece grad(e0 (X)) < n − k = grad(g(X)). 2
Teorema 10.2 Proporţia pachetelor - tip de j > n − k erori pe care nu le poate
detecta un (n, k) - cod ciclic este
q −(n−k−1)
dacă j = n − k + 1
q−1
−(n−k)
q dacă j > n − k + 1.
114 PRELEGEREA 10. DECODIFICAREA CODURILOR CICLICE

Demonstraţie: Fie {e(X)} = {X s e0 (X)} unde grad(e0 (X)) = j − 1. Să numărăm


câte asemenea pachete - tip de erori sunt posibile. Ca prim şi ultim coeficient al
lui e0 (X) poate fi orice element din Zq \ {0} (ı̂n număr de q − 1), iar coeficienţii
intermediari pot fi orice elemente din Zq (ı̂n număr de q). Deci sunt (q − 1)2 q j−2
pachete - tip de eroare care ı̂ncep şi se termină ı̂n aceeaşi poziţie.
Un pachet - tip de eroare {e(X)} nu este detectat de un (n, k) - cod ciclic
dacă şi numai dacă {e(X)} este cuvânt - cod, adică e0 (X) = g(X)h(X), unde
grad(h(X)) = grad(e0 (X)) − grad(g(X)) = j − 1 − (n − k). Deci polinomul h(X)
are j − n + k coeficienţi. Apar două situaţii:

1. grad(h(X)) = 0, adică j = n − k + 1. Atunci h(X) se reduce la o constantă


şi există q − 1 asemenea polinoame h(X). Deci, raportul dintre numărul pa-
chetelor - tip de lungime j nedetectabile şi numărul total al pachetelor - tip
de lungime j care pot fi localizate este

q−1 q −(n−k−1)
= .
(q − 1)2 q j−2 q−1

2. Dacă grad(h(X)) > 0, adică j > n−k+1, vom avea (q−1)2 q j−n+k−2 polinoame
h(X) posibile (pachete - tip de lungime j) nedetectabile. Rezultă că raportul
de sus este ı̂n acest caz

(q − 1)q j−n+k−2
2 j−2
= q −(n−k) .
(q − 1) q

Exemplul 10.7 Codul ciclic definit ı̂n Exemplul 10.6 detectează orice pachet de
maxim 9 erori.
Dintre pachetele de 10 erori posibile care pot apare, doar 1/28 nu pot fi detectate,
iar dintre pachetele de 11 − 15 erori nu pot fi detectate 1/29 .

10.3 Corectarea pachetelor de erori


Algoritmul este o variantă a Algoritmului Meggitt.
Fie A = ({g(X)}) un (n, k) - cod ciclic corector de pachete - tip de j erori şi
a ∈ Zqn un cuvânt recepţionat.

1. Se calculează sindromul {s(X)};

2. Pentru fiecare i ≥ 0 se calculează si (X) = X i s(X) mod g(X), până se


ajunge la un p cu grad(sp (X)) < j − 1.
Atunci eroarea - tip este {e(X)} = {X n−p sp (X)} şi se generează cuvântul
a + e.
10.4. TRANSPUNERE 115

Exemplul 10.8 Polinomul g(X) = 1 + X + X 2 + X 3 + X 6 generează un (15, 9) -


cod ciclic corector de pachete - tip de 3 erori. Să folosim algoritmul de sus pentru a
decodifica a = 111100100001010.
s(X) = 1 + X + X 2 + X 3 + X 6 + X 11 + X 13 (mod g(X)) = 1 + X 3 + X 4 + X 5 .
s1 (X) = Xs(X) (mod g(X)) = 1 = X 2 + X 3 + X 4 + X 5 ,
s2 (X) = X 2 s(X) = 1 + X 2 + X 4 + X 5 ,
s3 (X) = X 3 s(X) = 1 + X 2 + X 5 ,
s4 (X) = X 4 s(X) = 1 + X 2 .
S-a ajuns la grad(s4 (X)) = 2 < 3 − 1. Deci eroarea - tip este
{e(X)} = {X 15−4 s4 (X)} = X 11 + X 13 .
Cuvântul - cod transmis a fost
v = a + e = 111100100001010 + 000000000001010 = 111100100000000.

10.4 Transpunere
O metodă eficientă de utilizare a capacităţilor de corectare a pachetelor - tip de erori
de către codurile ciclice este utilizarea de transpuneri (interleaving).
În mod natural, mesajele de informaţie m1 , m2 , . . . sunt codificate ı̂n cuvintele
- cod c1 , c2 , . . . şi transmise prin canal ı̂n ordinea codificării. Transmisia se poate
realiza ı̂nsă şi după o rearanjare a caracterelor de informaţie din mai multe cuvinte
- cod consecutive.
Formal, prin transpunere la adâncimea s se ı̂nţelege scrierea a s cuvinte - cod
c1 , c2 , . . . , cs ca linii ale unei matrici
 
c11 c12 c13 . . . c1n
 
 c21 c22 c23 . . . c2n 
Cs,n =
 .. 

 . 
cs1 cs2 cs3 . . . csn

şi transmiterea a n mesaje de lungime s, formate din coloanele matricii C:

c11 c21 . . . cs1 , c12 c22 . . . cs2 , ..., c1n c2n . . . csn
 
1 0 0 1 1 0
 
Exemplul 10.9 Să considerăm codul generat de G =  0 1 0 1 0 1 
0 0 1 0 1 1
şi şase mesaje codificate c1 , c2 , . . . , c6 , unde
c1 = 100110 c2 = 010101 c3 = 111000
c4 = 010101 c5 = 100110 c6 = 111000
Deci - la nivel de caracter - secvenţa va arăta:
100110 010101 111000 010101 100110 111000.
Printr-o transpunere la adâncimea 3, forma mesajelor este:
101 011 001 110 100 010 011 101 001 110 010 100
iar cu o transpunere la adâncimea 6:
101011 011101 001001 110110 100010 010100.
116 PRELEGEREA 10. DECODIFICAREA CODURILOR CICLICE

Ce efect are o transpunere la adı̂ncimea s asupra capacităţii de corecţie de pachete


- tip de erori ale codului ? Răspunsul este dat de
Teorema 10.3 Fie A un cod corector de pachete - tip de j erori. Dacă A este
transpus la adâncimea s, atunci toate pachetele de cel mult sj erori pot fi corectate,
ı̂n ipoteza că fiecare cuvânt - cod este afectat de maxim un pachet - tip de j erori.
Demonstraţie: Dacă primul caracter al cuvântului - cod c este al i - lea caracter
transmis, atunci celelalte caractere apar pe poziţiile i + s, i + 2s, . . . , i + (n − 1)s.
Orice pachet de maxim sj erori va produce un pachet - tip de maxim j erori ı̂n c,
deci c va putea fi regăsit la recepţie (dacă el nu a mai fost cumva afectat şi de alte
pachete de erori). 2
Restricţia ca fiecare cuvânt - cod să fie afectat de cel mult un pachet de erori
impune condiţia ca pachetele de erori să fie separate de perioade ı̂n care transmisia
este corectă, perioade suficient de lungi pentru evitarea situaţiei ca un bloc de s
cuvinte să fie afectat de două pachete distincte de erori. În acest fel, crescând s,
creşte şi lungimea pachetului de erori care poate fi corectat, dar creşte şi lungimea
perioadelor necesare de transmisie fără erori.
Exemplul 10.10 Codul din Exemplul 10.9 corectează o eroare. Folosind o transpu-
nere la adâncimea 3, el poate corecta toate pachetele - tip de cel mult 3 erori.
Un dezavantaj al transpunerii este acela că nu se poate face transmisia până nu au
fost codificate toate cele s cuvinte, fapt care nu va permite folosirea directă a cir-
cuitelor liniare. Pentru a evita acest neajuns se va folosi un s - cadru de transpunere
ı̂ntârziată, care aranjează caracterele codificate, nu sub forma unei matrici C ci sub
formă de ”scară” - ca ı̂n tabelul:
c1,1 c2,1 . . . cs+1,1 cs+2,1 . . . c2s+1,1 c2s+2,1 . . . c(n−1)s+1,1 . . .
c1,2 c2,2 . . . cs+1,2 cs+2,2 . . . c(n−2)s+1,2 . . .
c1,3 c2,3 . . . c(n−3)s+1,3 . . .
..
.
c1,n ...
Deoarece transmisia se face pe coloane, spaţiile libere trebuiesc marcate. Acest lucru
se realizează practic introducând pe aceste poziţii un caracter special ∗ 6∈ Zq .
Exemplul 10.11 Să reluăm mesajul codificat c1 , c2 , . . . , c6 din Exemplul 10.9.
Un 1 - cadru de transpunere ı̂ntârziată va fi
1 0 1 0 1 1 ...
∗ 0 1 1 1 0 1 ...
∗ ∗ 0 0 1 0 0 1 ...
∗ ∗ ∗ 1 1 0 1 1 0 ...
∗ ∗ ∗ ∗ 1 0 0 0 1 0 ...
∗ ∗ ∗ ∗ ∗ 0 1 0 1 0 0 ...
Scvenţa de caractere transmise este
1 ∗ ∗ ∗ ∗ ∗ 00 ∗ ∗ ∗ ∗110 ∗ ∗ ∗ 0101 ∗ ∗11111 ∗ 100000 . . .
Dacă se foloseşte un 2 - cadru de transpunere ı̂ntârziată, avem
10.4. TRANSPUNERE 117

1 0 1 0 1 1 ...
∗ ∗ 0 1 1 1 0 1 ...
∗ ∗ ∗ ∗ 0 0 1 0 0 1 ...
∗ ∗ ∗ ∗ ∗ ∗ 1 1 0 1 1 0 ...
∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ 1 0 0 0 1 0 ...
∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ 0 1 0 1 0 0 ...
iar secvenţa de caractere transmise este:

1 ∗ ∗ ∗ ∗ ∗ 0 ∗ ∗ ∗ ∗ ∗ 10 ∗ ∗ ∗ ∗01 ∗ ∗ ∗ ∗110 ∗ ∗ ∗ 110 ∗ ∗ ∗ . . .

Este uşor de găsit o teoremă analogă cu Teorema 10.3:


Teorema 10.4 Fie A un cod capabil să corecteze pachetele - tip de j erori. Dacă A
foloseşte un s - cadru de transpunere ı̂nârziată, atunci se poate corecta orice pachet
- tip de maxim j(sn + 1) erori, ı̂n ipoteza că orice cuvânt - cod este afectat de cel
mult un pachet - tip de j erori.
Demonstraţie: Exerciţiu.
Ca o altă facilitate, pentru codificarea unui mesaj se folosesc adesea două coduri.
De exemplu, pentru codificarea muzicii pe compact - discuri se utilizează două coduri
Reed - Solomon, iar NASA şi Agenţia Spaţială Europeană folosesc două coduri
convoluţionale (ambele vor fi definite mai târziu).
Fie Ci (i = 1, 2) două (ni , ki ) coduri liniare. Transpunerea ı̂ncrucişată a lui C1
cu C2 se realizează astfel:

1. Mesajele de informaţie sunt codificate cu C1 iar cuvintele - cod rezultate


sunt transpuse la adâncimea k2 .

2. Coloanele obţinute ı̂n acest proces de transpunere (care sunt de lungime


k2 ) - privite ca mesaje de informaţie - sunt codificate de codul C2 .

3. Cuvintele - cod rezultate sunt transpuse la o adâncime s fixată, sau cu


un s - cadru de transpunere ı̂ntârziată.

Avantajul principal al celei de-a doua codificări este următorul:


Fie d1 , d2 distanţele celor două coduri. C2 poate detecta d2 −1 erori (nu ne punem
problema corectării lor). Dacă s-au detectat erori pentru un cuvânt - cod din C2 ,
atunci toate caracterele acestui cuvânt sunt marcate şi tratate drept simboluri care
pot fi incorecte. Se consideră apoi cuvintele - cod din C1 . Dacă n1 − d1 + 1 caractere
dintr-un cuvânt - cod din C1 sunt corecte, atunci se pot determina unic celelalte
d1 − 1 caractere (deoarece este imposibil ca două cuvinte - cod distincte din C1 să
coincidă pe n1 − d1 + 1 poziţii, ele diferind pe minim d1 poziţii; afirmaţia este bazată
şi pe faptul că poziţiile caracterelor corecte sunt cunoscute).
Deci, dacă un cuvânt - cod din C1 are cel mult d1 − 1 simboluri marcate şi se ştie
că toate caracterele greşite sunt marcate, cuvintele - cod pot fi decodificate corect.
118 PRELEGEREA 10. DECODIFICAREA CODURILOR CICLICE

Cât de mare este un pachet de erori pe care ı̂l poate corecta această schemă ?
Să presupunem că C2 a fost transpus la adâncimea s, şi că orice cuvânt - cod (atât
din C1 cât şi din C2 ) a fost afectat de cel mult un pachet de erori. Dacă apare un
pachet de cel mult s(d2 − 1) erori, atunci el va afecta maxim d2 − 1 simboluri din
fiecare cuvânt - cod din C2 . Deci aceste erori vor fi detectate şi se vor marca toate
caracterele cuvintelor - cod implicate. Dacă s ≤ d1 − 1, atunci orice cuvânt - cod
din C1 are cel mult d1 − 1 simboluri marcate. În ipoteza că nu există decât maxim
un pachet de erori care l-a perturbat, caracterele marcate pot fi corectate.
Am arătat astfel:

Teorema 10.5 Fie o codificare care foloseşte transpunerea ı̂ncrucişată a (n1 , k1 ) -


codului C1 cu (n2 , k2 ) - codul C1 , C2 fiind transpus la adâncimea s (s ≤ d1 − 1).
Dacă fiecare cuvânt - cod este afectat de cel mult un pachet - tip de erori, atunci
toate pachetele - tip de erori de lungime maxim s(d2 − 1) pot fi corectate.
(d1 , d2 sunt distanţele minime ale celor două coduri).

Exemplul 10.12 Fie C1 şi K2 codurile binare, definite respectiv de matricile gene-
ratoare
 
1 0 0 0 1 1 1 0  
  1 0 0 1 1 0
0 1 0 0 1 1 0 1
G1 = 


 G2 =  0 1 0 1 0 1 

.
 0 0 1 0 1 0 1 1 
0 0 1 0 1 1
0 0 0 1 0 1 1 1

Deci, n1 = 8, k1 = 4, d1 = 4, n2 = 6, k2 = 3, d2 = 3.
Să codificăm mesajele de informaţie m1 = 1000, m2 = 1100, m3 = 1010
folosind o transpunere ı̂ncrucişată a lui C1 cu K2 , C2 fiind transpus la o adâncime
s = 3 = d1 − 1.
Codificarea mesajelor de informţie cu codul C1 dă:

c1 = m1 G1 = 10001110, c2 = m2 G1 = 11000011, c3 = m3 G1 = 10100101.

Transpunerea acestor cuvinte la adâncimea k2 = 3 conduce la mesajul

111 010 001 000 100 101 110 011

Aceste 8 mesaje de informaţie sunt codificate cu C2 ı̂n:


c01 = 111000, c02 = 010101, c03 = 001011, c04 = 000000,
c05 = 100110, c06 = 101101, c07 = 110011, c08 = 011110.
şi apoi transpuse la adâncimea s = 3 (c06 şi c07 vor fi transpuse cu următorul
cuvânt - cod c09 obţinut de următoarele trei mesaje de informaţie m4 , m5 , m6 ).
Scvenţa de caractere transmisă va ı̂ncepe cu

100 110 101 010 001 011 011 000 001 011 010 001 . . .

Conform Teoremei 10.5, folosind C2 pentru a detecta d2 − 1 = 2 erori, şi apoi C1


pentru a corecta toate caracterele marcate, se pot corecta ı̂n ansamblu toate pachetele
de cel mult s(d2 − 1) = (d1 − 1)(d2 − 1) = 6 erori.
10.5. EXERCIŢII 119

De exemplu, să presupunem că primii 6 biţi au fost transmişi incorect, deci s-a
primit 011 001 101 010 001 011 . . .. Eliminând efectul transpunerii la adâncimea
s = 3, se ajunge la cuvintele

001000 100101 111011

(care comparate respectiv cu c01 , c02 , c03 au erori fiecare pe primele două poziţii). Deoa-
rece sindromurile sunt nenule, C2 va detecta erori ı̂n toate cele trei cuvinte, deci toţi
cei 18 biţi sunt marcaţi (ı̂i vom ı̂nlocui cu ∗).
Presupunând că nu mai sunt alte erori, după un procedeu similar se obţin cuvin-
tele c04 , . . . , c08 , fără caractere marcate.
Eliminând acum efectul transpunerii la adâncimea k2 = 3, se obţin cuvintele

c1 = ∗ ∗ ∗01110, c2 = ∗ ∗ ∗00011, c3 = ∗ ∗ 100101.

Există o modalitate unică de a ajunge la cuvinte - cod din C1 prin ı̂nlocuirea ∗ cu


caractere 0 sau 1.

10.5 Exerciţii
10.1 Demonstraţi Lema 10.1

10.2 Arătaţi că dacă un cod ciclic detectează o eroare - tip e, atunci detectează
toate erorile - tip obţinute prin permutări ciclice ale lui e.

10.3 Verificaţi că pachetele ciclice - tip de erori de lungime 3 din Z215 au sindromuri
diferite pentru codul din Exemplul 10.6.

10.4 Arătaţi că g(X) = 1+X 2 +X 4 +X 5 generează un (15, 10) - cod ciclic corector
de pachete de maxim 2 erori. Este acesta un cod corector de 2 erori independente ?

10.5 Arătaţi că g(X) = 1 + X 3 + X 4 + X 5 + X 6 generează un (15, 9) - cod ci-


clic corector de pachete de maxim 3 erori. Este acesta un cod corector de 3 erori
independente ?

10.6 Arătaţi că g(X) = 1 + X 4 + X 6 + X 7 + X 8 generează un (15, 7) - cod ciclic


corector de 2 erori independente şi de pachete de 4 erori.

10.7 Fie codul din Exemplul 10.6. Să se decodifice mesajele:


101101110001000, 001101100010101, 100110101010011
101101000010111, 000000111110000

10.8 Fie (15, 10) - codul ciclic binar generat de g(X) = 1 + X 2 + X 4 + X 5 .


Câte erori au pachetele - tip pe care le poate corecta ?
Decodificaţi mesajele:
010101000010010, 011010010010100, 001101000000100
000100010100101, 000000011111001.
120 PRELEGEREA 10. DECODIFICAREA CODURILOR CICLICE

10.9 Fie codul generat de polinomul g(X) = 1 + X + X 2 + X 3 + X 6 . Codificaţi


mesajele de informaţie m1 (X) = 1, m2 (X) = X 2 , m3 (X) = 1 + X,
m4 (X) = 1 + X 2 , m5 (X) = X 3 , m6 (X) = 1.
Determinaţi şirul de biţi transmişi dacă se foloseşte o transpunere la adâncimea
s unde
(a) s = 1 (b) s = 2 (c) s = 3.

10.10 Ce secvenţă de caractere este transmisă dacă se foloseşte un 0 - cadru de


transpunere ı̂ntârziată ?

10.11 Demonstraţi Teorema 10.4

10.12 Folosind codurile definite ı̂n Exemplul 10.12, să se codifice următoarele me-
saje de informaţie prin transpunerea ı̂ncrucişată a lui C1 cu C2 :
(a) m1 = 0110, m2 = 1011, m3 = 1111, s = 2
(b) m1 = 0110, m2 = 1011, m3 = 1111, s = 3
(c) m1 = 0010, m2 = 1111, m3 = 1010, s = 3
(d) m1 = 1000, m2 = 0100, m3 = 0010, m4 = 0001, m5 = 0011,
m6 = 0100 s = 3

10.13 Folosind codurile din Exemplul 10.12 au fost obţinute prin transpunere
ı̂ncrucişată a lui C1 cu C2 la adâncimea s = 3, următoarele secvenţe binare:
(a) 000001001110110001000111000111000111000000000000000000 . . .
(b) 100011001111101010011001111010100110100100011101000100 . . .
Aflaţi meajele de informaţie m1 , m2 , m3 .

10.14 Găsiţi un rezultat analog Teoremei 10.5 dacă pentru C2 se foloseşte s - cadrul
de transpunere ı̂ntârziată ı̂n loc de s - transpunere.
Prelegerea 11

Alte definiţii ale codurilor ciclice

Primele două secţiuni ale acestei prelegeri vor trece ı̂n revistă câteva noţiuni algebrice
fundamentale ı̂n construirea codurilor ciclice.

11.1 Elemente primitive ı̂n extensii Galois


Definiţia 11.1 Fie F un corp finit. Un element a ∈ F are ordin n (n ≥ 1) dacă
an = 1 şi ak 6= 1, ∀k, 0 < k < n. Vom scrie ord(a) = n.

Propoziţia 11.1 Într-un corp finit:


- Orice element nenul are un ordin finit;
- Dacă n = ord(a) atunci a, a2 , . . . , an sunt distincte;
- ak = 1 dacă şi numai dacă ord(a)|k (ord(a) este divizor al lui k).

Demonstraţie: Fie a ∈ F, a 6= 0. Cum F este finit, elementele a, a2 , a3 , . . . nu pot


fi toate distincte. Vom alege cel mai mic n pentru care ∃i an+i = ai . Relaţia se
poate simplifica (lucrăm ı̂ntr-un corp) cu ai şi se obţine an = 1. Din construcţie,
a, a2 , . . . , an sunt distincte, deci n este ordinul lui a.
Pentru k = ni avem ak = (an )i = 1i = 1. Reciproc, să presupunem ak = 1.
Teorema ı̂mpărţirii cu rest dă k = qn + r, r < n. Avem 1 = ak = aqn ar = ar .
Cum r < n rezultă r = 0. 2

Definiţia 11.2 Un element a ∈ F este primitiv dacă toate puterile sale generează
F \ {0}.

Observaţie: Dacă F are r elemente, atunci un element este primitv dacă şi numai
dacă are ordinul r − 1.

Teorema 11.1 Orice corp finit are cel puţin un element primitiv.

Demonstraţie: Cum F este finit (card(F ) = r), se poate găsi un element a ∈ F de


ordin n maxim. Evident n ≤ r − 1. Mai trebuie arătat că n ≥ r − 1.
Fie b ∈ F de ordin s. Să-l descompunem pe s ı̂n factori primi: s = pi q j . . . (p, q, . . .
numere prime). La rândul lui n = pt n0 unde n0 nu este divizibil cu p (iar t poate fi
eventual zero).

121
122 PRELEGEREA 11. ALTE DEFINIŢII ALE CODURILOR CICLICE

t 0
Să considerăm s0 = s/pi (deci s = pi s0 ) şi fie c = ap bs ∈ F . Vrem să arătăm că
c are ordinul m = pi n0 . Pentru aceasta, avem:
t 0 t 0 i i 0 0 i 0 i 0
cm = ap m bs m = ap n p bp s n = (an )p (bs )n = 1p 1n = 1.
0
Mai rămâne de arătat că cm = 1 =⇒ m0 ≥ m. Este suficient să verificăm că pi
şi n0 sunt divizori ai lui m0 ; deoarece ei sunt primi intre ei, va rezulta că produsul
m = pi n0 este de asemenea divizor al lui m0 .
0 0 i 0 0 0 0 0 0 0 0 0
Din calculul 1 = (cm )n = ap n m bs m = (an )m bs m = bs m rezultă (Propoziţia
11.1) că ordinul s = pi s0 al lui b divide s0 m0 ; deci pi |m0 .
0 0 t i 0 i 0 0 t i 0 0 t i 0
În plus, din 1 = (cm )p = ap p m bp s m = ap p m (bs )m = ap p m rezultă că ordinul
n = pt n0 al lui a divide pt pi m0 ; deci n0 |pi m0 .
Cum n este cel mai mare ordin ale elementelor din F , avem pi n0 ≤ pt n0 , deci
i ≤ t, adică pi divide n = pi n0 .
În mod similar, toţi factorii lui s sunt divizori ai lui n, deci s|n.
Am arătat următoarea afirmaţie:
∀b ∈ F =⇒ ord(b)|n
Deci b este p rădăcină a polinomului X n − 1 = 0, de unde rezultă că polinomul
n
X − 1 = 0 are r − 1 rădăcini, adică r − 1 ≤ n. 2
Fie F un corp fixat şi f (X) ∈ F [X] un polinom arbitrar. Spunem că a ∈ F este
rădăcină a lui f dacă f (a) = 0.
Se poate demonstra imediat afirmaţia:
Propoziţia 11.2 Dacă un polinom f are rădăcinile distincte a1 , a2 , . . . , an atunci
el este divizibil cu polinomul (X − a1 )(X − a2 ) . . . (X − an ).
Exemplul 11.1 Polinomul X 3 + 1 are o rădăcină 1 ı̂n Z2 . Deci X 3 + 1 se divide
cu X + 1:
X 3 + 1 = (X + 1)(X 2 + X + 1)
Aceasta este o factorizare completă; deoarece X 2 + X + 1 nu are rădăcini ı̂n Z2 ,
el nu poate fi descompus ı̂n produsul a două polinoame de gradul 1. Acelaşi polinom
X 3 + 1 are ı̂n Z3 pe 2 ca rădăcină triplă, deci aici putem scrie:
X 3 + 1 = (X + 1)3 .
Rezultă că factorizarea unui polinom depinde de corpul ı̂n care este definit.
Din Teorema 11.1 şi Propoziţia 11.2 rezultă ca dacă a ∈ F este un element de
ordin n, atunci X n − 1 se poate descompune ı̂n
X n − 1 = (X − a)(X − a2 ) . . . (X − an ).
Definiţia 11.3 Un polinom f (X) ∈ F [X] de grad n este ireductibil dacă nu se poate
descompune ı̂n produsul a două polinoame din F [X] de grad mai mic decât n.
Observaţii;
• Orice polinom liniar este ireductibil. Pentru polinoame de grad cel puţin 2,
Propoziţia 11.2 afirmă că:
Un polinom ireductibil ı̂ntr-un corp nu are rădăcini ı̂n acel corp.
Este interesant că reciproca nu este adevărată decât pentru polinoamele de
grad 2 şi 3. Astfel, polinomul f (X) = (X 2 + X + 1)2 ∈ Z2 [X], deşi nu are
rădăcini ı̂n Z2 , este reductibil.
11.2. POLINOAME MINIMALE 123

• În R singurele polinoame ireductibile sunt de gradul 1 sau 2. Dacă un polinom


are grad impar, el are sigur o rădăcină reală, iar dacă este de grad par, atunci
are sau cel puţin o rădăcină reală, sau cel puţin două rădăcini complexe de
forma a ± ib. În acest ultim caz, el se va divide cu (x − a)2 + b2 , care este un
polinom din R[X] de gradul 2.
• În corpul complex C, teorema fundamentală a algebrei asigură că orice polinom
ireductibil are gradul 1.
Definiţia 11.4 Caracteristica unui corp finit F este cel mai mic număr de termeni
ai sumei S = 1 + 1 + . . . + 1 cu proprietatea S = 0.
Propoziţia 11.3 Caracteristica unui corp finit este număr prim.
Demonstraţie: Să considerăm elementele ai = 1 + 1 + . . . + 1 de câte i termeni
fiecare. Deoarece nu pot fi o infinitate de valori distincte, fie p minim cu proprietatea
∃i, ai = ai+p . Rezultă ap = ai+p − ai = 0. Deci F are caracteristica p.
Presupunem p = st cu 1 ≤ s < p. Evident 0 = ast = as +as +. . .+as (t termeni).
Deoarece s < p avem as 6= 0. Împărţind relaţia cu as se obţine 0 = 1+1+. . .+1 = at .
Deci t = p. 2
Corolarul 11.1 Orice corp de caracteristică p este o extensie a lui Zp .
Demonstraţie: Exerciţiu.
Corolarul 11.2 GF (q r ) este un corp de caracteristică q.
Demonstraţie: Reamintim că GF (q r ) conţine toate polinoamele din Zq [X] de grad
cel mult r − 1. În particular, polinoamele de grad 0 (constantele) formează un
subcorp izomorf cu Zq care are caracteristica q. 2
Propoziţia 11.4 Într-un corp de caracteristică p avem (a + b)p = ap + bp
Demonstraţie: Se foloseşte binomul lui Newton, ı̂n care Cpk = 0, ∀k, 0 < k < p. 2

11.2 Polinoame minimale


În cele ce urmează vom restrânge studiul la cazul F = Zq , q număr prim.
Definiţia 11.5 Fie β un element dintr-o extensie a lui Zq . Se numeşte ”polinom
minimal” al lui β polinomul normat g(X) ∈ Zq [X] de grad minim, cu g(β) = 0.
Exemplul 11.2 Să considerăm extensia GF (23 ) generată de rădăcina α a plinomu-
lui 1+X +X 3 . Deoarece α este primitiv, avem GF (23 ) = {0, 1, α, α2 , α3 , α4 , α5 , α6 }.
Polinoamele minimale ale fiecărui element sunt date ı̂n tabelul:
Element Polinom minimal
0 X
1 1+X
α, α2 , α4 1 + X + X3
α3 , α5 , α6 1 + X2 + X3
124 PRELEGEREA 11. ALTE DEFINIŢII ALE CODURILOR CICLICE

Propoziţia 11.5 Un polinom minimal g(X) ∈ Zq [X] este ireductibil peste Zq .

Demonstraţie: Dacă ar exista descompunerea g(X) = u(X)v(X) cu u(X), v(X) ∈


Zq [X], atunci vom avea u(β) = 0 sau v(β) = 0, ceea ce contrazice definiţia polino-
mului minimal pentru β. 2

Propoziţia 11.6 Dacă f (X) ∈ Zq [X] verifică f (β) = 0 atunci g(X)|f (X).

Demonstraţie: Conform identităţii ı̂mpărţirii, avem


f (X) = q(X)g(X) + r(X) cu grad(r(X)) < grad(g(X)).
Cum f (β) = 0, g(β) = 0, va rezulta r(β) = 0, contradicţie.
Singura posibilitate rămâne r(X) ≡ 0, deci f (X) = q(X)g(X). 2
Din Propoziţiile 11.5 şi 11.6 rezultă că un polinom normat peste Zq care admite
pe β ca rădăcină este polinom minimal al lui β. Acest polinom este unic.

Teorema 11.2 Fie β ∈ GF (q k ). Atunci există un polinom minimal al lui β de grad


cel mult k.

Demonstraţie: După cum am văzut (Prelegerea 8), GF (q k ) are dimensiunea k. O


bază a lui este {1}, {X}, . . . , {X k−1 }. Deci cele k + 1 elemente 1, β, β 2 , . . . , β k ∈
GF (q k ) sunt liniar dependente.
Rezultă că există un polinom de grad maxim k pentru care β este rădăcină. 2

Teorema 11.3 Soluţiile ecuaţiei X q−1 − 1 = 0 dau elementele nenule din Zq .

Demonstraţie: Elementele nenule din Zq formează grup multiplicativ. Ordinul


fiecărui element divide ordinul grupului, care este q − 1 (Teorema 11.1).
Fie β ∈ Zq \ {0}; subgrupul ciclic generat de β este 1, β, β 2 , . . . , β t−1 unde bt = 1
şi t|q − 1. Deci β q−1 = 1.
În plus, ecuaţia X q−1 − 1 = 0 are q − 1 rădăcini. 2

Teorema 11.4 X m − 1|X n − 1 ⇐⇒ m|n.

Demonstraţie: ”⇐”: Fie n = md. Cum Y − 1 divide pe Y d − 1, dacă se ia Y = X m ,


vom avea X m − 1|X md − 1.
”⇒”: Să presupunem că X m − 1|X n − 1 şi fie n = md + s, (s < m). Avem
X − 1 = X s (X md − 1) + X s − 1 = q(X)(X m − 1) + r(X) cu grad(r(X)) = s < m.
n

Pentru a verifica ipoteza, trebuie ca s = 0, deci n = md. 2

Teorema 11.5 Fie f (X) ∈ Zq [X] şi β o rădăcină a sa (eventual dintr-o extensie
a lui Zq ). Atunci şi β q este rădăcină a lui f (X).

Demonstraţie: Scriem f (X) = a0 + a1 X + . . . + an X n . Cum Zq este corp de carac-


teristică q, este adevărată relaţia (a + b)q = aq + bq (Propoziţia 11.4).
De asemenea (Teorema 11.3) ∀a ∈ Zq \ {0} avem aq−1 − 1 = 0, deci aq = a.
Atunci se poate scrie
(f (X))q = aq0 + aq1 X q + . . . + aqn (X n )q = a0 + a1 X q + . . . + an X nq = f (X q ).
În particular, f (β q ) = (f (β))q = 0. 2
11.2. POLINOAME MINIMALE 125

Teorema 11.6 Orice polinom normat ireductibil peste Zq de grad m este un factor
m
al polinomului X q − X.
Demonstraţie: Dacă g(X) = X, afirmaţia este banală.
Să presupunem că g(X) 6= X şi fie β ∈ GF (q m ) o rădăcină nenulă a sa, deci
m
g(β) = 0. Atunci (Teorema 11.3) β satisface ecuaţia X q −1 −1 = 0, deci (Propoziţia
m
11.6) X q −1 − 1 se divide cu polinomul minimal g(X). 2
m
Teorema 11.7 Orice factor ireductibil g(X) ∈ Zq [X] al lui X q − X are gradul cel
mult m.
m
Demonstraţie: Fie g(X)|X q − X, ireductibil peste Zq , cu grad(g(X)) = k.
Vom considera algebra polinoamelor modulo g(X), ı̂n care luăm α = {X}. Se
ştie (Prelegerea 8) că g(α) = 0. Un element oarecare din această algebră este de
forma
β = a0 + a1 α + . . . + ak−1 αk−1 .
m m m
Atunci β q = aq0 + aq1 αq + . . . + aqk−1 (αk−1 )q = a0 + a1 αq + . . . + ak−1 (αq )k−1 =
m m m m m

a0 + a1 α + . . . + ak−1 αk−1 = β
deoarece GF (q m ) are tot caracteristica q ca şi Zq , iar α fiind o rădăcină a lui g(X),
m m m
este rădăcină şi a lui X q − X, deci αq = α, de unde rezultă αjq = αj ∀j ≥ 0.
m
Am obţinut ı̂n final faptul că β este o soluţie a ecuaţiei X q − X = 0. Sunt
posibile q k asemenea elemente β distincte, iar cum ecuaţia are q m rădăcini, rezultă
q k ≤ q m sau k ≤ m. 2
Teorema 11.8 Fie β ∈ GF (q m ) de polinom minimal g(X), grad(g(X)) = k şi
ord(β) = t. Atunci
(i) t|q k − 1;
(ii) k este minim cu proprietatea (i).
k
Demonstraţie: Ştim (Teorema 11.6) că g(X) este un factor al lui X q − X; deci
k
β q = β, de unde rezultă t|q k − 1.
p
Să presupunem acum că există p < k cu t|q p − 1. Atunci β q −1 = 1, adică β este
p p
o rădăcină a ecuaţiei X q − X = 0, deci g(X) este un factor al polinomului X q − X.
Conform Teoremei 11.7, rezultă k ≤ p, contradicţie. 2
Teorema 11.9 Fie polinomul g(X) ∈ Zq [X], grad(g(X)) = m şi β ∈ GF (q m ) o
2 m−1
rădăcină a sa. Atunci β, β q , β q , . . . , β q sunt toate rădăcinile lui g(X).
2
Demonstraţie: Deoarece g(β) = 0, avem – conform Teoremei 11.5 – că β q , β q , . . . ,
m−1
βq sunt şi ele rădăcini ale lui g(X). De asemenea, conform Teoremei 11.6, β este
m m
rădăcină a lui X q − X, adică β q = β. Mai rămâne de arătat că aceste rădăcini
i j
sunt distincte. Presupunem că există 0 ≤ i < j < m cu β q = β q . Avem
m
³ j
´qm−j ³ i
´qm−j m+i−j
β = βq = βq = βq = βq
m+i−j
Deci β este rădăcină a polinomului X q = X şi – cu Teorema 11.7,
grad(g(X)) = m ≤ m + i − j < m, contradicţie. 2
Din Teorema 11.9 rezultă că ı̂n extensia GF (q m )[X] se poate scrie
m−1
g(X) = (X − β)(X − β q ) . . . (X − β q ).
126 PRELEGEREA 11. ALTE DEFINIŢII ALE CODURILOR CICLICE

Teorema 11.10 Fie g(X) un polinom normat ireductibil peste Zq , grad(g(X)) =


m, şi β o rădăcină a sa din GF (q m ). Atunci toate rădăcinile lui g(X) au acelaşi
ordin.
j
Demonstraţie: Fie p = ord(β), p0 = ord(β q ) care – conform Teoremei 11.9 – este
tot rădăcină a lui g(X). Avem: ³ ´
j p j
βq = (β p )q = 1 şi deci p0 |p.
De asemenea,
³ ´p0 µ³ ´qm−j ¶p0 µ³ ´p0 ¶qm−j
p0 qm qj qj
β = β = β = β =1 ⇒ p|p0 .
S-a mai folosit Teorema 11.8, conform căreia p divide q m − 1 dar nu divide nici
un număr de forma q s − 1 cu s < m.
Deci p = p0 . 2

11.3 Definirea codurilor ciclice prin rădăcini


O altă metodă de definire a unui cod ciclic constă ı̂n a da iniţial toate rădăcinile
(eventual ı̂ntr-o extensie a lui Zq ) cuvintelor - cod, considerate ca polinoame.
Definiţia 11.6 Fie α1 , α2 , . . . , αr elemente dintr-o extensie a lui Zq . Codul ciclic
A este format din toate elementele {f (X)} din algebra polinoamelor modulo X n − 1
care admit pe αi , 1 ≤ i ≤ r ca rădăcini simple.
De remarcat că ı̂n această definiţie n este deocamdată nedeterminat.
Conform Definiţiei 11.6, f (X) se va divide cu fiecare polinom minimal mi (X)
corespunzător rădăcinii αi (1 ≤ i ≤ r). Deci polinomul generator al codului ciclic
este
g(X) = cmmmc {m1 (X), m2 (X), . . . , mr (X)} .
Propoziţia 11.7 A = ({g(X)}).
Demonstraţie: Este lăsată ca exerciţiu.
Deoarece polinomul generator g(X) divide pe X n − 1, rezultă că fiecare αi este
rădăcină a lui X n − 1. Deci ordinul ord(αi ) al fiecărei rădăcini αi (1 ≤ i ≤ r) va
divide pe n. O modalitate naturală de definire a lui n este
n = cmmmc {ord(α1 ), ord(α2 ), . . . , ord(αr )}
Un caz particular important este acela ı̂n care toate rădăcinile α1 , α2 , . . . , αr sunt
puteri ale unui anumit element, adică
αi = αui , 1 ≤ i ≤ r.
Fie p = ord(α). Atunci polinomul minimal mi (X) al lui αi va avea (Teorema 11.9)
2
toate rădăcinile printre elementele αui , αqui , αq ui , . . ..
Numărul factorilor lui g(X) şi gradul fiecărui polinom minimal mi (X) se vor
determina atunci din ordinul p şi din exponenţii ui , qui , q 2 ui , . . . (1 ≤ i ≤ r). Într-
adevăr, numărul de clase de resturi modulo p ı̂n succesiunea ui , qui , . . . va da gradul
polinomului minimal mi (X).
11.3. DEFINIREA CODURILOR CICLICE PRIN RĂDĂCINI 127

Exemplul 11.3 Fie α ∈ GF (24 ) primitiv, rădăcină a polinomului 1 + X + X 4 ,


ireductibil peste Z2 . Să definim un cod care să aibă ca rădăcini α, α2 , α3 , α4 , α5 , α6 .
Fiind primitiv, ord(α) = 24 − 1 = 15 (vezi şi Prelegerea 8, Exemplul 8.8).
Fie mi (X) polinomul minimal al rădăcinii αi , 1 ≤ i ≤ 6.
Rădăcinile lui m1 (X) sunt α, α2 , α4 , α8 (α16 = α), deci
m1 (X) = m2 (X) = m4 (X) = (X − α)(X − α2 )(X − α4 )(X − α8 ).
Acest polinom este cunoscut, anume 1 + X + X 4 .
Rădăcinile lui m3 (X) sunt α3 , α6 , α12 , α24 = α9 (α18 = α3 ), deci m3 (X) este un
polinom de gradul 4, egal cu m6 (X). Notăm m3 (X) = a0 +a1 X +a2 X 2 +a3 X 3 +X 4 .
Detaliind m3 (α3 ) = 0, avem
           
1 0 0 0 1 0
 0   0   0   1   1   0 
           
a0   + a1   + a2   + a3  + = .
 0   0   1   0   1   0 
0 1 1 1 1 0
de unde se poate scrie sistemul de ecuaţii
a0 + 1 = 0, a3 + 1 = 0, a2 + 1 = 0, a1 + a2 + a3 + 1 = 0
cu soluţia a0 = a1 = a2 = a3 = 1, deci m3 (X) = m6 (X) = 1 + X + X 2 + X 3 + X 4 .
Rădăcinile lui m5 (X) sunt α5 , α10 (α20 = α5 ), deci m5 (X) este un polinom de
gradul 2 : m5 (X) = b0 + b1 X + X 2 . Cum m5 (α5 ) = 0, se obţine:
       
1 0 1 0
 0   1   1   0 
       
b0   + b1  + = 
 0   1   1   0 
0 0 0 0
care are soluţia b0 = b1 = 1, deci m5 (X) = 1 + X + X 2 .
Polinomul generator este
g(X) = cmmmc{m1 (X), m2 (X), m3 (X), m4 (X), m5 (X), m6 (X)} =
= m1 (X)m3 (X)m5 (X) = (1 + X + X 4 )(1 + X + X 2 + X 3 + X 4 )(1 + X + X 2 ) =
1 + X + X 2 + X 4 + X 5 + X 8 + X 10 .
De remarcat că era suficient să cerem ca α, α3 , α5 să fie rădăcini ale codului.
Exemplul 11.4 Fie β = α89 unde α ∈ GF (211 ) este primitiv. Deoarece
11
211 − 1 = 89 · 23, rezultă β 23 = α2 −1 = 1.
Să considerăm drept rădăcini elementele β, β 3 , β 9 , β 16 .
Fie m(X) polinomul minimal al lui β. Rădăcinile lui m(X) sunt (conform Teo-
remei 11.9) β, β 2 , β 4 , β 8 , β 16 , β 32 = β 9 , β 18 , β 36 = β 13 , β 26 = β 3 , β 6 , β 12 . (β 24 = β)
Deci m(X) este un polinom de gradul 11 care are ca rădăcini pe β, β 3 , β 9 , β 16 ,
deci polinomul generator al codului respectiv este g(X) = m(X).
Fie polinomul f (X) = a0 + a1 X + . . . + an−1 X n−1 ∈ Zq [X] şi α o rădăcină a sa.
Atunci 0 = f (α) = a0 + a1 α + a2 α2 + . . . + an−1 αn−1 , sau – altfel scris:
 
1
 
 α 
(a0 a1 a2 . . . an−1 ) 
 .. =0

 . 
αn−1
128 PRELEGEREA 11. ALTE DEFINIŢII ALE CODURILOR CICLICE

Deci cuvântul corespunzător polinomului f (X) este ı̂n spaţiul nul al matricii
(1 α . . . αn−1 ) (1).
Aceasta este şi condiţia de divizibilitate a polinomului f (X) cu polinomul mini-
mal m(X) al lui α. Mulţimea polinoamelor care satisfac condiţia formează idealul
generat de m(X). Dimensiunea acestui ideal este (Prelegerea 9) n − k unde
k = grad(m(X)). Deci spaţiul liniar generat de matricea (1) are dimensiunea k.
Prin urmare, a cere ca f (X) să admită pe α1 , α2 , . . . , αr ∈ GF (q m ) ca rădăcini
este echivalent cu a cere ca vectorul corespunzător să aparţină spaţiului nul al ma-
tricii
 
1 α1 α12 . . . α1n−1
 2 n−1 
 1 α2 α2 . . . α2 
Hmr,n =
 .. 

 . 
1 αr αr2 . . . αrn−1

Exemplul 11.5 Să revenim la Exemplul 11.3. Polinomul {f (X)} aparţine codului
respectiv dacă şi numai dacă vectorul corespunzător aparţine spaţiului nul al matricii
 
1 α α2 α3 α4 α5 α6 α7 α8 α9 α10 α11 α12 α13 α14
 
H =  1 α3 α6 α9 α12 1 α3 α6 α9 α12 1 α3 α6 α9 α12 
1 α5 α10 1 α5 α10 1 α5 α10 1 α5 α10 1 α5 α10
 
1 0 0 0 1 0 0 1 1 0 1 0 1 1 1
 


0 1 0 0 1 1 0 1 0 1 1 1 1 0 0 

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

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

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


1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 

 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 
 
 
 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
S-a obţinut o matrice 12 × 15, deşi - conform rezultatelor teoretice, n = 15, n −
k = 10, k = 5 şi deci matricea de control a codului ar trebui să aibă dimensiunile
(n − k) × n = 10 × 15. Se observă ı̂nsă că de fapt ultima linie este nulă, iar
următoarele două linii sunt identice (deci penultima se poate elimina).
11.4. ALTĂ DEFINIŢIE A CODURILOR CICLICE 129

11.4 Altă definiţie a codurilor ciclice


Vom mai prezenta şi o a treia construcţie a codurilor ciclice, realizată de Edwin
Berlekamp ı̂n 1968.
2 r−1
Definiţia 11.7 Fie polinomul T r(X) = X + X q + X q + . . . + X q ∈ GF (q r )[X].
Se numeşte ”urma” lui α ∈ GF (q r ) expresia T r(α).

Propoziţia 11.8 T r este o aplicaţie : GF (q r ) → Zq .

Demonstraţie: Trebuie arătat că ∀α ∈ GF (q r ) avem T r(α) ∈ Zq . Pentru aceasta


este suficient să arătăm că T r(α) verifică ecuaţia X q − X = 0. Folosind faptul că
r
că GF (q r ) este corp de caracteristică q şi că ∀α ∈ GF (q r ) avem αq = α, se verifică
imediat relaţia [T R(α)]q = T R(α). 2

Propoziţia 11.9 T r este aplicaţie liniară.

Demonstraţie: Relaţia T r(α + β) = T r(α) + T r(β) este uşor de verificat, deoarece


se lucrează ı̂n corpuri de caracteristică q. 2

Propoziţia 11.10 Pentru orice a ∈ Zq există q r−1 valori α ∈ GF (q r ) cu T r(α) =


a.

Demonstraţie: Fiecare ecuaţie T r(X) = a admite maxim q r−1 rădăcini, iar numărul
de elemente a posibile este q. Mai trebuie arătat că toate cele q ecuaţii au rădăcini
distincte. Aceasta se poate deduce foarte simplu folosind derivata formală ı̂ntr-un
corp de caracteristică q: toate ecuaţiile au aceeaşi derivată: 1. 2

Teorema 11.11 Polinomul T r(X) se poate descompune ı̂n GF (q r ) ı̂n produs de


polinoame minimale.

Demonstraţie: Demonstraţia se bazează pe următorul algoritm:


(1) Fie polinomul g(X) = T r(X);
(2) Se consideră α ∈ GF (q r ) cu g(α) = 0. Deci g(X) este divizibil cu polinomul
minimal m(X) al lui α.
(3) g(X) := g(X)/m(X). Dacă g(X) = 1, STOP, altfel se reia pasul (2).
Existenţa rădăcinilor pentru g(X) (pasul (2)) este asigurată de faptul că ı̂n
GF (q r ) orice polinom ireductibil este polinom minimal.

Exemplul 11.6 Să considerăm GF (24 ), deci q = 2, r = 4. Aici se poate verifica


descompunerea
T r(X) = X + X 2 + X 4 + X 8 = X(1 + X)(1 + X + X 2 )(1 + X + X 4 )
care sunt toate polinoame minimale.
Fie α ∈ GF (24 ) rădăcină (primitivă) a ecuaţiei 1 + X + X 4 = 0. Deci toate
elementele nenule din GF (24 ) se pot scrie ca puteri ale lui α. Vom folosi aceasta
pentru a lista valorile funcţiei T r : GF (24 ) → Z2 :
130 PRELEGEREA 11. ALTE DEFINIŢII ALE CODURILOR CICLICE

X T r(X) X T r(X) X T r(X) X T r(X)


0 0 α3 1 α7 1 α11 1
4
1 0 α 0 α8 0 α12 1
5 9 13
α 0 α 0 α 1 α 1
2 6 10 14
α 0 α 1 α 0 α 1
După cum se observă, sunt 8 = 23 valori 0 şi 8 valori 1.
Putem da acum teorema principală care defineşte codurile ciclice folosind oper-
atorul T r:
Teorema 11.12 Fie n număr natural, q număr prim, k ordinul lui q modulo n
(q k ≡ 1 mod n) şi β ∈ GF (q k ) element primitiv de ordin n. Atunci
A = {cα = (T r(α), T r(αβ), T r(αβ 2 ), . . . , T r(αβ n−1 ))|α ∈ GF (q k )}
este un (n, k) - cod ciclic peste Zq .
Demonstraţie: Din Propoziţia 11.9 rezultă că A este cod liniar.
Se verifică apoi că cαβ −1 ∈ A este o permutare ciclică a lui cα ; deci A este
cod ciclic. Deoarece β este primitiv, ı̂nseamnă că polinomul său minimal m(X) =
h0 + h1 X + . . . + hk X k are gradul k. Dacă cα = (c0 , c1 , . . . , cn−1 ), avem
k
X
ci hi = T r(αm(β)) = T r(0) = 0
i=0

care constituie una din cele n − k ecuaţii de control pentru A. Deoarece m(X) este
minimal (deci ireductibil), h(X) = X k m(X −1 ) este polinomul de control pentru A.
Cum gradul lui este k, avem un (n, k) - cod ciclic peste Zq . 2
De remarcat că această teoremă defineşte numai codurile ciclice ”ireductibile”
(care nu conţin subcoduri ciclice proprii), deci clasa lor este inclusă strict ı̂n clasa
codurilor ciclice dată de cele două definiţii anterioare (prin ideale şi prin rădăcinile
polinomului generator).
Exemplul 11.7 Să luăm n = 15, q = 2, deci k = 4. În GF (24 ) vom lua α,
rădăcina polinomului 1 + X + X 4 . Se ştie că ea este un element primitiv. Aplicaţia
T r este T r(X) = X + X 2 + X 4 + X 8 iar codul A este format din 16 cuvinte de forma
(T r(β), T r(βα), . . . , T r(βαn−1 )), ∀β ∈ GF (24 ).
Pentru β = 0, 00 . . . 0 ∈ A.
Pentru β = 1, (T r(1), T r(α), . . . , T r(αn−1 )) = 000100110101111
Celelalte 14 cuvinte sunt permutările circulare ale µ acestuia. ¶
4 1 1
Polinomul de control al codului este h(X) = X 1 + + 4 = 1 + X 3 + X 4,
X X
iar polinomul generator
X 16 − X
g(X) = 4 = X + X 4 + X 5 + X 7 + X 9 + X 10 + X 11 + X 12 ,
X + X3 + 1
al cărui vector corespunzător se obţine ı̂n construcţia de sus pentru β = α2 .
Acesta este un (15, 4) - cod ciclic, ireductibil.
De remarcat că pentru n = 15 sunt numai două astfel de coduri, celălalt fiind
codul dual (rădăcina polinomului 1 + X 3 + X 4 este de asemenea primitivă).
11.5. EXERCIŢII 131

11.5 Exerciţii
11.1 Demonstraţi Corolarul 11.1.

11.2 Demonstraţi Propoziţia 11.7

11.3 Construiţi următoarele corpuri:


(a) GF (22 );
(b) GF (23 ) folosind polinomul 1 + X 2 + X 3 ;
(c) GF (24 ) folosind polinomul 1 + X 3 + X 4 ;
(d) GF (25 ) folosind polinomul 1 + X 2 + X 5 .

11.4 Găsiţi o extensie a lui Z2 ı̂n care X 9 − 1 să se descompună ı̂n factori liniari.

11.5 Găsiţi toate elementele primitive din GF (23 ) şi GF (24 ).

11.6 Găsiţi toate elementele primitive din GF (32 ) şi GF (52 ).

11.7 Construiţi GF (24 ) ca o extensie a lui GF (22 ).

11.8 Fie α ∈ GF (24 ), rădăcină a polinomului 1 + X + X 4 .


Găsiţi polinoamele minimale al lui β = α7 şi β = α10 .

11.9 Găsiţi polinoamele minimale al tuturor elementelor din:


- GF (23 ), generat cu 1 + X + X 3 ;
- GF (25 ), generat cu 1 + X 2 + X 5 ;
- GF (32 ), generat cu 2 + X + X 2 ;
- GF (52 ), generat cu 3 + 2X + X 2 .

11.10 Orice element nenul din GF (q m ) are un ordin prim cu q.

11.11 Găsiţi polinomul generator al unui cod ciclic de lungime 15, de rădăcini
1, α5 , α7 , α ∈ GF (24 ) fiind rădăcină a polinomului 1 + X + X 4 .
Construiţi matricea de control a codului.
Arătaţi că v(X) este polinom - cod dacă şi numai dacă ponderea w(v) este pară.

11.12 Găsiţi polinomul generator al unui cod ciclic de rădăcini α2 , α3 , α6 unde


α ∈ GF (23 ) este rădăcina polinomului 1 + X + X 3 .

11.13 Arătaţi că orice cuvânt - cod al unui cod ciclic are pondere pară dacă şi
numai dacă 1 + X este un factor al polinomului generator.

11.14 Să se descompună T r(X) ı̂n produs de polinoame minimale ı̂n corpurile:
(a) GF (23 ) (b) GF (25 ) (c) GF (32 ) (d) GF (33 ) (e) GF (52 ).

11.15 Folosind Teorema 11.12 să se construiască toate codurile ireductibile pentru
GF (23 ), GF (25 ), GF (32 ).

11.16 Verificaţi că polinomul h(X) construit ı̂n demonstraţia Teoremei 11.12 este
polinomul generator al codului dual.
Prelegerea 12

Coduri BCH

Codurile BCH constituie cea mai relevantă clasă de coduri ciclice. Ele au fost
definite ı̂n mod independent de Bose şi Chaudhuri pe de-o o parte, Hocquenheim
de pe de-altă parte. Numele de BCH (Bose - Chaudhuri - Hocquenheim) a fost
dat de Peterson, care s-a ocupat de ele ı̂n mod special, construind şi algoritmul de
decodificare.

12.1 Definirea codurilor BCH


Definiţia 12.1 Fie q număr prim, m0 , m, d numere naturale şi α ∈ GF (q m ). Un
cuvânt {f (X)} este ı̂n codul BCH dacă polinomul are ca rădăcini

αm0 , αm0 +1 , . . . , αm0 +d−2 .

În majoritatea cazurilor studiate se consideră m0 = 0 sau m0 = 1.

Teorema 12.1 Lungimea n a cuvintelor - cod este egală cu ordinul e al lui α.

Demonstraţie: Conform construcţiei codurilor ciclice bazată pe rădăcinile polino-


mului generator, lungimea n a cuvintelor - cod este cel mai mic multiplu comun al
ordinelor rădăcinilor. În cazul codurilor BCH avem

(αm0 )n = αm0 n = 1 şi 1 = (αm0 +1 )n = αm0 +n = αm0 αn

deci αn = 1. Prin urmare e|n şi n ≥ e.


De asemenea, (αj )e = (αe )j = 1 ∀j = m0 , m0 + 1, . . . , m0 + d − 2, adică n ≤ e.
Rezultă n = e. 2
De remarcat că, dacă α este primitiv, atunci e = q m − 1.

Teorema 12.2 Într-un cod BCH definit de rădăcinile αm0 , αm0 +1 , . . . , αm0 +d−2 (α ∈
GF (q m )), distanţa minimă a codului
" #este cel puţin d (şi deci codul poate corecta cel
d−1
puţin orice combinaţie de t ≤ erori).
2

133
134 PRELEGEREA 12. CODURI BCH

Demonstraţie: Un cod BCH este spaţiul nul al matricii


 
1 αm0 (αm0 )2 ... (αm0 )n−1

 1 αm0 +1 (αm0 +1 )2 ... (αm0 +1 )n−1 

H=
 .. 

 . 
1 αm0 +d−2 (αm0 +d−2 )2 . . . (αm0 +d−2 )n−1

Să considerăm următorul determinant, obţinut prin alegerea arbitrară a d − 1


coloane din H: ¯ ¯
¯
¯ (αm0 )j1 (αm0 )j2 ... (αm0 )jd−1 ¯¯
¯ m +1 j
¯ (α 0 ) 1 (αm0 +1 )j2 . . . (αm0 +1 )jd−1 ¯¯
D=¯ ¯ .. ¯=
¯
¯
¯
. ¯
¯
¯ (αm0 +d−2 )j1 (αm0 +d−2 )j2 . . . (αm0 +d−2 )jd−1 ¯
¯ ¯
¯ 1 1 ... 1 ¯
¯ ¯
¯ j1 j2 jd−1 ¯
¯
m0 (j1 +j2 +...+jd−1 ) ¯
α α . . . α ¯
=α .. ¯=
¯ ¯
¯
¯
. ¯
¯
¯ (αj1 )d−2 (αj2 )d−2 . . . (αjd−1 )d−2 ¯
Y
= αm0 (j1 +j2 +...+jd−1 ) (αji − αjk ) 6= 0
i>k
pentru că ji 6= jk dacă i 6= k.
Deci orice submulţime formată cu maxim d − 1 coloane din H este liniar inde-
pendentă de unde - conform Teoremei 2.4 (Prelegerea 2) - distanţa minimă a codului
este cel puţin d. 2

Exemplul 12.1 Dacă se lucrează ı̂n binar, puterile pare ale rădăcinilor se pot omite
din listă(dacă αi este rădăcină, atunci şi α2i este rădăcină - conform Teoremei 11.9,
Prelegerea 11). Atunci un cod BCH binar corector de 3 erori este dat de rădăcinile
β, β 3 , β 5 , unde β este un element primitiv dintr-o extensie a lui Z2 . De exemplu,
dacă β = α, rădăcină a polinomului 1 + X + X 4 , se obţine codul din Exemplul 11.3,
Prelegerea 11.

Exemplul 12.2 Fie GF (32 ) generat de rădăcina α a polinomului ireductibil 2 +


X + X 2 . Deoarece ord(α) = 8, orice cod va avea lungimea 8. Să construim codul
BCH de rădăcini α2 , α3 , α4 . Polinoamele minimale sunt:
m2 (X) = 1 + X 2 cu rădăcini α2 , α6 ;
m3 (X) = 2 + X + X 2 cu rădăcini α3 , α
m4 (X) = 1 + X numai cu rădăcina α4 .
Deci polinomul generator este
g(X) = (1 + X 2 )(2 + X + X 2 )(1 + X) = 2 + X 2 + X 3 + 2X 4 + X 5 .
Codul este un (8, 3) - cod ciclic. Deoarece printre rădăcini este şi α, se poate
considera m0 = 1, d = 5, deci codul poate corecta cel puţin două erori.
De remarcat că dacă folosim acest cod drept cod liniar, cum ponderea minimă
a cuvintelor sale este 4 (de exemplu 02010201 este cuvânt - cod), distanţa minimă
este 4, deci codul nu poate corecta decât o singură eroare. Astfel, tratarea codurilor
ciclice sub formă de coduri liniare scade de obicei puterea de corecţie a erorilor.
12.2. ALGORITMUL PETERSON DE DECODIFICARE 135

Numerele m, m0 , d, q sunt parametrii codului BCH. Ideea este de a-l mări pe d,


pentru a putea corecta câte mai multe combinaţii de erori. Acest lucru este posibil
totdeauna, deoarece m şi q sunt arbitrari.
Să observăm că pentru α primitiv, toate puterile lui α până la q m − 1 sunt
distincte. În cazul binar, avem următorul rezultat:
Teorema 12.3 Fie m un număr natural oarecare şi α ∈ GF (2m ) primitiv. Atunci
m
există
· m un cod
¸ BCH de lungime n = 2 − 1 care corectează orice combinaţie de
2 −1
t≤ erori independente, folosind mt poziţii de control.
2
Demonstraţie: Vom considera codul binar definit de rădăcinile α, α2 , . . . , α2t . Acesta
este un cod BCH pentru q = 2, m0 = 1, d = 2t + 1, n = 2m − 1 şi care are distanţa
minimă cel puţin 2t + 1. Pentru ca rădăcinile menţionate mai sus să fie distincte,
trebuie ca 2t ≤ 2m − 1.
Să observăm că orice putere pară a lui α este rădăcină a unui polinom minimal
al unei puteri impare anterioare a lui α. Deci este suficient să dăm la ı̂nceput doar
rădăcinile α, α3 , . . . , α2t−1 ale cuvintelor codului binar.
Avem - după definiţie: g(X) = cmmmc{m1 (X), m3 (X), . . . , m2t−1 (X)}.
m
Pe de - altă parte, mi (X)|X n − 1 = X 2 −1 − 1 şi deci - conform Teoremei 11.7
(Prelegerea 11), grad(mi (X)) ≤ m. Din cele două relaţii rezultă grad(g(X)) ≤ mt.
Cum grad(g(X)) dă numărul de simboluri de control, teorema este demonstrată. 2

12.2 Algoritmul Peterson de decodificare


Fie codul BCH definit de rădăcinile αm0 , αm0 +1 , . . . , αm0 +2t−1 (d = 2t + 1) cu
α ∈ GF (q m ).
Un asemenea cod corectează orice combinaţie de maxim t erori independente.
Fie {f (X)} un cuvânt - cod transmis şi

{r(X)} = {f (X) + e(X)} = {f (X)} + {e(X)}

secvenţa recepţionată, unde {e(X)} este vectorul - eroare.


Avem, pentru j = m0 , m0 + 1, . . . , m0 + 2t − 1 :

Sj = r(αj ) = f (αj ) + e(αj ) = e(αj ).

Sj se numesc componentele sindromului.


La decodificare, tipul e de eroare este determinat complet dacă se ştiu:
• Valorile erorilor Yi ∈ Zq ;

• Localizările erorilor Xi ∈ GF (q m ).
Vom nota poziţiile elementelor cuvintelor din GF (q m ) prin puterile lui α; pe poziţia
i ı̂n e(α) se află coeficientul lui αi−1 , deci αi−1 va localiza a i - a componentă dintr-un
cuvânt.
Dacă au intervenit t erori, modelul de eroare este complet caracterizat de cunoaş-
terea celor t perechi nenule (Yi , Xi ), 1 ≤ i ≤ t.
136 PRELEGEREA 12. CODURI BCH

Putem conveni (evident) că

Yi = 0 ⇐⇒ Xi = 0.

De remarcat că Xi nu reprezintă αi ci un αj arbitrar care va trebui aflat.


Deci, a găsi pe {e(X)} revine la a determina 2t elemente Xi , Yi , 1 ≤ i ≤ t,
grupate ı̂n t perechi, cu proprietatea Yi = 0 ∀i, t < i ≤ q m − 1. Avem
t
X
Sj = e(α ) =j
Yi Xij , m0 ≤ j ≤ m0 + 2t − 1.
i=1

Atunci
à t !q t t
X X X
q
(Sj ) = Yi Xij = Yiq Xijq = Yi Xijq = Sjq
i=1 i=1 i=1

Deci, determinarea polinomului - eroare {e(X)} se reduce la aflarea soluţiilor


(Yi , Xi ), 1 ≤ i ≤ t ale sistemului de ecuaţii
t
X
Yi Xij = Sj , m0 ≤ j ≤ m0 + 2t − 1. (1)
i=1

Dacă au intervenit k (k < t) erori, se completează cele k perechi nenule cu alte


t−k perechi nule (Yi , Xi ). De fapt, acest număr k nu este cunoscut apriori; de aceea,
se pleacă de la t erori potenţiale (maximul pe care codul BCH ı̂l poate corecta sigur),
caracterizate de t perechi (Yi , Xi ). Problema care se pune este deci de a-l determina
pe k şi cele 2k necunoscute Yi , Xi (1 ≤ i ≤ k).
Orice metodă de corectare a erorilor revine la rezolvarea sistemului de ecuaţii
(1), care este un sistem neliniar de 2t ecuaţii cu 2t necunoscute, problemă N P -
completă.
Fie polinomul
(X1 − X)(X2 − X) . . . (Xt − X) = σt + σt−1 (−X) + . . . + σ1 (−X)t−1 + (−X)t .
unde σj sunt funcţiile simetrice date de relaţiile lui V iète.
Dacă ı̂n această relaţie se ia X = Xi (i = 1, . . . , t), obţinem
Xit + (−1)σ1 Xit−1 + . . . + (−1)t−1 σt−1 Xi + (−1)t σt = 0, 1 ≤ i ≤ t.
Înmulţim cu Yi Xij şi sumăm după i. Se obţine:
t
X t
X t
X
Yi Xij+t + (−1)σ1 Yi Xij+t−1 + . . . + (−1)t−1 σt−1 Yi Xij+1 + (−1)t σt Yi Xij =
i=1 i=1 i=1
0, j = m0 , m0 + 1, . . . , m0 + t − 1
relaţie care se poate scrie
Sj (−1)t σt + Sj+1 (−1)t−1 σt−1 + . . . + Sj+t−1 (−1)σ1 + Sj+t = 0,
m0 ≤ j ≤ m0 + t − 1 (2)
Algoritmul lui Peterson de corectare a k (k ≤ t) erori ı̂ntr-un cod BCH este:
12.2. ALGORITMUL PETERSON DE DECODIFICARE 137

1. Se rezolvă sistemul (2) ı̂n care necunoscutele sunt (−1)p σp , 1 ≤ p ≤ t;

2. Se ı̂nlocuiesc valorile aflate ı̂n ecuaţia

X t + (−1)σ1 X t−1 + . . . + (−1)t−1 σt−1 X + (−1)t σt = 0

şi se află cele t rădăcini X1 , X2 , . . . , Xt ∈ GF (q m ) ale sale;

3. Cu aceste valori introduse ı̂n sistemul (1), se determină din primele t


ecuaţii valorile Y1 , Y2 , . . . , Yt ∈ Zq ;

4. Dacă (Yi , Xi ), Xi = αji sunt cele k ≤ t valori nenule ale soluţiei obţinute,
atunci:

• Pentru k = 0, cuvântul recepţionat este {r(X)} (fără erori);


k
X
• Pentru 0 < k ≤ t, fie e(X) = Yi X ji .
i=1
Cuvântul - cod decodificat este {f (X)} = {r(X)} − {e(X)}.

De remarcat că ı̂n cazul binar, pasul (3) nu mai este necesar, deoarece
Yi = 1, ∀i ≤ k.
Pentru corectitudinea algoritmului, trebuie studiate compatibilităţile sistemelor
de ecuaţii (1) şi (2).
t
X
Teorema 12.4 Sistemul Yi Xij = Sj , m0 ≤ j ≤ m0 + t − 1, de necunoscute Yi
i=1
este compatibil dacă şi numai dacă au intervenit t erori.
Demonstraţie: Considerat ca sistem ı̂n Y , este liniar; determinantul principal este
¯ ¯ ¯ ¯
¯ X1m0 X2m0 . . . Xtm0 ¯ ¯ 1 1 ... 1 ¯
¯ ¯ ¯ ¯
¯ ¯ ¯ ¯
¯
¯
X1m0 +1 X2m0 +1 . . . Xtm0 +1 ¯
¯
¯
¯
X1 X2 . . . Xt ¯
¯
¯
¯ X1m0 +2 X2m0 +2 . . . Xtm0 +2 ¯ m0 m0 m0 ¯
¯ = X1 X2 . . . Xt ¯ X12 X22 . . . Xt2 ¯
¯
¯ .. ¯ ¯ .. ¯
¯ ¯ ¯ . ¯
¯ . ¯ ¯ ¯
¯ ¯ ¯ ¯
¯ X1m0 +t−1 X2m0 +t−1 . . . Xtm0 +t−1 ¯ ¯ X1t−1 X2t−1 . . . Xtt−1 ¯
Y
= X1m0 X2m0 . . . Xtm0 (Xi − Xj )
1≤j<i≤t

El este nenul numai dacă au intervenit t erori, pentru că atunci toţi Xi sunt distincţi
şi nenuli. 2
 
Sm0 Sm0 +1 . . . Sm0 +t−1
 
 Sm0 +1 Sm0 +2 . . . Sm0 +t 
Teorema 12.5 Matricea M =
 .. 

 . 
Sm0 +t−1 Sm0 +t . . . Sm0 +2t−1
este nesingulară dacă au intervenit t erori şi este singulară dacă au intervenit
mai puţin de t erori.
138 PRELEGEREA 12. CODURI BCH

Demonstraţie: Ţinând cont de forma sistemului (1), este posibilă descompunerea


matricii M ı̂n produs de 3 matrici M = ABAT unde:
 
1 1 ... 1  
  Y1 X1m 0 ... 0


X1 X2 . . . Xt 
  m 
 0 Y2 X2 . . . 0 
A=
 X12 X22 . . . Xt2 
 B=
 .. 

 ..   . 
 . 
 
0 0 . . . Yt Xtm
X1t−1 X2t−1 . . . Xtt−1

M este nesingulară dacă cele două matrici din descompunere sunt nesingulare.
Matricea A este nesingulară dacă şi numai dacă valorile Xi , (1 ≤ i ≤ t) sunt distincte
şi nenule, deci dacă au intervenit t erori. Matricea diagonală B este nesingulară dacă
toate elementele de pe diagonala principală sunt nenule, deci dacă toate perechile
(Yi , Xi ), 1 ≤ i ≤ t sunt nenule - adică au apărut t erori. 2
Aplicarea algoritmului Peterson se face ı̂n felul următor:

1. Folosind polinomul recepţionat {r(X)}, se calculează mărimile

Sj = r(αj ), j = m0 , m0 + 1, . . . , m0 + 2t − 1

2. Se studiază compatibilitatea sistemului

Sj (−1)t σt + Sj+1 (−1)t−1 σt−1 + . . . + Sj+t−1 (−1)σ1 + Sj+t = 0,


m0 ≤ j ≤ m0 + t − 1.

Dacă matricea M a sistemului este nesingulară, ı̂nseamnă că au apărut t erori.


Dacă M este singulară, atunci se observă că σt = 0 (deoarece σt = X1 X2 . . . Xt )
şi - neglijând prima sau ultima din ecuaţiile de mai sus, ı̂n care se ı̂nlocuieşte
σt = 0 - se obţine un nou sistem liniar format din t − 1 ecuaţii cu t − 1
necunoscute.
Se studiază matricea acestui nou sistem. Dacă ea este nesingulară, ı̂nseamnă
că au apărut t − 1 erori. Dacă şi aceasta este singulară, cum σt−1 = 0, se
repetă procedeul.
Primul sistem compatibil (cu matricea nesingulară) care se obţine va da numă-
rul k ≤ t de erori care au intervenit ı̂n transmisie, precum şi valorile
(−1)σ1 , (−1)2 σ2 , . . . , (−1)k σk .

3. Se introduc valorile determinate mai sus ı̂n polinomul

P = X k + (−1)σ1 X k−1 + . . . + (−1)k−1 σk−1 X + (−1)k σk

şi se află cele k rădăcini X1 , X2 , . . . , Xk ∈ GF (q m ) ale ecuaţiei P = 0 (prin


diverse metode, eventual chiar prin simpla verificare a ecuaţiei cu toate ele-
mentele din GF (q m )). Aceste rădăcini vor da localizările erorilor.
De remarcat că ordinea de notare a erorilor X1 , X2 , . . . , Xm este neesenţială.
12.2. ALGORITMUL PETERSON DE DECODIFICARE 139

4. Se introduc aceste soluţii ı̂n ecuaţiile sistemului


k
X
Yi Xij = Sj , j = m0 , m0 + 1, . . . , m0 + k − 1
i=1

şi se determină valorile erorilor Y1 , Y2 , . . . , Yk .

5. Se calculează astfel polinomul eroare {e(X)}, care se scade din polinomul


recepţionat şi se obţine cuvântul - cod transmis:

{r(X)} − {e(X)} = {r(X) − e(X)} = {f (X)}

Exemplul 12.3 Fie codul BCH definit de rădăcinile α, α2 , α3 , α4 , α5 α6 unde α ∈


GF (24 ) este element primitiv, rădăcină a polinomului 1 + X + X 4 (Exemplul 11.3,
Prelegerea 11 şi Exemplul 12.1). Deoarece t = 3, acest cod este capabil să corecteze
maxim 3 erori.
Să presupunem că au apărut două erori, pe poziţiile α3 şi α10 (adică pe poziţiile
4 şi 11) ale cuvântului transmis. Ele reprezintă polinomul eroare e(X) = X 3 + X 10 .
Să calculăm sindromul (pentru operaţile folosite, a se vedea Exemplele 8.8 şi 8.9,
Prelegerea 8):
S1 = r(α) = e(α) = α3 + α10 = α12
S2 = (S1 )2 = α24 = α9
S3 = r(α3 ) = e(α3 ) = α9 + α30 = α9 + α0 = α7
S4 = (S2 )2 = α18 = α3
S5 = r(α5 ) = e(α5 ) = α15 + α50 = α0 + α5 = α10
S6 = (S3 )2 = α14 .
Observăm că ı̂ntr-o situaţie reală, nu se ştie unde sunt localizate erorile şi deci
- ı̂n cazul ı̂n care au intervenit două erori pe poziţiile α3 şi α10 (care nu se cunosc
ı̂ncă), din vectorul recepţionat se obţine direct sindromul
S = (S1 , S2 , S3 , S4 , S5 , S6 ) = (α12 , α9 , α7 , α3 , α10 , α14 )
fără să ştim din combinaţiile căror localizări ale erorilor provin aceste compo-
nente ale sindromului.
Să
 considerăm sistemul de ecuaţii 
12 9 7 3
 S1 σ3 + S2 σ2 + S3 σ1 = S4
  α σ3 + α σ2 + α σ1 = α

S2 σ3 + S3 σ2 + S4 σ1 = S5 adică α9 σ3 + α7 σ2 + α7 σ1 = α10

 
 7
S2 σ3 + S4 σ2 + S5 σ1 = S6 α σ3 + α3 σ2 + α10 σ1 = α14
Înmulţim cele trei ecuaţii ale sistemului respectiv cu
α−7 = α8 , α−3 = α12 , α−10 = α5
şi obţinem: 
5 2 11
 α σ3 + α σ2 + σ1 = α

6 4 7
α σ3 + α σ2 + σ1 = α

 12
α σ3 + α8 σ2 + σ1 = α4
Adunăm prima ecuaţie la ultimele două şi atunci
(
α9 σ3 + α10 σ2 = α8
α14 σ3 + α0 σ2 = α13
140 PRELEGEREA 12. CODURI BCH

Deoarece a doua ecuaţie se obţine din prima prin ı̂nmulţire cu α5 , ele nu sunt in-
dependente; deci au apărut mai puţin de 3 erori. Facem σ3 = 0 şi a doua ecuaţie
va da σ2 = α13 . Din prima ecuaţie a sistemului se ajunge la α0 + σ1 = α11 , adică
σ1 = α12 .
Deci, ı̂n acest caz k = 2, σ1 = α12 , σ2 = α13 . Se ajunge la polinomul X 2 +
σ1 X + σ2 = X 2 + α12 X + α13 , care are ca rădăcini X1 = α3 , X2 = α10 .
Am redescoperit astfel cele două localizări ale erorilor. Codul fiind binar, corecta-
rea se face imediat: se modifică (din 1 ı̂n 0 sau din 0 ı̂n 1) biţii de pe poziţiile 4
respectiv 11 din cuvântul recepţionat.

Exemplul 12.4 Fie codul BCH definit de rădăcinile α, α2 , α3 , α4 unde α ∈ GF (24 )


este rădăcina polinomului 1 + X + X 4 . Acest cod are m0 = 1, m0 + 2t − 1 = 4, deci
t = 2; codul poate corecta ı̂n mod sigur cel puţin două erori. Să presupunem că s-a
recepţionat cuvântul
r = 100100110000100
de 15 componente. Să determinăm cuvântul - cod transmis.
Polinomul corespunzător acestui cuvânt este r(X) = 1 + X 3 + X 6 + X 7 + X 12 .
Componentele sindromului sunt
S1 = r(α) = α0 S2 = r(α2 ) = (S1 )2 = α0
S3 = r(α3 ) = α4 S4 = r(α4 ) = (S2 )2 = α0
Trebuie rezolvat sistemul
( (
S1 σ2 + S2 σ1 = S3 α0 σ2 + α0 σ1 = α4
adică ,
S2 σ2 + S3 σ1 = S4 α0 σ2 + α4 σ1 = α0

de unde se obţine σ1 = α0 , σ1 = α.
Polinomul de localizare a erorilor este X 2 +σ1 X +σ2 = X 2 +X +α, cu rădăcinile
X1 = α7 , X2 = α9 . Au apărut deci două erori, pe poziţiile 8 şi 10. Pentru că suntem
ı̂n cazul binar, Y1 = Y2 = 1; vectorul - eroare obţinut este e(X) = X 7 + X 9 , deci
cuvântul - cod transmis este

{f (X)} = {r(X)} − {e(X)} = {r(X) + e(X)} = 1 + X + X 6 + X 9 + X 12

adică f = 100100100100100.

12.3 Localizarea erorii la codurile BCH binare


După cum s-a observat, ı̂n cazul codurilor BCH binare este suficient să se localizeze
eroarea; corectarea se face imediat prin complementaritatea biţilor aflaţi pe poziţiile
respective. După determinarea valorilor σ1 , σ2 , . . . , σt , algoritmul Peterson nu ex-
plicitează modul de rezolvare a ecuaţiei de localizare al erorii, care uneori poate fi
dificil de prelucrat.
Un procedeu eficient de determinare a poziţiilor erorilor pentru codurile BCH
binare a fost realizat de Chien.
Fie polinomul (de localizare a erorii):

S(X) = (1 − X1 X)(1 − X2 X) . . . (1 − Xt X) = σ0 + σ1 X + σ2 X 2 + . . . + σt X t
12.3. LOCALIZAREA ERORII LA CODURILE BCH BINARE 141

unde
σ0 = 1
σ1 = X1 + X2 + . . . + Xt
...
σt = X1 X2 . . . Xt
(operaţiile fiind efectuate ı̂n binar, semnul − este asimilat cu +).
Rădăcinile acestui polinom sunt inversele localizărilor erorilor Xi−1 , 1 ≤ i ≤ t.
Procedeul lui Chien de corectare a erorilor ı̂n cazul binar pentru codurile BCH,
este următorul:
Fie r = r0 r1 . . . rn−1 cuvântul recepţionat; componentele lui se vor decodifica pas
- cu - pas (pe măsură ce sunt recepţionate).
Să considerăm primul bit primit rn−1 şi să cercetăm dacă el este corect sau nu.
Aceasta este echivalent cu a verifica dacă αn−1 este o localizare a erorii, sau dacă
α−(n−1) = α este o rădăcină a polinomului S(X) de localizare a erorii.
Dacă σ1 α + σ2 α2 + . . . + σt αt = 1 adică S(α) = 0, atunci a intervenit o eroare
pe poziţia αn−1 şi deci componenta rn−1 trebuie corectată.
Dacă σ1 α + σ2 α2 + . . . + σt αt 6= 1 adică S(α) 6= 0, atunci rn−1 s-a recepţionat
corect.
Procedeul se repetă: ı̂n general componenta recepţionată rn−s este corectă dacă
−(n−s)
α = αs nu este rădăcină a polinomului S(X), adică
σ1 αs + σ2 α2s + . . . + σt αst 6= 1
În caz contrar, rn−s va fi corectată ı̂n rn−s + 1.
Algoritmul lui Chien este deci:

1. s := 0;

2. while s ≤ n do

(a) s := s + 1;
(b) Se calculează P := σ1 αs + σ2 α2s + . . . + σt αts ;
(
0 dacă P = 0
(c) Se decodifică an−s := rn−s + v unde v =
1 dacă P =
6 0

Circuitul liniar care implementează acest algoritm este:


-
6 -
6 -
6 ? ? ?
- σ1 - σ2 ... - σt
6 6 6 t º·
X
σi α si - + -
º·? º·? ?
º· i=1 ¹¸
6
¾ α ¾ α2 ... ¾ αt
¹¸ ¹¸ ¹¸ A

r0 , r1 , . . . , rn−1 -
142 PRELEGEREA 12. CODURI BCH

Cele t circuite din stânga realizează la fiecare tact multiplicarea cu αi .


La momentul iniţial blocul A calculează suma σ1 α + σ2 α2 + . . . + σt αt dând la
ieşire valoarea 1 (scalar) dacă această sumă este egală cu 1 şi 0 (scalar) dacă suma
anterioară dă orice element din GF (2m ) diferit de 1 = (1, 0, . . . , 0). În funcţie de
acest rezultat, componenta rn−1 este schimbată, respectiv păstrată.
La momentul următor, blocul A calculează suma σ1 α2 + σ2 α4 + . . . + σt α2t . Dacă
această sumă este 1, α2 este rădăcină a polinomului de localizare a erorii S(X),
deci α−2 = αn−2 este o localizare a erorii. În caz contrar, suma este diferită de
1. La ieşirea din blocul A se obţine scalarul 1 respectiv 0 - componenta rn−2 fiind
modificată respectiv păstrată.

Exemplul 12.5 Fie α ∈ GF (24 ) primitiv, rădăcina polinomului 1 + X + X 4 . Să


presupunem şi că se ştiu σ1 şi σ2 . Circuitul care multiplică cu α este (Prelegerea 8,
Figura 8.4) circuitul de ı̂mpărţire cu m(X) = 1 + X + X 4 :
¾ s
?
²¯ 6
?
- -+ - - - -
±°

Circuitul de ı̂nmulţire cu α2 este - conform egalităţii


α2 (a1 + a2 α + a3 α2 + a4 α3 ) = a1 α2 + a2 α3 + a3 α4 + a4 α5 = a3 + (a3 + a4 )α +
(a1 + a4 )α2 + a2 α3 următorul (vezi şi Exemplul 8.10, Prelegerea 8):
¾ s
?
²¯ 6
?
- - + - - - - - -
±° 6 6
6 ? -
²¯
? - +
±°
¾ s6 ?

Iniţial ı̂n elementele de ı̂nmagazinare ale celor două circuite se află σ1 respectiv σ2 .
Pentru cazul binar vom nota cu
³
x1 -
x2 - - x1 ∨ x2 ∨ . . . ∨ xn
xn -
´

dispozitivul ”sau” care dă valoarea (scalar) 0 dacă şi numai dacă

x1 = x2 = . . . = xn = 0,

şi cu

x - - x

dispozitivul ”non”.
Atunci, circuitul de implementare a procedeului Chien de localizare a erorii este:
r -
12.4. EXERCIŢII 6 143
?
²¯
r -+
6 ?
²¯ ±°
¾ r + ¾
²¯? 6 ¾ ±° ? 6
-
? - +- - - - ¾ ¾?¾ ? ¾
6 ¾ ¾?
1 ±°
²¯
-+¾ ? ?
²¯ ±°
? -+¾ ?
±°
²¯
? -+¾ ?
? -? ±°
²¯
? -+¾ ?
±°
ª
?
- ¾?
? -
??? ?
µ ´
?

?
²¯
r0 , r1 , . . . , rn−1 -+
±°
?
În acest circuit, cele patru elemente de ı̂nmagazinare din stânga formează circuitul
de ı̂nmulţire cu α (unde iniţial se introduce σ1 ), iar cele patru elemente din dreapta
formează circuitul de ı̂nmulţire cu α2 , aranjat ı̂n ordine inversă (unde σ2 se introduce
iniţial de la dreapta spre stânga).
De asemenea, există un element de ı̂nmagazinare care conţine numai 1, element
pe care ı̂l furnizează la fiecare tact.
Iniţial, circuitul funcţionează odată la momentul 0 fără a introduce nimic de pe
canal (pentru ”amorsarea” ı̂n elementele de ı̂nmagazinare a coeficienţilor pentru σ1 α
respectiv σ2 α2 ).
La momentul următor se ı̂ncepe procesul efectiv de decodificare. Dacă rn−1 a fost
perturbat, atunci αn−1 este localizarea erorii, adică α este rădăcină a polinomului de
localizare a erorii şi avem 1 + σ1 α + σ2 α2 = 0. În acest caz, la intrarea ı̂n sumatorul
”sau” este vectorul 0 = (0, 0, 0, 0), iar la ieşire scalarul 0. După negare se obţine
scalarul 1, care se adună (pentru corecţie) la rn−1 .
Dacă rn−1 este corect, la intrarea ı̂n sumator se obţine o valoare nenulă, deci
ieşirea va fi 1, care prin negare este 0 şi rn−1 rămâne nemodificat.

12.4 Exerciţii
12.1 Să se verifice valabilitatea descompunerii M = ABAT din demonstraţia Teo-
remei 12.5

12.2 Fie α ∈ GF (2m ), m > 2 primitiv. Atunci polinoamele minimale m1 (X) şi
m3 (X) au acelaşi grad.

12.3 Construiţi un cod BCH binar corector de 2 erori de lungime 11.

12.4 Construiţi un cod BCH ternar de lungime 26 şi d = 5.


144 PRELEGEREA 12. CODURI BCH

12.5 Să se determine polinomul generator şi cel de control pentru codul BCH binar
corector de 3 erori de lungime
(a) 15 (b) 31.
Codificaţi mesajul de informaţie format numai din 1.

12.6 Caracterizaţi codurile BCH care sunt definite de toate elementele extensiei
Galois GF (q m ).

12.7 Dacă g(X) = 1 + X 4 + X 6 + X 7 + X 8 este polinomul generator al unui cod


BCH binar de lungime 15, să se cerceteze dacă următoarele secvenţe sunt cuvinte -
cod:
(a) 011001011000010 (b) 000111010000110
(c) 011100000010001 (d) 111111111111111

12.8 Aflaţi rădăcinile polinoamelor cu coeficienţi ı̂n GF (24 ) (α este rădăcina poli-
nomului 1 + X + X 4 ):
X 2 + α4 X + α13 , X 2 + α7 X + α2 , X 2 α2 X + α5
X 2 + α6 , X 2 + α2 X, X 2 + X + α8 .

12.9 Definim codul BCH de polinom generator g(X) = m1 (X)m3 (X) peste GF (24 )
folosind elementul primitiv α, rădăcină a polinomului 1 + X + X 4 . Se recepţionează
cuvintele a şi se calculează sindromurile aH. Ştiind aceste sindromuri, localizaţi
erorile (dacă se poate):
01000101 11101000 11001101 01000000
00000100 10100100 00111101 00000000

12.10 Pentru codul BCH definit ı̂n exemplul anterior, decodificaţi mesajele:
110000000000000 000010000100001 010001010100000
110011100111000 110011100100000 111000000000001
101110000000000 101010010110001 010000100000000
010101001011000 110111011101100 101110000001000
111001011000000 000111010000110

12.11 În codul BCH de lungime 15 corector de 3 erori, să se decodifice mesajele:
(a) 001000100000000, (b) 101011001000000.

12.12 În codul BCH peste Z3 de lungime 8, corector de 2 erori, să se decodifice
mesajele
(a) 00100000 (b) 12121212 (c) 11211122
(d) 02020202 (e) 10201020 (f ) 22110011.

12.13 Fie α ∈ GF (25 ) primitiv, rădăcină a polinomului 1 + X 2 + X 5 . Se defineşte


un cod BCH de lungime 31 cu d = 5.
1. Să se construiască polinomul generator al codului: g(X) = m1 (X)m3 (X).

2. Să se decodifice mesajul 1001011011110000110101010111111.


Prelegerea 13

Coduri Reed - Solomon

13.1 Definirea codurilor RS


O clasă foarte interesantă de coduri ciclice a fost definită ı̂n 1960 de Reed şi Solomon.
Numite ı̂n articolul iniţial coduri polinomiale, Peterson arată un an mai târziu că ele
sunt de fapt un caz particular de coduri BCH. Construcţia dată de Reed - Solomon
a fost următoarea:
Fie α ∈ GF (q m ) primitiv (deci ord(α) = n = q m − 1).
Dacă a0 a1 . . . ak−1 ∈ GF (q m )k este secvenţa de informaţie, se defineşte polinomul
h(X) = a0 + a1 X + . . . + ak−1 X k−1 ∈ GF (q m )[X]. Codul polinomial va fi format de
toate cuvintele de forma h(1)h(α) . . . h(αn−1 ).
Teorema 13.1 Un cod polinomial este un cod BCH peste GF (q m ), definit de rădă-
cinile α, α2 , . . . , αn−k .
Demonstraţie: Să considerăm polinomul {f (X)} asociat cuvântului - cod:
f (X) = h(1) + h(α)X + . . . + h(αn−1 )X n−1 = a0 (1 + X + X 2 + . . . + X n−1 ) +
a1 (1 + αX + α2 X 2 + . . . + αn−1 X n−1 ) + a2 (1 + α2 X + α4 X 2 + . . . + (α2 X)n−1 ) + . . . +
ak−1 (1 + αk−1 X + . . . + (αk−1 X)n−1 ).
Se ştie că toate elementele nenule din GF (q m ) sunt rădăcinile polinomului
m
X q −1 − 1 = X n − 1 = (X − 1)(1 + X + X 2 + . . . + X n−1 ), deci toate elementele din
GF (q m ) \ {0, 1} sunt rădăcini ale polinomului 1 + X + X 2 + . . . + X n−1 .
Prin calcul se obţine f (1) = a0 , f (α−1 ) = −a1 , f (α−2 ) = −a2 , . . . ,
f (α−(k−1) ) = −ak−1 şi f (α−j ) = 0 dacă n − 1 ≥ j ≥ k.
Dar cum αn = 1, avem α−j = αn−j şi deci f (αi ) = 0, 1 ≤ i ≤ n − k. 2
În continuare vom numi aceste coduri Reed - Solomon pentru care vom folosi
următoarea definiţie:
Definiţia 13.1 Fie α ∈ GF (q m ) primitiv. Se numeşte cod Reed - Solomon (RS)
codul BCH de polinom generator g(X) ∈ GF (q m )[X],
g(X) = (X − αm0 )(X − αm0 +1 ) . . . (X − αm0 +d−2 ).
Deci, diferenţa faţă de codurile BCH generale este aceea că un cod RS este definit
direct pe extensie, nu pe corpul de bază. Astfel, la un cod BCH cuvintele - cod sunt
din Zqn , pe când la un cod RS, ele sunt din GF (q m )n . Cum şi GF (q m ) este corp,
toate proprietăţile codurilor BCH se păstrează şi ı̂n cazul codurilor RS.

145
146 PRELEGEREA 13. CODURI REED - SOLOMON

Deoarece au fost studiate (şi utilizate) numai codurile Reed - Solomon de carac-
teristică 2, vom considera ı̂n continuare q = 2.

Exemplul 13.1 Fie GF (23 ) generat de rădăcina α a polinomului 1 + X + X 3 , şi


să considerăm codul RS definit de polinomul g(X) = (α + X)(α2 + X) = 1 + α +
(α + α2 )X + X 2 . Este un cod ciclic de lungime n = 7, k = 5 şi d = 3. Folosind
definiţia din secţiunea 9.3, se poate construi matricea generatoare a codului:
 
1 + α α + α2 1 0 0 0 0
 2 


0 1+α α+α 1 0 0 0 

G=
 0 0 1+α α+α 2
1 0 0 

 
 0 0 0 1 + α α + α2 1 0 
0 0 0 0 1 + α α + α2 1

Codul are 85 cuvinte, obţinute prin ı̂nmulţirea cu g(X) a tuturor polinoamelor din
GF (23 )[X] de grad cel mult 4 sau - echivalent - din ı̂nmulţirea cu matricea G a
tuturor cuvintelor din GF (23 )5 .
De exemplu, codificarea mesajului de informaţie a = 1α00α3 , sau a(X) = 1 +
αX +α3 X 4 este a(X)g(X) = 1+α+(α+α2 )X 2 +αX 3 +(1+α2 )X 4 +X 5 +(1+α)X 6
(respectiv α3 0α4 αα6 1α3 ).
O matrice de control foarte simplă se obţine folosind (conform secţiunii 11.3)
rădăcinile α şi α2 ale cuvintelor - cod:
à !
1 α α2 α3 α4 α5 α6
H= .
1 α2 α4 α6 α α3 α5

Teorema 13.2 Distanţa minimă a unui cod RS este d = n − k + 1.

Demonstraţie: Să notăm - temporar - cu dH distanţa minimă a unui cod. Conform


Teoremei 3.3, dH ≤ n − k + 1. Pe de-altă parte, ı̂ntr-un cod RS, grad(g(X)) =
n − k = d − 1 deci d = n − k + 1. Din cele două afirmaţii rezultă dH ≤ d. Pe de-altă
parte, din Teorema 12.2, cum codul RS este un caz particular de cod BCH, rezultă
dH ≥ d. 2
Din această teoremă rezultă că un cod RS are distanţa maximă separabilă (se
mai spune că este un cod DMS).

13.2 Coduri RS scurte


Deoarece α ∈ GF (2m ) este primitiv, toate cuvintele unui cod RS au lungimea
n = 2m − 1 şi k = n − d + 1 = 2m − d simboluri de informaţie. Uneori ı̂nsă sunt
necesare coduri RS a căror lungime să nu fie de această formă. Ele se obţin astfel:
Fie A un (n, k) - cod RS de distanţă d şi s (1 ≤ s < 2m − d) un număr ı̂ntreg.
Se construieşte codul RS scurt A(s) format din toate cuvintele lui A care au 0 pe
ultimele s poziţii, din care apoi aceste s poziţii se ignoră.

Exemplul 13.2 Fie A codul dat de g(X) = α+X unde α este rădăcina polinomului
1 + X + X 2 şi generează GF (22 ). A are deci n = 3, k = 2, d = 2 şi 16 cuvinte
13.2. CODURI RS SCURTE 147

- cod. Codul A(1) se obţine luând toate cuvintele lui A care au 0 pe ultima poziţie
(acestea sunt 000, α10, α2 α0, 1α0), din care se elimină ultimul caracter.
Deci A(1) = {00, α1, α2 α, 1α}.
Atenţie: Ultima poziţie nu ı̂nseamnă ultimul bit. Fiecare element din cuvânt are
aici două poziţii binare. Astfel, cele patru cuvinte - cod alese din A au reprezentarea
binară
000000, 011000, 110100, 100100
iar codul scurt, reprezentat ı̂n binar este Â(1) = {0000, 0110, 1101, 1001}.

Dacă g(X) este polinomul generator al codului A, atunci

A(s) = {b ∈ A|grad(b(X)) < n − s}.

Sau - altfel spus - A(s) conţine toate polinoamele de forma b(X) unde
b(X) = a(X)g(X), grad(a(X)) < k − s = 2m − d − s (deoarece grad(g(X)) =
d − 1 = n − k).
De aici rezultă că matricea generatoare a unui cod RS scurt A(s) este
 
g(X)
 
 Xg(X) 
G=
 .. 

 . 
X k−s−1 g(X)

care se obţine din matricea generatoare a codului A, din care se elimină ultimele s
linii. Numărul de simboluri de informaţie este egal cu numărul de linii din G, deci
ks = k − s = 2m − d − s
Să notăm acum cu d respectiv ds distanţele minime ale celor două coduri. Se
observă că ∀c1 , c2 ∈ A(s), c01 = c1 00 . . . 0, c02 = c2 00 . . . 0 ∈ A şi deci d(c1 , c2 ) =
d(c01 , c02 ), adică ds ≥ d.
Pe de-altă parte (Teorema 3.3), ds ≤ ns −ks +1 = 2m −1−s−(2m −d−s)+1 = d,
deci ds = d.
Din cele arătate mai sus putem enunţa teorema:

Teorema 13.3 Fie A un (n, k) - cod RS cu distanţa minimă d şi A(s) codul său
scurt, cu parametrii ns , ks , ds . Atunci

ns = 2m − 1 − s, ks = 2m − d − s, ds = d

şi A(s) este un cod DMS.

Observaţie: Alte coduri scurte se pot obţine eliminând orice set de s elemente din
cuvintele unui cod RS. Se poate vedea imediat că proprietăţile arătate mai sus nu
se schimbă.

Exemplul 13.3 Plecând de la codul RS din Exemplul 13.1, codul scurt A(2) va
avea ca matrice generatoare matricea G fără ultimele două linii şi coloane, iar ca
parametri n2 = 5, k2 = 3, d2 = 3.
148 PRELEGEREA 13. CODURI REED - SOLOMON

13.3 Decodificarea codurilor RS


Fiind cazuri particulare de coduri BCH, codurile RS se pot decodifica folosind al-
goritmul Peterson (Secţiunea 12.2). Să reluăm detaliat pe un exemplu aplicarea
acestui algoritm.
Exemplul 13.4 Fie g(X) = (1 + X)(α + X)(α2 + X)(α3 + X) unde α ∈ GF (23 )
este rădăcina (primitivă) a polinomului 1 + X + X 3 . Codul are d = 5, deci poate
corecta maxim 2 erori independente. Mai ştim că:
α3 = 1 + α, α4 = α + α2 , α5 = 1 + α + α2 , α6 = 1 + α2 .
Să presupunem că s-a recepţionat cuvântul v = α6 αα5 α2 10α2 . Pentru decodifi-
care se aplică următorii paşi:
(1): Se calculează cele patru sindromuri:
S0 = v(α0 ) = α6 +α+α5 +α2 +1+0+α2 = 1+α2 +α+1+α+α2 +α2 +1+α2 = 1
S1 = v(α) = α6 + α2 + α7 + α5 + α4 + 0 + α8 = α3
S2 = v(α2 ) = α6 + α3 + α9 + α8 + α8 + 0 + α14 = α3
S3 = v(α3 ) = α6 + α4 + α11 + α11 α12Ã+ 0 + α20!= 1Ã !
S0 S1 1 α3
(2) Deoarece rangul matricii = este 2, cuvântul
S1 S2 α3 α3
v are două erori; cum distanţa este 5, ele pot fi corectate.
(3) Se rezolvă sistemul liniar
( (
S0 σ2 + S1 σ1 = S2 σ2 + α3 σ1 = α3
adică
S1 σ2 + S2 σ1 = S3 α σ2 + α3 σ1 = 1
3

Adunând cele două ecuaţii, se obţine (1 + α3 )σ2 = 1 + α3 , deci σ2 = 1.


Înlocuind ı̂n prima ecuaţie, avem α3 σ1 = α3 + 1 = α, de unde, prin ı̂nmulţire cu
α se ajunge la σ1 = α5 .
4

(4) Polinomul de localizare a erorii este σ(X) = X 2 + σ1 X + σ2 = X 2 +


α X + 1. Prin ı̂ncercări se obţine σ(α) = σ(α6 ) = 0, deci cele două erori sunt pe
5

poziţiile X1 = α, X2 = α6 . Ã ! Ã ! Ã !
X10 X20 Y1 S0
(5) Se rezolvă sistemul liniar · = , adică:
X1 X2 Y2 S1
(
Y1 + Y2 = 1
αY1 + α Y2 = α3
6

Înmulţind a doua ecuaţie cu α şi adunând, se obţine α6 Y1 = α5 , deci Y1 = α6 . După


ı̂nlocuire ı̂n prima ecuaţie, se determină şi Y2 = α2 .
(6) Rezumând, au apărut erorile α6 pe poziţia 1 şi α2 pe poziţia 6. Deci
eroarea este e = 0α6 0000α2 , iar cuvântul - cod trimis a fost
c = v + e = α6 α5 α5 α2 100.

13.4 Altă construcţie a codurilor RS


Plecând de la construcţia iniţială, se poate realiza şi o altă definiţie pentru codurile
RS. Ea se bazează pe o modalitate diferită de reprezentare a cuvintelor din Zqn :
folosind polinoamele ca funcţii.
13.4. ALTĂ CONSTRUCŢIE A CODURILOR RS 149

Exemplul 13.5 Fie S = GF (23 ), construit folosind rădăcina primitivă α a polino-


mului 1 + X + X 3 . Definim funcţia f : S → Z2 prin
x 0 1 α α2 α3 α4 α5 α6
f (x) 0 0 1 1 0 1 0 0
Atunci f (x) se poate reprezenta prin
vf = f (0)f (1)f (α)f (α2 )f (α3 )f (α4 )f (α5 )f (α6 ) = 00110100.

Exemplul 13.6 Fie S = GF (23 ) şi funcţia f : S → S definită vf = α4 01α2 1α00.


Pe baza valorilor ı̂n fiecare punct din S, f se poate reprezenta şi ca un polinom
f (X) = α4 + α2 X + α3 X 2 + X 3 .

Definiţia 13.2 Fie S ⊆ GF (2m ). Două polinoame p(X), q(X) reprezintă aceeaşi
funcţie : S → GF (2m ) dacă şi numai dacă ∀β ∈ S, p(β) = q(β).

Mulţimea A = {f (X) ∈ GF (2m )[X]|grad(f (X)) ≤ k −1} se poate structura evident


ca un spaţiu liniar de dimensiune k, cu baza {1, X, X 2 , . . . , X k−1 }. Deoarece toate
aceste polinoame pot fi scrise şi ca funcţii definite pe o mulţime S ⊆ GF (2m ), vom
numi A ”spaţiul funcţiilor pe S”.
De remarcat că ı̂n această fază S nu este definit explicit.
Teorema 13.4 Fie mulţimea S, |S| = n şi k ≤ n. Mulţimea tuturor funcţiilor
: S → GF (2m ) reprezentate prin polinoame de grad ≤ k − 1 formează un spaţiu
liniar de funcţii, cu baza {1, X, . . . , X k−1 }.
Demonstraţie: Evident, orice polinom de grad cel mult k − 1 este generat de
{1, X, . . . , X k−1 }. Tot ce trebuie arătat este că fiecare funcţie are o reprezentare
unică sub formă de polinom.
Să presupunem (prin absurd) că p(X) şi q(X) sunt egale ca funcţii pe S. Deci
∀α ∈ S, p(α) = q(α). Dar atunci p(X) − q(X) este un polinom de grad < k care
are n (n ≥ k) rădăcini, deci p(X) − q(X) ≡ 0, adică p(X) ≡ q(X). 2
Exemplul 13.7 Fie S = GF (23 ) construit folosind 1 + X + X 3 , şi să considerăm
toate polinoamele din GF (23 )[X], de grad cel mult doi. O bază pentru acest spaţiu
de funcţii este {1, X, X 2 }, cu reprezentarea corespunzătoare:
1 − 11111111
X − 01αα2 α3 α4 α5 α6
X2 − 01α2 α4 α6 αα3 α5
Atunci, orice polinom p(X) = a0 + a1 X + a2 X 2 considerat ca o funcţie, poate fi
reprezentat sub formă de vector prin
 
1 1 1 1 1 1 1 1
vp = (a0 a1 a2 )  0 1 α α2 α3 α4 α5 α6 


2 4 6 3 5
0 1 α α α α α α

Teorema 13.5 Spaţiul funcţiilor pe S ⊆ GF (2m ) (|S| = n) al tuturor polinoamelor


din GF (2m )[X] de grad ≤ k − 1 formează un (n, k) - cod liniar DMS.
150 PRELEGEREA 13. CODURI REED - SOLOMON

Demonstraţie: Alegem o mulţime S ⊆ GF (2m ) de cardinal n şi considerăm spaţiul


funcţiilor tuturor polinoamelor p : S → GF (2m ) de grad cel mult k − 1. Lungimea
fiecărui cuvânt - cod este n, iar dimensiunea este k (cu Teorema 13.4). Mai rămâne
de arătat că acest cod este DMS (are distanţă maximă separabilă), adică d = n −
k + 1. Pentru aceasta, să observăm că orice polinom p(X) are maxim k − 1 rădăcini
distincte; deci reprezentarea vp are cel mult k − 1 zero-uri, adică w(vp ) ≥ n − k + 1.
Conform Teoremei 3.3, d ≤ n − k + 1, deci d = n − k + 1. 2
Fie n un divizor al lui 2m − 1 şi S = {α ∈ GF (2m )|αn = 1} mulţimea rădăcinilor
de ordinul n ale unităţii din GF (2m ). Evident, S conţine toate rădăcinile din GF (2m )
ale ecuaţiei X n + 1 = 0 şi S are cel puţin un element primitiv (Teorema 11.1).

Teorema 13.6 Fie p(X), q(X) ∈ GF (2m )[X] şi S ⊆ GF (2m ) mulţimea rădăcinilor
de ordinul n ale unităţii. Atunci p(X) şi q(X) reprezintă aceeaşi funcţie f : S →
GF (2m ) dacă şi numai dacă p(X) ≡ q(X) (mod 1 + X n ).

Demonstraţie: Fie q(X) = h(X)(1 + X n ) + p(X). Atunci pentru orice α ∈ S avem


q(α) = h(α)(1 + αn ) + p(α). Dar 1 + αn = 0, deci q(α) = p(α).
Invers, fie α ∈ S primitiv. Deci orice element din S are forma αi (0 ≤ i < n).
Dacă q(αi ) = p(αi ), atunci αi este rădăcină a polinomului p(X) − q(X). Putem scrie
atunci
n−1
Y
p(X) − q(X) = h(X) (1 + αi ) = h(X)(1 + X n ).
i=0
2

Teorema 13.7 Fie S mulţimea rădăcinilor de ordinul n ale unităţii din GF (2m ).
Atunci spaţiul funcţiilor tuturor polinoamelor din GF (2m )[X] de grad ≤ k − 1 pe S
formează un (n, k) - cod ciclic peste GF (2m ).

Demonstraţie: Să notăm cu C acest spaţiu şi fie S generat de α primitiv. Atunci,
dacă p(X) ∈ GF (2m )[X] este un polinom de grad cel mult k − 1, avem vp =
p(1)p(α) . . . p(αn−1 ) ∈ C.
Fie q(X) = p(αX). Cum grad(q(X)) ≤ k − 1, rezultă vq ∈ C. Dar
q(1)q(α) . . . q(αn−1 ) = p(α)p(α2 ) . . . p(αn−1 )p(1) ∈ C,
ceea ce reprezintă chiar definiţia unui cod ciclic. 2

Exemplul 13.8 Să considerăm GF (23 ) construit cu 1 + X + X 3 şi fie p(X) =


α4 + α2 X + α3 X 2 + X 3 , care are reprezentarea 01α2 1α00. Permutarea ei ciclică
este 1α2 1α000, care corespunde funcţiei p(αX) = α4 + α3 X + α5 X 2 + α3 X 3 =
(α4 + X)(α5 + X)(α6 + X)α3 .

Definiţia 13.3 Fie polinomul V (X) = V0 + V1 X + . . . + Vn−1 X n−1 ∈ GF (2m )[X]


şi α ∈ GF (2m ) o rădăcină primitivă de ordinul n a unităţii. Spunem că v(X) =
v0 + v1 X + . . . + vn−1 X n−1 este ”transformata” lui V (X) dacă
n−1
X
V (αj ) = Vi αji = vj , j = 0, 1, . . . , n − 1
i=0
13.4. ALTĂ CONSTRUCŢIE A CODURILOR RS 151

Altfel spus, dacă se notează cu A = (aij ), aij = αij , atunci

(V0 V1 . . . Vn−1 )A = (v0 v1 . . . vn−1 ).

Matricea A este numită transformata Fourier finită. Ea este nesingulară, deci se


poate scrie (V0 V1 . . . Vn−1 ) = (v0 v1 . . . vn−1 )A−1 sau
n−1
X
Vi = vj α−ij = v(α−i )
i=1

Vom arăta aceasta ı̂nsă ı̂n mod direct, fără a folosi inversa matricii A:

Teorema 13.8 Fie α ∈ GF (2m ) o rădăcină primitivă de ordin n a unităţii. Dacă


vj = V (αj ) pentru V (X) = V0 + V1 X + . . . + Vn−1 X n−1 ∈ GF (2m )[X], atunci
Vi = v(α−i ) unde v(X) = v0 + v1 X + . . . + vn−1 X n−1 .

Demonstraţie: Deoarece(α este primitiv, vom avea


n−1
X n (mod 2) dacă k − i = 0
α(k−i)j =
j=0
0 dacă k − i 6= 0
Atunci à !  
n−1
X n−1
X n−1
X n−1
X n−1
X
v(α−i ) = vj α−ij = Vk αkj α−ij = Vk  α(k−i)j  = Vi . 2
j=0 j=0 k=0 k=0 j=0
Deci, fiind dat un vector de valori (v0 , v1 , . . . , vn−1 ), se pot regăsi coeficienţii
polinomului V (X) = V0 + V1 X + . . . + Vn−1 X n−1 , lucru esenţial ı̂n definirea unui
algoritm de decodificare.

Teorema 13.9 Fie S ⊆ GF (2m ) mulţimea rădăcinilor de ordinul n ale unităţii din
GF (2m ), generată de elementul primitiv α. Spaţiul funcţiilor tuturor polinoamelor
de grad < n − d + 1 pe S este un cod ciclic DMS cu polinomul generator
g(X) = (α + X)(α2 + X) . . . (αd−1 + X).

Demonstraţie: Funcţia polinomială V (X) a cărei reprezentare corespunde lui v(X) =


n−1
X
a(X)g(X) este V (X) = v(αn−i )X. Deoarece v(αn−i ) = 0 pentru i = n − d +
i=0
1, n − d + 2, . . . , n − 1 (grad(v(X) < n − d + 1), coeficientul lui X i din V (X) este
zero, deci V (X) are gradul < n − d + 1. 2
Dacă se ia n = 2m − 1, se ajunge la o altă modalitate de construcţie a codurilor
RS, care are o altă matrice generatoare (deci o altă dispunere a biţilor de informaţie).

Exemplul 13.9 Fie α rădăcina polinomului 1 + X + X 3 cu care se construieşte


GF (23 ). Considerăm codul RS de polinom generator g(X) = (1 + X)(α + X)(α2 +
X)(α3 + X) = α6 + α5 X + α5 X 2 + α2 X 3 + X 4 care corespunde reprezentării
6
X
6 5 5 2
α α α α 100). Transformata lui g(X) este polinomul G(X) = g(α7−k )X k .
k=0
Pentru că g(α0 )g(α) . . . g(α6 ) = 00001αα4 , avem
G(X) = g(α7−1 )X +g(α7−2 )X 2 +g(α7−3 )X 3 = α4 X +αX 2 +X 3 = X(α4 +αX +X 2 ).
Se verifică uşor că G(X) este o funcţie cu reprezentarea
152 PRELEGEREA 13. CODURI REED - SOLOMON

G(α0 )G(α) . . . G(α6 ) = α6 α5 α5 α2 100.


Putem gândi acest cod RS ca spaţiul tuturor polinoamelor de grade 1, 2 şi 3, adică
{Xp(X)|p(X) ∈ GF (23 )[X], grad(p(X)) < 3}.
Baza pentru acest spaţiu liniar este {X, X 2 , X 3 }, iar matricea generatoare
 
1 α α2 α3 α4 α5 α6
 
 1 α2 α4 α6 α α 3 α5 
1 α3 α6 α2 α5 α α 4

Deci G(X) =α4 X + αX 2 + X 3 va avea reprezentarea



1 α α2 α3 α4 α5 α6

(α α 1)  1 α2 α4 α6 α
4
α3 α5 
 = (α6 α5 α5 α2 1 0 0).
1 α3 α6 α2 α5 α α4

13.4.1 Algoritmul de decodificare Berlekamp - Massey


Fie g(X) polinomul generator al unui cod RS, c(X) = a(X)g(X) un polinom -
cod transmis, şi v(X) = c(X) + e(X) polinomul recepţionat. Notăm V (X), C(X)
şi E(X) transformatele lui v(X), c(X) respectiv e(X). Cum transformata Fourier
finită este o aplicaţie liniară, se verifică imediat V (X) = C(X) + E(X).
Deoarece g(X) are d − 1 rădăcini consecutive αi , m0 ≤ i ≤ m0 + d − 2, sindromul
s(X) va avea s(αn−i ) = e(αn−i ) = Ei pentru n − m0 − d + 1 ≤ i ≤ n − m0 . Deci
sindromul va putea determina d−1 coeficienţi ai transformatei E(X). Pentru ceilalţi
coeficienţi va trebui să reluăm polinomul de localizare a erorilor σ(X).
σ(X) are proprietatea că σ(αk ) = 0 ⇐⇒ ek 6= 0. Deoarece E(αk ) = ek , vom
avea σ(αk )E(αk ) = 0 ∀k, deci - lucrând ı̂n algebra polinoamelor modulo 1 + X n :
{σ(X)}{E(X)} = 0
şi (Ã !Ã !)
t
X n−1
X
{σ(X)}{E(X)} = σi X i Ek X k
i=0 k=0
unde t = [(d − 1)/2]. Calculând ı̂n ambele relaţii coeficientul lui X t+k , se obţine:
σt Ek + σt−1 Ek+1 + . . . + σ0 Ek+t = 0.
Pentru că ştim deja d − 1 valori consecutive ale lui Ek , putem determina recursiv
coeficienţii σi , pe care ı̂i folosim la generarea tuturor valorilor Ek .
În [5] se defineşte o altă formă a acestui algoritm.

Exemplul 13.10 Să reluăm codul RS definit ı̂n Exemplul 13.4, ı̂n care considerăm
că s-a recepţionat cuvântul v = α6 αα5 α2 10α2 . Deoarece d = 5, avem t ≤ 2 şi
E0 = v(α0 ) = 1, E6 = v(α) = α3 , E5 = v(α2 ) = α3 , E4 = v(α3 ) = 1. Polinomul de
localizare a erorii este σ(X) = X 2 + σ1 X + σ0 . Determinăm σ0 , σ1 ca ı̂n Exemplul
13.4 şi găsim σ0 = 1, σ1 = α5 . Se poate determina astfel relaţia de recurenţă:
Ek = α5 Ek+1 + Ek+2
Deoarece (E0 , E6 , E5 , E4 ) = (1, α3 , α3 , 1), vom avea:
E3 = α5 E4 + E5 = α5 + α3 = α2 ,
E2 = α5 E3 + E4 = α5 · α2 + 1 = 0,
E1 = α5 E2 + E3 = 0 + α2 = α2
13.5. ŞTERGERI 153

Am determinat transformata lui e(X), adică E(X) = 1 + α2 X + α2 X 3 + X 4 +


α X 5 + α3 X 6 . De aici rezultă e = (E(α0 ), E(α), E(α2 ), . . . , E(α6 )) = 0α6 0000α2 ,
3

deci cuvântul decodificat este


c = v + e = α6 α5 α5 α2 100.
Pe de-altă parte, dacă s-ar fi folosit matricea generatoare din Exemplul 13.9, nu
ar mai fi fost necesar să se determine vectorul eroare e, ci doar să se calculeze toate
valorile lui v(αk ), 0 ≤ k ≤ 6, din care se obţine direct mesajul transmis; mai precis,
se află transformata lui v(X), care se adună la transformata lui e(X):
v0 v1 . . . v6 = v(α0 )v(α6 )v(α5 ) . . . v(α) = 1ααα6 1α3 α3 ,
E0 E1 . . . E6 = 1α2 0α2 1α3 α3 , şi deci
C0 C1 . . . C6 = V0 V1 . . . V6 + E0 E1 . . . E6 = 0α4 α1000.
S-a obţinut C(X) = α4 X + αX 2 + X 3 . Deci biţii de informaţie sunt (α4 , α, 1).
De aici se obţine forma cuvântului transmis c = α6 α5 α5 α2 100.

13.5 Ştergeri
O ştergere este o eroare detectată, pentru corectarea căreia trebuind determinată
doar valoarea erorii. Numărul locaţiei de ştergere este poziţia elementului perturbat.
Acest număr este ı̂n general cunoscut (din citirea fizică a mesajului primit sau din
structura codului).
Astfel, fie A un cod RS peste GF (2m ) şi să considerăm codul  format din
reprezentarea binară a cuvintelor codului A (fiecare element din GF (2m ) se scrie ca
un cuvânt binar de lungime m). Se defineşte şi codul Â0 obţinut prin adăugarea câte
unui bit de paritate la fiecare simbol din componenţa cuvintelor codului Â.

Exemplul 13.11 Să considerăm codul RS din Exemplul 13.2. Pentru a forma Â0 ,
se ı̂nlocuieşte fiecare element 0, 1, α, α2 respectiv cu 000, 101, 011, 110 (al treilea bit
este bitul de paritate). Astfel, pentru α10 ∈ A avem 011101000 ∈ Â0 .

Deoarece fiecare element dintr-un cuvânt - cod c ∈ A este reprezentat printr-un


cuvânt binar de lungime m + 1, cuvântul - cod corespunzător ĉ0 ∈ Â0 va avea
lungimea (2m − 1)(m + 1). Se observă că fiecare element nenul din c este ı̂nlocuit
cu un cuvânt de pondere pară. Deci, ĉ0 va fi format din 2m − 1 cuvinte binare de
lungimi m + 1, fiecare de pondere pară. În acest fel, dacă ı̂n cuvântul recepţionat
v̂ 0 există un grup de pondere impară, ştim că a apărut o eroare printre cei m + 1
biţi corespunzători. Considerat din nou ca un cuvânt cu elemente din GF (2m ), ştim
că acest cuvânt are un element perturbat; nu cunoaştem valoarea erorii, dar ştim
poziţia sa. Avem deci o ”ştergere”.

Exemplul 13.12 Reluând construcţia din exemplul anterior, să presupunem că s-
a primit 011100000. Deci, au apărut erori ı̂n al doilea grup de 3 biţi (acesta are
pondere impară), aşa că α1 este un numărul locaţiei de ştergere. Ştiind acest număr,
putem ı̂nlocui al doilea element cu 0 (uşurează calculul sindromului), şi vom ı̂ncerca
decodificarea lui v = α00 ı̂n cel mai apropiat cuvânt - cod din A, ştiind că poziţia
erorii este X1 = α.
154 PRELEGEREA 13. CODURI REED - SOLOMON

Teorema 13.10 Fie A un cod RS peste GF (2m ) de distanţa d, şi v un cuvânt


recepţionat care are s ştergeri şi t erori care nu sunt ştergeri. Atunci v poate fi
decodificat corect dacă 2t + s ≤ d − 1.
Demonstraţie: De remarcat că ı̂n Teorema 3.7, o condiţie mai slabă (t + s ≤ d − 1)
asigură corectarea celor t erori, dar detectează numai celelalte s ştersături. Această
teoremă realizează corectarea completă a cuvântului.
Fie B mulţimea poziţiilor ştersăturilor şi A mulţimea poziţiilor erorilor; deci
A
Y\ B este mulţimea poziţiilor erorilor care nu sunt ştersături. Definim σB (X) =
(αi + X) ca fiind polinomul de localizare a ştersăturilor. Atunci polinomul de
i∈B
localizare a erorilor se poate scrie
σA (X) = σB (X)σA\B (X).
Aflarea poziţiilor erorilor revine la determinarea rădăcinilor polinomului σA\B (X).
Pentru aceasta se poate folosi algoritmul Peterson de decodificare a codurilor BCH,
cu câteva schimbări, corespunzătoare sindromurilor ”modificate”.
Astfel, fie σB (X) = B0 + B1 X + . . . + Bs−1 X s−1 + X s şi σA\B (X) = A0 + A1 X +
. . . + At−1 X t−1 + X t .
Similar algoritmului Peterson, vom ı̂nmulţi ambii membrii ai egalităţii
σB (X)σA\B (X) = σA (X) cu Yi Xij (m0 ≤ j ≤ m0 + d − 2) (reamintim, Xi sunt
locaţiile, iar Yi sunt valorile erorilor).
Apoi se ı̂nlocuieşte X = Xi şi se face suma după i = 1, . . . , t + s. Se obţine
Sj0 A0 + Sj+1
0 0
A1 + . . . + Sj+t−1 0
At−1 + Sj+t = 0 (m0 ≤ j ≤ m0 + d − 2) (1)
0
unde Sk sunt sindromurile modificate, de forma
Sk0 = B0 Sk + B1 Sk+1 + . . . + Bs−1 Sk+s−1 + Sk+s . (2)
Pentru că se ştiu valorile lui Sj pentru j = m0 , . . . , m0 +d−2 iar B0 , B1 , . . . , Bs−1
sunt cunoscute, se pot determina Sj0 pentru m0 ≤ j ≤ d − 1 − s. Deoarece 2t + s ≤
d − 1, deci 2t ≤ d − 1 − s, se poate rezolva sistemul (1) scris matricial
 0 0 0    0 
Sm 0
Sm 0 +1
. . . Sm 0 +t−1
A0 Sm 0 +t
 0 0 0    0 
 Sm0 +1 Sm0 +2 . . . Sm 0 +t
 A1   Sm0 +t+1 
 ..  .. = ..  (3)
    
 .  .   . 
0 0
Sm 0 +t−1
Sm 0 +t
. . . Sm0 +2t−1 At−1 Sm0 +2t
cu t necunoscute A0 , A1 , . . . , At−1 .
După determinarea polinomului de localizare a erorilor, algoritmul Peterson se
poate aplica ı̂n continuare nemodificat. 2
Fie A un cod RS peste GF (2m ), de polinom generator g(X) = (αm0 + X) . . .
m0 +d−2
(α + X). Se transmite cuvântul - cod c şi se recepţionează v cu s ştergeri
localizate ı̂n elementele mulţimii B = {X1 , . . . , Xs }. Fie σB (X) = B0 + B1 X + . . . +
Bs−1 X s−1 + X s polinomul de localizare al ştergerilor.
Polinomul de localizare a erorilor σA (X) = σA\B (X)σB (X) poate fi determinat
aflând σA\B (X) = A0 + A1 X + . . . + At−1 X t−1 + X t astfel:
(a) Se calculează Sj = v(αj ) pentru j = m0 , m0 + 1, . . . , m0 + d − 2;
(b) Se determină Sj0 (m0 ≤ j ≤ m0 + d − 2 − s) cu relaţiile (2);
(c) Se rezolvă sistemul liniar (3) de necunoscute Ai .
13.6. EXERCIŢII 155

Exemplul 13.13 Fie A codul RS peste GF (24 ) construit de 1 + X + X 4 , cu poli-


nomul generator g(X) = (1 + X)(α + X) . . . (α4 + X) şi Â0 codul binar asociat ı̂n
care sunt codificate mesajele. S-a primit mesajul
v̂ 0 = 11101 11001 00101 00110 10010 0 . . . 0,
deci v = α10 0α2 0α6 α14 0 . . . 0.
Singura ştergere localizată este α1 , deci σB (X) = α + X.
Trebuie să determinăm polinomul de localizare a erorilor.
Din v(X) = α10 + α2 X 2 + α6 X 4 + α14 X 5 calculăm sindromurile
S0 = α5 , S1 = 0, S2 = α3 , S3 = α4 , S4 = α3 .
Deoarece B0 = α şi s = 1, relaţia de recurenţă pentru sindromurile modificate
este Sj0 = B0 Sj + Sj+1 = αSj + Sj+1 (0 ≤ j ≤ 3).
Se determină astfel S00 = α6 , S10 = α3 , S20 = 0, S30 = α11 .
Deoarece
à d = 5! avem
à t!= 2,à deci !sistemul (3)Ãeste !à ! à !
0 0
S0 S1 a0 S20 α6 α3 A0 0
= sau =
S10 S − 20 A1 S30 α3 0 A1 α11
cu soluţia A0 = α8 , A1 = α11 . S-a obţinut polinomul σA\B (X) = α8 +α11 X +X 2 .
Deci,
σA (X) = σB (X)σA\B (X) = (α+X)(α8 +α11 X +X 2 ) = (α+X)(α3 +X)(α5 +X).
Rezultă că erorile sunt localizate pe poziţiile X1 = α, X2 = α3 , X3 = α5 .
Mai departe se lucrează pentru determinarea valorilor erorilor, folosind sindro-
murile originale ı̂n algoritmul Peterson.
 Trebuie
  rezolvat
 sistemul:
5
1 1 1 Y1 α
 3 5    
 α α α  2  Y =  0 
α2 α6 α10 Y3 α3
cu soluţia Y1 = α12 , Y2 = 1, Y3 = α3 .
Deci v(X) se decodifică ı̂n c(X) = v(X)+e(X) = (α10 +α2 X 2 +α6 X 4 +α14 X 5 )+
(α12 X + X 3 + α3 X 5 ), adică c = α10 α12 α2 1α6 10 . . . 0, sau - ı̂n Â0 :
11101 11110 00101 10001 00110 10001 0 . . . 0.

13.6 Exerciţii
13.1 Construiţi matricea generatoare şi listaţi toate cuvintele - cod ale codului RS
din Exemplul 13.2. Scrieţi şi forma binară a acestor cuvinte.

13.2 Fie codul definit de g(X) = (1+X)(α+X)(α2 +X)(α3 +X), bazat pe extensia
Galois GF (23 ) generată de α, rădăcină a polinomului 1 + X + X 3 .

1. Determinaţi n, k, d şi numărul de cuvinte - cod.

2. Construiţi o matrice generatoare şi o matrice de control a codului.

3. Codificaţi mesajele de informaţie


10α2 , 111, α2 α4 α6 .

13.3 Construiţi coduri RS cu următorii parametri:


(a) m = 2, d = 3, m0 = 2;
156 PRELEGEREA 13. CODURI REED - SOLOMON

(b) m = 3, d = 3, m0 = 2;
(c) m = 3, d = 5, m0 = 0;
(d) m = 4, d = 5, m0 = 0;
(e) m = 5, d = 7, m0 = 0.
13.4 Pentru fiecare cod determinat la exerciţiul anterior determinaţi n, k şi numă-
rul de cuvinte - cod.
13.5 Arătaţi că un (2m − 1, k) - cod RS are 2mk cuvinte - cod.
13.6 Fie codul RS de polinom generator g(X) = (1 + X)(α + X)(α2 + X)(α3 +
X)(α4 + X)(α5 + X) ∈ GF (24 )[X] unde α este rădăcina polinomului 1 + X + X 4 .
Decodificaţi mesajele:
0α3 αα5 α3 α2 α6 α10 α000000
1α4 α2 α0010αα5 α3 α2 0α10 α
α0α7 0α12 α3 α3 10000000
13.7 Fie codul RS generat de g(X) = (α + X)(α2 + X)(α3 + X)(α4 + X) unde
α ∈ GF (24 ) este rădăcina polinomului 1 + X + X 4 . Decodificaţi mesajele:
001α8 00α5 00000000
0α10 0α6 α13 0α8 α11 α3 α5 00000
α4 0100α2 α5 α12 al14 000000
13.8 Plecând de la codul RS din exerciţiul precedent, se formează codul scurt A(4)
de lungime n = 11 (şi k = 7). Deecodificaţi mesajele:
001α8 00α5 0000
0α10 0α6 α13 0α8 α11 α3 α5 0
α4 0100α2 α5 α12 α14 00
13.9 Arătaţi că transformata Fourier finită A este inversabilă.
13.10 Fiind dat GF (23 ) construit cu polinomul 1 + X + X 3 , găsiţi matricea gene-
ratoare pentru un cod DMS de lungime 7 pentru spaţiul funcţiilor definit pe
S = GF (23 ) \ {0}, cu baza:
(a) {X, X 2 , X 3 } (b) {1, X, X 2 , X 3 , X 4 } (c) {X, X 2 , X 3 }.
Arătaţi că toate aceste coduri sunt ciclice. Determinaţi polinomul generator pen-
tru fiecare cod.
13.11 Fiind dat GF (23 ) construit cu 1 + X + X 3 , determinaţi pentru fiecare G(X)
reprezentarea vg :
G(X) = X + αX 3 , G(X) = 1 + X 2 + X 4 .
13.12 În aceleaşi condiţii din exerciţiul precedent, determinaţi G(X) ştiind valorile
lui vg :
vg = α3 αα4 0α6 α5 α2 vg = α4 α2 αα3 0α6 1.
13.13 Folosind codul definit ı̂n Exemplul 13.13, decodificaţi mesajele:
11101 11110 11010 00111 11110 10100 10110 10100 0 . . . 0
11000 00000 01010 11111 11011 00000 10001 00101 0 . . . 0
00000 10000 10000 10000 00101 10100 11101 0 . . . 0.
Bibliografie

[1] J. Adamek - Foundations of Coding, Wiley - Interscience, 1991;

[2] C. Carlet - Codes de Reed - Muller; Codes de Kerdok et de Preparata (teză de


doctorat), PARIS VI, 1990;

[3] G. Cullmann - Coduri detectoare şi corectoare de erori, Editura Tehnică, 1972;

[4] S. Guiaşu - Teoria Codurilor, Tipografia Universităţii Bucureşti, 1976;

[5] D.G. Hoffman, D.A. Leonard, C.C. Lindner, K.T. Phelps, C.A. Rodger, J.R.
Wall - Coding Theory; The Essentials, Marcel Dekker, Inc, 1991;

[6] A.M.Kerdok - A class of low-rate non linear codes, Information and control, 20
(1972), 182-187;

[7] J.H. van Lindt - Coding Theory, Springer Verlag, 1971;

[8] J.H. van Lindt - Introduction to Coding Theory, Springer Verlag, 1982;

157
Prelegerea 14

Alte clase de coduri ciclice

14.1 Coduri Hamming ciclice


Să considerăm spaţiul nul al matricii
H = (1 α α2 . . . αn−1 )
unde α ∈ GF (2p ) este primitiv, deci n = ord(α) = 2p − 1.
Cum α poate fi considerat ca un vector coloană cu p componente, H este o
matrice p × 2p ı̂n care toate coloanele sunt distincte. Acesta este după cum se ştie
(Prelegerea 4) un cod Hamming (2p − 1, 2p − p − 1) - construit ı̂nsă ca un cod ciclic.
Exemplul 14.1 Fie α ∈ GF (23 ), α rădăcină a polinomului ireductibil 1 + X + X 3 .
Se verifică imediat că ord(α) = 
7, deci α este primitiv. Construim matricea
1 0 0 1 0 1 1
 
H = (1 α α2 α3 α4 α5 α6 ) =  0 1 0 1 1 1 0 
0 0 1 0 1 1 1
Ea este matricea de control pentru un (7, 4) - cod Hamming.
Deci codul studiat ı̂n Exemplul 4.1 (Prelegerea 4) poate fi tratat şi ca un cod ciclic
de polinom generator h(X) = 1 + X + X 3 .
Un cod Hamming ciclic se defineşte cerând ca orice polinom - cod {f (X)} să admită
ca rădăcină pe α ∈ GF (2p ) primitiv. Generatorul unui asemenea cod este chiar
polinomul minimal al lui α : g(X) = m(X).
Deoarece şi α2 este rădăcină a polinoamelor - cod (Teorema 11.9), codul Ham-
ming ciclic este un caz particular de cod BCH cu d = 3, capabil să corecteze o
eroare.
Codificarea se face folosind circuitul liniar cu p = n−k elemente de ı̂nmagazinare
(vezi paragraful 9.4.2, Prelegerea 9), corespunzător polinomului minimal m(X). Cal-
culul sindromului cuvântului recepţionat {r(X)} - adică rH T = r(α) se realizează
folosind acelaşi circuit de ı̂mpărţire cu m(X). Acest sindrom - ı̂n cazul ı̂n care este
nenul, deci a intervenit o eroare simplă - este una din coloanele matricii H, adică
una din valorile 1, α, α2 , . . . , αn−1 .
Pentru a afla care componentă a fost afectată de eroare, se poate folosi acelaşi
circuit ı̂n felul următor: neglijăm intrarea şi lăsăm circuitul să funcţioneze, având
iniţial ı̂n elementele de ı̂nmagazinare sindromul r(α), care este de forma

157
158 PRELEGEREA 14. ALTE CLASE DE CODURI CICLICE

αj (0 < j ≤ 2p − 2).
La fiecare tact circuitul ı̂nmulţeşte conţinutul elementelor de ı̂nmagazinare cu α;
deci, după n − j = 2p − 1 − j momente, ı̂n elementele de ı̂nmagazinare se obţine
p −1−j+j p −1
α2 = α2 = αn = α0 = 1 = (1, 0, . . . , 0).

Cum componentele cuvântului recepţionat sunt scrise ı̂n ordinea descrescătoare a


puterilor (prima componentă este coeficientul termenului de rang maxim), ı̂nseam-
nă că va trebui să corectăm componenta n − j din cuvânt, ı̂nlocuind 0 cu 1 sau 1 cu
0.

Exemplul 14.2 Fie α ∈ GF (24 ), rădăcină a polinomului 1 + X + X 4 . Codul


Hamming (15, 11) obţinut folosind ca rădăcină pe α - deci polinom generator
g(X) = 1 + X + X 4 , are matricea de control
 
1 0 0 0 1 0 0 1 1 0 1 0 1 1 1
 0 1 0 0 1 1 0 1 0 1 1 1 1 0 0 
 
H = (1 α . . . α14 ) =  
 0 0 1 0 0 1 1 0 1 0 1 1 1 1 0 
0 0 0 1 0 0 1 1 0 1 0 1 1 1 1

Circuitul care realizează (ı̂n funcţie de necesităţi) codificarea, calculul sindromului şi
corectarea erorilor simple este:
¾ r Z
}

6
? ?
Intrare 2 - +j
- - +j
- - - - +j
?6 -©©
*-
Intrare 1 r -

Codificarea se obţine introducând la Intrarea 1 mesajul de informaţie de lungime k,


mesaj considerat ca un polinom de gradul n − 1 cu primii coeficienţi (corespunzători
termenilor de rang mare) elementele mesajului informaţional şi cu ultimii n − k
coeficienţi nuli.
La momentul iniţial ı̂n elementele de ı̂nmagazinare se află numai 0, circuitul
feedback este ı̂nchis, iar circuitul spre canal este deschis. De asemenea, Intrarea 2
este ignorată.
Simultan cu transmiterea pe canal, elementele de informaţie se introduc şi ı̂n
circuitul liniar. După k momente, aici se află poziţiile de control.
În acest moment se decuplează feedback-ul, se cuplează legătura spre canal şi se
ignoră cele două intrări. Timp de n − k tacţi elementele de control ı̂nmagazinate
sunt trimise pe canal, imediat după mesajul de informaţie.
Pentru calculul sindromului: se neglijează canalul, se ı̂nchide feedback-ul, iar ı̂n
elementele de ı̂nmagazinare se găseşte iniţial (0, 0, . . . , 0). Cuvântul recepţionat este
introdus prin Intrarea 2. După n tacţi, aici se va găsi r(α).
Pentru corectarea erorii: se neglijează cele două intrări, se ı̂nchide feedback-ul şi
se lasă să funcţioneze circuitul până când ı̂n elementele de ı̂nmagazinare se obţine
vectorul (1, 0, . . . , 0). Numărul de tacţi scurşi dă indicele componentei din mesajul
recepţionat, care trebuie corectată prin complementare.
14.1. CODURI HAMMING CICLICE 159

Să considerăm spaţiul nul al matricii


à p
!
1 α α2 . . . α2 −2
H=
1 1 1 ... 1

unde α ∈ GF (2p ) este primitiv. H are p + 1 linii şi n = 2p − 1 coloane (pe prima
coloană, primele p poziţii formează vectorul 1 = α0 , iar pe a p + 1-a poziţie se află
scalarul 1 ∈ Z2 ). Codul obţinut este codul Hamming extins (Definiţia 3.1), capabil
să corecteze o eroare şi să detecteze două erori.
Un asemenea cod se poate defini cerând ca orice cuvânt - cod {f (X)} să aibă
ca rădăcini α şi 1. Generatorul unui astfel de cod ciclic este g(X) = (1 + X)m(X),
unde m(X) este polinomul minimal al lui α.
Codificarea ı̂n acest caz se face - ca mai sus - folosind circuitul cu n − k + 1 =
p + 1 elemente de ı̂nmagazinare. Pentru calculul sindromului cuvântului recepţionat
{r(X)} se folosesc ı̂nsă practic două circuite: unul de ı̂mpărţire la m(X) (pentru cal-
culul lui r(α)) şi altul de ı̂mpărţire la 1+X (pentru r(1)). Discuţia este următoarea:

• Dacă r(α) = r(1) = 0, atunci nu a intervenit nici o eroare (sau avem o eroare
nedetectabilă);

• Dacă r(α) 6= 0, r(1) 6= 0, avem o eroare simplă care se corectează cu circuitul


de ı̂mpărţire cu m(X), după procedeul descris ı̂n Exemplul 14.2;

• Dacă r(α) 6= 0, r(1) = 0, atunci au fost detectate două erori.

Exemplul 14.3 Să extindem codul Hamming din Exemplul 14.2. Vom avea poli-
nomul generator
g(X) = (1 + X)(1 + X + X 4 ) = 1 + X 2 + X 4 + X 5
Circuitul liniar care codifică mesajele de informaţie (de lungime k = 10) este:

¾ r r Q
kQ¾
?
²¯ ?
²¯ 6
²¯
?
- - - + - - -+ - -+
±° ±° ±°
? 6 *-
©

r -

Sindromul se calculează cu ajutorul circuitului liniar corespunzător polinomului


m(X) = 1 + X + X 4 :
¾ r
? ? 6
- +j - - +j - - - -
6

iar r(1) se obţine din circuitul de ı̂mpărţire la 1 + X:


¾
6
?
- +j - -

Circuitul liniar construit pentru m(X) face şi corectarea erorilor simple.
160 PRELEGEREA 14. ALTE CLASE DE CODURI CICLICE

14.2 Coduri Hamming ciclice nebinare


Am studiat codurile Hamming atât sub forma liniară, cât şi ca un caz particular
de coduri Reed - Muller sau coduri ciclice. În această ultimă situaţie, ele se pot
implementa cu ajutorul circuitelor liniare şi - fapt important - admit o variantă de
generalizare naturală la cazul nebinar.

Definiţia 14.1 Fie α ∈ GF (q p ) un element primitiv. Se defineşte codul Hamming


ciclic nebinar A astfel:

{f (X)} ∈ A ⇐⇒ f (X) are rădăcina β = αq−1

sau - echivalent - A are matricea de control H = (1 β β 2 . . . β n−1 ) unde n = ord(β).

Din
p −1
³ ´ qp −1qp − 1
β n = 1 = (α)q = αq−1 q−1
rezultă n =
.
q−1
Se observă imediat că H are un număr maxim de coloane distincte şi nenule.

Propoziţia 14.1 (n, q − 1) = 1 dacă şi numai dacă (p, q − 1) = 1

Demonstraţie: Din q − 1|q j − 1 rezultă q j = (q − 1)sj + 1. Deci


qp − 1
n= = q p−1 + q p−2 + . . . + q + 1 = (q − 1)(sp + sp−1 + . . . + s1 ) + p
q−1
şi atunci
(p, q − 1) = 1 ⇐⇒ (n, q − 1) = 1. 2

Teorema 14.1 Spaţiul nul al matricii H = (1 β β 2 . . . β n−1 ) unde β = αq−1 ,


qp − 1
n= şi α ∈ GF (q p ) primitiv, are distanţa minimă d ≥ 3 dacă şi numai dacă
q−1
(n, q − 1) = 1.

Demonstraţie: ”⇐”: Să presupunem că există două coloane liniar dependente ı̂n
matricea H. Deci β i = aβ j cu a ∈ Zq , adică β i−j = a.
Elementele nenule din Zq sunt rădăcinile ecuaţiei X q−1 − 1 = 0 (Teorema 11.3).
Mai mult, ele sunt chiar primele q − 1 puteri ale lui αn . Într-adevăr, pentru orice
s = 0, 1, . . . , q − 2 avem ³ m ´s
(αns )q−1 = αq −1 = 1s = 1.
Deci pentru a ∈ Zq avem a = αns . Se poate scrie atunci β i−j = αns , adică
α(i−j)(q−1) = αns ⇒ (i − j)(q − 1) = ns.
Dar s < q − 1 iar (n, q − 1) = 1, deci i = j, de unde rezultă a = 1, β i = β j .
Orice două coloane din H sunt liniar independente, adică (Teorema 2.4) d ≥ 3.
”⇒”: Dacă q − 1 şi n nu sunt prime ı̂ntre ele, atunci ecuaţia anterioară admite
şi soluţia i 6= j; deci există două coloane distincte liniar dependente β i şi β j ı̂n
matricea H, ceea ce contrazice faptul că d ≥ 3. 2
Pentru operaţia de codificare se foloseşte circuitul de ı̂mpărţire cu polimul mini-
mal m(X) al lui β (care aici este chiar polinomul generator al codului Hamming ciclic
A). Acelaşi circuit va calcula sindromul r(β) al polinomului recepţionat {r(X)}.
14.2. CODURI HAMMING CICLICE NEBINARE 161

În cazul ı̂n care a intervenit o eroare, r(β) este de forma bβ j (eroarea b a apărut
pe poziţia β j ). Funcţionarea secvenţială a circuitului liniar (fără intrări) revine la
ı̂nmulţirea succesivă cu β. Deci, după n − j tacţi, ı̂n elementele de ı̂nmagazinare se
obţine vectorul (b 0 . . . 0). Atunci, din componenta n − j a cuvântului recepţionat
se va scădea eroarea b. De observat că - deoarece coloanele lui H sunt nenule
şi distincte - primul tact ı̂n care se obţine un vector cu toate componentele nule
ı̂nafară de prima, este n − j.

Exemplul 14.4 Să considerăm p = q = 3 (astfel, (m, q − 1) = 1). Folosind


rădăcina α a polinomului primitiv 1 + 2X + X 3 vom genera extensia GF (33 ). Fie
3
β = αq−1 = α2 . Deoarece α3 −1 = α26 = 1, avem ord(β) = 13, deci n = 13. Pentru
a construi polinomul minimal m(X) al lui β, să observăm (Secţiunea 11.3) că el are
ca rădăcini α2 , α6 şi α18 (α54 = α2 ). Deci m(X) = a + bX + cX 2 + X 3 . Punând
condiţia m(α2 ) = a + bα2 + cα4 + α6 = 0, obţinem ecuaţia matricială:
         
1 0 0 1 0
         
a 0  + b 0  + c 2  +  1  =  0 
0 1 1 1 0

cu soluţia a = 2, b = c = 1. Deci m(X) = 2 + X + X 2 + X 3 .


Codul ciclic de polinom generator g(X) = m(X) = 2 + X + X 2 + X 3 are matricea
de control  
1 0 0 1 2 0 2 0 1 1 1 2 1
 
H = (1 α2 α4 . . . α24 ) =  0 0 2 1 0 1 0 2 2 2 1 2 1 
0 1 1 1 2 1 1 0 0 1 2 0 2
Am definit astfel (13, 10) - codul Hamming ternar, evocat ı̂n Exemplul 4.5 relativ
la Problema Pronosportului.
Să considerăm mesajul de informaţie 0120120120. Pentru operaţia de codificare
se va folosi circuitul (pentru detalii, a se revedea secţiunea 9.4.2):
¾ r r
? ? 6
2j 2j
? ?
?
- - +j - - +j - - +j
6
0210210210 r -

(s-a ţinut cont că −1 = 2, −2 = 1). În primii 10 tacţi de funcţionare, biţii de
informaţie sunt trimişi pe canal şi - simultan - intră ı̂n circuitul liniar, a cărui
funcţionare este (pe prima coloană se află informaţia, iar pe celelalte trei - conţinutul
elementelor de ı̂nmagazinare):

0 0 0 0 2 2 1 2
1 1 2 2 0 2 0 2
2 1 0 1 1 0 2 0
0 1 0 2 2 2 1 0
1 0 1 0 0 0 2 1
162 PRELEGEREA 14. ALTE CLASE DE CODURI CICLICE

În elementele de ı̂nmagazinare au rămas caracterele de control 021. Ele sunt trimise
prin canal la tacţii 11 − 13 de la dreapta spre stânga, cu semn schimbat: ı̂n ordine
−1 = 2, −2 = 1, −0 = 0. Deci cuvântul - cod transmis a fost a = 0120120120210.
Se verifică imediat că aH T = 0.
La recepţie, primele 10 caractere sunt cele de informaţie. Pentru a verifica dacă
au apărut sau nu erori, se foloseşte acelaşi circuit, dar cu altă intrare:
¾ r r
? ? 6
2j 2j
? ? ?
0120210210210 - +j
- - +j - - +j - -

Funcţionarea acestui circuit liniar timp de 13 tacţi, este dată de tabelul:

0 0 0 0 1 2 0
0 0 0 0 1 1 1 2
1 1 0 0 2 1 2 2
2 2 1 0 0 2 2 0
0 0 2 1 2 2 2 2
1 2 2 1 1 0 0 0
2 0 1 1 0 0 0 0

Sindromul a(α2 ) obţinut este 000, deci nu a apărut nici o eroare. Dacă s-ar fi
recepţionat ı̂nsă cuvântul a0 = 0120120100210, după funcţionarea circuitului timp
de 13 tacţi s-ar fi ajuns ı̂n elementele de ı̂nmagazinare la 220. Cum acesta este
nenul, circuitul se lasă să funcţioneze ı̂n continuare, fără intrare, până se ajunge
la un sindrom de forma b00 cu b 6= 0. Mai exact, funcţionarea circuitului va fi (pe
prima coloană se numără tacţii):

0 2 2 0 5 1 0 1
1 0 2 2 6 1 0 2
2 2 1 0 7 2 2 1
3 0 2 1 8 1 1 1
4 1 2 1 9 1 0 0

Deci, după 9 tacţi s-a ajuns la 100. Corecţia se face astfel: din componenta a 9 - a
a cuvântului recepţionat se scade b = 1, obţinându-se 0 − 1 = 2 (mod 3).

Observaţie: Definiţia codurilor Hamming ciclice nebinare nu este echivalentă cu cea a


codurilor Hamming nebinare dată ı̂n Secţiunea 4.1.1. De exemplu, codul de matrice
de control à !
1 0 1 2
H=
0 1 2 2
este un (4, 2) - cod Hamming ternar. El conţine 9 cuvinte
(0000, 1101, 2202, 0211, 1012, 2110, 0122, 1222, 2021),
care - evident - nu formează un cod ciclic.
Deci ı̂ntre cele două definiţii ale codurilor Hamming nebinare (liniare şi ciclice)
există doar o relaţie de incluziune strictă.
14.3. CODURI GOPPA 163

14.3 Coduri Goppa


Această clasă de coduri a fost introdusă de Goppa ı̂n 1970. Deşi coduri neciclice,
ele constituie o generalizare a codurilor BCH şi sunt o punte ı̂ntre teoria codurilor
şi criptografie. Din acest motive, prezentarea lor este necesară.
Fie q un număr prim şi g(X) ∈ Zq [X]. Dacă a ∈ Zq este un element cu proprie-
tatea g(a) 6= 0, vom nota

1 g(X) − g(a)
=− g(a)−1
X −a X −a

Propoziţia 14.2 În algebra polinoamelor din Zq [X] modulo g(X), polinomul
1
este inversul lui X − a.
X −a
1
Demonstraţie: Faptul că este polinom se verifică imediat. Pe de-altă parte,
X −a
1
(X − a) = [g(a) − g(X)]g(a)−1 = 1 − g(a)−1 g(X) ≡ 1 (mod g(X)) 2
X −a
Definiţia 14.2 Un cod Goppa de lungime n peste Zq este determinat prin:
1. Un polinom g(X) peste o extensie Galois F a lui Zq , grad(g(X)) ≥ 2;

2. a1 , a2 , . . . , an ∈ F cu g(ai ) 6= 0, 1 ≤ i ≤ n.
n
X vi
Codul conţine toate cuvintele v = v1 v2 . . . vn ∈ Zqn pentru care = 0.
i=1 X − ai

Teorema 14.2 Codul Goppa conţine numai cuvintele v = v1 v2 . . . vn pentru care


n
X
vi g(ai )−1 asi = 0, s = 0, 1, . . . , t − 1
i=1

unde t = grad(g(X)).
1
Demonstraţie: Să explicităm polinomul . Dacă g(X) = g0 + g1 X + . . . +
X −a
t
gt X (gt 6= 0), atunci pentru orice a ∈ Zq cu g(a) 6= 0, are loc descompunerea
g(X) − g(a)
= gt X t−1 + (agt + gt−1 )X t−2 + (a2 gt + agt−1 + gt−2 )X t−3 + . . . +
X −a
(at−1 gt + at−2 gt−1 + . . . + g1 ).
Xt
1 −1
Deci coeficientul lui X k−1
(1 ≤ k ≤ t) ı̂n polinomul este −g(a) at−j gj .
X −a j=k
Xn
vi
Ecuaţia caracteristică a codurilor Goppa = 0 implică faptul că toţi
i=1 X − ai
coeficienţii lui X k−1 , k = 1, . . . , t sunt nuli. Deci
n
X t
X
vi g(ai )−1 at−j gj = 0, 1 ≤ k ≤ t.
i=1 j=k
164 PRELEGEREA 14. ALTE CLASE DE CODURI CICLICE
n
X
Cazul k = t conduce la gt vi g(ai )−1 = 0 şi - deoarece gt 6= 0 - se obţine
i=1
n
X
vi g(ai )−1 = 0.
i=1
n
X n
X
Din cazul k = t − 1 se obţine gt vi g(ai )−1 ai + gt−1 vi g(ai )−1 = 0. Cum a doua
i=1 i=1
n
X
sumă este zero, iar gt 6= 0, va rezulta vi g(ai )−1 ai = 0, ş.a.m.d.
i=1
Am obţinut echivalenţa
n
X n
X
vi
=0 ⇐⇒ vi g(ai )−1 asi = 0, 0 ≤ s ≤ t − 1
i=1 X − ai i=1

2
Corolarul 14.1 Codul Goppa determinat de un polinom g(X) de gradul t are ma-
tricea de control  
1 1 1 1
g(a ) g(a ) g(a )
. . . g(a )
 a11 a2
2
a3
3
an
n 
 
 g(a1 ) g(a2 ) g(a3 ) . . . g(an ) 

H= .. .

 . 
 
at−1 at−1 at−1 at−1
g(a1 )
2
g(a2 )
3
g(a3 )
... n
g(an )

Demonstraţie: Este lăsată ca exerciţiu.


Exemplul 14.5 Polinomul 1 + X + X 3 ∈ Z2 [X] este ireductibil. Fie α o rădăcină a
sa, cu ajutorul căreia se generează extensia GF (23 ). Dacă alegem g(X) = 1+X +X 2
şi drept elemente ai cele 8 componente ale lui GF (23 ), vom obţine un cod Goppa de
lungime 8 cu matricea de control
  Ã !
1 1 1 1
g(0) g(1) g(α)
... g(α6 ) 1 1 α2 α4 α2 α α α4
H= α6
= =
0 1
g(1)
α
g(α)
... g(α6 )
0 1 α3 α6 α5 α5 α6 α3
 
1 1 0 0 0 0 0 0
 
 0 0 0 1 0 1 1 1 
 
 0 0 1 1 1 0 0 1 
=



 0 1 1 1 1 1 1 1 
 
 0 0 1 0 1 1 0 1 
0 0 0 1 1 1 1 0
Acest cod este format din numai patru cuvinte:

00000000, 00111111, 11001011, 11110100.

El are distanţa minimă 5; s-a obţinut deci un (8, 2) - cod binar corector de două
erori. De remarcat că acesta nu este un cod ciclic.
Observaţie: Să considerăm un cod BCH definit prin rădăcinile
αm0 , αm0 +1 , . . . , αm0 +d−2
unde α ∈ GF (q m ) are ordinul n. Acest cod se poate scrie ca un cod Goppa astfel: Se
14.3. CODURI GOPPA 165

ia polinomul g(X) = X m0 +d−2 şi elementele α0 , α−1 , . . . , α−(n−1) . Vom avea pentru
orice i = 0, 1, . . . , d − 2 şi k = 0, 1, . . . , n − 1:

(α−k )i
= (αk )m0 +d−2−i = (αm0 +d−2−i )k
(α−k )m0 +d−2
Pe baza aceasta, codul Goppa rezultat are matricea de control
 
1 αm0 +d−2 (αm0 +d−2 )2 . . . (αm0 +d−2 )n−1
 m +d−3 
 1 α 0 (αm0 +d−3 )2 . . . (αm0 +d−3 )n−1 
H=
 .. 

 . 
1 αm0 (αm0 )2 ... (αm0 )n−1

care coincide cu matricea de control a codului BCH considerat, ı̂n care s-a efectuat
o inversare a liniilor.
Se poate arăta (Van Lint) că singurele coduri Goppa ciclice sunt codurile BCH.
Propoziţia 14.3 Codul Goppa binar de lungime n, determinat de un polinom de
grad t peste GF (2m ) are k ≥ n − mt simboluri de informaţie şi distanţa minimă
≥ t + 1.
Demonstraţie: Matricea de control a codului Goppa are t linii ı̂n GF (2m ), deci mt
linii scrise ı̂n binar. Rezultă că numărul n − k de simboluri de control este cel mult
mt : n − k ≤ mt.
Pe de-altă parte, se arată uşor că orice combinaţie liniară de t coloane din H
este liniar independentă. 2
Definiţia 14.3 Fie g(X) un polinom ireductibil peste GF (q m ). Codul Goppa deter-
minat de g(X) şi de toate elementele lui GF (q m ) se numeşte ireductibil.
Codul prezentat ı̂n Exemplul 14.5 este un cod ireductibil. Despre codurile Goppa
ireductibile se poate prezenta următorul rezultat:
Teorema 14.3 Un cod Goppa binar ireductibil, determinat de un polinom de gradul
t poate corecta cel puţin t erori independente.
Pentru demonstraţie va trebui să facem o construcţie suplimentară.
Definiţia 14.4 Derivata formală a polinomului a(X) = a0 + a1 X + . . . + an X n este
definită prin a0 (X) = a1 + 2a2 X + 3a3 X 2 + . . . + nan X n−1 .

Lema 14.1 Pentru derivata formală sunt adevărate egalităţile:


1. (a(X) + b(X))0 = a0 (X) + b0 (X);

2. (a(X)b(X))0 = a0 (X)b(X) + a(X)b0 (X)

Demonstraţie: Exerciţiu.
Lema 14.2 Într-un corp de caracteristică 2 derivata formală a unui polinom este
un pătrat perfect.
166 PRELEGEREA 14. ALTE CLASE DE CODURI CICLICE

Demonstraţie: Deoarece (X n )0 = nX n−1 = 0 pentru n par, derivata va avea numai


puteri pare. Cum fiecare coeficient se poate scrie ca un pătrat perfect (se lucrează
ı̂ntr-un corp de caracteristică 2), avem f 0 (X) = f02 + f22 X 2 + f42 X 4 + . . . şi, dacă se
ia g(X) = f0 + f2 X + f4 X 2 + . . ., avem f 0 (X) = g 2 (X). 2
Să revenim acum la Demonstraţia Teoremei 14.3: Fie g(X) un polinom ire-
ductibil de grad t peste GF (2m ) = {a1 , a2 , . . . , an } (n = 2m ) şi v = v1 v2 . . . vn
un cuvânt al codului Goppa, w(v) = s. Notăm vi1 , vi2 , . . . , vis biţii egali cu 1 din
Xn Xs
vi 1
v. Deoarece v este cuvânt - cod, avem = = 0. Polino-
i=1 X − ai k=1 X − aik
mul f (X) = (X − ai1 )(X − ai2 ) . . . (X − ais ) nu este divizibil cu g(X) (deoarece
g(X) este ireductibil de grad t ≥ 2). Rezultă că, ı̂n algebra claselor de resturi
Z2 [X]/g(X), f (α) 6= 0 deci admite invers. Rezultă că există un polinom r(X) cu
{f (α)}{r(α)} = 1.
Xs
f (X)
Să calculăm derivata formală f 0 (X) = . Făcând X = α şi ı̂nmulţind
k=1 X − aik
relaţia cu r(α), obţinem
X s s
{f (α)}{r(α)} X 1
{f 0 (α)}{r(α)} = = = 0 (mod g(X)).
k=1 α − aik k=1 α − aik
Aceasta ı̂nseamnă că f 0 (X)r(X) este divizibil cu g(X). Cum g(X) este ireductibil
şi nu divide r(X) (deoarece r(α) 6= 0), rezultă g(X)|f 0 (X).
Deoarece suntem ı̂ntr-un corp de caracteristică 2, conform Lemei 14.2 derivata
formală este un pătrat perfect: f 0 (X) = b2 (X). Din faptul că g(X) este divizor
ireductibil al lui b2 (X) rezultă g(X)|b(X). Deci g 2 (X)|b2 (X) = f 0 (X).
Se ştie că grad(f 0 (X)) = s − 1 şi s ≥ 1; deci grad(f 0 (X)) ≥ grad(g 2 (X)), adică
s − 1 ≥ 2t.
Cum ponderea oricărui cuvânt - cod este ≥ 2t + 1, rezultă că distanţa minimă a
codului este cel puţin 2t + 1, deci codul corectează sigur t erori independente. 2
Exemplul 14.6 Să considerăm GF (23 ) generat de o rădăcină a lui g(X) = 1 +
X + X 3 . Deoarece g(X) are 3 rădăcini ı̂n GF (23 ), el nu va avea nici o rădăcină
ı̂n corpul GF (25 ) (GF (25 ) nu este o extensie a lui GF (23 )), deci aici g(X) este
ireductibil.
Codul Goppa ireductibil corespunzător are n = 32, k ≥ 32 − 5 · 3 = 17, d ≥ 7;
deci este un (32, 17) - cod corector de 3 erori.
Decodificarea codurilor Goppa se face ı̂n manieră similară decodificării codurilor
BCH. Astfel, fie C un cod Goppa definit de g(X) ∈ Zq [X] (grad(g(X)) = t),
şi a1 , . . . , an ∈ GF (q m ); considerăm v = v0 v1 . . . vn−1 un cuvânt - cod şi r =
r0 r1 . . . rn−1 cuvântul recepţionat după transmiterea lui v.
Vom nota cu e = r − v = e0 e1 . . . en−1 secvenţa - eroare.
Pentru w(e) ≥ t/2 se poate folosi un algoritm din cei uzuali. În practică ı̂nsă
t = grad(g(X)) este mare şi există algoritmi eficienţi de decodificare pentru cazul
w(e) < t/2. Un astfel de algoritm vom construi mai jos.
Fie M = {i|ei 6= 0}, card(M ) = e < t/2; considerăm polinomul sindrom
n−1
X ei
{s(X)} = (mod g(X)).
i=0 X − ai
14.4. EXERCIŢII 167

De remarcat că {s(X)} se poate determina prin calcul la primirea cuvântului r.


Se definesc polinoamele σ(X) (de localizare a erorii) şi ω(X) prin
Y X Y
σ(X) = (X − ai ), ω(X) = ei (X − aj ).
i∈M i∈M j∈M \{i}

Din definiţie rezultă că σ(X) şi ω(X) sunt prime ı̂ntre ele. În plus, grad(σ(X)) =
e, grad(ω(X)) < e. Între ele există relaţia
n−1
X Y
ei
{s(X)}{σ(X)} = (X − ai ) ≡ {ω(X)} (mod g(X)). (1)
i=0 X − ai i∈M
σ(X) şi ω(X) sunt polinoamele normate de grad minim care verifică relaţiile de
sus. Într-adevăr, să presupunem că există σ1 (X) un polinom nenul normat de grad
< e şi ω1 (X) polinomul corespunzător, astfel ca

{s(X)}{σ1 (X)} ≡ {ω1 (X)} (mod g(X))

Fie d(X) = cmmdc(s(X), g(X)). Din relaţiile


s(X)σ(X) = a(X)g(X) + ω(X), s(X)σ1 (X) = b(X)g(X) + ω1 (X),
rezultă că d(X) va( divide)şi polinoamele
( ω(X), ) ω1 (X). Deci,
s(X) ω(X)
{σ(X)} − ≡ 0,
(
d(X) ) (
d(X) ) Ã !
s(X) ω1 (X) g(X)
{σ1 (X)} − ≡0 mod
d(X) d(X) d(X)
sau ( )
s(X) {ω1 (X)σ(X) − ω(X)σ1 (X)}
≡ 0 (mod g(X)).
d(X) {d(X)}
Deci {ω1 (X)σ(X) − ω(X)σ1 (X)} ≡ 0 (mod g(X)). Deoarece polinomul din mem-
brul stâng are grad mai mic decât t, rezultă că membrul stâng este 0. Apoi,
cum cmmdc(σ(X), ω(X)) = 1, deducem σ(X)|σ1 (X) – ceea ce contrazice faptul
că grad(σ1 (X)) < grad(σ(X)) şi {σ1 (X)} 6≡ 0.
Rezumând, procedeul de decodificare a mesajelor la codurile Goppa are loc astfel:

1. Din mesajul recepţionat r se calculează sindromul s(X);


2. Se determină polinomul normat σ(X) de grad minim < t/2 care verifică
relaţia (1) (un algoritm eficient a fost dat de Berlekamp).
Din rezolvarea ecuaţiei σ(X) = 0 se află locaţiile erorilor;
Y
3. Se determină ei (i ∈ M ) din relaţiile ω(ai ) = ei (ai − aj ).
j∈M \{i}
Pe baza acestor valori se construieşte secvenţa - eroare e;
4. Cuvântul decodificat este v = r − e.

14.4 Exerciţii
14.1 Să se construiască matricea generatoare a (13, 10) - codului Hamming ternar
din Exemplul 14.4.
168 PRELEGEREA 14. ALTE CLASE DE CODURI CICLICE

14.2 În codul din Exemplul 14.4 să se codifice mesajele de informaţie:
(a) 1122002211 (b) 0000111122 (c) 1020012210
(d) 2200211101 (e) 2222222222 (f ) 0000000000

14.3 Să se construiască toate codurile Hamming peste Z3 şi Z5 .

14.4 Demonstraţi Corolarul 14.1

14.5 Demontraţi Lema 14.1


2t
X
1
14.6 Pentru g(X) = X 2t arătaţi că = a−j X j−1 .
X − a j=1

14.7 Găsiţi distanţa minimă a codului binar Goppa determinat de g(X) = 1 + X 2


şi de elementele 0, α, α2 ∈ GF (22 ).

14.8 Găsiţi o matrice de control a (16, 8) - codului Goppa binar ireductibil dat de
g(X) = α3 + X + X 2 , unde α ∈ GF (24 ) este primitiv.

14.9 Polinomul generator este g(X) = 1 + X 2 iar parametrii sunt cele 15 elemente
nenule ale extensiei GF (24 ) generată de rădăcina polinomului 1 + X + X 4 . Analizaţi
codul Goppa binar astfel construit.

14.10 Să se construiască codul Goppa ireductibil peste GF (24 ), cu g(X) = 1 + X +


X 3 . Să se determine matricea de control şi matricea generatoare.
Care este distanţa minimă a codului ?

14.11 Folosind codul construit anterior, să se decodifice (folosind algoritmi de co-
duri liniare) cuvintele:

0110110010011110 0111011001000000 1011110101100100


1111111111111111 1011011111001011 1010010110000010

14.12 Pentru acelaşi cod Goppa binar ireductibil, să se decodifice cuvintele
0101100101111001 1100101100110100 0001100010010110
folosind algoritmul rapid specific.

14.13 Verificaţi că polinomul 1 + X + X 2 este ireductibil ı̂n GF (25 ). Determinaţi


parametrii şi matricea de control a codului Goppa ireductibil corespunzător.
Prelegerea 15

Coduri Preparata

În 1968 Preparata a introdus o clasă de coduri neliniare corectoare de două erori, care
s-au dovedit foarte interesante prin proprietăţile şi prin legăturile pe care le au cu
diverse alte coduri deja studiate. Ele sunt o combinaţie ı̂ntre codurile Reed - Muller
şi codurile BCH corectoare de două erori. Definiţia pe care o vom folosi aparţine lui
Baker şi permite o abordare mai simplă a algoritmilor de codificare/decodificare.

15.1 Definirea codurilor Preparata extinse


Să revenim la modalitatea de marcare a poziţiilor cuvintelor de lungime 2r folosind
elementele lui GF (2r ), aşa cum s-a definit ı̂n algoritmul de decodificare Peterson
pentru codurile BCH. Deci:
Fie r ≥ 2 un număr ı̂ntreg, α ∈ GF (2r ) primitiv, şi U ⊆ GF (2r ); se notează
χ(U ) cuvântul de lungime 2r definit prin
1 pe poziţia i dacă αi ∈ U (0 ≤ i ≤ 2r − 2),
1 pe poziţia 2r − 1 dacă 0 ∈ U ,
0 ı̂n rest.
Exemplul 15.1 Fie α ∈ GF (23 ) primitiv. Atunci
χ({0}) = 00000001
χ({α , α5 , α6 }) = 00100110
2

χ(∅) = 00000000.
Se definesc ı̂n mod natural operaţiile:
U + β = {u + β|u ∈ U }, βU = {βu|u ∈ U },
U ∆V = {u|u ∈ U ∪ V, u 6∈ U ∩ V }, U, V ⊂ GF (2r ), β ∈ GF (2r ).
Se verifică uşor relaţiile
χ(U ) + χ(V ) = χ(U ∆V ), w(χ(U )) = card(U ). (1)
Exemplul 15.2 Fie GF (23 ) construit folosind rădăcina (primitivă) α a polinomu-
lui 1 + X + X 3 , şi mulţimile U = {α2 , α5 , α6 }, V = {α5 , 0}. Atunci
U + α2 = {α2 + α2 , α5 + α2 , α6 + α2 } = {0, α3 , α0 },
α2 U = {α2 α2 , α2 α5 , α2 α6 } = {α4 , α0 , α},
χ(U ) + χ(V ) = 00100110 + 00000101 = 00100011 = χ({α2 , α6 , 0}) = χ(U ∆V ).

169
170 PRELEGEREA 15. CODURI PREPARATA

Definiţia 15.1 Fie r > 2 un număr impar. Codul extins Preparata P (r) este mul-
ţimea cuvintelor de forma χ(U )χ(V ) unde U, V ⊆ GF (2r ) verifică condiţiile

1. card(U ), card(V ) sunt numere pare;


X X
2. u= v;
u∈U v∈V

à !3
X X X
3
3. u + u = v3.
u∈U u∈U v∈V

Pentru uşurinţă vom nota cuvintele - cod cu [χ(U ), χ(V )] (vezi şi codul Golay).

Exemplul 15.3 În ipotezele din Exemplul 15.2, să considerăm U = {α, α2 , α5 , 0},
V = {α0 , α, α2 , α3 , α6 , 0}. Prima condiţie din definiţie este verificată. Pentru a
douaXcondiţie avem:
u = α + α2 + α5 + 0 = 010 + 001 + 111 + 000 = 100 = α0 ,
u∈U
X
v = α0 + α + α2 + α3 + α6 + 0 = 100 + 010 + 001 + 110 + 101 + 000 = 100 = α0 .
v∈V
A
Xtreia condiţie este şi ea verificată deoarece
u3 = α3 + α6 + α + 0 = 110 + 101 + 010 + 000 = 001 = α2 ,
u∈U
X
v 3 = α0 +α3 +α6 +α2 +α4 +0 = 100+110+101+001+011+000 = 101 = α6
v∈V
şi α2 + (α0 )3 = α6 .
Deci [χ(U ), χ(V )] = 01100101 11110011 este cuvânt - cod ı̂n P (3).

Observaţii:

• Deoarece card(χ(U )) = card(χ(V )) = 2r , P (r) este un cod de lungime 2r+1 .

• Faptul că 0 este sau nu un element al mulţimilor U sau V nu afectează cu


nimic condiţiile 2 şi 3 din Definiţia 15.1. Acest element se introduce ı̂n cele
două mulţimi numai pentru a asigura prima condiţie din definiţie. Rezultă
că biţii de pe poziţia 2r − 1 din χ(U ) şi χ(V ) sunt biţi de paritate (ceea ce
justifică termenul de cod Preparata ”extins”).

• Exponentul 0 30 din Definiţia 15.1 nu este esenţial. Dacă el se ı̂nlocuieşte cu


s = 2t + 1 astfel ca aplicaţiile f, g : GF (2r ) −→ GF (2r ), f (x) = xs , g(x) =
xs−2 să fie bijective, toate proprietăţile se păstrează.
Aceste coduri se numesc Coduri Preparata generalizate.
X
Lema 15.1 Fie [χ(U ), χ(V )], [χ(A), χ(B)] ∈ P (r) şi β = u.
u∈U
Atunci [χ(U ∆A + β), χ(V ∆B)] ∈ P (r).

Demonstraţie: Vom arăta că noul cuvânt construit verifică condiţiile din Definiţia
15.1.
15.1. DEFINIREA CODURILOR PREPARATA EXTINSE 171

1. Deoarece card(U ), card(V ), card(A), card(B) sunt pare, se arată uşor că:
card(V ∆B) = card(V ) + card(B) − 2 · card(V ∩ B),
card(U ∆A + β) = card(U ∆A) = card(U ) + card(A) − 2 · card(U ∩ A).
X X X
2. Să observăm ı̂ntâi că dacă I, J ⊆ GF (2r ), avem x= x+ x deoarece
x∈I∆J x∈I x∈J
orice element αi ∈ I ∩ J apare de două ori ı̂n membrul drept şi niciodată ı̂n
membrul stâng, iar αi + αi = 0. Deci:
X X X X X
x = (y + β) = y + β · card(U ∆A) = y+ +0
x∈U ∆A+β y∈U ∆A y∈U ∆A y∈U y∈A
X X X
(deoarece card(U ∆A) este par) = y+ y= y.
y∈V y∈B y∈V ∆B

 3  3
X X X X
3. x3 +  x = (y + β)3 +  y =
x∈U ∆A+β x∈U ∆A+β y∈U ∆A y∈V ∆B
 3
X X X X X X X
= (y + β)3 + (y + β)3 +  y+ y = y3 + β y2 + β 2 y+
y∈U
Xy∈A X y∈V
X y∈B y∈U y∈U y∈U
β 3 card(U ) + 3
y +β y2 + β 2
y + β 3 card(A) +
y∈A y∈A y∈A
 3  2     2  3
X X X X X X
 y +  y  y +  y  y +  y .
y∈V y∈V y∈B y∈V y∈B y∈B
 2
X X X X
Dar β = y = y,  y = y 2 , iar card(U ), card(V ) sunt pare.
y∈U y∈V y∈V y∈V
Deci expresia de sus se reduce la
X X X
y3 + y3 = y3.
y∈V y∈B y∈V ∆B

Definiţia 15.2 Un cod C este invariant la distanţă dacă pentru orice c1 , c2 ∈ C,


are loc relaţia

∀i 0 ≤ i ≤ n, card({α|d(α, c1 ) = i}) = card({α|d(α, c2 ) = i}).

Exemple simple de coduri invariante la distanţă sunt codurile liniare.


Ca o consecinţă imediată, pentru un cod invariant la distanţă care conţine
cuvântul nul, distanţa minimă este ponderea minimă a unui cuvânt - cod nenul.
Vom arăta ı̂n continuare că un cod Preparata are această proprietate.

Lema 15.2 P (r) este invariant la distanţă.

Demonstraţie: Fie [χ(U ), χ(V )], [χ(A), χ(B)] ∈ P (r) arbitrare aflate la distanţa i
unul de altul. Conform Lemei 15.1, [χ(U ∆U +β), χ(V ∆V )], [χ(U ∆A+β), χ(V ∆B)]
sunt de asemenea cuvinte - cod şi se verifică uşor că ele se află la distanţa i. Deoarece
U ∆U = ∅ rezultă [χ(U ∆U + β), χ(V ∆V )] = 0, deci [χ(U ∆A) + β), χ(V ∆B)] are
pondere i. 2
172 PRELEGEREA 15. CODURI PREPARATA

Lema 15.3 Fie [χ(U ), χ(V )] ∈ P (r). Atunci P (r) mai conţine următoarele cuvinte:
(i). [χ(V ), χ(U )];
(ii). [χ(U + β), χ(V + β)] pentru orice β ∈ GF (2r );
(iii). [χ(βU ), χ(βV )] pentru orice β ∈ GF (2r ), β 6= 0.

Demonstraţie: Se rezolvă similar demonstraţiei de la Lema 15.1. 2

Exemplul 15.4 Conform Exemplului 15.3, [χ(U ), χ(V )] ∈ P (3), unde


U = {α, α2 , α5 , 0}, V = {α0 , α, α2 , α3 , α6 , 0}.
Conform Lemei 15.3 ı̂n care se ia β = α3 , vom mai găsi drept cuvinte - cod şi pe
[χ(V ), χ(U )] = 11110011 01100101,
[χ(U + β), χ(V + β)] = [χ({α0 , α5 , α2 , α3 }), χ({α, α0 , α5 , 0, α4 , α3 })] =
= 10110100 11011101,
[χ(βU ), χ(βV )] = [χ({α4 , α5 , α, 0}), χ({α3 , α4 , α5 , α6 , α2 , 0})] =
= 01001101 00111111.

Putem folosi Lema 15.3 pentru a simplifica problema determinării distanţei mini-
me a lui P (r). Pentru aceasta ı̂nsă, este nevoie de un rezultat suplimentar (care
justifică condiţia ca r să fie impar).

Lema 15.4 Fie α ∈ GF (2r ) primitiv. Atunci α3 este primitiv dacă r este impar şi
nu este primitiv dacă r este par.

Demonstraţie: Se ştie că αi este primitiv dacă şi numai dacă (i, 2r − 1) = 1. Avem
2r −1 = (3−1)r −1 = M3+(−1)r −1; deci pentru r impar 2r −1 = M3−2 = M3+1,
ceea ce ı̂nseamnă că α3 este primitiv. Similar, pentru r par, 2r − 1 = M3, deci α3
nu este primitiv. 2

Corolarul 15.1 Dacă r > 2 este un număr impar, atunci pentru orice x ∈ GF (2r )\
{0} există y unic (numit rădăcina cubică a lui x) astfel ca y 3 = x.

Teorema 15.1 P (r) are distanţa minimă t = 6.

Demonstraţie: Deoarece P (r) este invariant la distanţă, el va conţine un cuvânt -


cod [χ(U ), χ(V )] de pondere t. Deci
t = w(χ(U )) + w(χ(V )) = card(U ) + card(V ).
Rezultă că t este număr par; mai trebuie verificat că t 6= 2, t 6= 4 şi există un
cuvânt - cod de pondere 6.
Să presupunem t = 2; atunci card(U ) = 2, card(V ) = 0 (Lema 15.3 asigură că
totul se poate reduce la acest caz). X
Folosind tot Lema 15.3, (ii), putem presupune că
U = {0, x} cu x 6= 0. Dar atunci u = 0 + x = x, ceea ce duce la o contrazicere
u∈U
a definiţiei codurilor Preparata, pentru că V = ∅.
Să presupunem t = 4. Cu Lema 15.3, (i) aceasta ı̂nseamnă card(U ) = 4,
card(V ) = 0 sau card(U ) = card(V ) = 2. În primul caz avem U = {0, x, y, z} cu
x, y, z 6= 0 şi distincte. Ultima condiţie a definiţiei codurilor Preparata este:
03 + x3 + y3 + z3 + (0 + x + y + z)3 = 0 sau (x + y)(x + z)(y + z) = 0
ceea ce este imposibil, cele trei numere fiind distincte şi nenule.
15.2. CODIFICAREA CODURILOR PREPARATA EXTINSE 173

În a doua variantă, se poate considera U = {0, x}, V = {y, z}, toate cele patru
elemente fiind distincte. Din definiţie rezultă
03 + x3 + (0 + x)3 = y3 + z3 sau y3 + z3 = 0.
Folosind acum Corolarul 15.1, din y3 = z3 rezultă y = z, contradicţie.
Să construim acum un cuvânt - cod de pondere t = 6. Fie x, y, z ∈ GF (2r )
elemente distincte nenule. Există atunci (Corolarul 15.1) un element v ∈ GF (2r )
unic cu v3 = x3 + y3 + z3 . Dacă v = x, atunci v3 = x3 deci y3 = z3 , ceea ce duce
la contradicţia y = z. Deci v este distinct de x, y, z.
Definim u = v + x + y + z. Se observă că u 6= 0 (altfel
v3 + (x + y + z)3 = (x + y)(x + z)(y + z) 6= 0
deci - cu Corolarul 15.1 - v 6= x + y + z). Fie acum U = {0, u}, V = {v, x, y, z}.
Din construcţie, cum toate elementele sunt distincte, [χ(U ), χ(V )] este un cuvânt
de pondere 6 şi se verifică uşor că este cuvânt - cod. 2

Exemplul 15.5 Să considerăm GF (23 ) construit anterior. Fie elementele


x = α, y = α3 , z = α5 . Definim
v3 = x3 + y3 + z3 = α3 + α9 + α15 = 110 + 001 + 100 = α4 = (α6 )3
(deoarece α7 = 1), deci se poate lua v = α6 . Mai departe,
u = v + x + y + z = α6 + α + α3 + α5 = α4 . Acum, U = {0, u} = {0, α4 },
V = {v, x, y, z} = {α6 , α, α3 , α5 } şi se obţine [χ(U ), χ(V )] = 00001001 01010110
care este un cuvânt cod din P (3) de pondere 6.

Teorema 15.2 Codul Preparata nu este cod liniar.

Demonstraţie: După cum se ştie, [χ(U ), χ(V )]+[χ(A), χ(B)] = [χ(U ∆A), χ(V ∆B)].
Din demonstraţia Teoremei 15.1 am văzut cum se pot construi cuvintele - cod
[χ(U ), χ(V )], [χ(A), χ(B)] ∈ P (r) cu U = {0, u1 }, V = {x1 , y1 , z1 , v1 },
A = {0, u2 }, B = {x2 , y2 , z2 , v2 }. Conform Lemei 15.1,
c = [χ(U ∆A + u1 ), χ(V ∆B)] ∈ P (r). Facem următoarele observaţii:
card(U ∆A + u1 ) ≤ 2;
d(c, [χ(U ∆A), χ(V ∆B)]) ≤ 2 · card(U ∆A + u1 ) ≤ 4;
P (r) are distanţa minimă 6.
Din ele rezultă că [χ(U ), χ(V )] + [χ(A), χ(B)] 6∈ P (r).
Deci P (r) nu este cod liniar. 2
Ca o consecinţă a acestei teoreme, nu se poate da nici o dimensiune pentru P (r),
deci se pare că nu se poate determina numărul de cuvinte - cod. Vom reuşi totuşi
acest lucru ca o consecinţă a schemei de codificare.

15.2 Codificarea codurilor Preparata extinse


Fie α ∈ GF (2r ) primitiv şi să considerăm codul BCH de polinom generator g(X) =
m1 (X)m3 (X) unde mi (X) este polinomul minimal al lui αi (i = 1, 3). După cum se
ştie, grad(m1 (X)) = grad(m3 (X)) = r, deci grad(g(X)) = 2r. Codul BCH astfel
definit poate corecta maxim 2 erori şi are matricea de control (transpusă):
 
174 PRELEGEREA
α 0
α0 15. CODURI PREPARATA
 1 3 


α α 

 α 2
α 6 
H=



 .. 
 . 
r −2 r −2)
α2 α3(2
Deoarece g(X) generează un cod ciclic, rezultă că orice submatrice a lui H formată
din 2r linii consecutive este nesingulară, deci inversabilă. Se defineşte matricea A
ca submatrice a lui H formată din ultimele 2r linii, şi H 0 matricea rămasă prin
ştergerea lui A.

Exemplul 15.6 În extensia GF (23 ) generată de rădăcina α a polinomului 1 + X +


X 3 vom avea
     
α α3 010 110 001 011
     
 α2 α6   001 101   111 010 
     
 α3 α2   110 001   011 101 
A=

=
 

 cu A =
−1

.

 α4 α5   011 111   110 100 
     
 α5 α   111 010   101 110 
α6 α4 101 011 111 001
Pentru GF (25 ) generată de rădăcina α a polinomului 1 + X 2 + X 5 avem
   
00011 01000 00111 00010
   


10101 00001 



00011 10001 

 11110 00101   10011 00011 
     
α21 α 63 
 01111 10001 


 11011 01010 

 22
 α
66 
α    10011 00111



 01101 10101


A=
 .. ..  
=

 cu A =
−1



 . .   11101 11011   10101 11001 
   
α30 α90 

11010 01100 



00110 11111 

 01101 10101   11001 01110 
   
   
 10010 10011   11000 00111 
01001 01101 10001 10100

Fie a = [aL , aR ] un cuvânt binar oarecare de lungime 2r+1 − 2r − 2, unde


|aL | = 2r − 1, |aR | = 2r − 2r − 1. În notaţie polinomială putem scrie
aL H = [aL (α), aL (α3 )], aR H 0 = [aR (α), aR (α3 )].
Se mai defineşte
vR = [aL (α) + aR (α), aL (α3 ) + (aL (α))3 + aR (α3 )]A−1 . (2)
Teorema 15.3 Fie r un număr impar. Pentru orice cuvânt binar a de lungime
2r+1 − 2r − 2, dacă χ(U ) = [aL , pL ], χ(V ) = [aR , vR , pR ] unde pL , pR sunt biţii de
control pentru aL respectiv [aR , vR ], atunci [χ(U ), χ(V )] ∈ P (r).
Demonstraţie: [aR , vR ]H = aR H 0 + vR A = [aR (α), aR (α3 )] + [aL (α) + aR (α),
aL (α3 ) + (aL (α))3 X
+ aR (α 3
X)] = [aL (α), aL (α
3 3
X) + (aL (α)) ]. X
3
Dar [aR , vR ] = [ v, v ], aL (α) = u, aL (α ) + (aL (α))3 =
3
u3 +
v∈V v∈V u∈U u∈U
à !3
X
u , ceea ce verifică condiţiile din Definiţia 15.1.
u∈U
Deci [χ(U ), χ(V )] este cuvânt - cod ı̂n P (r). 2
15.3. DECODIFICAREA CODURILOR PREPARATA EXTINSE 175

r+1 −2r−2
Corolarul 15.2 P (r) are 22 cuvinte - cod.
r+1 −2r−2
Demonstraţie: În Teorema 15.3 există 22 alegeri posibile pentru a, toate
conducând la cuvinte - cod distincte. 2
Putem da acum un algoritm de codificare a meajelor de informaţie ı̂n codurile
Preparata.
Fie aL , aR cuvinte de lungimi 2r − 1 respectiv 2r − 2r − 1.
Fie vR definit de (2).
Se construiesc pL , pR conform Teoremei 15.3.
Atunci mesajul de informaţie a = [aL , aR ] se codifică
ı̂n [aL , pL , aR , vR , pR ].

Exemplul 15.7 Să considerăm r = 3, aL = 0110010, aR = 1. Deci


aL (α) = α + α2 + α5 = α0 , aR (α) = α0 ,
aL (α3 ) = α3 + α6 + α15 = α2 , aR (α3 ) = α0 .
Din (2) avem vR = [α0 + α0 , α2 + α0 + α0 ]A−1 = [000 001]A−1 = 111001 unde
A−1 este matricea din Exemplul 15.6. Atunci vom codifica a = [0110010 1] ı̂n
c = [aL , pL , aR , vR , pR ] = [01100010 1 1 111001 1].
Deci c = [χ(U ), χ(V )] unde χ(U ) = 01100101, χ(V ) = 11110011, care coincide
cu secvenţa - cod construită ı̂n Exemplul 15.3.

15.3 Decodificarea codurilor Preparata extinse


Cum P (r) are distanţa minimă 6, el poate corecta maxim 2 erori.
Fie b un cuvânt recepţionat; ı̂l scriem b = [bL , pL , bR , pR ] unde bL , bR sunt
ambele de lungime 2r − 1 iar pL , pR sunt biţi de control a parităţii. Se calculează
bL H = [bL (α), bL (α3 )], bR H = [bR (α), bR (α3 )].
Apar mai multe cazuri, ı̂n funcţie de poziţiile unde apar erori.
1. Dacă erorile apar pe poziţiile de control, atunci
bL (α) = bR (α), bL (α3 ) + (bL (α))3 = bR (α3 )
(conform Definiţiei 15.1), ceea ce se verifică uşor.

2. Dacă există o eroare pe poziţia i ı̂n bR şi cel mult o eroare pe poziţiile de
control atunci
bL (α) = bR (α) + αi , bL (α3 ) + (bL (α))3 = bR (α3 ) + α3i , deci
(bL (α) + bR (α))3 = bL (α3 ) + (bL (α))3 + bR (α3 ).
Dacă ultima relaţie este verificată, atunci se scrie αi = bL (α) + bR (α) şi se
schimbă bitul i din bR (plus cel mult un bit de control).

3. Dacă există o eroare pe poziţia i din bL şi cel mult o eroare pe poziţiile de
control, similar cu cazul anterior (lucru posibil pe baza Lemei 15.3) se verifică
relaţia
(bR (α) + bL (α))3 = bR (α3 ) + (bR (α))3 + bL (α3 );
176 PRELEGEREA 15. CODURI PREPARATA

ı̂n caz afirmativ, se calculează αi = bR (α) + bL (α) şi se schimbă bitul i din bL
(plus cel mult un bit de control).

4. Dacă apar două erori ı̂n bR pe poziţiile i şi j, atunci:


bL (α) = bR (α) + αi + αj , bL (α3 ) + (bL (α))3 = bR (α3 ) + α3i + α3j ,
deci se determină αi + αj şi α3i + α3j . Valorile i, j sunt determinate cu un
algoritm similar celui de la codurile BCH.

5. Dacă apar două erori ı̂n bL , invocând din nou Lema 15.3 putem aplica analiza
de la cazul anterior.

6. Dacă apar două erori: una pe poziţia i ı̂n bL şi una pe poziţia j ı̂n bR , atunci
3
bL (α) + αi = bR (α) + αj , bL (α3 ) + α3i + (bL (α) + αi ) = bR (α3 ) + α3j .
Acest sistem de necunoscute αi şi αj se rezolvă astfel: din prima ecuaţie se
scoate αj = bL (α) + αi + bR (α) şi se ı̂nlocuieşte ı̂n a doua ecuaţie, ceea ce dă
bL (α3 ) + α3i + (bL (α) + αi )3 = bR (α3 ) + (bL (α) + αi )3 + (bL (α) + αi )2 bR (α) +
(bL (α) + αi )bR (α)2 + bR (α)3 .
După simplificări se ajunge la
α3i + α2i bR (α) + αi (bR (α))2 + (bR (α))3 = bL (α3 ) + bR (α3 ) + bL (α)2 bR (α) +
bL (α)bR (α)2 , sau
(αi + bR (α))3 = (bL (α3 ) + bR (α3 )) + (bL (α) + bR (α))3 + bL (α)3 + bR (α)3 .
Notând membrul drept al acestei expresii cu ∆, obţinem soluţia
αi = bR (α) + ∆1/3 , αj = bL (α) + ∆1/3 .

Deci locaţiile erorilor se pot determina ı̂n toate situaţiile posibile. Biţii de paritate
pentru fiecare jumătate de cuvânt dau posibilitatea de a decide ce caz se aplică lui
b. Putem da acum algoritmul de decodificare pentru codurile Preparata P (r).
15.3. DECODIFICAREA CODURILOR PREPARATA EXTINSE 177

Fie b = [bL , pL , bR , pR ] cuvântul recepţionat.


0. Se calculează L1 = bL (α), L3 = bL (α3 ), R1 = bR (α), R3 = bR (α3 );
1. Dacă L1 + R1 = 0 şi L3 + L31 + R3 = 0, atunci singurele erori posibile au
apărut pe poziţiile de control.
2. Dacă (L1 + R1 )3 + L3 + L31 + R3 = 0, calculăm αi = L1 + R1 . Se corectează
poziţia i din bR şi cel mult un bit de control al parităţii; se cere retransmisia
dacă ambii biţi de paritate trebuie modificaţi.
3. Dacă (L1 + R1 )3 + R3 + R13 + L3 = 0, calculăm αi = L1 + R1 . Se corectează
poziţia i din bL şi cel mult un bit de control al parităţii; se cere retransmisia
dacă ambii biţi de paritate trebuie modificaţi.
4. Dacă ambele jumătăţi ale lui b sunt de pondere pară şi
L3 + L31 + R3 + (L1 + R1 )3
X 2 + (L1 + R1 )X + = (X + αi )(X + αj ),
L1 + R1
se corectează poziţiile i şi j din bL .
5. Dacă ambele jumătăţi ale lui b sunt de pondere pară şi
R3 + R13 + R3 + (L1 + R1 )3
X 2 + (L1 + R1 )X + = (X + αi )(X + αj ),
L1 + R1
se corectează poziţiile i şi j din bR .
6. Dacă ambele jumătăţi ale lui b sunt de pondere impară, se calculează
αi = R1 + (L31 + R13 + (L1 + R1 )3 + L3 + R3 )1/3
αj = L1 + (L31 + R13 + (L1 + R1 )3 + L3 + R3 )1/3
Se corectează poziţia i din bL şi poziţia j din bR .
7. Dacă nu a apărut nici una din situaţiile anterioare, se cere retransmisia
cuvântului.

Exemplul 15.8 Să decodificăm următoarele cuvinte primite, despre care se pre-
supune că au fost codificate folosind P (3), unde GF (23 ) s-a generat cu rădăcina α
a polinomului 1 + X + X 3 :
I: b = 10010011 11100111
(0) [L1 , L3 ] = bL H = 111 110, [R1 , R3 ] = bR H = 101 110
(1) L1 + R1 = 111 + 101 = α 6= 0
(2) (L1 + R1 )3 + L3 + L31 + R3 = α3 + α3 + α15 + α3 = α0 6= 0
(3) (L1 + R1 )3 + R3 + R13 + L1 = α3 + α3 + α18 + α3 = α6 6= 0
α3 + α15 + α3 + α3
(4) X 2 + αX + = X 2 + αX + α6 = (X + α2 )(X + α4 )
α
Deci b se decodifică ı̂n 10010011 11001111.
II: b = 10100100 10001001
(0) [L1 , L3 ] = bL H = [010, 011], [R1 , R3 ] = bR H = [111, 011]
(1) L1 + R1 = 010 + 111 = α6 6= 0
(2) (L1 + R1 )3 + L3 + L31 + R3 = α18 + α4 + α3 + α4 = α6 6= 0
(3) (L1 + R1 )3 + R3 + R13 + L3 = α18 + α4 + α15 + α4 = α2 6= 0
Ambele jumătăţi ale lui b au pondere impară, deci
(6) αi = α5 + (α3 + α15 + α18 + α4 + α4 )1/3 = α5 + (α5 )1/3 = α5 + (α12 )1/3 =
α5 + α4 = α0 .
S-a obţinut i = 0. Se poate determina apoi imediat
αj = α + α4 = α2 , deci j = 2.
Cuvântul b se decodifică ı̂n 00100100 10101001.
178 PRELEGEREA 15. CODURI PREPARATA

III: b = 10001000 11101001


(0) [l1 , L3 ] = bL H = [111, 011], [R1 , R3 ] = bR H = [100, 000]
(1) L1 + R1 = 111 + 100 = α4 6= 0
(2) (L1 + R1 )3 + L3 + L31 + R3 = α12 + α4 + α15 + 0 = α3 6= 0
(3) (L1 + R1 )3 + R3 + R13 + L3 = α12 + 0 + α0 + α4 = 0
Calculăm αi = L1 + R1 = α4 , deci i = 4. Dar modificarea bitului 4 ı̂n bL cere ca
ambii biţi de control să fie modificaţi; deci se cere retransmisia cuvântului.

Pentru codul Preparata obţinut prin relaxarea lui P (r), se poate aplica aceeaşi
strategie de decodificare folosită la codul Golay; cum acesta are d = 5, poate corecta
de asemenea cel mult 2 erori independente.

15.4 Coduri ı̂nrudite cu codul Preparata


15.4.1 Codul Nőrdstrom - Robinson
Să plecăm de la codul Golay binar extins C24 ale cărui cuvinte le scriem sub forma
a = [a1 , a2 ] unde |a1 | = 8, |a2 | = 16. Considerăm submulţimea GN R ⊂ C24 ale
cărei elemente verifică condiţiile:

1. Dacă a ∈ GN R atunci w(a1 ) ∈ {0, 2}.

2. Dacă a, b ∈ GN R atunci d(a1 , b1 ) ≤ 2.

Evident, GN R va avea 256 cuvinte. Pe baza lui se construieşte codul


N R = {a2 |a = [a1 , a2 ] ∈ GN R}.
Acesta este un cod neliniar de lungime n = 16 şi distanţă minimă d = 6. Numit
codul Nőstrom - Robinson, el coincide cu codul Preparata P (3).
Un alt cod derivat din acesta este codul Nadler, construit astfel: se păstrează din
N R doar cuvintele - cod care coincid pe ultimele două poziţii. Apoi la toate aceste
cuvinte se şterg ultimele trei caractere (o dublă scurtare urmată de o relaxare).
Codul astfel obţinut este unic, are n = 13, d = 5 şi 64 cuvinte - cod.

15.4.2 Codurile Kerdock


Definiţia 15.3 Fie r ≥ 3, r impar şi U, V ⊂ GF (2r ), card(U ), card(V ) pare.
Un cod Kerdock K(r) este format din toate cuvintele de forma [U, V ] care verifică
condiţiile:
X X
1. ∀s (1 ≤ s ≤ 2r − 2) (1 ≤ w2 (s) < r − 2) ⇒ us = v s = 0;
u∈U v∈V
à !−s
X X X X
r s s −1 −1
2. ∀s (≤ s ≤ 2 −2) (w2 (s) = r −2) ⇒ u = v = u + v
u∈U v∈V u∈U v∈V

unde w2 (s) reprezintă ponderea reprezentării ı̂n binar a lui s.


Se consideră prin convenţie ∀s, 0−s = 0.
15.5. EXERCIŢII 179

Codul Kerdok K(r) (definit ı̂n 1972) este de fapt un subcod al codului Reed
- Muller RM(2, r + 1); el este format din perechi de translatări de cuvinte din
RM(1, r) selectate ı̂n aşa fel ca să maximizeze distanţa minimă dintre două trans-
latări.
Este interesant că dintre toate codurile cu aceeaşi distanţă minimă, codul Kerdok
are numărul maxim de cuvinte - cod.
Nu vom detalia demonstraţii referitoare la proprietăţile acestor coduri. Pentru
informaţii suplimentare se pot folosi [6] şi [2], cu menţiunea că justificările pleacă de
la o modalitate diferită de definire a codurilor K(r) şi P (r). Rezultatele sunt ı̂nsă
deosebit de interesante. Astfel:

Teorema 15.4 K(r) este invariant la distanţă.

Lema 15.5 K(3) = P (3).

Teorema 15.5 Codurile P (r) şi K(r) sunt duale.

Ca o consecinţă imediată, P (3) este un cod auto-dual.

15.5 Exerciţii
15.1 Demonstraţi relaţiile (1).

15.2 Demonstraţi Lema 15.3.

15.3 Demonstraţi Corolarul 15.1.

15.4 Aplicaţi Lema 15.3 cuvântului - cod definit ı̂n Exemplul 15.4, folosind
β = α0 , β = α, β = α6

15.5 De ce [χ(βU ), χ(βV )] nu este cuvânt - cod pentru β = 0 ?

15.6 Arătaţi că cele trei cuvinte obţinute ı̂n Exemplul 15.4 satisfac condiţiile defini-
ţiei codurilor Preparata.

15.7 Fie GF (23 ) generat de rădăcina α a polinomului 1 + X + X 3 = 0. Folosind


următoarele cuvinte x, y, z ∈ GF (23 ) construiţi cuvinte - cod de pondere 6 din P (3):
x = α y = α2 , z = α3 ,
x = α y = α4 , z = α6 ,
x = α0 y = α3 , z = α6 ,

15.8 Fie GF (23 ) construit cu 1 + X + X 3 , iar A−1 din Exemplul 15.6. Codificaţi
următoarele mesaje folosind P (3):
aL = 1010100, aR = 1;
aL = 1010100, aR = 0;
aL = 1111111, aR = 1;
aL = 1111111, aR = 0;
aL = 0000000, aR = 1;
180 PRELEGEREA 15. CODURI PREPARATA

15.9 Fie GF (25 ) construit cu 1 + X 2 + X 5 , iar A−1 din Exemplul 15.6. Codificaţi
următoarele mesaje folosind P (5):
aL = 10100 . . . 0, aR = 000001000100 . . . 0;
aL = 10100 . . . 0, aR = 00 . . . 0;
aL = 10100 . . . 0, aR = 111100 . . . 0;
aL = 0000 . . . 0, aR = 100 . . . 0;
Care este lungimea lui aL ? dar a lui aR ?

15.10 În aceleaşi condiţii din Exemplul 15.8, să se decodifice cuvintele:
10000001 11101000 00011010 01000010 00100101 10100100
01010110 00011110 11101000 10001001 10011001 01010101
01000111 11001000 10101101 11010000 11101110 01010101
10111011 01101010 01011101 11101101 10011100 10100100
01101101 10011000 10101010 10111011 10100101 00010001

15.11 Decodificaţi cuvintele primite, care au fost codificate cu P (5), unde GF (25 )
a fost construit folosind polinomul 1 + X 2 + X 5 .
11000110001000000000000001000010 00011110000000000000000110010000
10100000001000000000000000000000 00000100010000000100010101011100

15.12 Fie b un cuvânt recepţionat ı̂n care w(bL ) este impar iar w(bR ) este par.
Poate fi decodificat b la pasul 2 al algoritmului ı̂ntr-un cuvânt - cod situat la distanţă
cel mult 2 ?
Bibliografie

[1] J. Adamek - Foundations of Coding, Wiley - Interscience, 1991;

[2] C. Carlet - Codes de Reed - Muller; Codes de Kerdok et de Preparata (teză de


doctorat), PARIS VI, 1990;

[3] G. Cullmann - Coduri detectoare şi corectoare de erori, Editura Tehnică, 1972;

[4] S. Guiaşu - Teoria Codurilor, Tipografia Universităţii Bucureşti, 1976;

[5] D.G. Hoffman, D.A. Leonard, C.C. Lindner, K.T. Phelps, C.A. Rodger, J.R.
Wall - Coding Theory; The Essentials, Marcel Dekker, Inc, 1991;

[6] A.M.Kerdok - A class of low-rate non linear codes, Information and control, 20
(1972), 182-187;

[7] J.H. van Lindt - Coding Theory, Springer Verlag, 1971;

[8] J.H. van Lindt - Introduction to Coding Theory, Springer Verlag, 1982;

181
Prelegerea 16

Coduri convoluţionale

În cazul codurilor prezentate până acum, la codificarea unui mesaj de informaţie se
obţine un cuvânt - cod de lungime n, ale cărui caractere nu depind decât de cele
k elemente de informaţie curente. Avem de-a face cu un proces de codificare fără
memorie, iar aceste coduri sunt numite şi coduri - bloc.
P. Elias a introdus ı̂n 1965 o clasă de coduri, remarcabile prin siguranţa sporită pe
care o asigură ı̂n transmiterea informaţiei: codurile convoluţionale. În cazul lor,
codificarea unui mesaj de lungime k se face ţinând cont şi de codificările mesajelor
de informaţie anterioare.
De remarcat că NASA şi Agenţia Spaţială Europeană folosesc o combinaţie ı̂ntre
aceste coduri şi codurile Reed - Solomon. Fiecare mesaj de informaţie este codificat
iniţial cu un cod RS, apoi cu un cod convoluţional.

16.1 Coduri liniare şi coduri convoluţionale


După cum am văzut, un (n, k) - cod liniar codifică un mesaj de informaţie u ∈ Zqk
ı̂ntr-un cuvânt - cod v = uG de lungime n (v ∈ Zqn ). Un cod liniar poate fi privit
ı̂nsă şi ca o aplicaţie care transformă mesaje sursă (de orice lungime i·k, i = 1, 2, . . .)
ı̂n mesaje - cod de lungime i · n.

Exemplul 16.1 Codul generat de matricea


 
1 0 0 1
G= 
 0 1 0 1 
0 0 1 1
defineşte o funcţie astfel:
a0 a1 a2 a3 a4 a5 . . . −
7 → a0 a1 a2 x0 a3 a4 a5 x1 . . .
unde
x0 = a0 + a1 + a2 , x1 = a3 + a4 + a5 , . . .

O astfel de funcţie poate fi exprimată foarte simplu prin polinoame. Astfel, fie
a(X) = a0 + a1 X + a2 X 2 + . . . polinomul reprezentând mesajul sursă, şi u(X) =
u0 + u1 X + u2 X 2 + . . . mesajul codificat. Atunci un cod liniar este o aplicaţie C
definită C(a(X)) = u(X). O astfel de aplicaţie are următoarele proprietăţi:

181
182 PRELEGEREA 16. CODURI CONVOLUŢIONALE

• C este liniară:
C(a(X) + a0 (X)) = C(a(X)) + C(a0 (X));
C(ta(X)) = tC(a(X)).

• C este invariantă ı̂n timp: ı̂ntârzierea mesajului sursă cu k tacţi are ca efect
decalarea răspunsului cu n tacţi:
C(X k a(X)) = X n C(a(X)).

• C nu are memorie: codificarea unui mesaj sursă de lungime k nu depinde de


mesajele sursă precedente.

Aceste trei proprietăţi caracterizează complet codurile liniare. Dacă se renunţă la


ultima proprietate, se obţine o nouă clasă de coduri, numite coduri convoluţionale.

Definiţia 16.1 Fie q un număr prim. Prin (n, k) - cod convoluţional se ı̂nţelege o
aplicaţie liniară C : Zq [X] −→ Zq [X] cu proprietatea (de invarianţă de timp)
C(X k a(X)) = X n C(a(X)).

Exemplul 16.2 Să considerăm circuitul liniar:


º·
- + -
6 ¹¸ 6
6 ?
-
t- -
-
º·
? º·? 6
?- + - + -
¹¸ ¹¸
El reprezintă un (2, 1) - cod convoluţional binar. Este liniar (datorită circuitului),
invariant ı̂n timp (o ı̂ntârziere de 1 tact la intrare provoacă o ı̂ntârziere de 2 tacţi
la ieşire).
De exemplu, pentru intrarea 1 se obţine 11 la primul tact, 11 la al doilea tact şi
01 la al treilea (după care urmează 0000 . . .). Deci
C(1) = 111101 = 1 + X + X 2 + X 3 + X 5 .
Datorită invarianţei ı̂n timp, avem
C(X) = C(01) = 00111101, C(X 2 ) = C(001) = 0000111101, . . .
(s-a ţinut cont de dualitatea de notare polinom - cuvânt).
Datorită liniarităţii, răspunsul C(1) caracterizează complet codul. De exemplu,
mesajul de intrare 101 se codifică prin
C(101) = C(1 + X 2 ) = C(1) + C(X 2 ) = C(1) + C(001) = 11110100 . . . +
0000111101 . . . = 1111101101 = 1 + X + X 2 + X 3 + X 4 + X 6 + X 7 + X 9 .

16.2 Coduri (n, 1) - convoluţionale


În cazul particular k = 1, codul este complet determinat de ieşirea pentru mesajul
de intrare 1. Notăm
C(1) = g0 (X)
polinomul generator al acestei subclase de coduri. Din invarianţa ı̂n timp rezultă
16.2. CODURI (N, 1) - CONVOLUŢIONALE 183

C(X i ) = X ni g0 (X), ∀i ≥ 1.
Deci, pentru orice polinom a(X) = a0 + a1 X + . . . + ap X p avem
C(a(X)) = a0 C(1)+a1 C(X)+a2 C(X 2 )+. . .+ap C(X p ) = a0 g0 (X)+a1 X n g0 (X)+
a2 X 2n g0 (X) + . . . + ap X np g0 (X) = a(X n )g0 (X).
Aceasta conduce la ideea că un (n, 1) - cod convoluţional este generat de polino-
mul g0 (X) conform regulii
a(X) 7→ a(X n )g0 (X).
Invers, orice polinom g0 (X) ∈ Zq [X] defineşte un (n, 1) - cod convoluţional.
Observaţie: Ideea de polinom generator este similară celei de la codurile ciclice,
unde codificarea mesajului de informaţie a(X) revenea la ı̂nmulţirea cu polinomul
generator. La codurile convoluţionale nu există ı̂nsă restricţie referitor la gradul lui
a(X) şi – ı̂n plus – la ı̂nmulţire se foloseşte a(X n ).
Există o modalitate simplă de construcţie a unui circuit liniar, generator al unui
astfel de cod. Vom descrie aceasta pentru cazul binar.
Polinomul g0 (X) se descompune ı̂n sume de n termeni consecutivi, fiecare sumă
descriind modul de conectare al elementelor de ı̂nmagazinare. Astfel, fie
g0 (X) = (b0 + b1 X + . . . + bn−1 X n−1 ) + (bn X n + bn+1 X n+1 + . . . + b2n−1 X 2n−1 ) +
. . . + (bmn X mn + bmn+1 X mn+1 + . . . + bmn+n−1 X mn+n−1 )
Numărul de m + 1 paranteze indică faptul că sunt necesare m elemente de
ı̂nmagazinare (prima paranteză se referă la intrare). A i - a secvenţă de termeni
descrie ieşirea celui de-al i - lea element de ı̂nmagazinare (bp = 1 semnifică o legătură
directă cu al p - lea element al ieşirii).
În plus, elementele de ı̂nmagazinare sunt legate ı̂ntre ele secvenţial.

Exemplul 16.3 Să considerăm (2, 1) - codul convoluţional de polinom generator


g0 (X) = 1 + X + X 2 + X 5 = (1 + X) + (X 2 + 0) + (0 + X 5 ). Prima paranteză, 1 + X,
arată că ambii biţi de ieşire sunt legaţi de intrare, X 2 + 0 indică faptul că primul
element de ı̂nmagazinare este legat direct doar de primul bit de ieşire, 0 + X 5 arată
că al doilea element de ı̂nmagazinare este legat numai de al doilea bit de ieşire. În
acest fel se obţine codificatorul descris de circuitul liniar:

º·
- + -
6 ¹¸ 6
6 -
?
s- -
-
º·
? 6
? - + -
¹¸

Exemplul 16.4 Fie (3, 1) - codul convoluţional (deci cu 3 biţi de ieşire) generat de
polinomul g0 (X) = 1 + X 2 + X 3 + X 5 + X 6 + X 7 + X 12 + X 13 + X 14 . Pentru a
construi circuitul liniar, rescriem acest polinom astfel: g0 (X) = (1 +0 + X 2 )+(X 3 +
0 + X 5 ) + (X 6 + X 7 + 0) + (X 12 + X 13 + X 14 ). Se obţine
184 º· PRELEGEREA
º· 16. CODURI
º· CONVOLUŢIONALE
6
- + - + - + -
6 ¹¸ ¹¸ ¹¸ ? -
6 6 6 ¶³
s- - s- - - + -
µ´ -
66
? -
º·
? º·
?
?- + - + -
¹¸ ¹¸
Similar codurilor ciclice, plecând de la polinomul generator, se poate construi ma-
tricea generatoare a codurilor (n, 1) - convoluţionale. Aceasta este
 
g0 (X)
 
 X n g0 (X) 
G=
 X 2n g0 (X)


 
..
.

Numărul liniilor (şi deci şi al coloanelor) lui G nu este fixat, el depinzând de lungimea
mesajului sursă. Astfel, pentru un mesaj de lungime i, matricea G are i linii şi
1 + grad(g0 (X)) + (i − 1) · n coloane.

Exemplul 16.5 Fie (3, 1) - codul convoluţional binar de polinom generator g0 (X) =
1 + X + X 3 + X 4 + X 5 + X 8 . Pentru un mesaj sursă de lungime 3, matricea G va
avea dimensiunea 3 × 15:
 
1 1 0 1 1 1 0 0 1
 
G= 1 1 0 1 1 1 0 0 1 
1 1 0 1 1 1 0 0 1

(spaţiile libere sunt completate cu 0). Astfel, codificarea mesajului 101 este
101 · G = 110001000110001.

16.3 Coduri (n, k) - convoluţionale


Să dezvoltăm o descriere a codurilor (n, k) - convoluţionale, similară celei date an-
terior pentru cazul k = 1. Vom ı̂ncepe cu un exemplu:

Exemplul 16.6 Fie circuitele liniare a două (2, 1) - coduri convoluţionale, care au
ieşirea comună:
-
6
s- -
6
6
?
²¯ ?
²¯
?- + - + ²¯?
- ±° ±° -
+
±°²¯
- ? -
6 ±°+ -
6 6
? s- - -

?
²¯ ²¯?
?- + - + -
±° ±°
16.3. CODURI (N, K) - CONVOLUŢIONALE 185

La fiecare tact intrarea este formată din doi biţi care formează intrările ı̂n cele două
circuite liniare. O ı̂ntârziere cu doi tacţi la intrare generează o ı̂ntârziere de doi
tacţi la ieşire; deci, acesta este un (2, 2) - cod convoluţional.
Pentru intrarea 10 ieşirea este 110101 (funcţionează doar circuitul superior), iar
pentru 01 ieşirea este 010111 (numai pe baza circuitului inferior). Formal,
C(1) = 1 + X + X 3 + X 5 = g0 (X), C(X) = X + X 3 + X 4 + X 5 = g1 (X).
Folosind invarianţa ı̂n timp se pot determina şi alte ieşiri:
C(X 2i ) = X 2i g0 (X), C(X 2i+1 ) = X 2i g1 (X) ∀i ≥ 1.

Definiţia 16.2 Pentru un (n, k) - cod convoluţional, polinoamele


gi (X) = C(X i ), 0 ≤ i ≤ k − 1
se numesc ”polinoame generatoare”.

Teorema 16.1 Un (n, k) - cod convoluţional de polinoame generatoare gi (X), (0 ≤


i ≤ k − 1) este determinat de funcţia de codificare
k−1
X
a(X) 7→ a(i) (X n )gi (X) (1)
i=0
unde pentru secvenţa a = a0 a1 a2 . . . s-a notat a(i) = ai ai+k ai+2k . . . (0 ≤ i ≤ k − 1).
Reciproc, fiind date polinoamele gi (X) i = 0, 1, . . . , k − 1 şi un număr n, formula
(1) determină un (n, k) - cod convoluţional.

Demonstraţie: Vom ı̂ncepe prin a arăta ultima afirmaţie. Aplicaţia


a(X) 7→ a(i) (X n )gi (X)
este liniară (ca o compunere de transformări liniare) şi invariantă ı̂n timp (deci
defineşte un (n, k) - cod convoluţional). Ultima aserţiune rezultă din observaţia că
pentru orice secvenţă a,
³ ´(i)
X k a(X) 7→ X n a(i) (X).

k−1
X
n
k
Deci ieşirea la X a(X) prin această aplicaţie este X a(i) (X n )gi (X).
i=0

Să arătăm acum că un (n, k) - cod convoluţional definit de aplicaţia C este identic
k−1
X
0
cu cel dat de C (a(X)) = a(i) (X n )gi (X) unde gi (X) = C(X i ) sunt polinoamele
i=0
generatoare. Deoarece C şi C 0 sunt ambele liniare, este suficient să arătăm că
C(X r ) = C 0 (X r ) pentru orice r ≥X0; atunci vomX
avea
r
2
C(a0 + a1 X + a2 X + . . .) = ar C(X ) = ar C 0 (X r ) = C 0 (a0 + a1 X + . . .).
r≥0 r≥0
Deoarece ambele aplicaţii sunt (n, k) invariante ı̂n timp, ne putem restrânge la
0 ≤ r ≤ k − 1. Pentru a = 00 . . . 0100 . . . (cu 1 pe poziţia r), este evident că
a(r) = 100 . . . şi a(i) = 000 . . . pentru i 6= r. Deci C 0 (X r ) = gr (X) = C(X r ). 2
Analog codurilor (n, 1) - convoluţionale, şi ı̂n acest caz se poate defini ma-
tricea generatoare, care este o reprezentare matricială a relaţiei (1). Liniile ma-
tricii sunt g0 (X), g1 (X), . . . , gk−1 (X), X n g0 (X), X n g1 (X), . . ., considerate ca poli-
noame de grad infinit. Pentru mesajul a = a0 a1 . . . ar codificarea este aG =
186 PRELEGEREA 16. CODURI CONVOLUŢIONALE

a0 g0 (X) + . . . + ak−1 gk−1 (X) + X n [ak g0 (X) + . . . + a2k−1 gk−1 (X)] + X 2n [a2k g0 (X) +
. . .+a3k−1 gk−1 (X)]+. . . = (a0 +ak X n +a2k X 2n +. . .)g0 (X)+. . .+(ak−1 +a2k−1 X n +
k−1
X
. . .)gk−1 (X) = a(i) (X n )gi (X).
i=0

Exemplul 16.7 Matricea generatoare a (2, 2) - codului convoluţional descris ı̂n Ex-
emplul 16.6 este
 
1 1 0 1 0 1
 0 1 0 1 1 1 
 
 


1 1 0 1 0 1 

 0 1 0 1 1 1 
G= 

 1 1 0 1 0 1 ... 

 
 0 1 0 1 1 1 ... 
 
..
.

(locurile goale sunt completate cu 0).


Pentruintrarea 101 ieşirea este 
1 1 0 1 0 1 0 0
(1 0 1)  
 0 1 0 1 1 1 0 0  = (1 1 1 0 0 0 0 1), deci
0 0 1 1 0 1 0 1
C(1 + X 3 ) = 1 + X + X 3 + X 8 .

S-a prezentat anterior modul de construcţie al unui circuit liniar pentru (n, 1) -
coduri convoluţionale, plecând de la polinomul generator g(X). În mod similar se
determină circuitul liniar de codificare pentru un (n, k) - cod convoluţional:

1. Pentru i = 0, 1, . . . , k − 1 se construieşte circuitul liniar al (n, 1) - codului dat


de a(X) 7→ a(X n )gi (X);

2. Se foloseşte un buffer comun de ieşire (de n simboluri), ı̂n care ajung rezultatele
ı̂nsumate ale celor k circuite;

3. Secvenţa de intrare este segmentată ı̂n grupe de câte k simboluri, fiecare din
ele constituind intrarea ı̂n câte un circuit liniar.

Exemplul 16.8 Să construim circuitul liniar pentru (2, 2) - codul definit de poli-
noamele generatoare
g0 (X) = X + X 3 + X 4 + X 5 , g1 (X) = 1 + X + X 2 + X 4 + X 5 + X 6 + X 7 .
Scriem g0 (X) = (0 + X) + (0 + X 3 ) + (X 4 + X 5 ) deci circuitul său liniar are 2
elemente de ı̂nmagazinare. Pentru g1 (X) = (1+X)+(X 2 +0)+(X 4 +X 5 )+(X 6 +X 7 )
sunt necesare trei elemente de ı̂nmagazinare.
Reprezentarea sa grafică este:
16.4. CODURI CONVOLUŢIONALE SISTEMATICE 187
²¯ ²¯
- + - + -
6 ±° ±°
6 6
s - - - 6
6
? ²¯?
- ²¯ ²¯ - + -
- + - + -6 ±°²¯ ?
- 6 ±° ±° 6 + -
6 6 ±°
6
?
-s - - -

?
²¯ ²¯?
? - + - + -
±° ±°

Definiţia 16.3 Un (n, k) - cod convoluţional are ”memorie” N dacă


∀i (0 ≤ i ≤ k − 1), grad(gi (X)) ≤ N n,
iar N este minim cu această proprietate. Numărul N n se numeşte ”lungimea
restrânsă” a codului.

După cum s-a văzut, un cod convoluţional de memorie N poate fi implementat cu


o combinaţie de N − 1 elemente de ı̂nmagazinare. N este numărul de simboluri de
ieşire care pot fi modificate la schimbarea unui singur caracter de intrare.

16.4 Coduri convoluţionale sistematice


Un (n, k) - cod convoluţional sistematic are proprietatea că la fiecare ieşire de n car-
actere, pe primele k poziţii se găsesc simbolurile de informaţie. Vom da o construcţie
directă a acestor coduri, plecând tot de la similitudinea cu codurile - bloc.
Fie n, k, N (k < n) numere naturale nenule. Considerăm sistemul de k(n − k)
secvenţe cu N componente peste Zq :
g(i, j) = g0 (i, j)g1 (i, j) . . . gN −1 (i, j), 1 ≤ i ≤ k, 1 ≤ j ≤ n − k.
Aceste secvenţe se numesc subgeneratori.
Considerăm  matricea 
g∞ (1)
 
 g∞ (2) 
Q0 =   ..  = (Ik P0 Ok P1 Ok P2 Ok . . . PN −2 Ok PN −1 Ok Ok . . .)

 . 
g∞ (k)
unde Ik este matricea unitate, Ok este matricea nulă (ambele de ordin k),
 
gt (1, 1) gt (1, 2) . . . gt (1, n − k)
 
 gt (2, 1) gt (2, 2) . . . gt (2, n − k) 
Pt = 
 .. ,
 0≤t≤N −1
 . 
gt (k, 1) gt (k, 2) . . . gt (k, n − k)
iar
g∞ (i) = 0 . . . 010 . . . g0 (i, 1) . . . g0 (i, n − k)0 . . . 0g1 (i, 1) . . . g1 (i, n − k)0 . . . 0
0 . . . 0gN −1 (i, 1) . . . gN −1 (i, n − k)0 . . . (1 ≤ i ≤ k).
Cuvintele obţinute din primele N n componente ale lui g∞ (i) (1 ≤ i ≤ k):
g(i) = 0 . . . 010 . . . 0g0 (i, 1) . . . g0 (i, n − k)0 . . . 0gN −1 (i, 1) . . . gN −1 (i, n − k)
188 PRELEGEREA 16. CODURI CONVOLUŢIONALE

se numesc generatori.
Fie λ un număr natural. Se defineşte operatorul
Dλ g∞ (i) = 0| .{z
. . 0} g∞ (i)
λn
care translatează g∞ (i) cu λn poziţii spre dreapta.
În sfârşit, fie  
g∞ (1)
 .. 
 


. 

 
Q0  g∞ (k) 
 
   
 DQ0   Dg∞ (1) 
G∞ = 
 D 2 Q0
=
  .. =

   . 
.. 
 Dg∞ (k) 

.  
 
 D 2 g∞ (1) 
 . 
..
 
Ik P0 Ok P1 Ok P2 . . . Ok PN −1 ...
 
 Ik P0 Ok P1 . . . Ok PN −2 Ok PN −1 ... 
=
 Ik P0 . . . Ok PN −3 Ok PN −2 Ok PN −1


 
..
.
matricea generatoare a unui (n, k) - cod convoluţional sistematic.
Observaţie: Evident, un (n, k) - cod convoluţional sistematic este un (n, k) - cod
convoluţional. Invers, fiind dat un (n, k) - cod convoluţional, el se poate transforma
mn+n−1
X
ı̂n unul sistematic prin adunarea la fiecare polinom generator gi (X) = bi,p X i
p=0
m k−1
X X
a polinomului gi0 (X) = (k − bi,np+j )X np+j + bi X i (0 ≤ i ≤ k − 1).
p=0 j=0

Deşi are - teoretic - un număr infinit de linii şi coloane, fiind ı̂n formă canonică,
pentru această reprezentare se poate construi imediat matricea de control:
 
−P0T In−k ...
 


−P1T On−k −P0T In−k ... 

 −P2T On−k −P1T On−k −P0T In−k ... 
 
 .. 
 . 
 
H∞ =  T 
 −PN
 −1 On−k −PNT −2 On−k −PNT −3 On−k ... 

 −PNT −1 On−k −PNT −2 On−k ... 
 
 
 −PNT −1 On−k ... 
 
..
.
a cărei transpusă este
 
−P0 −P1 −P2 . . . −PN −1 ...
 
 In−k On−k On−k . . . On−k ... 
 
T
H∞ =
 −P0 −P1 . . . −PN −2 −PN −1 ... 

 
 In−k On−k . . . On−k On−k ... 
 
..
.
16.4. CODURI CONVOLUŢIONALE SISTEMATICE 189

T
Se verifică imediat egalitatea G∞ H∞ = O∞ .
Să considerăm un mesaj de informaţie a, sub forma unei succesiuni (teoretic)
infinite. El va fi ”descompus” iniţial ı̂n blocuri de lungime k:
a = a0 (1) . . . a0 (k) a1 (1) . . . a1 (k) . . . ap (1) . . . ap (k) . . .
| {z }| {z } | {z }
a0 a1 ap

Mesajul codificat se obţine similar codurilor liniare, prin ı̂nmulţirea lui a cu matricea
generatoare: c = aG∞ ; textul rezultat va fi descompus ı̂n blocuri de lungime n:
c = aG∞ = c0 (1) . . . c0 (n) c1 (1) . . . c1 (n) . . . cp (1) . . . cp (n) . . .
| {z }| {z } | {z }
c0 c1 cp

Ţinând cont de forma canonică a matricii G∞ , rezultă următoarele relaţii:


cp (i) = ap (i), (1 ≤ i ≤ k)
k N
X X −1
cp (k + j) = ap−t (i)gt (i, j), (1 ≤ j ≤ n − k). (2)
i=1 t=0

Aceeaşi formulă de codificare se poate scrie şi ı̂n alt mod:


k
X k
X k
X
c = aG∞ = a0 (i)g∞ (i) + a1 (i)Dg∞ (i) + a2 (i)D2 g∞ (i) + . . ., deci
i=1 i=1 i=1
k X
X ∞
c= at (i)Dt g∞ (i) (3)
i=1 t=0

Exemplul 16.9 Să considerăm un (2, 1) - cod convoluţional binar cu N = 4 şi


subgenerator g(1, 1) = 1101. Generatorul va fi atunci g(1) = 110100001 iar matricea
 
11 01 00 01 ...

 11 01 00 01 ...  
G∞ =


11 01 00 01 . . . 
 
..
.
Dacă dorim să se transmită secvenţa de informaţie a = 10011 . . ., ea va fi codificată
ı̂n c = aG∞ = 1101001010 . . .

Exemplul 16.10 Fie (3, 2) - codul convoluţional binar cu N = 3 şi subgeneratori


g(1, 1) = 101, g(2, 1) = 110. Calculând generatorii, se obţine
g(1) = 101000001, g(2) = 011001000 şi deci
 
101 000 001 ...
 011 001 000 ... 
 
 


101 000 001 ... 

 011 001 000 ... 
G∞ = 
 
 101 000 001 . . . 
 
 011 001 000 . . . 
 
..
.
Fie a = 110010 . . . o secvenţă de informaţie. Rezultatul codificării ei este c = aG∞
= 110001100 . . .
190 PRELEGEREA 16. CODURI CONVOLUŢIONALE

16.5 Arborescenţa codurilor convoluţionale


Cuvintele - cod dintr-un cod convoluţional sistematic se pot reprezenta folosind
un graf arborescent infinit, cu noduri situate la o distanţă de n poziţii şi cu q k
descendenţi din fiecare nod. Codificarea unui mesaj revine la parcurgerea unui
drum ı̂n acest arbore.
Pentru simplificare, să considerăm un (n, 1) - cod convoluţional sistematic binar
(generalizarea este imediată) de lungime restrânsă N . El este complet caracterizat
prin n − 1 subgeneratori

g(1, j) = g0 (1, j)g1 (1, j) . . . gN −1 (1, j), (1 ≤ j ≤ n − 1).

Codul are un singur generator, anume


g(1) = 1g0 (1, 1)g0 (1, 2) . . . g0 (1, n − 1)0g1 (1, 1)g1 (1, 2) . . . g1 (1, n − 1)0 . . .
. . . 0gN −1 (1, 1) . . . gN −1 (1, n − 1)
Vom folosi notaţiile
g0 = 1g0 (1, 1) . . . g0 (1, n − 1),
gp = 0gp (1, 1) . . . gp (1, n − 1), (1 ≤ p ≤ N − 1).
Atunci g(1) = g0 g1 . . . gN−1 , iar gp este a p - a ramificaţie a lui g(1). Matricea
generatoare

a codului va 
fi 
- cu aceste notaţii: 
g∞ (1) g0 g1 g2 . . . gN−1 0 0 ...
  
 Dg∞ (1)   0 g0 g1 . . . gN−2 gN−1 0 ...  
  
G∞ =  D2 g (1)  =  0 0 g . . . g 
 ∞   0 N−3 gN−2 g N−1 . . . 

.. ..
. .
unde 0 este un bloc de n zerouri.
Fie a = a0 a1 a2 . . . secvenţa de informaţie şi c = c0 c1 c2 . . . cuvântul - cod cores-
punzător, unde cp = cp (1)cp (2) . . . cp (n). Are loc egalitatea
c = c0 c1 c2 . . . = aG∞ = a0 g∞ (1) + a1 Dg∞ (1) + a2 D2 g∞ (1) + . . . (4)
De aici rezultă că c0 = 0 dacă a0 = 0 şi c0 = g0 dacă a0 = 1. Cu alte cu-
vinte, codul poate fi partiţionat ı̂n două submulţimi de mărime egală: o submulţime
S0 conţine toate secvenţele care corespund lui a0 = 0 (deci toate cuvintele - cod
din S0 au acelaşi prefix 0); cealaltă submulţime S1 conţine toate cuvintele - cod
corespunzătoare lui a0 = 1 (deci toate cuvintele - cod din S1 au prefixul g0 ).
La rândul lui, S0 se ı̂mparte ı̂n două submulţimi egale S00 şi S01 . S00 corespunde
secvenţelor - cod pentru care a0 = a1 = 0 (deci toate cuvintele - cod din S00 ı̂ncep
cu 00). S01 conţine secvenţele cu a0 = 0, a1 = 1, deci cu prefixul 0g0 . Similar, S1
se partiţionează ı̂n S10 şi S11 , S10 fiind pentru a0 = 1, a1 = 0 (deci cuvintele - cod
din S10 au prefixul g0 g1 ); secvenţele din S11 ı̂ncep cu prefixul g0 (g0 + g1 ).
Acest procedeu continuă indefinit.
Deci cuvintele - cod pot fi aranjate ı̂ntr-un arbore cu noduri de n caractere şi
câte două ramificaţii din fiecare nod. O ramificaţie este marcată de un cod bloc
de n caractere, corespunzătoare unui caracter de informaţie particular, iar ı̂ntreaga
secvenţă corespunde unui drum prin arbore.
16.5. ARBORESCENŢA CODURILOR CONVOLUŢIONALE 191

0- 0
0- 0 -6
6 ? 1 - g0
0 - 0-
6 0 - g1
? 1 - g- 6
0
? 1 - g0 + g1
-
0 - g2
0 - g- 6
1
6 ? 1 - g0 + g2
? 1 - g-
0
0 - g1 + g2
? 1 - g0 + g1 -6
? 1 - g0 + g1 + g2

Operaţia de codificare poate fi privită atunci ca un proces ı̂n care este trasat un
drum particular ı̂n arbore, conform instrucţiunilor date de mesajul de informaţie.
Exemplul 16.11 Să considerăm (3, 1) - codul convoluţional binar cu N = 4, gene-
rat de g(1, 1) = 1011, g(1, 2) = 1101. Generatorul codului este
g(1) = 111 001 010 011, iar arborele de codificare
- 000
- 000 -6
? - 111
- 000 -6
6 - 001
? - 111 -6
? - 110
- 000 -
6 - 010
- 001 -6
6 ? - 101
? - 111 -
- 011
? - 110 -6
? - 100
-
- 011
- 010 -6
? - 100
- 001 -6
6 ? - 101 - - 010
6
? - 101
? - 111 -
- 001
- 011 -6
? - 110
? - 110 -6
- 000
? - 100 -6
? - 111

Dacă vom considera de exemplu mesajul de informaţie a = 1001 . . ., secvenţa -


cod generată va fi c = 111 001 010 100 . . ..
Această construcţie se poate extinde la un (n, k) - cod convoluţional sistematic binar.
Deoarece la momentul 0 există 2k secvenţe posibile de lungime k, toate cuvintele
- cod se pot partiţiona ı̂n 2k submulţimi S0 , S1 , . . . , S2k −1 . Toate secvenţele din Si
ı̂ncep cu acelaşi bloc, corespunzător aceluiaşi mesaj de informaţie. Fiecare Si se
ı̂mparte la rândul lui ı̂n 2k submulţimi, după tipul celui de-al doilea bloc de la tactul
1. Procesul continuă ı̂n mod similar până la epuizarea mesajului de informaţie.
192 PRELEGEREA 16. CODURI CONVOLUŢIONALE

16.6 Exerciţii
16.1 Construiţi un codificator pentru (2, 1) - codul convoluţional binar de polinom
generator g0 (X) = 1 + X + X 3 + X 4 + X 6 + X 7 + X 9 . Cât este N ? Codificaţi
mesajele 110, 0110, 1010.
16.2 Construiţi o matrice generatoare pentru codul definit anterior.
16.3 Construiţi un codificator pentru (2, 1) - codul convoluţional ternar de polinom
generator g0 (X) = 1 + 2X + 2X 3 .
Să se determine o matrice generatoare.
Să se codifice mesajele 102, 200, 0120.
16.4 Construiţi un codificator pentru un (3, 2) - cod convoluţional binar cu N = 2.
16.5 Codificatorul din Exemplul 16.8 are 5 elemente de ı̂nmagazinare. Construiţi
un codificator pentru acelaşi cod, care utilizează doar 4 elemente de ı̂nmagazinare.
16.6 Construiţi polinoamele generatoare ale codului convoluţional dat mai jos:
²¯ ²¯
-+ -+ -
6 ±° ±°
6 6
s- - - -
-6 6
²¯ ²¯?
s- - -+ - + -
±° ±°
-
? 6 ? 6 ?-
²¯ ²¯ ²¯
?- + -+ -+ -
6 ±° ±° ±°
6 -
²¯ 6
-+ -
6 ±°
6
? s- - - -

?
²¯ ?
²¯ ?
²¯
?- + -+ -+ -
±° ±° ±°
16.7 Construiţi o matrice generatoare pentru codul din exerciţiul anterior.
Codificaţi mesajul 11001.
16.8 Construiţi un codificator pentru (4, 3) - codul binar, de polinoame generatoare
g0 (X) = 1 + X + X 3 + X 5 + X 6 , g1 (X) = X + X 2 + X 3 + X 4 , g2 (X) = 1 + X 2 +
X 3 + X 5 + X 6.
16.9 Să se construiască matricea generatoare şi de control pentru (3, 2) - codul
convoluţional sistematic ternar de subgeneratori g(1, 1) = 1200, g(2, 1) = 2011.
Să se codifice mesajele 11220, 1012, 2222.
16.10 Aceeaşi problemă pentru (4, 2) - codul binar cu
g(1, 1) = 001, g(1, 2) = 110, g(2, 1) = 101, g(2, 2) = 111.
Să se codifice mesajele 1100, 011, 001100.
Să se construiască reprezentarea arborescentă.
16.11 Să se demonstreze formulele (2).
Bibliografie

[1] J. Adamek - Foundations of Coding, Wiley - Interscience, 1991;

[2] M. Blaum - A (16, 9, 6, 5, 4) error correcting dc-free block code, IEEE Transac-
tions on Information Theory, vol. 34, 1988, pp. 38-141;

[3] C. Carlet - Codes de Reed - Muller; Codes de Kerdok et de Preparata (teză de


doctorat), PARIS VI, 1990;

[4] G. Cullmann - Coduri detectoare şi corectoare de erori, Editura Tehnică, 1972;

[5] S. Guiaşu - Teoria Codurilor, Tipografia Universităţii Bucureşti, 1976;

[6] D.G. Hoffman, D.A. Leonard, C.C. Lindner, K.T. Phelps, C.A. Rodger, J.R.
Wall - Coding Theory; The Essentials, Marcel Dekker, Inc, 1991;

[7] B. Honary, G. Markarian - Trellis Decoding of Block Codes, A Parctical Ap-


proach, Kluwer Academic Publ., 1997;

[8] A. M. Kerdok - A class of low-rate non linear codes, Information and control,
20 (1972), 182-187;

[9] J.H. van Lindt - Coding Theory, Springer Verlag, 1971;

[10] J.H. van Lindt - Introduction to Coding Theory, Springer Verlag, 1982;

[11] W. E. Ryan - A Turbo Code Tutorial, IEEE Trans. Comm., pp. 1261- 1271,
Oct. 1996.

193
Prelegerea 17

Decodificarea codurilor
convoluţionale

17.1 Capacitatea de corectare a erorilor


Algoritmii de decodificare pentru codurile convoluţionale folosesc aceeaşi idee de la
codurile liniare: cuvântul primit este decodificat ı̂n cel mai apropiat cuvânt - cod,
ı̂n sensul distanţei Hamming.
Ideea este de a nu decodifica deodată tot cuvântul primit, ci pas cu pas, la fiecare
tact fiind decodificate n caractere (conţinutul unui buffer de ieşire) ı̂n k simboluri
(mărimea bufferului de intrare). Distanţa Hamming (notată cu dH ) pentru un (n, k)
- cod convoluţional se defineşte
dH (a(X), b(X)) = d(a0 a1 . . . an−1 , b0 b1 . . . bn−1 ).
Observaţie: În cele ce urmează vom continua să identificăm secvenţele de p + 1
caractere a = a0 a1 . . . ap cu polinoamele de gradul p a(X) = a0 + a1 X + . . . + ap X p .
Se va folosi adesea chiar notaţia (neambiguă) a(X) = a.
Fie deci a(X) mesajul de informaţie; el se codifică ı̂n v(X) = C(a(X)). Să
presupunem că se recepţionează u(X). La primul tact se determină cuvântul - cod
w(X) cu dH (u(X), w(X)) minim (cel mai apropiat cuvânt - cod), iar u0 u1 . . . un−1 se
transformă ı̂n w0 w1 . . . wn−1 . Dacă decodificarea este corectă, atunci s-au determinat
primele n caractere şi se pot găsi imediat ca-racterele de informaţie a0 a1 . . . ak−1
(conţinutul primei intrări). Se defineşte apoi
u(X) := u(X) − C(a0 + a1 X + . . . + ak−1 X k−1 )
(care aduce 0 pe primele n caractere ale cuvântului recepţionat), se ignoră primele
n caractere şi procedeul continuă inductiv.
Motivaţia constă ı̂n faptul că acum nu se lucrează cu v(X) = C(a(X)) ci cu
v(X) − C(a0 + a1 X + . . . ak−1 X k−1 ) = C(a(X) − a0 − a1 X − . . . − ak−1 X k−1 ) =
C(ak X k +ak+1 X k+1 +. . .) = C(X k (ak +ak+1 X +ak+2 X 2 +. . .)) = X n C(ak +ak+1 X +
ak+2 X 2 + . . .).
Exemplul 17.1 Să considerăm (2, 1) - codul convoluţional binar de polinom gene-
rator g0 (X) = 1 + X + X 3 . Cuvintele lui cod sunt

193
194PRELEGEREA 17. DECODIFICAREA 0 CODURILOR
00000000 . . . CONVOLUŢIONALE
g0 (X) 11010000 . . .
2
X g0 (X) 00110100 . . .
(1 + X 2 )g0 (X) 11100100 . . .
... ...
Dacă se primeşte - de exemplu - u = 11110001, vom determina cel mai apropiat
cuvânt - cod, care este (1 + X 2 + X 4 )g0 (X), adică 11101001. Primul grup de n = 2
biţi este 11, deci primul bit de informaţie (k = 1) este 1. Fie acum
u := u − C(1) = 11110001 − 11010000 = 00100001.
Se ignoră primele două simboluri din noul u şi se determină cel mai apropiat
cuvânt - cod de 100001; acesta este 000 . . . 0; deci al doilea grup cadru este 00 - adică
al doilea simbol de informaţie este 0.
Refacem u := u − X 2 C(0) = 00100001. Se şterg primele patru simboluri din u
şi se caută cel mai apropiat cuvânt - cod de 0001. Acesta este din nou 00 . . .. Deci
u se corectează ı̂n
C(1 + 0X + 0X 2 ) = 11000000.

Definiţia 17.1 Pentru un (n, k) - cod convoluţional se defineşte distanţa liberă prin

dlib = min{dH (C(a(X)), C(a0 (X)))|a0 a1 . . . ak−1 6= a00 a01 . . . a0k−1 }.

Similar observaţiei de la codurile liniare, dlib este cea mai mică pondere a unui cuvânt
- cod C(a00 (X)) cu proprietatea a000 a001 . . . a00k−1 6= 0. (s-a notat a00 (X) = a(X) − a0 (X)
unde a(X), a0 (X) sunt două mesaje de informaţie arbitrare distincte).
Exemplul 17.2 Reluând codul construit ı̂n Exemplul 17.1, acesta are dlib = 3,
deoarece g0 (X) are ponderea 3 şi orice cuvânt C(a0 + a1 X + . . .) cu a0 =
6 0 are
ponderea minim 3.

Propoziţia 17.1 Un cod convoluţional corectează t erori dacă şi numai dacă dlib >
2t.

Demonstraţie: Să presupunem dlib > 2t. La recepţia unui cuvânt v(X) cu cel mult t
erori, există un cuvânt - cod u(X) = C(a(X)) aflat la o distanţă Hamming minimă
de acesta: dH (u(X), v(X)) = s. Dacă u0 (X) = C(a0 (X)) este cuvântul - cod trimis
prin canal (recepţionat drept v(X)), din ipoteză dH (v(X), u0 (X)) ≤ t. Deci, cu
inegalitatea triunghiului, d(u(X), u0 (X)) ≤ s + t. Cum s este cea mai mică distanţă
Hamming, avem s ≤ t, deci d(C(a(X)), C(a0 (X))) ≤ s + t ≤ 2t < dlib . Din definiţia
distanţei libere rezultă că primele k simboluri din a(X) au drept cel mai apropiat
grup de k simboluri generat de cod grupul primelor k simboluri din a0 (X), ceea ce
permite decodificarea şi corectarea erorilor.
Pentru următoarele grupuri, procedeul decurge analog.
Invers, să presupunem dlib ≤ 2t şi fie u(X) = C(a(X)), u0 (X) = C(a0 (X)) cu
dH (u(X), u0 (X)) = dlib şi u0 . . . uk−1 6= u00 . . . u0k−1 . Fie i1 , i2 , . . . idlib toţi indicii i
pentru care ui 6= u0i . Construim
( următorul cuvânt v(X):
ui dacă ui = u0i sau i = i2s+1
vi = 0
ui dacă i = i2s
Avem dH (u(X), v(X)) ≤ dH (u0 (X), v(X)) ≤ t. Presupunem că a fost trimis
u0 (X) şi recepţionat v(X). Atunci eroarea, care a modificat cel mult t simboluri -
17.2. DECODIFOCAREA CODURILOR SISTEMATICE 195

poate conduce la o decodificare incorectă, deoarece u(X) este cuvântul cod cel mai
apropiat.
Deci, ı̂n această ipoteză, codul nu va corecta t erori. 2
Din analiza de sus rezultă că un parametru important pentru un cod convolu-
ţional este distanţa liberă, care specifică numărul maxim de erori care pot fi corec-
tate. Din nefericire ([1]), nu se cunoaşte nici o metodă analitică de construcţie de
coduri convoluţionale ”bune”, ı̂n sensul unei maximizări a dlib pentru n şi k date.
Folosind calculatorul, au fost găsite ı̂nsă o serie de astfel de coduri bune. Listăm
câteva din ele pentru cazul binar şi k = 1:

n dlib g0 (X)
2 5 110111 = 1 + X + X 3 + X 4 + X 5
2 6 11110111
2 7 1101011011
2 8 110111011011
2 10 11011111001011
2 10 111011110111
3 8 111011111
3 10 111011101111
3 12 111011101011111
4 10 111101111111
4 13 1111011110011111

17.2 Decodifocarea codurilor sistematice


Păstrând similitudinea cu codurile liniare, să folosim la codurile sistematice ideea
de decodificare bazată pe calculul sindromului.
Fie un (n, k) - cod convoluţional sistematic definit prin matricea generatoare G∞
şi cea de control H∞ , construite pe baza subgeneratorilor de lungime N g(i, j), 1 ≤
T
i ≤ k, 1 ≤ j ≤ n − k (a se vedea prelegerea anterioară). Din relaţiile G∞ H∞ = 0 şi
T
c = aG∞ se obţine cH∞ = 0.
Să presupunem că s-a recepţionat secvenţa (infinită) r = c + e unde e este o
secvenţă eroare. Ca şi la codurile liniare, sindromul va fi
T T T T
s = rH∞ = cH∞ + eH∞ = eH∞ .
Secvenţa recepţionată se poate structura ı̂n blocuri de n caractere:
r = r0 (1) . . . r0 (n) r1 (1) . . . r1 (n) . . . rp (1) . . . rp (n) . . .
| {z }| {z } | {z }
r0 r1 rp
Similar se segmentează sindromul ı̂n blocuri de lungime n − k:
s = s0 (1) . . . s0 (n − k) s1 (1) . . . s1 (n − k) . . . sp (1) . . . sp (n − k) . . .
| {z }| {z } | {z }
s0 s1 sp
Vom avea
k
X k
X k
X
sp (j) = rp (k + j) − rp (i)g0 (i, j) − rp−1 (i)g1 (i, j) − . . . − rp−N +1 (i)gN −1 (i, j),
i=1 i=1 i=1
1 ≤ j ≤ n − k.
196PRELEGEREA 17. DECODIFICAREA CODURILOR CONVOLUŢIONALE

Această relaţie se poate scrie şi sp (j) = rp (k + j) − Ap (j), unde


N
X −1 X
k
Ap (j) = rp−t (i)gt (i, j) este rezultatul codificării secvenţei rp (1) . . . rp (k) folo-
t=0 i=1
sind matricea G∞ , ı̂n funcţie de rp−1 (1), . . . , rp−1 (k), . . . , rp−N +1 (1) . . . , rp−N +1 (k).

Din aceste relaţii, se poate deduce o formulă pentru calculul elementelor sindro-
mului, ı̂n funcţie de caracterele secvenţei - eroare:
k
X k
X k
X
sp (j) = ep (k + j) − ep (i)g0 (i, j) − ep−1 (i)g1 (i, j) − . . . − ep−N +1 (i)gN −1 (i, j),
i=1 i=1 i=1
1 ≤ j ≤ n − k,
unde e = e0 (1) . . . e0 (n) e1 (1) . . . e1 (n) . . . ep (1) . . . ep (n) . . .
| {z }| {z } | {z }
e0 e1 ep
este secvenţa de eroare - tip, segmentată ı̂n blocuri de lungime n. Deci, pentru orice
j = 1, 2, . . . , n − k, putem scrie:
k
X
s0 (j) = e0 (k + j) − e0 (i)g0 (i, j),
i=1
Xk k
X
s1 (j) = e1 (k + j) − e1 (i)g0 (i, j) − e0 (i)g1 (i, j),
i=1 i=1
..
.
N
X −1 X
k
sN −1 (j) = eN −1 (k + j) − ep (i)gN −p−1 (i, j),
p=0 i=1
N
X −1 X
k
sN (j) = eN (j) − ep+1 (i)gN −p−1 (i, j),
p=0 i=1
..
.
N
X −1 X
k
sN +m (j) = eN +m (k + j) − ep+m−1 (i)gN −p−1 (i, j)
p=1 i=1
..
.
De remarcat că secvenţa e0 afectează numai primele N componente ale sin-
dromului: s0 , s1 , . . . , sN−1 , deoarece apare numai ı̂n primele N (n − k) ecuaţii din
sistemul de sus.
Pentru corectarea erorilor, se determină iniţial secvenţa e0 ; după aceasta, sindro-
mul se recalculează scăzând din el componentele lui e0 . Această operaţie se numeşte
rearanjarea sindromului. În paralel, e0 se foloseşte la corectarea primelor n caractere
recepţionate; operaţia se realizează identic cu cea de la codurile liniare.
În continuare, se va folosi un nou sindrom, anume:
s00 (j) = 0
m−1
XX k
s0m (j) = em (k+j)− em−p (i)gp (i, j), 1 ≤ m ≤ N −1, 1 ≤ j ≤ n−k
p=0 i=1
s0N +m (j) = sN +m (j), ∀m ≥ 0.
De remarcat că secvenţa e1 figurează numai ı̂n expresiile lui s01 , s02 , . . . , s0N unde
s0i = s0i (1) . . . s0i (n−k), 1 ≤ i ≤ N . Deci aceste componente apar ı̂n N (n−k) ecuaţii.
17.3. ALGORITMUL VITERBI 197

După determinarea lui e1 se corectează blocul r1 din secvenţa recepţionată, apoi se


recalculează sindromul, ş.a.m.d.

17.3 Algoritmul Viterbi


Cel mai cunoscut algoritm de decodificare pentru codurile convoluţionale aparţine
lui Viterbi şi a fost folosit pe scară largă ı̂n comunicaţiile spaţiale. Astfel - ca să
dăm numai un exemplu, staţia Voyager ı̂n misiunea sa din 1974 spre Marte, Saturn
şi Jupiter, a folosit pentru transmisii un (2, 1) - cod convoluţional binar de polinom
generator g0 (X) = 1 + X + X 2 + X 5 + X 6 + X 7 + X 8 + X 10 + X 11 + X 12 .
În descrierea algoritmului Viterbi vom folosi o reprezentare ı̂n reţea a codurilor
convoluţionale, care reia sub o formă finită reprezentarea arborescentă. Din nou, ne
vom mărgini la construcţii pentru (n, 1) - coduri convoluţionale binare, extensia la
cazul general fiind imediată.
O diagramă reţea este un graf orientat infinit, care are ca noduri stările unui
circuit liniar la fiecare moment (tact). Un nod marcat care corespunde unei stări
S la momentul i, este legat direct cu alte două noduri, corespunzătoare stărilor
circuitului la momentul i + 1: S0 (pentru intrarea 0) respectiv starea S1 (pentru
intrarea 1). Grafic, arcul S −→ S0 va fi totdeauna trasat sub arcul S −→ S1 . Fiecare
arc este marcat cu secvenţa de ieşire a circuitului pentru intrarea corespunzătoare.
Exemplul 17.3 (2, 1) - codul convoluţional definit de circuitul liniar
6
-
6
²¯
s- -+ -
±° 6
? -6

are două stări posibile (după conţinutul elementului de ı̂nmagazinare): 0 şi 1.


Pentru intrarea i (i = 0, 1) ieşirea este secvenţa
ii dacă starea este 0,
i(1 − i) dacă starea este 1.
Diagrama reţea a codului este:
6
s s 10 -s 10 -s 10 -s
1
¡@
µ µ@
¡ µ@
¡ µ
¡
¡ @01 ¡ @01 ¡ @01 ¡
¡ @¡ @¡ @¡
¡ ¡@ ¡@ ¡@
11 ¡ 11 ¡
@ 11 ¡ @ 11 ¡ @
0 s
¡ -s¡ @

- s R
@
-s¡ R
@
-s
00 00 00 00

-
0 1 2 3 4 ...

Exemplul 17.4 (2, 1) - codul convoluţional (de memorie N = 2) reprezentat prin


circuitul liniar
²¯ ²¯
198PRELEGEREA 17. DECODIFICAREA
-+ -CODURILOR
+ - CONVOLUŢIONALE
±° ±° 6 6
6 6
?
-
s- -
-
6
?
²¯
? -+ -
±°
are patru stări: 00, 01, 10 şi 11 (după conţinuturile elementelor de ı̂nmagazinare).
Din starea S = 00 se ajunge la S0 = 00 dacă intrarea este 0, sau ı̂n S1 = 10
dacă intrarea este 1. Ieşirile corespunzătoare sunt 00 respectiv 11.
Analog, dacă S = 10, atunci S0 = 01 (intrare 0 ieşire 10) şi S1 = 11 (intrare 1
ieşire 01), etc. Se ajunge la diagrama reţea următoare:

6
s 10 -s 10 -s 10 -s
11
¢¢̧@ ¢ ¢̧ @ ¢ ¢̧ @ ¢¢̧
¢ @ ¢ @ ¢ @ ¢
¢ @ 01 ¢ @ 01 ¢ @ 01 ¢
¢ @ ¢ @ ¢ @ ¢
¢ @¢ @¢ @¢
¢ ¢ @ ¢ @ ¢ @
01 ¢ s ¢ @
Rs
@ ¢ @
Rs
@ ¢ @Rs
@
¢ µA@
¡
¡ ¢ ¡
µA@
¡ ¢ ¡¡
µA@ ¢ ¡µ
¡
¢ ¡ A@ ¢ ¡ A@ ¢ ¡ A@ ¢ ¡
¢ ¡ 10 A ¢@ ¡ 10 A ¢@ ¡ 10 A ¢@ ¡10
01
¢ ¡ 01
¢A ¡@
01
¢A ¡@
01
¢A ¡ @
¢ ¡ ¢ A¡ @ ¢ A¡ @ ¢ ¡A @
¢¡ ¢¡ A 00 @ ¢¡ A 00 @ ¢¡ A 00 @
10 ¢s¡ s¢¡ 11A @
R¢¡
@ s A
11 @
@
R s¡
¢ 11A @Rs
@
¡
µ
¡ µ
¡
¡ A ¡
µ
¡ A ¡¡
µ A ¡µ
¡
¡ ¡ A ¡ A ¡ A ¡
¡ ¡ ¡A ¡A ¡A
11
¡ 11
¡ 11
¡ A 11
¡ A 11
¡ A
¡ ¡ ¡ A ¡ A ¡ A
¡ ¡ ¡ A ¡ A ¡ A
s
¡ -s¡ -s¡ - AAU¡s - AAU¡s - AAUs
00 00 00 00 00 00

0 1 2 3 4 5 ...

Orice drum prin reţea, care pleacă din momentul 0 conduce - prin citirea marcajelor
arcelor - la un cuvânt - cod. De exemplu, pentru intrarea 100110, codul generat este
C(100110) = 111000011001 (reamintim, spre dreapta pleacă totdeauna două arce,
iar arcul pentru intrarea 0 este situat sub arcul pentru intrarea 1).
Invers, orice cuvânt - cod reprezintă marcajul unui drum ı̂n reţea.
17.3. ALGORITMUL VITERBI 199

Să construim acum algoritmul de decodificare Viterbi.


La recepţia unui cuvânt v = v0 v1 v2 . . . vom căuta construcţia unui drum ı̂n
reţea, cât mai apropiat de v.
Pentru fiecare moment i şi stare S vom lista drumurile active prin reţea până la
starea S la momentul i. Un drum este activ dacă discrepanţa sa este minimă (prin
discrepanţă se ı̂nţelege distanţa Hamming dintre cuvântul generat de drumul prin
arbore şi cuvântul de aceeaşi lungime primit la intrare). Vom adnota fiecare stare
la momentul i cu discrepanţa drumului său activ. Pentru calculul ei se poate folosi
o formulă recursivă definită astfel:
Fie d(S → S 0 ) distanţa Hamming dintre marcajul arcului S → S 0 şi secvenţa de
n caractere primită, iar di(S) discrepanţa stării S. Atunci
di(S 0 ) = min0 {di(S) + d(S → S 0 )} (1)
S→S

Algoritmul va avea o durată de funcţionare finită numită fereastră de decodificare,


pe care o notăm cu b (deci va funcţiona b tacţi).

Algoritmul Viterbi:
Intrare: Secvenţa v0 v1 . . . , vp = vp,0 vp,1 . . . vp,n−1 ;
Algoritm:

1. Fie p := 0 şi S0 starea iniţială a reţelei (starea cu toate elementele de


ı̂nmagazinare 0);

2. Se marchează di(S0 ) = 0;

3. for i := 1 to b do
Pentru toate stările S accesibile la momentul p+i se determină
di(S) folosind formula (1), şi se listează toate drumurile active care
duc la S.

4. Dacă toate drumurile active la momentul p + b ı̂ncep cu acelaşi arc


S0 → S1 , secvenţa de intrare vp se corectează ı̂n marcajul up al acestui
prim arc (şi se decodifică ı̂n primul caracter al lui S1 ). Altfel, eroarea
nu este corectabilă, STOP.

5. p := p + 1, S0 := S1 , salt la pasul 3.

Exemplul 17.5 Să reluăm codul descris ı̂n Exemplul 17.4, ı̂mpreună cu diagrama
sa de reţea. Presupunem că s-a primit secvenţa v = 10010100101100000 . . . Deci
v0 = 10, v1 = 01, v2 = 01, v3 = 00, v4 = 10, v5 = 11, v6 = 00 . . ..
Vom lucra cu o fereastră de decodificare b = 7. Detaliem grafic numai procedura
de decodificare a primului bloc (cazul p = 0).
200PRELEGEREA 17. DECODIFICAREA CODURILOR CONVOLUŢIONALE

i=0: s 0
s
©* 1
©
i=1: s© -s 1
s 1
¡
µs
¡©
* 3
s © s
©
¡ 2
©
* ©
*
i=2: s©©-s©©-s 2
sH s 2
µ H¡
¡ µ
j
H
¡ ¡ s 1
s
¡ s
¡ s 3
©
* ©
* *
©
i=3: s©©-s©©-s©©-s 3
s s -s 3
H HH
µ H¡
¡ µ
¡ ¡ sH H
j
H js 3
s
¡ s
¡ @ Hjs
H
©©
* ©© * @ 1
i=4: s© -s© -s -s @ R
-s 3
sH sH -s -s 3
µ H¡
¡ js HH
µ µs
¡
¡ ¡H j
HH sH¡ *
© 1
s
¡ s
¡ ©
H

H s H
© js 4
©©
* ©© * ©*
©
i=5: s© -s© -s -s -s© -s 4
sH sH -s 4
µ HH
¡ js ¡s HH
µ js
¡ H ¡
©*H
© 4
s
¡ HH
js¡
© @ Hjs
H
©
* @ 3
i=6: s©© @
Rs 3
s sH s 4
H
µ HH
¡ js ¡s HH
µ ¡
µ
js ¡ s
¡ H ¡©
*H ©
* 4
s
¡ HH
j¡s © @HH
© j@s © s
©
¡ 3
©©
* @
@
R© ©©
@*
i=7: s
© s @Rs 4

Se ajunge la concluzia că toate arcele active au acelaşi ı̂nceput: arcul marcat cu
11. Deci primul bloc v0 = 10 se decodifică ı̂n 11, după care se ia ca nod iniţial
S0 = 10 şi procesul se repetă.
De remarcat că pentru o fereastră de decodificare b = 5, eroarea nu s-ar fi putut
corecta (primul arc nu este unic).

În această prezentare a algoritmului Viterbi, apare o problemă: cât de mare este
fereastra b ? Cât de departe mergem prin diagrama reţea până să fim siguri că totuşi
este posibilă decodificarea şi corectarea erorilor ?
Pentru aceasta să refacem sub o formă finită reprezentarea diagramelor - reţea.
Din definiţia dată ı̂n Prelegerea 16 se observă că dacă g0 (X), g1 (X), . . . ,
gn−1 (X) sunt polinoamele generatoare şi a(X) un mesaj de informaţie, codificarea
poate fi scrisă ca o secvenţă de n componente (infinite)
c(X) = (a(X)g0 (X), a(X)g1 (X), . . . , a(X)gn−1 (X))
ale căror caractere se transmit ı̂n paralel, ı̂n ordinea crescătoare a puterilor lui
X.
17.3. ALGORITMUL VITERBI 201

Exemplul 17.6 Fie (2, 1)- codul generat de g0 (X) = 1 + X + X 3 şi g1 (X) = 1 + X.
Mesajul a(X) = 1 + X 2 este codificat ı̂n
c(X) = ((1 + X 2 )(1 + X + X 3 ), (1 + X 2 )(1 + X)) = (1 + X + X 2 + X 5 , 1 + X +
X + X 3 ).
2

Deci cuvântul cod este c = 11 11 11 01 00 10 00 . . ..


Vom construi un translator (diagramă de translatare) asociat unui (n, 1) - cod
convoluţional astfel:
Stările translatorului sunt N - tupluri binare, fiecare stare reprezentând o situaţie
posibilă a celor N elemente de ı̂nmagazinare. O stare s1 . . . sN −1 sN este legată direct
prin arcul marcat x1 . . . xn de starea is1 . . . sN −1 , (i = 0, 1) dacă ı̂n circuitul liniar
corespunzător codului, intrarea i conduce la modificarea conţinuturilor elementelor
de ı̂nmagazinare, din (s1 , . . . , sN ) ı̂n (i, s1 , . . . , sN −1 ) şi are ca efect ieşirea x1 . . . xn .
Exemplul 17.7 Reţeaua codului definit ı̂n Exemplul 17.3 poate fi reprezentată sub
formă de diagramă de translatare astfel:
¾ ²¯ 11 -²¯ -
00 ? -±°0¾ 1 ¾ ?10
±°
01
Pentru codul din Exemplul 17.4, reprezentarea finită este:
²¯ ²¯ -
10 Q 01 - 11 10
±° ±° ¾ ?
6Q
kQ
QQ
11 00QQ
Q 10
Q 01
Q Q
¾ ²¯ QQ²¯?
QQ
s
00 ¾
00 ? -±°
11 01
±°
De remarcat că pe fiecare arc este suficient să marcăm doar secvenţa de ieşire;
caracterul de intrare este reprezentat de primul caracter al stării ı̂n care intră arcul
respectiv.

Definiţia 17.2 Se defineşte lungimea unui drum ca fiind numărul de arce care
formează acel drum.
Ponderea unui drum este suma ponderilor arcelor care formează drumul.

Reamintim, ponderea unui cuvânt este numărul de caractere nenule din cuvântul
respectiv.
Conform Definiţiei 17.1, distanţa liberă a unui cod este ponderea nenulă minimă
a unui cuvânt cod - deci a unei secvenţe care marchează un drum prin diagrama de
translatare.
Propoziţia 17.2 Distanţa liberă a unui (n, 1) - cod convoluţional este egală cu pon-
derea nenulă minimă a unui ciclu care trece prin starea iniţială 00 . . . 0 a diagramei
de translatare a codului.
Demonstraţie: Este imediată.
" #
dlib − 1
Fie S0 = 00 . . . 0 starea iniţială. Pentru orice t, 1 ≤ t ≤ , se de-
2
fineşte d(t) ca fiind cel mai mic număr ı̂ntreg pozitiv p cu proprietatea că orice
202PRELEGEREA 17. DECODIFICAREA CODURILOR CONVOLUŢIONALE

drum S0 → S1 → . . . Sp−1 , (S0 6≡ S1 ) are ponderea mai mare de 2t. Pentru de-
terminarea algoritmică a lui d(t) se poate adapta imediat un algoritm similar din
teoria grafurilor.
Deoarece codul este liniar, valoarea lui d(t) se păstrează pentru orice stare a
diagramei de translatare.
Acum, ı̂n condiţiile că pot apare maxim t erori, algoritmul Viterbi va funcţiona
corect pentru o fereastră b = d(t) (datorită Propoziţiei 17.1).
Reluarea algoritmului Viterbi la fiecare pas cu fereastra maximă d(t) este ı̂nsă
destul de costisitoare ca timp; de aceea, practic, se foloseşte o fereastră mobilă
b ≤ d(t) şi algoritmul trece la faza de decodificare atunci când toate drumurile
active selectate au acelaşi prim arc. Dacă s-a ajuns la b = t(b) şi nu s-a selectat un
prim arc comun, algoritmul eşuează.

17.4 Coduri convoluţionale catastrofice


Dacă este definit neglijent, un cod convoluţional poate conduce la următoarea situa-
ţie, complet nefericită: un mesaj ı̂n care a fost perturbat un număr mic de caractere
generează prin decodificare o infinitate de erori.
Pentru a studia acest caz, considerăm din nou numai codurile (n, 1) - convoluţio-
nale binare. Pentru a vedea ı̂n ce constă problema, să luăm următorul exemplu:

Exemplul 17.8 Fie (2, 1) - codul convoluţional binar, cu polinoamele generatoare


g0 (X) = 1 + X 3 , g1 (X) = 1 + X + X 2 . Diagrama sa de translatare este
º· º·
100 10 - 110
¹¸ ¹¸
££± 6B ££± B
£ B £ B
11£ B01 00 £ B11
£ B £ B
º· º·BN º· º·BN
¾ £ 10 - £ -
00?-000 01 010 ¾ 101 00 111 ¾ ?01
¹¸ ¹¸11 ¹¸ ¹¸
BM £ BM £
B £ B £
10B £01 00B £10
B £ B £
º·B £°£ º·B ?£°£
001 ¾ 11 011
¹¸ ¹¸
Să presupunem că s-a transmis mesajul de informaţie a = 00 . . ., căruia ı̂i
corespunde cuvântul - cod nul c = 0000 . . .. La recepţie s-a primit un cuvânt cu
primele trei simboluri greşite: v = 111000 . . .. Decodificarea sa nu ridică nici o
problemă, acesta fiind de asemenea cuvânt - cod, care marchează drumul prin stările
000 − 100 − 110 − 011 − 101 − 110 − . . ..
Deci, ı̂n ipoteza generală din Teoria Codurilor (cea a decodificării cele mai proba-
bile), nu au apărut erori, şi mesajul decodificat este a0 = 110110110 . . ., care diferă
de a ı̂ntr-o infinitate de poziţii.
În acest mod, modificarea doar a primelor trei caractere a dus la situaţia ı̂n care
aceste erori se propagă ı̂ntr-o secvenţă infinită.
17.5. EXERCIŢII 203

Se observă din acest exemplu că tot necazul provine din faptul că diagrama conţine
două cicluri distincte cu ieşirea 0: 000 − 000 şi 110 − 011 − 101 − 110.

Definiţia 17.3 Un cod convoluţional se numeşte catastrofic dacă diagrama sa de


translatare conţine două cicluri distincte de pondere zero.

Observaţie: Orice cod convoluţional conţine un ciclu de pondere zero, anume bucla
care pleacă şi intră ı̂n starea iniţială. Reamintim, ponderea unui drum este suma
ponderilor arcelor sale.

Teorema 17.1 Un (n, 1) - cod convoluţional este catastrofic dacă şi numai dacă
cmmdc(g0 (X), . . . , gn−1 (X)) 6= 1.

Demonstraţie: Teorema rămâne valabilă dacă o demonstrăm pentru cazul n = 2. Fie


deci un (2, 1) - cod convoluţional, de polinoame generatoare g0 (X), g1 (X). Pentru
a marca un ciclu, un cuvânt de intrare trebuie să fie de forma b(X) + X r a(X) · (1 +
X p + X 2p + . . .), cu grad(a(X)) < p. Pentru a elimina din discuţie bucla din starea
S0 , vom considera a(X) 6≡ 0. Să presupunem că ı̂n diagrama de translatare a codului
există un ciclu de lungime p şi pondere 0. Atunci a(X)·g0 (X) şi a(X)·g1 (X) trebuie
să se dividă cu 1 + X p , deci a(X) · g 0 (X) (unde g 0 (X) = cmmdc(g0 (X), g1 (X))), se
divide cu 1 + X p .
Dacă g 0 (X)) = 1, se ajunge la o contradicţie (deoarece a(X) are grad mai mic
decât p şi nu este polinomul identic nul). Deci grad(g 0 (X)) ≥ 1. În acest caz, toate
mesajele de informaţie b(X) + a(X) [g 0 (X)]t (1 + X p + X 2p + . . .), (t ≥ 0) se codifică
identic, ceea ce va conduce la imposibilitatea decodificării.
Reciproca se demonstrează similar. 2

17.5 Exerciţii
17.1 Determinaţi dlib pentru fiecare din codurile următoare:
(a) g0 (X) = 1 + X 2 , g1 (X) = 1 + X + X 2 ;
(b) g0 (X) = 1 + X + X 2 + X 3 , g1 (X) = 1 + X 2 + X 3 ;
(c) g0 (X) = 1 + X 3 + X 4 , g1 (X) = 1 + X + X 2 + X 4 .

17.2 Folosind (2, 2) - codul convoluţional definit ı̂n Exemplul 17.4, şi fereastra de
decodificare b = 7, decodificaţi (cât este posibil) secvenţele
v = 01000001000 . . .
v = 11000110010010001110010 . . .

17.3 Trasaţi diagrama reţea a (2, 1) - codului convoluţional generat de g0 (X) =


1 = X 2 + X 3 + X 4 . Folosiţi algoritmul Viterbi pentru decodificarea secvenţei v =
1000001000001000 . . .

17.4 Fie (2, 1) - codul generat de g0 (X) = 1 + X + X 2 + X 3 , g1 (X) = 1 +


X 2 + X 3 . Decodificaţi primele 4 caractere de informaţie ale cuvântului recepţionat
c = 11000000 . . . pentru
204PRELEGEREA 17. DECODIFICAREA CODURILOR CONVOLUŢIONALE

b = 2, b = 3, b = 4.

17.5 Generalizaţi conceptul de diagramă reţea la (n, k) - coduri.


Trasaţi reţeaua (2, 2) - codului definit de circuitul liniar:
²¯ ²¯
- + - + -
6 ±° ±°
6 6

s- -
6
6
?
²¯ ²¯
- ?- + -+ -
±° ±°²¯?
- + -
6 ±°
? s - - 6
6
? -

17.6 Generalizaţi noţiunea de diagramă de translatare pentru (n, k) coduri binare.


Construiţi diagrama de translatare a codului definit ı̂n exerciţiul anterior.

17.7 Demonstraţi Propoziţia 17.2,

17.8 Pentru codurile definite " ı̂n Exerciţiul


# 17.1, determinaţi diagramele de trans-
dlib − 1
latare şi d(t) pentru 1 ≤ t ≤ .
2
" #
dlib − 1
17.9 Ce se ı̂ntâmplă dacă se ı̂ncearcă să se determine d(t) pentru t > ?
2

17.10 Construiţi un algoritm


" pentru
# determinarea lui d(t) ı̂n cazul unui (n, 1) -
dlib − 1
cod convoluţional (1 ≤ t ≤ dat).
2

17.11 Pentru fiecare din codurile următoare, decideţi dacă sunt catastrofice sau nu.
În caz afirmativ, determinaţi ciclurile de pondere 0.
(a) g0 (X) = 1 + X, g1 (X) = 1 + X + X 2 + X 3 ;
(b) g0 (X) = 1 + X + X 4 , g1 (X) = 1 + X 2 + X 4 ;
(c) g0 (X) = 1 + X + X 2 , g1 (X) = 1 + X + X 3 + X 4 .
Bibliografie

[1] J. Adamek - Foundations of Coding, Wiley - Interscience, 1991;

[2] L. Bahl, J. Cocke, F. Jelinek, J. Raviv - Optimal decoding of linear codes for
minimizing symbol error rate, IEEE Inf. Theory, pp. 284-287, Martie 1974;

[3] M. Blaum - A (16, 9, 6, 5, 4) error correcting dc-free block code, IEEE Transac-
tions on Information Theory, vol. 34, 1988, pp. 38-141;

[4] C. Carlet - Codes de Reed - Muller; Codes de Kerdok et de Preparata (teză de


doctorat), PARIS VI, 1990;

[5] G. Cullmann - Coduri detectoare şi corectoare de erori, Editura Tehnică, 1972;

[6] S. Guiaşu - Teoria Codurilor, Tipografia Universităţii Bucureşti, 1976;

[7] D.G. Hoffman, D.A. Leonard, C.C. Lindner, K.T. Phelps, C.A. Rodger, J.R.
Wall - Coding Theory; The Essentials, Marcel Dekker, Inc, 1991;

[8] B. Honary, G. Markarian - Trellis Decoding of Block Codes, A Practical Ap-


proach, Kluwer Academic Publ., 1997;

[9] A. M. Kerdok - A class of low-rate non linear codes, Information and control,
20 (1972), 182-187;

[10] J.H. van Lindt - Coding Theory, Springer Verlag, 1971;

[11] J.H. van Lindt - Introduction to Coding Theory, Springer Verlag, 1982;

[12] W.E.Ryan - A Turbo Code Tutorial, IEEE Trans. comm. pp. 1261-1271, Oct.
1996;

205
Prelegerea 18

Coduri - tablou

18.1 Definirea codurilor tablou


În Prelegerea 3 au fost definite codurile - produs. Deşi construcţia prezentată era
cunoscută din anii 0 60, dezvoltarea acestei clase de coduri a fost explozivă abia după
trei decenii, odată cu introducerea pe piaţă a telefoniei mobile. Acum s-a arătat că
orice cod - bloc poate fi generat finit recursiv, folosind o variantă de coduri produs.
Să considerăm o clasă particulară de coduri - produs binare, ı̂n care n1 = k1 +
1, n2 = k2 + 1 (deci singurul simbol de control este bitul de control al parităţii).
Acest cod este generat de produsul Kronecker a două matrici de forma
 
1 0 0 ... 0 1
 
 0 1 0 ... 0 1 
Gp,p+1 
= ..  (1)

 . 
0 0 0 ... 1 1
unde p = k1 , k2 .
Un astfel de (n1 ·n2 , k1 ·k2 ) - cod are distanţa d = d1 ·d2 = 2·2 = 4, deci corectează
o eroare şi detectează două erori. Chiar dacă ı̂n scrierea liniară a cuvintelor - cod
ultimul simbol de control se poate elimina (el este de fapt suma modulo 2 a biţilor
de control de pe ultima linie şi coloană) distanţa se reduce la 3, deci capacitatea de
corectare a unei erori rămâne.
Exemplul
à !18.1 Fie un (3, 2) - cod binar sistematic, generat de matricea G =
1 0 1
. Codul produs (3, 2)(3, 2) = (9, 4) va avea ca matrice generatoare
0 1 1
 
1 0 1 0 0 0 1 0 1
 0 1 1 0 0 0 0 1 1 
 
G0 = G × G =  
 0 0 0 1 0 1 1 0 1 
0 0 0 0 1 1 0 1 1
Dacă a = 1001 este un mesaj de informaţie, el se codifică ı̂n
x = aG0 = 101011110, sau – folosind forma matricială:
1 0 1
x = 0 1 1 = 101011110
1 1 0
caracterele de control fiind subliniate, iar cuvântul - cod este transmis linie cu linie.

193
194 PRELEGEREA 18. CODURI - TABLOU

18.2 Structura de reţea a codurilor tablou


În cadrul codurilor convoluţionale s-a definit o structură de reţea pentru facilitarea
codificării, decodificării, detectării şi corectării de erori (Prelegerea 17). Această
structură se poate extinde cu mici modificări şi la codurile liniare.
Fie C un (n, k) - cod liniar care se poate reprezenta printr-un cod - tablou. Lui
i se asociază un graf orientat cu arce marcate. Vârfurile grafului sunt partiţionate
ı̂n coloane V0 , V1 , . . . , VNc −1 (Nc ≤ n + 1). O coloană Vi conţine mulţimea stărilor
la care se poate ajunge la momentul i. Fiecare arc U pleacă dintr-o stare qj ∈ Vi şi
ajunge la o stare qm ∈ Vi+1 (i ≥ 0); ı̂n acest caz, qm este succesorul lui qj , iar qj este
predecesorul lui qm . Arcul este marcat cu o pereche δ(U )/λ(U ), unde δ(U ) ∈ Zq∗ este
un mesaj de informaţie, iar λ(U ) ∈ Zq∗ este mesajul - cod corespunzător (de obicei
ele se reduc la câte un singur caracter).
Proprietăţi:
(a) V0 = {q0 }, VNc −1 = {qNc −1 }; deci, orice reţea pleacă dintr-o stare unică q0
(rădăcina) şi ajunge de asemenea ı̂ntr-o stare unică qNc −1 (ţinta);
(b) Orice stare este accesibilă din rădăcină prin cel puţin un drum;
(c) Din orice stare se poate ajunge la ţintă prin cel puţin un drum.
Numim drum prin reţea un drum de la rădăcină la ţintă. Printr-o reţea se pot
cataloga toate cuvintele unui cod liniar reprezentabil sub formă de cod - tablou.
Orice cuvânt - cod corespunde unui drum unic prin reţea. Deci o astfel de reţea va
conţine q k drumuri distincte. Fiecare astfel de drum are două marcaje:
(i) concatenarea marcajelor de informaţie δ(U ) ale fiecărui arc U al drumului;
această secvenţă formează mesajul de informaţie care se codifică.
(ii) concatenarea marcajelor λ(U ) ale fiecărui arc U al drumului; ele formează
cuvântul care codifică secvenţa de informaţie.
În acest fel, operaţia de codificare sau decodificare (fără corectare de erori) se
reduce pentru fiecare mesaj de informaţie (cod) la determinarea acelui drum prin
reţea, marcat de mesajul respectiv.
Să considerăm numai (n1 · n2 , k1 · k2 ) - coduri - tablou binare (generalizarea la
cazul nebinar se face fără probleme deosebite). Pentru aceste coduri se pot construi
evident mai multe structuri de reţea; vom considera aici numai reţele cu un număr
minim de stări pe fiecare coloană. Construcţia unei astfel de reţele va necesita
Ns = 2min{k1 ,k2 }
stări (reamintim, aici ki = ni − 1, i = 1, 2). Procedura de generare ([8]) a reţelei
este:
18.2. STRUCTURA DE REŢEA A CODURILOR TABLOU 195

1. Fie n1 = min{n1 , n2 } (pentru cazul invers se procedează similar);

2. Se determină numărul Ns de stări şi numărul Nc de coloane prin relaţiile


Ns = 2n1 −1 , Nc = n2 + 1;

3. Pentru fiecare coloană Vp (0 ≤ p ≤ Nc −1) se notează elementele (stările)


sale prin (A)p = (a1 a2 . . . ak1 )p , unde ai ∈ Z2 ;

4. Rădăcina reţelei este (00 . . . 0)0 , iar scopul este (00 . . . 0)Nc −1 ;

5. Pentru orice pereche de stări (A, B) ∈ Vp × Vp+1 (0 ≤ p < Nc − 2), se


marchează arcul corespunzător cu δp (A, B)/λp (A, B) definite δp (A, B) =
(A)p + (B)p+1 , λp (A, B) = δp (A, B)c1 , unde c1 este bitul de paritate al
secvenţei δp (A, B) iar suma se realizează ı̂n Z2 .

6. Arcele care leagă stările A ∈ VNc −2 de ţintă au δNc −2 (A, B) =


², λNc −2 (A, B) = (A)Nc −2 c1 unde c1 este bitul de paritate al secvenţei
(A)Nc −2 care defineşte starea A.

Există 2k1 ·k2 drumuri distincte prin reţea, fiecare corespunzând unui cuvânt - cod
unic. Procedura poate fi extinsă uşor la codurile produs cu mai multe simboluri de
control.
Exemplul 18.2 Să construim reţeaua asociată codului tablou (3, 2)(3, 2) (deci n1 =
n2 = 3, k1 = k2 = 2, d = 4). Ea va avea Ns = 2n1 −1 = 23−1 = 4 stări distincte şi
Nc = n2 + 1 = 3 + 1 = 4 coloane.
Fiecare stare va fi de forma (a1 a2 )p cu p = 0, 1, 2, 3, a1 , a2 ∈ {0, 1}.
(00)0 şi (00)3 vor fi rădăcina respectiv ţinta reţelei.
Marcajele arcelor sunt de forma δp (A, B)/λp (A, B), obţinute prin toate combina-
ţiile posibile ale lui (a1 a2 )p şi (a1 a2 )p+1 .
Astfel, pentru p = 0 avem:
δ0 (00, 00) = (00)0 + (00)1 = 00 δ0 (00, 01) = (00)0 + (01)1 = 01
δ0 (00, 01) = (00)0 + (10)1 = 10 δ0 (00, 11) = (00)0 + (11)1 = 11.
iar fiecare arc va fi marcat cu o pereche de forma
δ0 /λ0 = a1 a2 /a1 a2 c1
unde c1 = a1 + a2 .
Pe nivelul p = 1, arcele sunt marcate prin perechi din tabelul următor:
δ1 (A, B) 00 01 10 11
00 00/000 01/011 10/101 11/110
01 01/011 00/000 11/110 10/101
10 10/101 11/110 00/000 01/011
11 11/110 10/101 01/011 00/000
La ultimul nivel, pentru p = Nc − 2 = 2 vom avea δ2 (A, 00) = ² şi
λ2 (00, 00) = 000, λ2 (01, 00) = 011, λ2 (10, 00) = 101, λ2 (11, 00) = 110 (pe ultimul
arc sunt numai simboluri de control).
196 PRELEGEREA 18. CODURI - TABLOU

Reţeaua se poate reprezenta grafic astfel:


º· º·
²/000
-
00/000 - -
6 00 H
@HH
J *¹¸
©
00
¹¸ ©
J@ HH ©©¡¡ µ
J@ HH © © ­­
Á
¡
J@ HH©© ¡
­
J @ ©©HH ¡ ­
J ©@© H
¡H­
­
©
J @ H
º·© © ¡ ­ H º·
01/011 © J @ ¡ H
j
H ²/011
- 01 ©
H J @ ­ - 01 -
@H ¡ *
©
¹¸ J¡ @ ­ ©¡µ¹¸
@HH J ­
@ ©©¡
@ H H¡ J ­ © © ¡ ?
º· @ º·
@ ¡HHJ­©© @¡
00 ¡
@ HH
© 00
©­J ¡@
¹¸ ¡ © @ ­ JH¡
© HH @ ¹¸
¡©© @­ ¡ HH@ º· 6
º· ¡ J
10/101 ©© ­@ ¡ J H
j
H @
R ²/101
- 10 ©
¡
HH ­ @
¡ - 10 -
J *
©
¹¸H ­ ¡ @ J ©© ¹¸
H­HH¡ @ ©
©J
­ ¡ HH ©©@ J
­ ¡ © @ J
©H HH @
­ ¡ ©©
­¡ ©© HH @J
H @ J
º· ­¡ © HH@ ^º·
J
© j
H R
? 11/110 - 11 ¡
­© - 11
²/110 -
¹¸ ¹¸
Exemplul 18.3 În mod similar se construiesc codurile tablou obţinute prin produsul
a două (3, 2)(n2 , k2 ) - coduri bloc. Toate au acelaşi număr de stări Ns = 22 =
4, doar adâncimea (numărul de coloane) variind ı̂n funcţie de n2 (Nc = n2 + 1).
Reprezentarea grafică a reţelei este
º· º· º·
00 Z - 00 Q - -
: 00
»
»
¶¶
7¹¸ JZ
´3́¹¸ ASQs »»© 3́¹¸
©
*
A J Z ´ ­ Á ¢¢̧ AS
S
w ©©´ @
¶ A J ´ Z ­ ¢ AAU ´´ @
¶ A ´ J Z ­ @
´ ¢
¶ º· ´ A J­ Z ¢Z
~ º· XXX
½
> X
z º· @

* 01 A ­J ¢- 01 ½- - 01 @
¶ ©© ¹¸ Z A­ J ¹¸ Z
J Z
~ »»»

*
© ¹¸ XXX @
º· © ¢ ½
¶ ©
© S Z­ A ¢ J½ >
7
¶ JJ^. . .©
© Rº·
XXX@
z
X

© ­ Z ½ ¶
00 H S
­ S ½½
A
Z
¢ J 1 00
³
¹¸ J HH
º· ¢ AZ ¶J º·
J
^ HH º· ³³³ ¹¸
J HH ­ ½S A¶Z ¡
µ
1 XXH j ³ ³ ¡
µ
J j 10 ½ ¢S ¶ A - 10 ³
H
~
Z ¡³- z 10 ³
X
X
- ¡
HHj »»» »
:
J ¹¸ Z ¢ ¶S A½ >
¹¸ ¹¸ ¡
J ¢
Z¶ S½ ¡
¢ Z ½ A ¡
J ¶ ½ S A
J º· ¢ ¶ ½Z Á QQ
­ ¡
Z Sº· AU ­ PPQ º·
¢¶ ½ Z S
w ¡
µ Q
s
P
P
q ¡
J
J
^ 11 ½ -~
Z ¡©* XXX z
11 ©­ - - 11
¹¸ ¹¸ ¹¸
marcajul nodurilor fiind realizat similar cu cel din Exemplul 18.2.

18.3 Decodificarea codurilor tablou


Operaţia de codificare se realizează foarte simplu: fiecare mesaj de informaţie de
k1 · k2 caractere, se scrie ca o secvenţă de k2 + 1 grupuri, primele k2 grupuri având
câte k1 simboluri, iar ultimul ². Această secvenţă trasează prin reţea un drum unic
18.3. DECODIFICAREA CODURILOR TABLOU 197

(00 . . . 0) − A1 − . . . − ANc −2 − (00 . . . 0)


de la rădăcină la ţintă. Ceea ce se obţine prin concatenarea ieşirilor
λ0 (00 . . . 0, A1 )λ1 (A1 , A2 ) . . . λNc −2 (ANc −2 , 00 . . . 0)
va fi un cuvânt - cod al (n1 · n2 , k1 · k2 ) - codului - tablou reprezentat de reţea.
Pentru decodificare se poate folosi o variantă a algoritmului Viterbi, cu mici
modificări, necesare trecerii de la codurile convoluţionale la coduri bloc.

1. Cuvântul recepţionat este ı̂mpărţit ı̂n n2 subcuvinte, fiecare având n1


valori digitizate (vezi Exemplul 18.4) ale alfabetului - cod.

2. La fiecare nivel p, pentru fiecare arc (Ap , Bp+1 ) se calculează metrica


arcului, care este distanţa euclidiană dintre al p + 1-lea subcuvânt
recepţionat şi λp (Ap , Bp+1 ). Distanţa euclidiană dintre x = x1 x2 . . . xn şi
y = y1 y2 . . . yn este
dE (x, y) = (x1 − y1 )2 + (x2 − y2 )2 + . . . + (xn − yn )2 .

3. Pentru fiecare nod B al reţelei se determină metrica nodului B, astfel:

(a) Metrica nodului rădăcină este 0;


(b) Pentru un nod Bp+1 ∈ Vp+1 (p ≥ 0), metrica lui B este cea mai mică
valoare a sumei dintre metrica unui nod Ap ∈ Vp şi dE ((A)p , (B)p+1 ),
minimul fiind luat după toate nodurile din Vp .

4. Arcul selectat ı̂n calculul metricii nodului se introduce ı̂ntr-un drum posi-
bil, iar toate celelalte arce de pe nivelul respectiv sunt eliminate.

5. După ce s-a calculat metrica nodului ţintă, se consideră drumul posibil


corespunzător şi decodificarea se face prin concatenarea sub-mesajelor
de informaţie care marchează arcele acestui drum.

Exemplul 18.4 Să reluăm codul - tablou definit ı̂n Exemplul 18.2. Presupunem că
s-a transmis cuvântul cod a = 011101110 şi s-a recepţionat mesajul digitizat
b0 = 0.2 0.4 0.4 0.3 0.1 0.9 1.0 0.9 0.6.
Presupunând că orice simbol digitizat din intervalul [0.0, 0.5) reprezintă carac-
terul binar 0, iar [0.5, 1.0] reprezintă 1, putem considera că s-a primit secvenţa
b = 000001111 deci au apărut 4 erori. Într-o decodificare obişnuită a codurilor
liniare, deoarece d = 4, erorile nu pot fi corectate. Folosind structura de reţea ı̂nsă,
acest lucru este realizabil. Să detaliem paşii decodificării cuvântului b0 .
– Metrica nodului rădăcină (00)0 este 0.
– Prima subsecvenţă de n1 = 3 caractere primite este 0.2 0.4 0.4.
– Se calculează metricile celor patru arce care pleacă din rădăcină:
dE ((00)0 , (00)1 ) = (0.2 − 0.0)2 + (0.4 − 0.0)2 + (0.4 − 0.0)2 = 0.36;
dE ((00)0 , (01)1 ) = (0.2 − 0.0)2 + (0.4 − 1.0)2 + (0.4 − 1.0)2 = 0.76;
dE ((00)0 , (10)1 ) = (0.2 − 1.0)2 + (0.4 − 0.0)2 + (0.4 − 1.0)2 = 1.16;
dE ((00)0 , (11)1 ) = (0.2 − 1.0)2 + (0.4 − 1.0)2 + (0.4 − 0.0)2 = 1.16.
– Metricile celor patru noduri de pe nivelul 1 sunt chiar aceste valori.
198 PRELEGEREA 18. CODURI - TABLOU

– Următorul submesaj primit este 0.3 0.1 0.9. Pentru nodurile de pe nivelul
2, valorile calculate ale metricilor (metrica nodului predecesor plus metrica arcului)
sunt:
(00)2 (01)2 (10)2 (11)2
(00)1 1.27 1.27 0.87 2.42
(01)1 1.67 1.67 2.87 1.37
(10)1 1.67 3.27 2.07 2.07
(11)1 3.27 1.67 2.07 2.07

– Minimul pe fiecare coloană ale acestor valori (scris ı̂ngroşat) reprezintă metrica
nodului respectiv. Deci nodurile (00)2 şi (01)2 au metrica 1.27, (10)2 are metrica
0.87, iar (11)2 are metrica 1.37.
– Ultima subsecvenţă de trei caractere digitizate este 1.0 0.9 0.6. Valorile calcu-
late ale metricilor (metrica nodului predecesor plus metrica arcului) drumurilor care
ajung ı̂n nodul ţintă sunt:

(00)3
(00)2 3.44
(01)2 2.44
(10)2 1.84
(11)2 1.74

Deci metrica nodului ţintă este 1.74. Refăcând acum traiectoria ı̂n sens invers,
se obţine drumul posibil (00)0 − (01)1 − (11)2 − (00)3 , reprezentat ı̂n figura
º· º·
00 00
¹¸
º· ¹¸
º·
º· 01/011 »»:
» 01 Z 01 º·
»» ¹¸ ¹¸
00 » º· Z 10/101
Z
º· 00
3́ ¹¸
¹¸ Z ´
10 Z ¹¸ ´
10 ²/110
¹¸
º· ZZº· ´
~ ´
11 11 ´
¹¸ ¹¸
Prin concatenarea marcajelor arcelor de pe acest drum, rezultă cuvântul - cod
011101110 (care coincide cu mesajul transmis a) şi decodificarea lui - mesajul de
informaţie 0110.

18.4 Coduri tablou generalizate (GAC)


Definiţia codurilor - tablou se poate extinde pentru a cuprinde şi alte clase de coduri
liniare (Hamming, Reed - Muller) sau ciclice (BCH, Reed - Solomon); ceea ce se
obţine este un cod - tablou generalizat (GAC - Generalized Array Codes).
Un GAC este o sumă binară de două sau trei coduri - tablou, completate eventual
cu linii nule. Procedura de construcţie a unui astfel de (n, k) - cod C este:
A. Fie C1 un cod - produs prin ı̂nmulţirea Kronecker GA1 × GA2 , unde:
(i) GA1 este o matrice k1 × (k1 + 1) de tipul (1);
18.4. CODURI TABLOU GENERALIZATE (GAC) 199

(ii) GA2 = (Ik2 |Jk2 ,n2 −k2 ) unde Ik2 este matricea unitate iar J este o matrice cu
toate elementele 1;
(iii) n = (k1 + 1) · n2 , kA = k1 · k2 .
B. Fie C2 un cod - produs prin ı̂nmulţirea Kronecker GB1 × GB2 , unde:
(i) GB1 este o matrice 1 × nB1 cu toate elementele 1;
(ii) GB2 = (G3 |G4 ) este o matrice kB × nB2 unde G3 este o matrice cu coloane 0
sau 1, iar G4 este o matrice de tipul (1) cu kB linii. Coloanele lui GB2 pot fi eventual
permutate.
(iii) n = nB1 · nB2 .
C. Fie C3 un cod - produs prin ı̂nmulţirea Kronecker GC1 × GC2 , unde:
(i) GC1 = (00 . . . 01) are dimensiunea 1 × nC1 ;
(ii) GC2 = (11 . . . 1) are dimensiunea 1 × nC2 ;
(iii) n = nC1 · nC2 .
D. Codul C este C1 + C2 sau C1 + C2 + C3 unde suma se efectuează ı̂n Z2 ; el
are lungimea n, k = kA + kB respectiv k = kA + kB + 1 simboluri de informaţie şi
este generat de matricea  
à ! GA1 × GA2
GA1 × GA2  
sau  GB1 × GB2 
GB1 × GB2
GC1 × GC2
În exemplele următoare vom prezenta sub formă de coduri GAC unele din cele
mai cunoscute coduri - bloc (liniare sau ciclice).

Exemplul 18.5 Să considerăm


 
1 0 0 1
GA1 =  
 0 1 0 1  , GA2 = (1 1)
0 0 1 1
GB1 = (1 1 1 1), GB2 = (0 1).
Dimensiunile codului sunt
n = 4 · 2 = 8, k = 3 + 1 = 4. Matricea generatoare va fi
1 1 0 0 0 0 1 1
 0 0 1 1 0 0 1 1 
G= 

.
 0 0 0 0 1 1 1 1 
0 1 0 1 0 1 0 1
Aceasta corespunde unui cod Reed - Muller RM(1, 3). Dacă se ignoră ultima
coloană (de control), se obţine un (7, 4) - cod Hamming binar.
Aranjarea sub formă de tablou a cuvintelor - cod din cele două coduri - produs
componente este următoarea:
Fie a = a1 a2 a3 a4 un mesaj de informaţie. Atunci cuvântul - cod x este dat prin:
a1 p1 0 a4
a2 p2 0 a4
x1 = x2 = ,
a3 p3 0 a4
p4 p5 0 a4
a1 p1 + a4
a p + a4
x = x1 + x2 = 2 2 = (a1 , a4 + p1 , a2 , p2 + a4 , a3 , p3 + a4 , p4 , p4 + a4 ),
a3 p3 + a4
p4 p4 + a4
unde pi = ai (1 ≤ i ≤ 3) şi p4 = a1 + a2 + a3 sunt simboluri de control.
200 PRELEGEREA 18. CODURI - TABLOU

Exemplul 18.6 Codul RM(1, 


4) poate

fi generat cu un cod GAC astfel:
1 0 0 1
 
GA1 =  0 1 0 1  GA2 = (1 1 1 1)
0 0 1 1
à !
0 1 0 1
GB1 = (1 1 1 1) GB2 = .
0 0 1 1
Deci n = 4 · 4, k = 3 + 2 = 5 şi 
1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1
 
 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 
 
G=  0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 .

 
 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
Eliminând ultimul simbol de control (ultima coloană din matricea G) se ajunge
la un (15, 5) - cod binar cu d = 7, care este un cod BCH.
Fie a = a1 a2 a3 a4 a5 un mesaj de informaţie. Reprezentarea tabelară a cuvintelor
- cod este:
a1 p1 p1 p1 0 a4 a5 a4 + a5
a p p p 0 a4 a5 a4 + a5
x1 = 2 2 2 2 x2 = ,
a3 p3 p3 p3 0 a4 a5 a4 + a5
p4 p4 p4 p4 0 a4 a5 a4 + a5
a1 p1 + a4 p1 + a5 p1 + a4 + a5
a p + a4 p2 + a5 p2 + a4 + a5
x = x1 + x2 = 2 2 ,
a3 p3 + a4 p3 + a5 p3 + a4 + a5
p4 p4 + a4 p4 + a5 p4 + a4 + a5
unde pi = ai (1 ≤ i ≤ 3), p4 = a1 + a2 + a3 sunt simboluri de control.

Exemplul 18.7 Să plecăm de la  următoarelematrici de bază:


1 0 0 1
 
GA1 = GA2 =  0 1 0 1 
0 0 1 1
GB1 = GC2 = (1 1 1 1), GB2 = GC1 = (0 0 0 1).
Se obţine un cod C = C1 + C2 + C3 cu n = 4 · 4 = 16, k = 3 · 3 + 1 + 1 = 11 şi
matrice generatoare
 
1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1
 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 1 
 
 
 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 
 
 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 1 
 
 
 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 
 
G=  0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 

 
 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 1 
 
 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 
 
 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 
 
 
 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 
0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
El are d = 4 şi este echivalent cu un cod RM(2, 4). Dacă se elimină ultimul
simbol de control, se obţine un (15, 11) - cod Hamming binar.
18.5. DECODIFICAREA CODURILOR GAC 201

Fie a = a1 a2 . . . a11 un mesaj de informaţie. Cuvântul - cod x este format din:


a1 a2 a3 p1 0 0 0 a10 0 0 0 0
a a a p 0 0 0 a10 0 0 0 0
x1 = 4 5 6 2 , x2 = , x3 =
a7 a8 a9 p3 0 0 0 a10 0 0 0 0
p4 p5 p6 p7 0 0 0 a10 a11 a11 a11 a11
a1 a2 a3 p1 + a10
a4 a5 a6 p2 + a10
x = x1 + x2 + x3 =
a7 a8 a9 p3 + a10
p4 + a11 p5 + a11 p6 + a11 p7 + a10 + a11
Exemplul 18.8 Pentru (24, 12) - codul Golay binar extins se poate da următoarea
reprezentare GAC:  
à ! 1 0 0 0 1 1 1 1
1 0 1  0 1 0 0 1 1 1 1 
 
GA1 = GA2 =  
0 1 1  0 0 1 0 1 1 1 1 
0 0 0 1 1 1 1 1
 
1 1 1 0 1 1 0 1
 
GB1 = (1 1 1) GB2 =  1 0 1 1 1 1 0 1 
1 0 1 0 1 1 1 1
GC1 = (0 0 1) GC2 = (1 1 1 1 1 1 1 1).
Fie a = a1 a2 . . . a12 un mesaj de informaţie.
Pentru obţinerea cuvântului - cod, avem:
a1 a2 a3 a4 p1 p2 p3 p4
x1 = a5 a6 a7 a8 p5 p6 p7 p8
p9 p10 p11 p12 p13 p14 p15 p16
c1 a9 c2 a10 c3 c4 a11 c5
x2 = c1 a9 c2 a10 c3 c4 a11 c5
c1 a9 c2 a10 c3 c4 a11 c5
0 0 0 0 0 0 0 0
x3 = 0 0 0 0 0 0 0 0
a12 a12 a12 a12 a12 a12 a12 a12
deci
x = x1 + x2 + x3 =
a1 + c1 a2 + a9 ... a11 + p3 c5 + p4
a5 + c1 a6 + a9 ... a11 + p7 c5 + p8
a12 + p9 + c1 a12 + p10 + a9 . . . a12 + a11 + p15 a12 + p16 + c5
De remarcat maniera mult mai simplă de codificare, ea reducându-se la adunări
de valori binare (pentru simbolurile de control) şi adunări de matrici binare.

18.5 Decodificarea codurilor GAC


Pentru decodificare se poate folosi tot algoritmul lui Viterbi aplicat unei structuri
de reţea sub care se pot reprezenta aceste coduri. Structura de reţea se construieşte
similar cu cea a codurilor - tablou, cu unele mici modificări datorate definiţiei cu-
vintelor - cod, ca sume de două sau trei alte secvenţe.
202 PRELEGEREA 18. CODURI - TABLOU

Vom considera reprezentarea cuvintelor unui cod GAC sub formă de tablou cu
n1 linii şi n2 coloane. Fie ki numărul de simboluri noi de informaţie care pot apare
pe linia i a cuvintelor - cod şi t = max {ki }.
1≤i≤n1

1. Numărul de coloane (adâncimea reţelei) este Nc = n1 + 1, iar numărul


de stări distincte este Ns = 2t .

2. Fiecare stare de pe coloana p se notează (a1 a2 . . . at )p unde ai ∈ Z2 (1 ≤


i ≤ t).

3. Rădăcina reţelei este (00 . . . 0)0 iar ţinta (00 . . . 0)n1 .

4. Fiecare arc (Ap , Bp+1 ) de pe nivelul p este marcat cu o pereche


δp (A, B)/λp (A, B) unde δp (A, B) este secvenţa de simboluri noi de
informaţie de pe linia p (eventual ²), iar λp (A, B) este linia p a cuvântului
- cod.

5. Dacă Ap şi Bp+1 sunt legate printr-un arc şi |δp (A, B)| = s, atunci Bp+1 =
Ap + δp (A, B)0t−s .

6. Dacă construcţia codului GAC a folosit şi codul C3 , atunci fiecare nod
de pe coloana n2 este legat de ţintă prin două arce, marcajul celui de-al
doilea arc fiind complementara marcajului primului arc (pe acest nivel
δn2 (A, 00 . . . 0) = ²).

n1
Y
În această construcţie de reţea sunt 2ki drumuri distincte, fiecare din ele
p=1
corespunzând unui cuvânt - cod.
Operaţiile de codificare/decodificare (inclusiv aplicarea algoritmului Viterbi a-
daptat) sunt identice cu cele definite la codurile - tablou.

Exemplul 18.9 Reluăm codul definit ı̂n Exemplul 18.5. Pentru el se poate construi
o reţea ı̂n felul următor:
Sunt necesare Nc = n1 + 1 = 4 + 1 = 5 coloane. Pentru numărul de stări, să
studiem forma de tablou a cuvintelor cod:
a1 p1 + a4
a p + a4
x= 2 2
a3 p3 + a4
p4 p4 + a4
º· º· º·
00 PP - 00 X - 00 H
©
*
©© ¹¸
º· P
» »
P »»:¹¸
»
º·
XX»
» X »»»:¹¸
º·
HH
© » » PPq
P » » X X
X
z HH
© »»»: - - 10 X Hjº·
º· © » 10 10 X XXX H
»»
© ¹¸ ¹¸ ¹¸ X
z 00
00 XX º· º· º·
¹¸HH XXXX » »»»
:
z 01 X
X - 01 X - 01 »» » ©*¹¸
©
H ¹¸ X X » :¹¸
»
» X X » »:¹¸ ©©
»
HH º·»X »X º· »X
»» X
z
X »»» XX zº·
X ©
H
j
H
11 - -
11 ©© 11
¹¸ ¹¸ ¹¸
18.5. DECODIFICAREA CODURILOR GAC 203

În această reprezentare, pe prima linie sunt două simboluri de informaţie (a1 şi a4 ),
pe a doua şi a treia câte unul (a2 respectiv a3 , a4 nefiind simbol nou), iar pe a patra
linie, nici unul. Deci numărul de stări al reţelei este Ns = 22 = 4, fiecare stare fiind
reprezentată printr-o secvenţă de t = 2 caractere binare (00, 01, 10, 11).
Funcţia δ este definită prin
δ0 (00, B) = a1 a4 , δ1 (A, B) = a2 , δ2 (A, B) = a3 , δ3 (A, 00) = ².
Nodurile şi arcele sunt marcate cu valorile date de tabelele următoare:
δ0 (A, B)/λ0 (A, B) 00 10 01 11
00 00/00 10/11 01/01 11/10
δ1 (A, B)/λ1 (A, B) 00 10 01 11
00 0/00 1/11 − −
10 1/11 0/00 − −
01 − − 0/01 1/10
11 − − 1/10 0/01
δ2 (A, B)/λ2 (A, B) 00 10 01 11
00 0/00 1/11 − −
10 1/11 0/00 − −
01 − − 0/01 1/10
11 − − 1/10 0/01
δ3 (A, B)/λ3 (A, B) 00
00 ²/00
10 ²/11 pentru codul RM(1, 3),
01 ²/01
11 ²/10
δ3 (A, B)/λ3 (A, B) 00
00 ²/0
10 ²/1 pentru (7, 4) - codul Hamming
01 ²/0
11 ²/1

Exemplul 18.10 Reprezentarea prin reţea a codurilor RM(1, 4) şi (15, 5) − BCH
construite sub formă de GAC ı̂n Exemplul 18.6 se realizează astfel:
Adâncimea reţelei (numărul de coloane) este Nc = 4 + 1 = 5. Numărul maxim
de simboluri de informaţie noi se află pe prima linie a cuvintelor - cod (a1 , a4 , a5 );
deci reţeaua are Ns = 23 = 8 stări distincte.
Funcţia δ este definită
δ0 (000, B) = a1 a4 a5 , δ1 (A, B) = a2 , δ2 (A, B) = a3 , δ3 (A, 000) = ².
iar funcţia λ:
λ0 (000, B) = a1 (a1 + a4 )(a1 + a5 )(a1 + a4 + a5 )
λ1 (A, B) = a2 (a2 + a4 )(a2 + a5 )(a2 + a4 + a5 )
λ2 (A, B) = a3 (a3 + a4 )(a3 + a5 )(a3 + a4 + a5 )
λ3 (A, 000) = (a1 +a2 +a3 )(a1 +a2 +a3 +a4 )(a1 +a2 +a3 +a5 )(a1 +a2 +a3 +a4 +a5 )
pentru codul RM(1, 4). Pentru (15, 5) - codul BCH se elimină ultimul bit de control.
Nodurile şi arcele sunt etichetate conform tabelelor:
δ0 /λ0 000 100 001 101 010 110 011 111
000 000/0000 100/1111 001/0011 101/1100 010/0101 110/1010 011/0110 111/1001
º· º· º·
204 - PRELEGEREA- 18. CODURI - TABLOU
000 P ³
1
000 P ³
1
000

7¹¸ P³
P³ ¹¸ P³P³ ¹¸ S
¶ º· ³³ PP qº· ³³ PP qº· S
¶ 100 - 100 - 100 S
¶ ¡µ¹¸
¡ º· ¹¸
º· ¹¸
º· @ S
¶ ¡ @ S
- 001 - 001
¶¡ ´ 3́ 001 P PP ³³ 1¹¸ @S
³ Q @
¶ ¡ ´ ¹¸ º· PP
³ ³³
1¹¸
º· ³P º· Q S
¶¡´´ ³³ PP q
- ³³ PP q
-
Q @S
: 101
» 101 101 XX Q
º· ¶¡´»»»» Q@ wº·
RS
´
» » ¹¸ ¹¸ ¹¸XXX s
Q
z
X
@
000 XX º· º· º·
»»»
: 000
»
¹¸ HHXXX - 010 - 010 »»» © *¹¸
©
@ X
z 010
S H PP ³³ ³
1 PP ³³ 1 ©©½½ >¡µ
S@ HH ¹¸ º· ³ PP ¹¸
³
P
qº· ³ PP ¹¸
³ º· © © ½ ¡
@ H
j
H ³ ³ PP
q
S
110 - 110 - 110© ½ ¡
S@ ¹¸ ¹¸ ¹¸
½ ¡
S @ º· º· º· ½ ¡
@ ½
S @ R 011 - 011 - 011 ¡
S ¹¸ PP ³³ 1¹¸ PP ³³ 1¹¸ ¡
S º· P
³ º· P³ º·
w
S ³³ PP P
q
- ³³ PP q
P
- 111
¡
111 111
¹¸ ¹¸ ¹¸
δi /λi 000 100 001 101 010 110 011 111
000 0/0000 1/1111 − − − − − −
100 1/1111 0/0000 − − − − − −
001 − − 0/0011 1/1100 − − − −
101 − − 1/1100 0/0011 − − − − (i=1,2)
010 − − − − 0/0101 1/1010 − −
110 − − − − 1/1010 0/0101 − −
011 − − − − − − 0/0110 1/1001
111 − − − − − − 1/1001 0/0110
δ3 /λ3 0000 δ3 /λ3 0000
000 ²/0000 000 ²/000
100 ²/1111 100 ²/111
001 ²/0011 001 ²/001
101 ²/1100 respectiv 101 ²/110 .
010 ²/0101 010 ²/010
110 ²/1010 110 ²/101
011 ²/0110 011 ²/011
111 ²/1001 111 ²/100
De remarcat că această reţea se poate reprezenta folosind numai 4 stări ı̂n loc de 8:
-
- { - {
- -
- { --
66
-
- { -
- { -
- { --
-66 ? - ??
{ -- ? - - {
- ? - y - y - y -6 -
? - - - -6 66

? - { - { - { -
? - - - -

Cele două arce care leagă două noduri sunt marcate cu etichete complementare.
Excepţie fac arcele de pe primul nivel unde ı̂n definiţia funcţiei δ0 este complemen-
tat numai primul bit (a1 ); ceilalţi doi biţi de informaţie a4 a5 sunt identici pentru
fiecare pereche de arce şi formează marcajele nodurilor succesor de pe nivelul 1:
00, 01, 10, 11.
Bibliografie

[1] J. Adamek - Foundations of Coding, Wiley - Interscience, 1991;

[2] L. Bahl, J. Cocke, F. Jelinek, J. Raviv - Optimal decoding of linear codes for
minimizing symbol error rate, IEEE Inf. Theory, pp. 284-287, Martie 1974;

[3] M. Blaum - A (16, 9, 6, 5, 4) error correcting dc-free block code, IEEE Transac-
tions on Information Theory, vol. 34, 1988, pp. 38-141;

[4] C. Carlet - Codes de Reed - Muller; Codes de Kerdok et de Preparata (teză de


doctorat), PARIS VI, 1990;

[5] G. Cullmann - Coduri detectoare şi corectoare de erori, Editura Tehnică, 1972;

[6] S. Guiaşu - Teoria Codurilor, Tipografia Universităţii Bucureşti, 1976;

[7] D.G. Hoffman, D.A. Leonard, C.C. Lindner, K.T. Phelps, C.A. Rodger, J.R.
Wall - Coding Theory; The Essentials, Marcel Dekker, Inc, 1991;

[8] B. Honary, G. Markarian - Trellis Decoding of Block Codes, A Practical Ap-


proach, Kluwer Academic Publ., 1997;

[9] A. M. Kerdok - A class of low-rate non linear codes, Information and control,
20 (1972), 182-187;

[10] J.H. van Lindt - Coding Theory, Springer Verlag, 1971;

[11] J.H. van Lindt - Introduction to Coding Theory, Springer Verlag, 1982;

[12] W.E.Ryan - A Turbo Code Tutorial, IEEE Trans. comm. pp. 1261-1271, Oct.
1996;

205
Prelegerea 19

Alte reprezentări de coduri - bloc

19.1 RLL - coduri


Sistemele de comunicare actuale (telefonice, de ı̂nregistrare etc), datorită vitezei
mari de lucru, diferă substanţial de canalele clasice (binar simetrice). Pentru ele
se folosesc filtre de bandă capabile să elimine fenomenul de interferenţă care apare.
Numite canale cu răspuns parţial, ele corectează aceste interferenţe folosind algoritmi
de tip Viterbi, incorporaţi prin construcţie. Reuşita decodificării corecte a cuvintelor
recepţionate este asigurată de supra-codificări ale mesajului sursă. În prezent sunt
folosite trei supra-coduri care asigură transmiterea fără interferenţe (ı̂n anumite
limite) a mesajului: acestea sunt codurile cu lungime limitată şi codurile balansate
pentru codurile-bloc, turbo-codurile pentru ocdurile convoluţionale.

Definiţia 19.1 Un cod cu lungime limitată (RLL - Run Length Limited Codes), sau
(d0 , k 0 ) - cod, este un cod - bloc cu proprietatea că orice două simboluri 1 consecutive
sunt separate prin p zerouri, unde d0 ≤ p ≤ k 0 .

Parametrul d0 este folosit pentru controlul interferenţei dintre simboluri (feno-


men care apare la viteze de transmisie mari, apropiate de capacitatea de saturaţie a
canalului); k 0 impune numărul maxim de zerouri care pot apare, pentru păstrarea
unei rate de informaţie cât mai convenabile.
Fie C un (n, k) - cod bloc care poate fi reprezentat sub formă de cod tablou
(n1 · n2 , k1 · k2 ), şi c1,n un cuvânt binar de comutaţie. Codul C + c = {a + c|a ∈ A}
va fi tot un (n, k) - cod, cu restricţii RLL.
Dificultatea acestei construcţii rezidă ı̂n modul de alegere a vectorului c. De
aceea, vom detalia procedura de codificare pentru obţinerea de coduri RLL cu d0 =
0:
1. Se defineşte codul - tablou (n1 · n2 , k1 · k2 ) care trebuie transformat.
2. Se defineşte cuvântul de comutaţie c = c1 c2 . . . cn2 , unde ci =
ci1 ci2 . . . cin1 (1 ≤ i ≤ n2 ) este secvenţa binară de comutaţie pentru linia i.
3. Pentru linia i (care este un cuvânt - cod cu un singur simbol de control),
cuvântul de comutaţie verifică următoarea condiţie:
Dacă n1 este par, ci are un număr impar de 1,
altfel, ci are un număr par de 1.

217
218 PRELEGEREA 19. ALTE REPREZENTĂRI DE CODURI - BLOC

Exemplul 19.1 Fie (16, 9) - codul tablou, având cuvintele - cod de forma
a1 a2 a3 p1
a a a p
a = 4 5 6 2
a7 a8 a9 p3
p4 p5 p6 p7
(este codul C1 construit ı̂n Exemplul 18.7). Deoarece n1 = 4, cuvântul de comutaţie
al fiecărei linii conţine un număr impar de 1. Vor exista opt variante posibile pentru
ci :
0001 0010 0100 1000 1110 1101 1011 0111,
deci se pot defini N0 = 84 cuvinte de comutaţie distincte c.
Dacă se ia de exemplu c = 0100110110001110, codul RLL definit pe baza lui va
avea cuvintele - cod
a1 a2 a3 p1
a4 a5 a6 p2
a=
a7 a8 a9 p3
p4 p5 p6 p7

unde s-a notat x = 1 − x.

Tehnica descrisă mai sus se poate extinde la coduri GAC, conducând la coduri cu
proprietăţi RLL optime ([7]). Generalizarea este următoarea:

1. Dacă n1 este par, ci (1 ≤ i ≤ n2 ) conţine zero sau un număr impar de 1;


2. Dacă n2 este impar, ci (1 ≤ i ≤ n2 ) conţine un număr par de 1;
3. Dacă n = n1 · n2 este par, cuvântul de comutaţie c va conţine un număr
par de 1;
4. ci nu este cuvânt - cod al codului care formează liniile; dacă aceasta nu se
poate evita, atunci ci+1 se alege de asemenea dintre cuvintele aceluiaşi cod.

Exemplul 19.2 Fie un (8, 4) - cod binar care codifică fiecare mesaj de informaţie
(a1 , a2 , a3 , a4 ) ı̂n
a1 a1 + a4
a a + a4
a= 2 2
a3 a3 + a4
p1 p1 + a4
Deoarece n şi n1 sunt pare, alegem ci (1 ≤ i ≤ 4) cu număr impar de 1, astfle
ı̂ncât numărul total de 1 din c să fie par. Putem lua de exemplu
c1 = 10, c2 = 00, c3 = 01, c4 = 00
Deci secvenţa generală de comutaţie este c = 10000100 şi cuvintele - cod cu
restricţia RLL sunt

a1 a1 + a4
a2 a2 + a4
a=
a3 a3 + a4
p1 p1 + a4
19.1. RLL - CODURI 219

Studiind toate cele 16 cuvinte - cod, se găsesc trei cuvinte cod care ı̂ncep cu trei
caractere 1 şi trei cuvinte - cod care se termină cu trei caractere 1. Deci k 0 = 6 şi
se poate demonstra că aceasta este valoarea minimă care se poate obţine pentru k 0
ı̂n cazul (8, 4) - codurilor.
Dacă se relaxează codul prin eliminarea ultimului simbol de control, se ajunge la
un (7, 4) - cod Hamming binar, cu k 0 = 7.

Pentru decodificarea codurilor RLL se poate folosi structura de reţea definită ı̂n
cazul codurilor GAC, cu o singură modificare: la marcajul arcelor, se ı̂nlocuieşte
λp (A, B) := λ(A, B) + cp .

Exemplul 19.3 Să reluăm (8, 4) - codul GAC de mai sus, a cărui reţea este de-
scrisă ı̂n Exemplul 18.5. Folosind secvenţa de comutaţie c = 00010001, se obţine un
cod RLL cu aceeaşi structură de reţea:
º· º· º·
00 PP - 00 X - 00 H
©
*
©© ¹¸
º· P
» »
P
:¹¸
»
»» º·
XX»
» X»»»:¹¸
º·
HH
© » » PP
q
P » » XX
X
z H
© »»»: - 10 - 10 XX HH
º·
©
©
» » 10 X jº·
H
» ¹¸ ¹¸ ¹¸ XXX
z
00 XX º· º· º· : 00
»»
¹¸H XXXX X
z 01 - 01 - 01 »»»» ©© *¹¸
HH XX :
» X »
: » ©
¹¸ »
»» º·¹¸ X » ¹¸
H
HH º·
XX X» º·©©

»»» XX z
X »»» XX X
z
j
H
11 - 11 - ©© 11
¹¸ ¹¸ ¹¸

iar marcajele arcelor:


δ0 /λ0 00 10 01 11
00 00/00 10/11 01/01 11/10
δ1 /λ1 00 10 01 11
00 0/01 1/10 − −
10 1/10 0/01 − −
01 − − 0/01 1/11
11 − − 1/11 0/00
δ2 /λ2 00 10 01 11
00 0/00 1/11 − −
10 1/11 0/00 − −
01 − − 0/01 1/10
11 − − 1/10 0/01
δ3 /λ3 00
00 ²/01
10 ²/10
01 ²/00
11 ²/11
(pentru (7, 4) - codul Hamming binar se ignoră ultimul bit din λ3 ).
De remarcat că faţă de Exemplul 18.5 s-a modificat numai marcajul nodurilor de
pe nivelele 1 şi 3).
220 PRELEGEREA 19. ALTE REPREZENTĂRI DE CODURI - BLOC

19.2 Coduri balansate


Codurile balansate reprezintă o clasă specială de coduri RLL ı̂n care fiecare cuvânt
- cod are un număr egal de 0 şi 1. Avantajele pe care le oferă această condiţie
(siguranţa la transmiterea de date la viteze mari, capacitatea de auto-control al
tacţilor, posibilităţi de detectare şi corectare a erorilor comparabile cu codurile -
bloc) o recomandă ca o măsură eficientă de codificare suplimentară.
Algoritm B:
Fie a = a1 a2 . . . ak un mesaj de informaţie. Definim următorul cuvânt - cod
tablou balansat asociat lui a:
1. Se alege n1 astfel ca 2n1 − 2 ≤ k şi se notează n = 4 · n1 .
2. Se construieşte un cuvânt - cod tablou cu primele 2n1 − 2 caractere de
informaţie:
a1 a3 a5 ... a2n1 −3 p1
a1 a3 a5 ... a2n1 −3 p1
c=
a2 a4 a6 ... a2n1 −2 p2
a2 a4 a6 ... a2n1 −2 p2

Cuvintele de această formă, citite pe coloană, formează un (n, 2n1 − 2) - cod


tablou balansat C, având d = 4. C este folosit pentru definirea caracterelor
de control p1 şi p2 .
3. Se definesc funcţiile f1 , f2 : Z2 → Z24 prin
f1 (x, y) = (x, x, y, y)
f2 (x, y) = (x ∧ y, x ∧ y, x ∧ y, x ∧ y)
unde ∧ este operatorul boolean obişnuit. Evident, coloanele codului C sunt
codificate folosind f1 .
4. Se construieşte cuvântul - cod u folosind ultimele k − 2n1 + 2 caractere de
informaţie x = a2n1 −1 a2n1 . . . ak astfel:

1. Dacă x = 0 . . . 00, atunci u = f1 (a1 , a2 )f1 (a3 , a4 ) . . . f (p1 , p2 );

2. Dacă x = 0 . . . 01, atunci u = f1 (a1 , a2 )f1 (a3 , a4 ) . . . f1 (p1 , p2 );

3. În rest, u = g(a1 , a2 )g(a3 , a4 ) . . . g(p1 , p2 ), unde


(i) g este f2 sau f2 ; fiecare din ele apare de un număr egal de ori (câte
n1 /2 apariţii);
(ii) Dacă se notează f2 cu 0 şi f2 cu 1, lui u i se asociază o secvenţă α de
n1 caractere binare, cu proprietatea că pentru primele 2n1 − 2 caractere
de informaţie fixate, aplicaţia x 7→ α este izotonă faţă de relaţia de ordine
lexicografică.

5. Cuvântul - cod final se obţine prin scrierea pe fiecare linie a unei valori
fi (x, y) din u. El aparţine astfel unui cod GAC A de dimensiuni n1 × 4.
Sunt multe modalităţi de transformare a unui cod - bloc binar ı̂ntr-un cod bal-
ansat; de exemplu dublarea fiecărui cuvânt - cod a cu o secvenţă identică (aa) sau
19.2. CODURI BALANSATE 221

cu caractere complementate (aa) conduc la coduri balansate. Construcţia unui cod


balansat realizată prin Algoritmul B asigură posibilitatea construcţiei unei reţele de
decodificare ı̂n maniera celei din Prelegerea 18.
În construcţia dată de Algoritmul B mai trebuie rezolvată problema alegerii lui
n1 . Aceasta se realizează folosind următoarea teoremă:

Teorema 19.1 Fiind dat k, n1 este de forma n1 = 2s unde s este cel mai mic
număr pozitiv care verifică inegalitatea
2k+2−4s ≤ 2 + C2s
s
. (1)

Demonstraţie: Condiţia ca n1 să fie par rezultă din cerinţa ca ı̂n u jumătate din cele
n1 funcţii g să fie f2 şi jumătate să fie f2 . Fie deci n1 = 2s.
Din condiţia 2n1 − 2 ≤ k rezultă k + 2 − 4p ≤ 0.
Deoarece x este format din k + 2 − 4s caractere binare, sunt 2k+2−4s secvenţe
x posibile. Din acestea, 2k+2−4s − 2 sunt construite folosind numai funcţia f2 , deci
trebuie să existe pentru ele cel puţin tot atâtea secvenţe α. Deoarece numărul
s
secvenţelor binare α este C2s , rezultă inegalitatea din enunţ.
Condiţia de minim asigură unicitatea codificării. 2
De remarcat că prin această metodă, operaţia de balansare nu păstrează propri-
etatea de cod liniar sau ciclic.

Exemplul 19.4 Să construim un cod GAC balansat care să codifice k = 3 simboluri
de informaţie. Folosind inegalitatea (1), se obţine s = 1, deci n1 = 2, n = 8.
Codul cadru, care defineşte simbolurile de control, este un (8, 2) cod bloc având
cuvintele - cod de forma (reamintim, reprezentarea desfăşurată se face pe coloane):

a1 p1
a p1
c= 1 = a1 a1 a2 a2 p1 p1 p2 p2
a2 p2
a2 p2

unde p1 = a1 , p2 = a2 . Operaţia de codificare este reprezentată de tabloul:

000 → 01010101 001 → 01011010


010 → 01100110 011 → 01101001
100 → 10011001 101 → 10010110
110 → 10101010 111 → 10100101

Exemplul 19.5 Pentru k = 4 simboluri de informaţie se obţine de asemenea s = 1


şi acelaşi (8, 2) - cod cadru, cu două simboluri de control. Cele două caractere de
informaţie rămase, a3 a4 asigură codificarea ı̂n felul următor:
α = 00 =⇒ u = f (a1 , a2 )f (p1 , p2 )
α = 10 =⇒ u = f (a1 , a2 )f (p1 , p2 )
α = 01 =⇒ u = f2 (a1 , a2 )f2 (p1 , p2 )
α = 11 =⇒ u = f2 (a1 , a2 )f2 (p1 , p2 )
Se obţine ı̂n acest fel un (8, 4) - cod balansat. Din studiul celor 16 cuvinte - cod
rezultă că el are d = 2.
222 PRELEGEREA 19. ALTE REPREZENTĂRI DE CODURI - BLOC

Exemplul 19.6 Următorul cod balansat a fost studiat de Blaum ([2]), odată cu
introducerea metodei de balansare prezentată mai sus. Din k = 9, singura valoare
posibilă este s = 2, deci n1 = 4, n = 16. Cuvintele - cod cadru au forma

a1 a3 a5 p1
a a3 a5 p1
c= 1
a2 a4 a6 p2
a2 a4 a6 p2

unde p1 = a1 + a3 + a5 , p2 = a2 + a4 + a6 .
Procedura de codificare este dată de tabelul următor:

a7 a8 a9 u1 u2 u3 u4 u5 u6 u7 u8 u9 u10 u11 u12 u13 u14 u15 u16


000 f1 (a1 , a2 ) f1 (a3 , a4 ) f1 (a5 , a6 ) f1 (p1 , p2 )
001 f1 (a1 , a2 ) f1 (a3 , a4 ) f1 (a5 , a6 ) f1 (p1 , p2 )
010 f2 (a1 , a2 ) f2 (a3 , a4 ) f2 (a5 , a6 ) f2 (p1 , p2 )
011 f2 (a1 , a2 ) f2 (a3 , a4 ) f2 (a5 , a6 ) f2 (p1 , p2 )
100 f2 (a1 , a2 ) f2 (a3 , a4 ) f2 (a5 , a6 ) f2 (p1 , p2 )
101 f2 (a1 , a2 ) f2 (a3 , a4 ) f2 (a5 , a6 ) f2 (p1 , p2 )
110 f2 (a1 , a2 ) f2 (a3 , a4 ) f2 (a5 , a6 ) f2 (p1 , p2 )
111 f2 (a1 , a2 ) f2 (a3 , a4 ) f2 (a5 , a6 ) f2 (p1 , p2 )

S-a obţinut astfel un (16, 9) - cod balansat cu d = 4.


Să codificăm mesajul de informaţie a = 001101010. Pentru determinarea biţilor
de control se construieşte cuvântul
0 1 0 1
1 0 1 0
c=
0 1 1 0
1 0 0 1
Deoarece a7 = 0, a8 = 1, a9 = 0, codul va fi generat folosind a treia linie din
tabelul de sus:
0 1 1 1
0 0 1 0
u= = 0001 1000 1101 1011.
0 0 0 1
1 0 1 1
Alte exemple de mesaje de informaţie şi codificările lor:
000000000 0101010101010101
111111001 1010101010100101
000000101 1110000100011110
111111011 1000011110000111

Pentru realizarea unei structuri de reţea a codurilor balansate, dificultatea constă


ı̂n faptul că aceste coduri nu sunt liniare, deci algoritmii utilizaţi până acum nu
funcţionează. Se va utiliza următorul algoritm, specific codurilor balansate definite
ı̂n această secţiune:
19.2. CODURI BALANSATE 223

1. Pe baza algoritmilor cunoscuţi se construieşte structura de reţea Rb a


codului - bloc cadru Cb ; fie k0 numărul ei de coloane (egal cu numărul
de coloane din reprezentarea ı̂n tablou a cuvintelor - codului Cb ).

2. Se copiază reţeaua Rb de 2p − 1 ori, unde p = k − 2n1 + 2 este dat de


pasul 3 al algoritmului B; fiecare copie corespunde unei generări posibile
a unui cuvânt - cod balansat.
Toate subreţelele au o singură rădăcină şi o singură ţintă.

3. În fiecare din cele 2p subreţele:

(a) Arcul ((00 . . . 0)0 , B1 ) de pe nivelul 0 se marchează cu δ0 /λ0 unde


δ0 (00 . . . 0, B) = a2n1 −1 . . . ak , iar
λ0 (00 . . . 0, B) = g1 (a1 , a2 ).
(b) Arcul spre ţintă are δk0 (A, 00 . . . 0) = ² şi
λk0 (A, 00 . . . 0) = g(p1 , p2 ). (notaţiile sunt cele din algoritmul B).

4. În fiecare subreţea se defineşte valoarea δj /λj (1 ≤ j < k0 ) a arcu-


lui (Aj , Bj+1 ) astfel: δj (A, B) este valoarea nemodificată din Rb , iar
λj (A, B) = g(a2j+1 , a2j+2 ).

Exemplul 19.7 Să reluăm (8, 3) - codul balansat din Exemplul 19.4. După ce se
construieşte reţeaua (8, 2) - codului cadru, deoarece există doar un bit de informaţie
suplimentar avem p = 1 deci reţeaua se mai copiază de 2p − 1 = 1 ori.
Sunt două maniere de abordare:
A. Dacă transmiterea se face pe linii, apare o construcţie conformă cu cea a
reţelelor definite pentru codurile GAC. Reţeaua corespunzătoare codului cadru este
prezentată ı̂n (a), iar cea pentru codul balansat, ı̂n (b):
00/00
- t ²/11- t 0/00 - t ²/11
-
Q 3́
0/00
- t ²/11- t 0/00 - t ²/11 - 6 1/11Q´0/00
6 S 10/11 ´Q

7
¶ - t ²/00- ´t 1/11-Q
st
Q ²/00
-
S
1/11 ¶0/00 ? ?
t S t t t
¶S 01/01 - t ²/10- t 0/01 - t ²/10 -
¶ S 6 6
1/11 ²/00 1/11 ²/00 Q 3́
´
? -t - t¶ -Swt - 1/10Q´0/01
´Q
11/10
- t ²/01- ´ t 1/10-Q
st
Q ²/01
-
?

(a) (b)
B. Dacă transmiterea datelor se face pe coloane (specific codurilor balansate),
reţeaua codului cadru este cea prezentată ı̂n Figura 19.1, poziţia (a); din ea se obţine
reţeaua (b) a codului balansat.

Exemplul 19.8 Să construim reţeaua de (de)codificare pentru (16, 9) - codul bal-
ansat definit ı̂n Exemplul 19.6. Conform procedurii, sunt necesare 8 subreţele, câte
224 PRELEGEREA 19. ALTE REPREZENTĂRI DE CODURI - BLOC
Figura 19.1:
000/0101 ²/0101
-t -
6

010/0110 -t ²/0110 -

00/0101 ²/0101
-t -
6 100/1001 -t ²/1001 -

01/0110 ²/0110 110/1010 ²/1010


-t - -t -

t ?
t t ?
t
6 6
10/1001 ²/1010 001/0101 ²/1010
-t - -t -
6

011/0110 ²/1001
-t -
11/1010 ²/1010
? -t -

101/1001 -t ²/0110 -
(a)

? 111/1010 -t ²/0101 -

(b)

una pentru fiecare linie din tabelul de codificare. Deoarece cuvintele - cod sunt citite
pe coloane, fiecare subreţea are câte 5 coloane şi 4 stări.
Pentru a7 = a8 = a9 = 0 (prima linie din tabel) subreţeaua construită plecı̂nd de
la (16, 6) - codul cadru din Exemplul 19.6 are structura:
²¯ ²¯ ²¯
00 Z - 00 - 00
±° > ±° 3́±°
µ
¡ J Z
¡ A ½½ Z
7¢̧ AS Z

´
´ ¶
@
Z ½ 7¢̧ @
A S Z´ ´ ¶¢
¡ AJ Z ¶¢
½ Z @
¡ A J½ Z¶ ¢ A S´ Z¶ ¢ @
¡ ½ J Z¢ ²¯ ´S ¢ ²¯
²¯½A J ¶¢ Z ~ ´ A S ¶¢ZZ ~ @
¡ 1 01
³
³ A ¶ - 01 A ¶ - 01 P @
¡ ³³ ³ ±° Z A¶J ¢ ½ ±° ¶S ¢ ½>±° PP P
> Q A
³ S Z¶A J¢ ½ ¶ 7 S Q¶A ¢S ½ ¶
¶ 7
¶ PP@@
¡
²¯³³ Z ½ Q ½ qR
P ²¯
00 S¶ A½ ¢ J ¶ S ¶ AQ ½¢ S¶ 00
±° P Z 1±°
PP
PP ¶S ½¢A Z¶ J ¶S ½¢A Q¶ S ³ ³³
@ ½ ½ Q ³ µ
¡
q²¯
PP ¶½ S¢ A¶ Z ~
Z J ²¯ ¶½ S¢ A¶ Q sS
w²¯ ³
@ 10 ¢S ¶ A -J ^
10 ¢S ¶ A - 10 ³³ ¡
±°¢ S >±° ¡
@ Z ¶ A ½ ½ Z ¢ ¶S A ´ 3́±° ¡
@ ¢Z¶ S ½ Z
¢ S
¶ ´ A ´
@ ¢ ¶ Z½ ½SA ¢ ¶ ZZ ¡
Z A ´ S A ¡
@ ¢¶ ½ Z S A ¢¶ ´ Z S A
R²¯
@ ¢¶ ½ ZS ¢ ´
wAU²¯ ZZ wAU²¯
S ¡
@
11 ½ ~ 11¶´
Z
- ~- 11 ¡
±° ±° ±°
19.2. CODURI BALANSATE 225

unde marcajul arcelor este dat de tabela:


p δp /λp 00 01 10 11
0 00 00/0101 01/0110 10/1001 11/1010
1 00 00/0101 01/0110 10/1001 11/1010
01 01/0110 00/0101 11/1010 10/1001
10 10/1001 11/1010 00/0101 01/0110
11 11/1010 10/1001 00/0101 00/0101
2 00 00/0101 01/0110 10/1001 11/1010
01 01/0110 00/0101 11/1010 10/1001
10 10/1001 11/1010 00/0101 01/0110
11 11/1010 10/1001 01/0110 00/0101
3 00 ²/0101 − − −
01 ²/0110 − − −
10 ²/1001 − − −
11 ²/1010 − − −

Pentru a7 = a8 = 0, a9 = 1 (a doua linie din tabel) se construieşte aceeaşi subreţea,


ı̂n care valorile funcţiei λ3 din marcajul arcelor ultimului nivel se complementează.
Prin compunerea acestor două subreţele se obţine (16, 7) - codul balansat cu d = 4.
Celelalte 6 subreţele se definesc similar. Reţeaua finală a (16, 9) - codului balansat
cu d = 4 obţinută din compunerea lor va avea 32 stări şi 5 nivele.
226 PRELEGEREA 19. ALTE REPREZENTĂRI DE CODURI - BLOC

19.3 Exerciţii
19.1 Construiţi un (3, 2)(3, 2) – RLL cod tablou şi calculaţi parametrii săi (d0 , k 0 ).

19.2 Construiţi un (12, 8) - cod GAC cu restricţii RLL şi calculaţi pentru el
(d0 , k 0 ).

19.3 Construiţi un GAC cod balansat pentru k = 10.

19.4 Aceeaşi problemă pentru k = 13.

19.5 Definiţi un vector de modificare care transformă codul tablou (3, 2)(3, 2) ı̂ntr-
un cod RLL. Construiţi reţeaua acesui cod.

19.6 Aceeaşi problemă pentru (12, 8) - codul GAC cu d = 3.

19.7 Construiţi un (12, 5) cod balansat cu d = 4. Trasaţi reţeaua acestui cod.


Bibliografie

[1] J. Adamek - Foundations of Coding, Wiley - Interscience, 1991;

[2] M. Blaum - A (16, 9, 6, 5, 4) error correcting dc-free block code, IEEE Transac-
tions on Information Theory, vol. 34, 1988, pp. 38-141;

[3] C. Carlet - Codes de Reed - Muller; Codes de Kerdok et de Preparata (teză de


doctorat), PARIS VI, 1990;

[4] G. Cullmann - Coduri detectoare şi corectoare de erori, Editura Tehnică, 1972;

[5] S. Guiaşu - Teoria Codurilor, Tipografia Universităţii Bucureşti, 1976;

[6] D.G. Hoffman, D.A. Leonard, C.C. Lindner, K.T. Phelps, C.A. Rodger, J.R.
Wall - Coding Theory; The Essentials, Marcel Dekker, Inc, 1991;

[7] B. Honary, G. Markarian - Trellis Decoding of Block Codes, A Parctical Ap-


proach, Kluwer Academic Publ., 1997;

[8] A. M. Kerdok - A class of low-rate non linear codes, Information and control,
20 (1972), 182-187;

[9] J.H. van Lindt - Coding Theory, Springer Verlag, 1971;

[10] J.H. van Lindt - Introduction to Coding Theory, Springer Verlag, 1982;

227
Prelegerea 20

Alte rezultate din teoria codurilor

20.1 Coduri aritmetice


Construcţiile oferite de teoria codurilor pot fi utilizate şi ı̂n alte domenii decât ı̂n
cele clasice, de transmitere şi recepţie corectă a mesajelor. O aplicaţie legată de
operaţiile aritmetice pe calculator este prezentată de van Lindt ı̂n [11].
Definiţia 20.1 Fie r ≥ 2 un număr ı̂ntreg fixat. r - ponderea aritmeticăunui număr
ı̂ntreg x este definită prin (
0 dacă x = 0
w(r) (x) =
¯
t altfel
( )
¯Xp
¯ n(i)
unde t = min p ¯¯ ai · r = x, |ai | < r, n(i) ≥ 0 .
i=1

În practică se folosesc des cazurile r = 2, 8, 10, 16.


Exemplul 20.1
w(10) (5) = 1,
w(10) (199) = 2 (deoarece 199 = 200 − 1 = 2 · 102 − 1 · 100 ),
w(2) (−9) = 2,
w(2) (246) = 3 (deoarece 246 = 256 − 8 − 2 = 28 − 23 − 21 ).

Propoziţia 20.1
1. w(r) (−x) = w(r) (x);
2. w(r) (x + y) ≤ w(r) (x) + w(r) (y).

Demonstraţie: Este lăsată ca exerciţiu. 2


În cele ce urmează vom considera r ca o valoare fixată. Se numeşte distanţă
aritmetică valoarea
d(x, y) = w(r) (x − y).

Propoziţia 20.2
1. d este o distanţă;
2. d este invariantă la translatare.
3. d(x, y) ≤ dH (x, y) unde dH este distanţa Hamming a două secvenţe numerice
reprezentate ı̂n baza r.

227
228 PRELEGEREA 20. ALTE REZULTATE DIN TEORIA CODURILOR

Demonstraţie: (1) Faptul că d este o distanţă se verifică imediat din Definiţia 20.1
şi Propoziţia 20.1.
(2) Deoarece d(x + z, y + z) = w(r) (x + z − y − z) = w(r) (x − y) = d(x, y) rezultă
că distanţa aritmetică este invariantă la translatare (proprietate pe care distanţa
Hamming nu o are).
(3) Este lăsat ca exerciţiu. Precizăm că cele două numere reprezentate ı̂n baza
r pot fi aduse la un număr egal de cifre completând eventual numărul mai scurt cu
0-uri (nesemnificative) ı̂n faţă. 2

Definiţia 20.2 Fie a, b numere ı̂ntregi pozitive. Se numeşte AN - cod mulţimea


finită Ca,b = {a · n|0 ≤ n < b}.

Ideea folosirii AN - codurilor ı̂n aritmetica calculatorului este următoa-rea: să pre-
supunem că trebuie calculată suma n1 + n2 (n1 , n2 pozitive şi mici comparativ cu
b); fie S suma lor. Cele două numere se codifică ı̂n a · n1 , a · n2 ∈ Ca,b . Dacă
S ≡ 0 (mod a) atunci suma a fost efectuată corect şi ea este S div a. Dacă
nu, ı̂nseamnă că au apărut erori de calcul şi se ia ca rezultat acel număr n3 cu
proprietatea că d(S, an3 ) este minimă.
Pentru a corecta orice combinaţie de maxim t erori este necesar ca C să aibă
distanţa minimă ≥ 2t + 1, deci orice număr din C are ponderea minim 2t + 1.

Teorema 20.1 Fie a un număr ı̂ntreg fixat şi s = min{w(r) (a · n)|n 6= 0}. Atunci
s ≤ 2.

Demonstraţie: Cazurile a = 0 şi a = 1 sunt banale. Pentru a < 0 se va lucra cu −a.


Deci rămâne de studiat numai cazul a > 1. Vom folosi Teorema lui Fermat:

Dacă (a, r) = 1 atunci rφ(a) ≡ 1 (mod a).

(reamintim, φ(a) este simbolul Euler).


Deci a | rφ(a) − 1. Cum w(r) (rφ(a) − 1) = 2, afirmaţia este demonstrată pentru
cazul când a şi r sunt prime ı̂ntre ele.
Să presupunem acum că (a, r) = d > 1. Vom avea a = a1 d, r = r1 d cu (a1 , r1 ) =
1. Atunci (notând n = φ(a1 )), putem scrie rn − 1 = dn r1n − 1 = dn (r1n − 1) + (dn − 1).
Se ştie că a1 | r1n − 1. Dacă (a1 , d) = 1 atunci a1 | dn − 1, deci a1 | rn − 1, sau
a | d · rn − d şi cum d < r, teorema este demonstrată.
Dacă (a1 , d) > 1, raţionamentul se reia şi el se va termina după un număr finit
de paşi (deoarece a1 < a, d < r). 2

20.1.1 AN - coduri ciclice


Rezultatul menţionat ı̂n Teorema 20.1 conduce la o dificultate de alegere. O ar-
itmetică a calculatorului eficientă recomandă alegerea unei valori mari pentru b.
Pe de-altă parte Teorema 20.1 arată că ı̂n acest caz riscul de a avea r - ponderea
aritmetică minimă cel mult 2 (deci de a nu putea corecta nici o eroare) este mare.
Problema se elimină dacă vom considera codurile AN modulare. Fie a, b numere
prime şi m = a · b. Definim Ca,b ca subgrup al lui Zm . Aceasta conduce la o
altă definiţie pentru distanţa dintre două numere. Pentru determinarea ei, să luăm
20.1. CODURI ARITMETICE 229

elementele lui Zm ca vârfuri ı̂ntr-un graf Γm ; a, b ∈ Zm sunt legate printr-un arc


dacă şi numai dacă
∃ c, j (0 < c < r, j ≥ 0) a − b ≡ ±c · rj (mod m).

Definiţia 20.3 Distanţa modulară dm (x, y) dintre două numere a, b ∈ Zm este


lungimea drumului minim dintre a şi b ı̂n graful Γm .
Ponderea modulară a lui a ∈ Zm este wm (a) = dm (a, 0).

Propoziţia 20.3 Pentru a ∈ Zm


wm (a) = min{w(r) (x)| x ∈ Z, y ≡ x (mod m)}.

Demonstraţie: Rezultă imediat din Definiţia 20.3. 2

Exemplul 20.2 Să considerăm r = 2, a = 2, b = 3 deci m = 6. Graful Γ6 va fi


j
»» 0 Pl PPP
» » »»» l PP
» l P
1j 3j 2j P 4j
XXX Q » »»
XXX Q »
Q »»»»
XX
j
5
deci tabelul distanţelor ı̂ntre elementele lui Z6 este:

d 0 1 2 3 4 5
0 0 1 1 2 1 2
1 1 0 2 1 2 1
2 1 2 0 1 2 2
3 2 1 1 0 2 1
4 1 2 2 2 0 1
5 2 1 2 1 1 0

De remarcat că alegerea lui m trebuie făcută cu grijă. De exemplu, dacă se ia


r = 3, m = 35 vom avea d35 (0, 12) = 1 deoarece 12 = 311 (mod 35). Practic ı̂nsă,
lucrând cu numere din Z35 , nu vom putea corecta erori pe poziţia corespunzătoare
lui 311 .
De aceea, aritmetica pe calculator consideră doar situaţia m = rn − 1 (n ≥ 2)
care elimină astfel de situaţii. Orice număr ı̂ntreg nenul x admite o reprezentare
unică
n−1
X
x≡ ci · r i mod (rn − 1),
i=0
cu 0 ≤ ci < r nu toţi nuli.
Deci Zrn −1 poate fi interpretat ca fiind mulţimea GF (rn ) \ {0} cuvintelor nenule
de lungime n peste alfabetul {0, 1, . . . , r − 1}.
Pentru a · b = m = rn − 1 distanţa modulară devine distanţa obişnuită ı̂n Zm şi
Ca,b are un comportament similar unui cod liniar.

Definiţia 20.4 Un AN - cod ciclic de lungime n şi bază r este un subgrup multi-
plicativ C ⊆ Zrn −1 .
230 PRELEGEREA 20. ALTE REZULTATE DIN TEORIA CODURILOR

Evident, un astfel de subgrup este ideal principal ı̂n inelul Zrn −1 , deci există a, b ∈ Z
astfel ı̂ncât a · b = rn − 1 şi C = Ca,b , adică:
C = {a · k|k ∈ Z, 0 ≤ k < b}.
Dacă x ∈ Ca,b , atunci r · x (mod rn − 1) este tot ı̂n Ca,b deoarece acesta este grup
multiplicativ; pe de-altă parte noul număr este o permutare ciclică a lui x (ambele
fiind scrise ı̂n baza r). Numărul b poate fi asimilat polinomului de control al unui
cod ciclic.

Exemplul 20.3 Fie r = 2, n = 11. Atunci m = 211 − 1 = 2047. Să considerăm


a = 23, b = 89. Se obţine AN - codul ciclic format din 89 multipli ai lui 23 (până la
2047). Există 22 modalităţi de a semnala o eroare, fiecare din ele corespunzând unui
număr de forma ±2j (0 ≤ j ≤ 11). Acestea sunt exact toate numerele din Z23 \ {0}.
Deci orice număr ı̂ntreg din intervalul [0, 2047] are distanţa modulară 0 sau 1 de
exact un cuvânt - cod. Acest AN - cod ciclic este perfect şi poate fi considerat o
generalizare a codurilor Hamming.
În [11] se face afirmaţia că nu există AN - coduri perfecte corectoare de o eroare
pentru r = 10 sau r = 2k , (k > 1).

20.1.2 AN - coduri corectoare de mai multe erori


Pentru a construi AN - coduri capabile să corecteze erori multiple, va trebui definită
o modalitate mai simplă de determinare a ponderii aritmetice sau modulare a nu-
merelor ı̂ntregi.
Conform Definiţiei 20.1, orice număr ı̂ntreg x se poate scrie sub forma
w(r)
X
x= ai · rn(i)
i=1
cu ai , n(i) numere ı̂ntregi, |ai | < r, n(i) ≥ 0 (0 ≤ i ≤ w(r) ). Această reprezentare
are defectul că nu este unică. De exemplu, pentru r = 10, numărul 99 se poate
reprezenta ı̂n două moduri diferite:
99 = 9 · 10 + 9 · 100 , 99 = 1 · 102 − 1 · 100 .
Se poate obţine – prin impunerea de restricţii asupra coeficienţilor – o reprezenta-
re unică a numerelor ı̂ntregi.

Definiţia 20.5 Fie b, c ∈ Z , |b| < r, |c| < r. Perechea (b, c) se numeşte admisibilă
dacă este adevărată una din relaţiile:
(1) b · c = 0;
(2) b · c > 0 şi |b + c| < r;
(3) b · c < 0 şi |b| > |c|.

De remarcat că ambele perechi (b, c), (c, b) sunt admisibile numai ı̂n cazurile (1) sau
(2). Cazul (3) nu permite comutativitatea relaţiei de admisibilitate.

Exemplul 20.4 Pentru r = 2 este posibil numai cazul (1). Deci o reprezentare

X
x= ci · 2i ı̂n care toate perechile (ci+1 , ci ) sunt admisibile, nu are doi coeficienţi
i=0
consecutivi nenuli.
20.1. CODURI ARITMETICE 231

X
Definiţia 20.6 O reprezentare x = ci ri cu ci ∈ Z, |ci | < r şi ∃nx cu ci = 0 ∀i >
i=0
nx se numeşte N AF (non-adiacent form) dacă pentru orice i ≥ 0, perechea (ci+1 , ci )
este admisibilă.
Exemplul 20.5 Pentru r = 10 putem scrie:
96 = −4 · 100 + 0 · 101 + 1 · 102 (cazul (1)),
11 = 1 · 100 + 1 · 101 (cazul (2)),
38 = −2 · 100 + 4 · 101 (cazul (3)).
De remarcat că reprezentarea lui 96 = 6 · 100 + 9 · 101 nu este ı̂n forma N AF
deoarece perechea (9, 6) nu este admisibilă. La fel pentru reprezentările celorlaltor
numere.
Teorema 20.2 Orice număr ı̂ntreg x are o reprezentare N AF unică ı̂n baza r.
Dacă aceasta este ∞ X
x= ci · r i ,
i=0
atunci w(r) (x) = card ({i|i ≥ 0, ci 6= 0}).

X
Demonstraţie: Fie bi · ri , (|bi | < r) o reprezentare a lui x ı̂n baza r, şi i cel
i=0
mai mic număr cu proprietatea că perechea (bi+1 , bi ) nu este admisibilă. Putem
presupune că bi > 0 (altfel se va lucra cu −x). Vom ı̂nlocui bi cu b0i = bi − r şi bi+1
cu b0i+1 = bi+1 + 1 (dacă bi+1 + 1 = r, atunci b0i+1 = 0 şi facem deplasarea obişnuită
de la adunare).
Dacă bi+1 > 0, atunci avem sau b0i+1 = 0, sau b0i · b0i+1 < 0 şi b0i+1 = bi+1 + 1 >
r − bi = |b0i | (deoarece perechea (bi+1 , bi ) nu era admisibilă).
Dacă bi+1 < 0, atunci sau b0i+1 = 0, sau b0i · b0i+1 > 0 şi |b0i + b0i+ | = r − bi − bi+1 < r
deoarece −bi+1 ≤ bi (perechea (bi+1 , bi ) nu era admisibilă).
Deci, (b0i+1 , b0i ) este admisibilă, şi se verifică similar dacă (b0i , bi−1 ) este admisibilă.
Procedeul continuă până se ajunge la i = 0.
Să arătăm acum că reprezentarea N AF este unică. Presupunem că există x ∈ Z
cu două astfel de reprezentări:

X ∞
X
x= ci · r i = c0i · ri .
i=0 i=0
Considerăm – fără a micşora generalitatea – că c0 6= c00 şi c0 > 0; deci c00 = c0 − r.
Atunci pentru c01 sunt posibile trei valori: c1 + 1, c1 + 1 ± r. Dacă c01 = c1 + 1 − r,
atunci c1 ≥ 0, deci c0 + c1 ≤ r − 1. Deoarece c00 · c01 > 0, avem −c00 − c01 < r, de unde
r − c0 + r − c1 − 1 < r, deci c0 + c1 > r − 1, contradicţie. Celelalte două cazuri se
tratează similar. 2
Reprezentarea N AF a unui număr x se poate afla direct şi pe baza teoremei:
Teorema 20.3 Fie x ∈ Z, x ≥ 0. Considerăm reprezentările ı̂n baza r a numerelor

X ∞
X
(r + 1) · x = ai · ri , x= bi · ri ,
i=0 i=0
unde ai , bi ∈ {0, 1, . . . , r − 1}. Atunci reprezentarea N AF pentru x este

X
x= (ai+1 − bi+1 ) · ri .
i=0
232 PRELEGEREA 20. ALTE REZULTATE DIN TEORIA CODURILOR

Demonstraţie: Ştim că pentru două numere naturale nenule a, r, [a/r] reprezintă
câtul ı̂mpărţirii celor două numere, iar a − [a/r] · r - restul.
Din reprezentarea din enunţ, rezultă că fiecare coeficient ai se determină prin
adunarea coeficienţilor corespunzători ai numerelor x şi r · x, scrise ı̂n baza r. Să
definim secvenţa numerică αi , i ≥ 0 astfel:
" #
αi−1 + bi−1 + bi
α0 = 0, αi = .
r
Atunci, conform observaţiei de la ı̂nceputul demonstraţiei, ai = αi−1 + bi−1 + bi −
αi · r. Dacă notăm ci := ai − bi , avem ci = αi−1 + bi−1 − αi · r.
Mai rămâne de verificat faptul că (ci+1 , ci ) este o pereche admisibilă. Relaţia
|ci+1 + ci | < r rezultă imediat din definiţia lui αi . Să presupunem ci > 0, ci+1 < 0;
atunci αi = 0. Vom avea ci = αi−1 + bi−1 , ci+1 = bi − r şi condiţia |ci+1 | > |ci | este
echivalentă cu αi−1 + bi−1 + bi < r, adică αi = 0. Celălalt caz se arată analog. 2

Exemplul 20.6 Pentru a găsi reprezentarea N AF a numărului 98 ı̂n baza r = 10,


avem
98 = 8 · 100 + 9 · 101 + 0 · 102 + 0 · 103 + . . .
980 + 98 = 1078 = 8 · 100 + 7 · 101 + 0 · 102 + 1 · 103
Deci, 98 = (7 − 9) · 100 + (0 − 0) · 101 + (1 − 0) · 102 = −2 + 1 · 102 .

Similar situaţiei din paragraful anterior, să considerăm acum cazul reprezentării
modulare. Vom lua deci m = rn − 1, (n ≥ 2).

Definiţia 20.7 O reprezentare


n−1
X
x≡ ci · ri (mod m)
i=0
cu ci ∈ Z, |ci | < r se numeşte CN AF (cyclic N AF ) pentru x dacă ∀i (0 ≤ i ≤
n − 1), (ci+1 , ci ) este admisibilă (se consideră cn = c0 ).

Din Teoremele 20.2 şi 20.3 rezultă un rezultat similar pentru reprezentă- rile CN AF :

Teorema 20.4 Orice număr ı̂ntreg x admite o reprezentare CN AF modulo m.


Această reprezentare este unică, exceptând cazul
(r + 1) · x ≡ 0 6≡ x (mod m),
când sunt posibile două reprezentări.
n−1
X
Dacă x ≡ ci · ri (mod m), atunci
i=0
wm (x) = card({i|0 ≤ i < n, ci 6= 0}).

Demonstraţie: Construcţia este identică cu cea din demonstraţia Teoremei 20.3.


Unicitatea se arată similar cu cea din demonstraţia Teoremei 20.2. Singura excepţie
este cazul bi+1 ≡ bi (mod m). În acest caz sunt posibile două reprezentări:
x ≡ b0 + b1 · r + . . . bn−1 · rn−1 şi x ≡ −b1 − b2 · r − . . . − b0 · rn−1 ,
ambele modulo m. 2
20.2. TURBO - CODURI 233

20.1.3 Coduri Mandelbaum - Barrows


O clasă de AN coduri a fost definită de Mandelbaum şi Barrows, generalizată ulterior
de van Lindt ([11]).
Iniţial este necesar un rezultat referitor la ponderea modulară ı̂n AN coduri
ciclice, a cărui demonstrare se află ı̂n [11], pag. 127 − 128:

Teorema 20.5 Fie C ⊂ Z/(rn − 1) un AN cod ciclic cu generator a şi b = (rn −


1)/a = card(C), cu proprietatea că ∀x ∈Ã"
C are o#reprezentare
" #! CN AF unică. Atunci
X r·b b
wm (x) = n − .
x∈C r+1 r+1

Teorema 20.6 Fie b un număr prim care nu divide r, cu proprietatea că grupul
multiplicativ Zb este generat de r şi −1. Fie n un număr ı̂ntreg pozitiv astfel ca
rn ≡ 1 (mod b) şi a = (rn − 1)/b. Atunci codul C ⊂ Z/(rn − 1) generat de a este
un cod echidistant cu distanţa Ã" # " #!
n r·b b
− .
b−1 r+1 r+1

Demonstraţie: Fie x ∈ C \ {0}. Atunci x = a · n (mod rn − 1) cu n 6= 0 (mod b). Din


ipoteză rezultă că există j ı̂ntreg cu n ± rj (mod b). Deci wm (x) = wm (±rj · a) =
wm (a). Aceasta arată că C este echidistant. Valoarea distanţei rezultă din Teorema
20.5. 2

20.2 Turbo - coduri


În ultimii ani, viteza tot mai mare de transmisie a datelor - aproape de capacitatea
maximă a canalelor de comunicaţie – a condus la modalităti noi de codificare. Turbo
codurile sunt prezentate prima dată ı̂n 1993 de Berrou, Glavier şi Thitimajshima
şi combină sub formă de reţea (minim) două coduri convoluţionale. Modalitatea
de decodificare este total deosebită de algoritmii cunoscuţi până acum (se folosesc
capacităţile statistice de performanţă ale canalelor de transmisie). Ele asigură o
rată de corectare a erorilor mult mai ridicată decât la codurile clasice; de aceea
turbo - codurile asigură transmisiile de pe staţiile lansate după anul 1993, precum
şi canalele de satelit.

20.2.1 Structura unui turbo - cod


Un turbo - cod standard este reprezentat de Figura 20.1:
El foloseşte două (2, 2) - coduri convoluţionale (care – fără a micşora generali-
tatea – au fost considerate identice), separate printr-un bloc PN de permutare de N
caractere (N fiind o constantă fixată, dependentă de structura canalului de trans-
misie). Mesajul de informaţie este spart ı̂n blocuri u ∈ Zq de lungime N ; dacă
se ignoră mecanismul de relaxare R, rata codificatorului este 1/3 (N simboluri de
informaţie se transformă ı̂n cuvinte - cod de lungime 3N ). Cele 3 ieşiri (xs , x1p , x2p )
sunt apoi transmise pe coloană, ca un cod GAC.
234 PRELEGEREA 20. ALTE REZULTATE DIN TEORIA CODURILOR
Tabelul 20.1: Turbo - codificator standard
u = xs s -

s - g1 (X) x1p -
g0 (X)

? x1p , x2p
-
PN R

u0 ? - g1 (X) x2p -
g0 (X)

Codificatorul
Pentru codul convoluţional, matricea generatoare poate fi considerată (ı̂ntr-o vari-
antă simplificată, bazată pe structura de reţea a mesajelor) G = (g0 (X) g1 (X)).
Codificatorul unui turbo - cod va folosi ca matrice generatoare o formă echivalentă
recursivă: Ã !
T g1 (X)
GR = 1 .
g0 (X)
Din acest motiv, un codificator convoluţional pentru turbo - coduri este numit Cod-
ificator Sistematic Recursiv (RSE).
Un mesaj de informaţie u(X), este codificat de codul convoluţional ı̂n u(X)G =
(u(X)g0 (X) u(X)g1 ((X)). RSE va realiza aceeaşi ieşire pentru mesajul u0 (X) =
u(X)g0 (X) (se verifică imediat relaţia u(X)g0 (X)GR = u(X)G). Vom numi totuşi
”cuvânt - cod” perechea de polinoame u(X)G (deşi se mai efectuează o operaţie de
ı̂nmulţire pentru obţinerea mesajului u0 (X)).
Se observă că pentru un RSE, cuvântul cod are pondere finită dacă şi numai
dacă mesajul de intrare se divide cu g0 (X).

Corolarul 20.1 Un mesaj sursă u0 cu w(u0 ) = 1 se codifică ı̂ntr-un cuvânt - cod


de pondere infinită.

Demonstraţie: Evident, deoarece u0 (X) = X p nu se divide cu g0 (X). 2

Corolarul 20.2 Pentru orice polinom netrivial g0 (X) ∈ Zq [X] există o infinitate
de mesaje sursă de pondere 2 care se codifică ı̂n cuvinte - cod de pondere finită.

Demonstraţie: Pentru g0 (X) ∈ Zq [X], g0 (X) 6= X p , există un n minim cu propri-


etatea g0 (X)|X n − 1 (n este lungimea secvenţei pseudo-aleatoare generată de g0 (X)
- a se vedea Relaţii de recurenţă liniară, Prelegerea 8).
Orice secvenţă u0 de forma u0 (X) = aX i (X n − 1), a ∈ Zq \ {0} are pondere 2
şi este divizibilă cu g0 (X), deci codificarea prin RSE va genera un polinom cu un
număr finit de termeni. 2

Exemplul 20.7 Fie g0 (X) = 1 + X + X 4 , g1 (X) = 1 + X 2 + X 3 + X 4 polinoame


din Z2 [X]. În mod uzual se foloseşte notaţia ı̂n octal; deci, cum g0 = 110012 =
318 , g1 = 101112 = 278 , vom avea (g0 g1 ) = (31, 27).
20.2. TURBO - CODURI 235

Matricea generatoare este à !


1 + X2 + X3 + X4
GR = 1 ,
1 + X + X4
iar un circuit liniar care realizează acest RSE are forma:
- uk
6 ¾
¾ 6
??
uk s- +j-
s s6
- s- s- -s
?
© ©

© ©©
? - +j¼
¾ ?
? - pk

(s-a notat cu uk simbolul de informaţie curent, iar cu pk simbolul de control core-


spunzător).
Cum g0 (X) este primitiv, lungimea secvenţelor este 24 − 1 = 15. De exemplu,
mesajul sursă u(X) = 1 + X 15 se codifică ı̂n (1 + X 15 , 1 + X + X 2 + X 3 + X 5 + X 7 +
X 8 + X 11 ) = (1000000000000001, 1111010110010000).
u(X) = X 7 (1 + X 15 ) va genera acelaşi cuvânt - cod, cu o ı̂ntârziere de şapte tacţi.

Permutatorul
PN este un bloc de permutare. Cele N caractere care constituie intrarea ı̂n primul
codificator RSE sunt rearanjate ı̂nainte de a intra ı̂n al doilea codificator. Din
considerente practice este preferabil ca permutarea folosită să nu păstreze nici o
ordine anterioară a simbolurilor (deşi acest lucru este uneori dificil, mai ales pentru
cuvinte de pondere mică). De asemenea, N trebuie să fie suficient de mare (ı̂n
practică se foloseşte N ≥ 1000). Aceste două cerinţe – uzuale ı̂n criptografie – sunt
necesare ı̂n obţinerea de performanţe ridicate la decodificare.

Mecanismul de relaxare
Dacă pentru transmiterea de imagini din spaţiu sunt folosite coduri cu rate mici
de informaţie (fiecărui bit ı̂i corespund cel puţin 3 caractere cod), ı̂n alte situaţii
(comunicări prin satelit de exemplu) sunt preferabile rate mari (cel puţin 1/2).
Rolul mecanismului de relaxare (vezi Capitolul 2) este de a reduce periodic anumite
caractere pentru a scurta lungimea cuvintelor - cod. De obicei se elimină biţi de
control; astfel, pentru a obţine o rată de informaţie 1/2 se pot elimina toţi biţii de
control pari de la ı̂nceputul codului şi toţi biţii de control impari de la sfârşit.

20.2.2 Decodificarea turbo - codurilor


Din construcţie rezultă că un turbo codificator este liniar, deoarece toate compo-
nentele sale sunt liniare. Codificările RSE sunt implementate prin circuite liniare,
permutatorul este liniar deoarece poate fi modelat printr-o matrice de permutare.
La fel, mecanismul de relaxare nu afectează liniaritatea, deoarece din toate cuvintele
- cod se şterg simbolurile de pe aceleaşi poziţii. Importanţa liniarităţii constă ı̂n fap-
tul că se poate lua ca referinţă cuvântul - cod nul. De asemenea, toate construcţiile
236 PRELEGEREA 20. ALTE REZULTATE DIN TEORIA CODURILOR

le facem pentru cazul binar, cu simbolurile ±1. Decodificatorul va lucra după prin-
cipiul obişnuit al decodificării cele mai probabile.
Din păcate, utilizarea algoritmului Viterbi nu este posibilă din cauza operaţiei
de permutare folosită ı̂n decodificare. Totuşi, pentru subsecven-ţe stricte, un astfel
de algoritm poate da rezultate.
Primul algoritm de decodificare pentru turbo - coduri a fost propus de Berrou
ı̂n 1993 ([12]), bazat pe ideile din [2]. Numit BCJR, el foloseşte o decodificare
caracter-cu-caracter (spre deosebire de Viterbi care decodifica pe secvenţe bloc de
câte n caractere).
Vom folosi următoarele notaţii:

• Ei - notarea codificatorului RSE i (1 ≤ i ≤ 2);

• Di - notarea decodificatorului i (1 ≤ i ≤ 2);

• m - capacitatea de memorie (buffer) a codificatorului;

• S - mulţimea celor 2m stări ale codificatorului;

• xs = xs1 xs2 . . . xsN = u1 u2 . . . uN secvenţa de informaţie care se codifică;

• xp = xp1 xp2 . . . xpN cuvântul de control generat de codificator;

• yk = yks ykp o recepţie (posibil perturbată) a lui xsk xpk ;

• yab = ya ya+1 . . . yb ;

• y1N = y1 y2 . . . yN cuvântul recepţionat.

Algoritmul BCJR (iniţial şi modificat)


O primă versiune a algoritmului se bazează pe decodificarea cea mai probabilă apos-
teriori (M AP - (maximul aposteriori). Se realizează decodificarea
+1 dacă P (uk = +1|y) > P (uk = −1|y)
uk =
−1 altfel.
Formal, ûk = sign[L(uk )], unde L(uk ) este logaritmul raportului probabilităţilor
de potrivire aposteriori, definit prin relaţia
à !
P (uk = +1|y)
L(uk ) = log .
P (uk = −1|y)

Dacă se ţine cont de faptul căseXcodifică ı̂n reţea, aceasta se scrie:



p(sk−1 = s0 , sk = s, y)/p(y)
 S+ 
L(uk ) = log X
 (1)
p(sk−1 = s , sk = s, y)/p(y) 
0

S−
unde
sk ∈ S este starea codificatorului la momentul k,
S + este mulţimea perechilor (ordonate) (s0 , s) corespunzătoare tuturor stărilor
de tranziţie (sk−1 = s0 ) → (sk = s) generate de uk = +1,
20.2. TURBO - CODURI 237

S − este definită similar pentru uk = −1.


Este posibil să simplificăm cu p(y) ı̂n (1); deci este necesară doar o formulă
pentru calculul lui p(s0 , s, y). În [2], este construită o variantă sub forma
p(s0 , s, y) = αk−1 (s0 ) · γk (s0 , s) · βk (s) (2)
unde:
• γk (s0 , s) = p(sk = s, yk |sk−1 = s0 );

• αk (s) = p(sk = s, y1k ) este calculat recursiv cu formula


X
αk (s) = αk−1 (s0 ) · γk (s0 , s)
s0 ∈S

cu condiţiile iniţiale α0 (0) = 1, α0 (s 6= 0) = 0


(codificatorul pleacă din starea 0).
N
• βk (s) = p(yk+1 |sk = s) are formula recursivă de calcul
X
βk−1 (s0 ) = βk (s) · γk (s0 , s)
s∈S

şi condiţiile βN (0) = 1, βN (s 6= 0) = 0


(după N biţi de intrare codificatorul trebuie să ajungă la starea 0; restricţia
se realizează alegând corespunzător ultimii m biţi, numiţi biţi de ı̂ncheiere).
Aplicarea acestei variante de decodificare la turbo - coduri (reamintim, algoritmul
BCJR iniţial a fost definit ı̂n 1974) are un neajuns: simplificarea cu p(y) conduce la
algoritmi numerici instabili. De aceea, Berrou ([12]) face o modificare a algoritmului,
ı̂n felul următor:
Se definesc probabilităţile (modificate)
α̃k (s) = αk (s)/p(y1k ), β̃k (s) = βk (s)/p(yk+1 N
|y1N ).
k−1 N
Prin ı̂mpărţirea relaţiei (2) cu p(y)/p(yk ) = p(y1 ) · p(yk+1 |y1k ) se ajunge la
p(s0 , s|y) · p(y
X
0 0
k ) = α̃k−1 (s ) · γk (s , s) · β̃k (s).
k
Pentru că p(y1 ) = αk (s), valorile α̃k (s) se pot determina din αk (s) pe baza
s∈S
formulei
αk (s)
α̃k (s) = X ,
αk (s)
s∈S

sau – folosind definiţia


X
recursivă a lui αk (s): X
αk−1 (s0 ) · γk (s0 , s) α̃k−1 (s0 ) · γk (s0 , s)
0
s ∈S 0
s ∈S
α̃k (s) = X X = X X
αk−1 (s0 ) · γk (s0 , s) α̃k−1 (s0 ) · γk (s0 , s)
s∈S s0 ∈S s∈S s0 ∈S
ultimul rezultat fiind obţinut prin ı̂mpărţirea numărătorului şi numitorului cu
p(y1k−1 ).
Definirea recursivă a lui β̃k (s) se obţine plecând de la
p(y N |y k ) X X p(y N |y1k ) X X
p(ykN |y1k−1 ) = p(y1k )· k+1k−11 = αk−1 (s0 )·γk (s0 , s)· k+1 k−1 = α̃k−1 (s0 )·
p(y1 0
s∈S s ∈S p(y 1 ) 0
s∈S s ∈S
γk (s0 , s) · p(yk+1
N
|y1k )
şi folosind definiţia recursivă a lui βk−1 (s), se ajunge la relaţia
238 PRELEGEREA 20. ALTE REZULTATE DIN TEORIA CODURILOR
X
β̃k (s) · γk (s0 , s)
β̃k−1 (s0 ) = X s∈S
X .
α̃k−1 (s0 ) · γk (s0 , s)
s∈S s0 ∈S
În final, algoritmul BCJRmodificat
X
va folosi valoarea L(u  k
) dată de relaţia
0 0
α̃k−1 (s ) · γk (s , s) · β̃k (s)
 S+ 
L(uk ) = log 
X
. (3)
α̃k−1 (s ) · γk (s , s) · β̃k (s) 
0 0

S−
Condiţiile la limită pentru α̃k (s) şi β̃k (s) sunt cele de la αk (s) respectiv βk (s).
O altă versiune a algoritmului
à foloseşte
! informaţia
à apriori.
! Pentru acesta avem
P (y|uk = +1) P (uk = +1)
L(uk ) = log + log .
P (y|uk = −1) P (uk = −1)
Deoarece ı̂n mod normal P (uk = +1) = P (uk = −1), al doilea termen al sumei
este zero ı̂n decodificatoarele uzuale. Pentru un turbo - decodor care lucrează re-
cursiv, D1 primeşte informaţie suplimentară de la D2 , care serveşte ca informaţie
apriori. Similar, D2 primeşte de la D1 informaţie suplimentară, ş.a.m.d. Ideea
constă ı̂n faptul că D2 poate da lui D1 informaţii despre uk la care acesta nu are
acces (de exemplu caracterele de control generate de E2 ); acelaşi lucru ı̂l realizează
D1 pentru D2 .
Un circuit de decodificare bazat pe algoritmul BCJR este:
¾ PN−1 ¾ Le216
-
? Le12 - - D -
y1p PN−1
ys -s D1 - 2
6 6
? -
PN−1 -
y2p -

S-a notat cu PN−1 inversa matricii de permutare PN din circuitul de codificare. Le12
este informaţia suplimentară transmisă de la D1 la D2 , iar Le21 este cea transmisă de
la D2 la D1 . Deciziile finale de decodificare pot veni atât de la D1 cât şi de la D2 .
Mai rămâne de văzut cum se poate obţine această informaţie suplimentară care
circulă ı̂ntre cei doi decodificatori recursivi.
Definiţia lui γk (s0 , s) se poate rescrie
γk (s0 , s) = P (s|s0 )p(yk |s0 , s) = P (uk ) · p(yk |uk )
0
unde evenimentul uk corespunde à tranziţiei s !→ s. Dacă se notează:
P (uk = +1)
Le (uk ) = log ,
P (uk = −1)
P = P (uk = +1), P− = P (uk = −1), avem
 q  +
P− /P+ q
  · P+ /P− = P+ dacă uk = +1,
1 + P− /P+
 q 
P− /P+ q
 · P− /P+ = P− dacă uk = −1.
1 + P− /P+
În această
à situaţie se obţine
!
exp[−Le (uk )/2]
P (uk ) = e
· exp[uk · Le (uk )/2] = Ak · exp[uk · Le (uk )/2], şi (ream-
1 + exp[−L (uk )]
20.2. TURBO - CODURI 239

intim, yk = yks y"kp , xk = xsk xpk = uk xpk ) #


(yks − uk )2 (ykp − xpk )2
p(yk |uk ) ∝ exp − 2
− 2
=
"
2σ 2σ # " #
(yks )2 + u2k + (ykp )2 + (xpk )2 uk · yks + xpk · ykp
= exp − · exp =
"
2σ 2 #
σ2
yks · uk + ykp · xpk
= Bk · exp
σ2
deci "
s p p#
u k · yk + x k · yk
γk (s0 , s) ∝ Ak · Bk · exp [uk · Le (uk )/2] · exp (4)
σ2
Deoarece γk (s0 , s) apare ı̂n (3) la numărător (unde uk = +1) şi numitor (unde
uk = −1), factorul Ak · Bk se va reduce fiind independent de uk . De asemenea,
particularităţile de canal la transmisia lui ±1 dau relaţia σ 2 = N0 /(2Ec ) unde Ec
este energia de canal per bit. Din (4) se obţine
γk (s0 , s) ∼ exp [uk · (Le (uk ) + Lc · yks )/2 + Lc · ykp · xpk /2] =
= exp [uk · (Le (uk ) + Lc · yks )/2] · γke (s0 , s),
4Ec
unde Lc = şi γke (s0 , s) = exp [Lc · ykp · xpk /2].
N0
Combinând această relaţie cu (3) se ajunge la
X 
α̃k−1 (s0 ) · γke (s0 , s) · β̃k (s) · Ck
 + 
L(uk ) = log 
X
S
0
=

α̃k−1 (s ) · γke (s0 , s) · β̃k (s) · Ck
S− X 
α̃k−1 (s0 ) · γke (s0 , s) · β̃k (s)
 + 
X
= Lc yks + Le (uk ) + log  S  (5)

α̃k−1 (s0 ) · γke (s0 , s) · β̃k (s)
S−
unde s-a notat Ck = exp [uk · (Le (uk ) + Lc · yks )/2].
A doua egalitate rezultă deoarece Ck (uk = +1) şi Ck (uk = −1) pot fi scoase ca
factor. Primul termen al sumei (5) este numit valoare de canal, al doilea reprezintă
informaţia apriori despre uk (furnizată de un decodificator anterior), iar al treilea
termen conţine informaţia suplimentară care se trimite la decodificatorul următor.
Deci – de exemplu – la orice iteraţie, D1 calculează
L1 (uk ) = Lc · yks + Le21 (uk ) + Le12 (uk )
unde este informaţia suplimentară venită de la D2 şi Le12 (uk ) este al treilea
Le21 (uk )
termen din (5), folosit ca o informaţie suplimentară trecută de la D1 spre D2 .

Algoritmul BCJR se poate formaliza, ı̂n unele ipoteze implicite. Astfel:


- se presupune că cei doi codificatori lucrează corect, adică ultimii m biţi din
mesajul de informaţie de lungime N se codifică astfel ca la sfârşit E1 să ajungă la
starea zero.
- decodificatorii deţin toată informaţia referitoare la reţeaua de codificare; ast-
fel, ei au tabele complete cu simbolurile de informaţie şi de control pentru toate
tranziţiile de stări s0 → s, matricile de permutare şi inversele lor.
240 PRELEGEREA 20. ALTE REZULTATE DIN TEORIA CODURILOR

Algoritmul BCJR:
1. (Iniţializare): ( (
(1) 1 pentru s = 0 (1) 1 pentru s = 0
D1 : α̃0 (s) := β̃N (s) :=
0 pentru s 6= 0 0 pentru s 6= 0
Le21 (uk ) := (
0, k = 1, 2, . . . , N
(2) 1 pentru s = 0 (2) (2)
D2 : α̃0 (s) := , β̃N (s) := α̃N (s), ∀s.
0 pentru s 6= 0
Le12 (uk ) se determină din D1 după prima trecere, deci nu se iniţializează.

2. (A n-a iteraţie):
D1 : pentru k = 1, 2, . . . , N
- Se determină yk := yks yk1p unde yk1p sunt biţii de control recepţionaţi pentru
E1 (posibil perturbaţi de canal);
- Se determină γk (s0 , s) pentru toate tranziţiile posibile s0 → s;
(1)
- Se determină α̃k (s), ∀s.
(1)
pentru k = N, N − 1, . . . , 2 se determină β̃k−1 (s), ∀s;
pentru k = 1, 2, . . . , N se determină Le12 (uk ) cu valorile de probabilităţi
asociate lui D1 .
D2 : pentru k = 1, 2, . . . , N
- Se determină yk := yPs N [k] yk2p ;
- Se determină γk (s0 , s) pentru toate tranziţiile posibile s0 → s;
(2)
- Se determină α̃k (s), ∀s;
(2)
pentru k = N, N − 1, . . . , 2 se determină β̃k−1 (s), ∀s;
pentru k = 1, 2, . . . N se determină Le21 (uk ) cu valorile de probabilităti
asociate lui D2 ;
3. (După ultima iteraţie):
Pentru k = 1, 2, . . . , N
- Se determină L1 (uk ) := Lc · yks + Le21 (uP −1 [k] ) + Le12 (uk );
N
- Dacă L1 (uk ) > 0 atunci uk := +1 altfel uk := −1;
4. Stop.

20.3 Exerciţii
20.1 Demonstraţi Propoziţia 20.1.

20.2 Demonstraţi Propoziţia 20.2, (3).

20.3 Calculaţi w(2) , w(10) şi w(16) pentru numerele 100, 32412, 999, 1024.

X
20.4 Fie x ∈ Z. Un cod Booth este o reprezentare x = ci 3i unde ci ∈ {−1, 0, 1}.
i=0
1. Să se reprezinte ı̂n codul Booth numerele 23, 455, 81, −6493;
2. Să se arate că pentru orice număr ı̂ntreg, codul Booth este unic.

20.5 Determinaţi AN - codurile ciclice din Z23 −1 şi Z33 −1 .


Stabiliţi valorile a şi b pentru fiecare din ele.
20.3. EXERCIŢII 241

20.6 Generalizaţi Exemplul 20.3. Găsiţi un AN - cod ciclic perfect corector de o


eroare pentru r = 3.

20.7 Scrieţi ı̂n forma N AF pentru r = 2, r = 10 şi r = 7 numerele


−15, 32075, 5665, −992.

20.8 Completaţi demonstraţia Teoremei 20.2, verificând unicitatea re-prezentării


N AF ı̂n cazurile c01 = c1 + 1 şi c01 = c1 + 1 + r.

20.9 În definiţia reprezentării N AF a numărului ı̂ntreg x (cu completarea n0 =


−1), să se arate că
rk+2
nx ≤ k ⇐⇒ |x| < .
r+1

20.10 Considerăm reprezentarea ternară modulo 36 − 1. Să se determine forma


CN AF pentru numărul 455.

20.11 Determinaţi cuvintele - cod din codul Mandelbaum - Barrows cu b = 11, r =


3, n = 5.

20.12 Fie g0 (X) = 1 + X + X 3 , g1 (X) = 1 + X 2 + X 4 + X 5 din Z2 [X]. Construiţi


circuitul liniar pentru codificatorul RSE.
Codificaţi mesajele de informaţie 1 + X 2 + X 3 , 1 + X 7 , X + X 4 + X 5 .

20.13 Aceeaşi problemă pentru polinoamele g0 (X) = 1 + X 3 + X 4 , g1 (X) = X +


X 3 + X 6.

20.14 Să se construiască un turbo-codificator folosind


 codificatoarele
 RSE din Ex-
1 0 0
 
emplul 20.7, N = 3, matricea de comutaţie P3 =  0 0 1  şi fără mecanism de
0 1 0
relaxare.
Să se codifice mesajul de informaţie 100 011 101.
242 PRELEGEREA 20. ALTE REZULTATE DIN TEORIA CODURILOR
Bibliografie

[1] J. Adamek - Foundations of Coding, Wiley - Interscience, 1991;

[2] L. Bahl, J. Cocker, F. Jelinek, J. Raviv - Optimal decoding of linear codes for
minimizing symbol error rate, IEEE Trans. Inf. Theory, pp. 284-287, Martie
1974;

[3] M. Blaum - A (16, 9, 6, 5, 4) error correcting dc-free block code, IEEE Transac-
tions on Information Theory, vol. 34, 1988, pp. 38-141;

[4] C. Carlet - Codes de Reed - Muller; Codes de Kerdok et de Preparata (teză de


doctorat), PARIS VI, 1990;

[5] G. Cullmann - Coduri detectoare şi corectoare de erori, Editura Tehnică, 1972;

[6] S. Guiaşu - Teoria Codurilor, Tipografia Universităţii Bucureşti, 1976;

[7] D.G. Hoffman, D.A. Leonard, C.C. Lindner, K.T. Phelps, C.A. Rodger, J.R.
Wall - Coding Theory; The Essentials, Marcel Dekker, Inc, 1991;

[8] B. Honary, G. Markarian - Trellis Decoding of Block Codes, A Parctical Ap-


proach, Kluwer Academic Publ., 1997;

[9] A. M. Kerdok - A class of low-rate non linear codes, Information and control,
20 (1972), 182-187;

[10] J.H. van Lindt - Coding Theory, Springer Verlag, 1971;

[11] J.H. van Lindt - Introduction to Coding Theory, Springer Verlag, 1982;

[12] W.E.Ryan - A Turbo Code Tutorial, IEEE Trans. Comm. pp. 1261-1271, Oct.
1996;

243
Prelegerea 1

Semnături electronice

1.1 Consideraţii generale


Vom lua ı̂n discuţie ı̂n această secţiune noţiunea de semnătură electronică (ı̂ntr-un mediu de
calcul) precum şi diverse modalităţi de utilizare ale ei.
Orice semnătură pe un document autentifică acest document dar şi angajează ı̂n mod nor-
mal responsabilitatea semnatarului. Probleme practice legate de rapiditatea transmiterii unor
documente care să fie certificate ca autentice prin semnătură au condus la necesitatea creerii
de semnături electronice.
De exemplu, se ştie că majoritatea operaţiunilor şi tranzacţiilor bancare devin legal valide
numai după ce ambele părţi au semnat formularele respective. Totuşi, dacă părţile sunt legate
ı̂ntr-o reţea de calculatoare, ele vor adesea să faciliteze această operaţie care provoacă un mare
consum de timp; solicită de aceea posibilitatea de a semna documentele folosind terminalele şi
reţeaua aflată la dispoziţie.
Deci, apare următoarea problemă:
Cum se poate crea o semnătură ı̂ntr-un mediu de calcul ?
Deoarece calculatoarele acceptă informaţia numai ı̂n formă digitală, orice semnătură pusă
ı̂n discuţie trebuie să aibă această formă. O semnătură (electronică sau olografă) trebuie să
satisfacă următoarele condiţii:

• Unică: o anumită semnătură trebuie să poată fi generată numai de o singură persoană;

• Neimitabilă: nici o altă persoană nu va putea genera semnătura utilizatorului indicat;


altfel spus, utilizatorii ilegali trebuie să rezolve probleme N P − complete dacă vor să
folosească o semnătură care nu le aparţine;

• Uşor de autentificat: orice destinatar legal şi orice arbitru (ı̂n cazul unor eventuale
dispute) să poată stabili autenticitatea semnăturii (indiferent după ce interval de timp);

• Imposibil de negat: nici un utilizator legal să nu-şi poată nega propria semnătură, sub
afirmaţia că nu este autentică;

• Uşor de generat.

Trebuie făcută totuşi distincţie ı̂ntre semnătura olografă şi cea digitală.
Iată câteva diferenţe notabile ı̂ntre cele două tipuri de semnături:

1
2 PRELEGEREA 1. SEMNĂTURI ELECTRONICE

• O semnătură scrisă de mână este o confirmare fizică a unui document, cu ajutorul unei foi
de hârtie care conţine două elemente: un mesaj (textul docu-mentului) şi o semnătură.
O astfel de legătură ı̂ntre mesaje şi semnături nu este posibilă ı̂ntr-un mediu de calcul;

• O semnătură olografă este aceeaşi indiferent de document. Pentru semnăturile digitale


ı̂nsă, este esenţial ca ele să depindă atât de semnatar cât şi de conţinu-tul documentului;

• Orice copie a unui document electronic (inclusiv semnătura) este identică cu originalul.
În schimb copia unui document pe hârtie este diferită ca valoare de original. Aceasta
conduce la ideea că un document electronic nu este reutili-zabil. De exemplu, dacă Bob
trimite lui Alice un cec ı̂n valoare de 10 milioane lei, banca nu va accepta onorarea sa
decât o singură dată.

1.2 Protocoale de semnătură


Orice protocol de semnătură este format dintr-un algoritm de semnătură şi un algoritm de
verificare. Bob semnează un mesaj x bazat pe un algoritm (secret) de semnătură sig. Rezultatul
sig(x) este apoi verificat de un algoritm public de verificare ver. Pentru orice pereche (x, y),
algoritmul de verificare oferă un răspuns dicotomic (adevărat sau fals), după cum y este o
semnătură autentică a lui x sau nu. Formal ([8]):

Definiţia 1.1 Un protocol de semnătură este un cvintuplu (P, A, K, S, V) unde:

1. P, A, K sunt mulţimi finite, nevide, ale căror elemente se numesc mesaje, semnături
şi respectiv chei;

2. Există o aplicaţie biunivocă ı̂ntre Kşi S ×V; anume, pentru fiecare K ∈ K există o pereche
unică (sigK , verK ) unde sigK : P → A, verK : P × A → {T, F } au proprietatea:
∀x ∈ P, ∀y ∈ A, verK (x, y) = T ⇐⇒ y = sigK (x)

Pentru fiecare K ∈ K, funcţiile sigK şi verK trebuie să fie calculabile ı̂n timp polinomial;
verK este publică iar sigK este secretă. Pentru Oscar, imitarea unei semnături a lui Bob pentru
un mesaj x trebuie să fie imposibilă (din punct de vedere al complexităt ii calculului). Altfel
spus, pentru un x dat, numai Bob este capabil să calculeze o semnătură y astfel ca ver(x, y) = T .
Bineı̂nţeles, nici un protocol de semnătură nu este absolut sigur, deoarece Oscar poate
ı̂ncerca – folosind funcţia publică de verificare ver – toate semnăturile y posibile ale unui mesaj
x, până va găsi semnătura corectă.
Deci, dacă ar dispune de suficient timp, Oscar poate totdeauna să contrafacă semnătura
lui Bob.

Exemplul 1.1 Un prim exemplu de semnătură este folosirea ı̂n acest scop a sistemului de
criptare RSA. Se definesc
P = A = Zn , K = {(n, p, q, a, b) | n = pq, p, q prime, ab ≡ 1 (mod φ(n))}.
n şi b sunt publice, p, q, a sunt secrete.
Pentru K = (n, p, q, a, b) se definesc:
sigK (x) = xa (mod n)
verK (x, y) = T ⇐⇒ x ≡ y b (mod n)
1.3. SEMNĂTURA EL GAMAL 3

Aici Bob semnează un mesaj folosind cheia sa de decriptare din sistemul de criptare RSA; el
este singurul capabil să genereze o semnătură corectă deoarece dK = sigK este secretă. Funcţia
de verificare utilizează funcţia de criptare eK care este publică, deci oricine o poate verifica.

De remarcat că oricine poate genera o semnătură a lui Bob pentru un mesaj aleator x; Oscar
poate alege un y şi calculează x = ek (y); atunci y = sigK (x).
Acest lucru poate fi prevenit folosind mesaje x cu suficient de multă redondantă (cu anumită
semnificaţie). O altă modalitate de a evita acest atac este folosirea unor funcţii de dispersie
(hash); vom studia această manieră ı̂n prelegerea următoare.
Să vedem cum pot fi combinate procedeele de semnătură şi criptare. Presupunem că Alice
doreşte să trimită lui Bob un mesaj criptat şi semnat. Pentru un text clar x dat, Alice determină
semnătura y = sigAlice (x), după care cifrează x şi y folosind cheia publică a lui Bob : z =
eBob ((x, y)).
Textul criptat z este transmis lui Bob. Acesta foloseşte cheia sa secretă dBob şi obţine (x, y).
După aceasta, verifică semnătura lui Alice cu ajutorul cheii publice verAlice (x, y).
Ce se ı̂ntâmplă dacă Alice criptează ı̂nainte de a semna ? Ea va calcula z = eBob (x), y =
sigAlice (eBob (x)) şi va trimite lui Bob mesajul (z, y). Acesta decriptează z, obţine x şi verifică
y ca semnătură a lui z.
Pericolul constă ı̂n faptul că Oscar poate intercepta (z, y), ı̂nlocuieşte y cu propria sa
semnătură y 0 şi transmite lui Bob mesajul (z, y 0 ).
Din acest motiv se recomandă folosirea semnăturii ı̂nainte de criptare.

1.3 Semnătura El Gamal


Fie p un număr prim (pentru care problema logaritmilor discreţi ı̂n Zp este dificilă) şi
α ∈ Zp∗ = Zp \ {0} un element primitiv. Se ia:
P = Zp∗ , A = Zp∗ × Zp−1 , K = {(p, α, a, β) | β = αa (mod p)}.
Valorile p, α, β sunt publice iar a este secret.
Pentru K = (p, α, a, β), k ∈ Zp−1 (secret) se defineşte:

sigK (x, k) = (γ, δ) unde

γ = αk (mod p), δ = (x − aγ)k −1 (mod p − 1).


Pentru x, γ ∈ Zp∗ , δ ∈ Zp−1 se defineşte

verK (x, γ, δ) = T ⇐⇒ β γ γ δ ≡ αx (mod p)

Dacă semnătura este corectă, verificarea autentifică semnătura, deoarece:

β γ γ δ ≡ αaγ αkδ (mod p) ≡ αx (mod p)

(s-a folosit egalitatea aγ + kδ ≡ x (mod p − 1)).


Protocolul de semnătură El Gamal a fost definit ı̂n 1985 ([4]). Ca o particularitate, el nu este
determinist: pentru un mesaj dat pot exista mai multe semnături valide. Funcţia de verificare
va trebui deci să accepte ca autentice toate aceste semnături.
4 PRELEGEREA 1. SEMNĂTURI ELECTRONICE

Protocolul de semnătură ElGamal este descris pe pagina anterioară.


Bob calculează semnătura folosind cheia sa secretă a şi o valoare aleatoare secretă k (generată
numai pentru semnarea mesajului x). Verificarea se realizează cu ajutorul cheii publice.
Exemplul 1.2 : Să luăm p = 467, α = 2, a = 127. Avem
β = αa (mod p) = 2127 (mod 467) = 132.
Dacă Bob doreşte să semneze mesajul x = 100 alegând valoarea k = 213 (de remarcat că
(213, 466) = 1 şi 213−1 (mod 466) = 431), va obţine
γ = 2213 (mod 467) = 29 şi δ = (100 − 127 ∗ 29) ∗ 431 (mod 466) = 51.
Pentru a verifica semnătura, calculăm
13229 ∗ 2951 ≡ 189 (mod 467) şi 2100 ≡ 189 (mod 467).
Semnătura este deci validă.
Să studiem securitatea protocolului de semnătură El Gamal.
Vom presupune că Oscar doreşte să falsifice semnătura pe mesajul x fără să ştie a.
• Dacă Oscar alege valoarea γ şi ı̂ncearcă să găsească δ corespunzător, el va trebui să
calculeze logaritmul discret logγ αx β −γ . Dacă strategia sa este inversă: să aleagă ı̂ntâi δ
şi să caute apoi γ, el va trebui să rezolve ecuaţia
β γ γ δ ≡ αx (mod p) de necunoscută γ.
Nu se cunoaşte ı̂ncă o metodă pentru rezolvarea unei astfel de probleme.

• Dacă Oscar alege aleator şi pe δ şi caută să obţină x, el va ajunge din nou la problema
logaritmului discret, adică la calculul logα β γ γ δ .
Oscar poate totuşi să semneze un mesaj aleator x ı̂n felul următor:
Fie numerele ı̂ntregi i, j (0 ≤ i ≤ p − 2, 0 ≤ j ≤ p − 2, (j, p − 1) = 1).
Se efectuează calculele:
γ = αi β j (mod p); δ = −γj −1 (mod p − 1); x = −γij −1 (mod p − 1)
(deoarece calculele sunt făcute modulo p − 1, există j −1 ).
(γ, δ) este o semnătură validă pentru x. Într-adevăr, se verifică
i j i j −1 i j −1 i j i j −1 i j −1
β γ γ δ ≡ β α β (αi β j )−α β j ≡ β α β α−ij α β β −α β ≡ α−ij α β ≡ α−γij ≡ αx
(toate calculele sunt făcute modulo p).
Să exemplificăm acest atac:
Exemplul 1.3 Fie din nou p = 467, α = 2, β = 132. Să presupunem că Oscar alege
i = 99, j = 179 ( deci j −1 = 151 (mod p − 1)); Oscar calculează:
γ = 299 132179 = 117 (mod 467)
δ = −117 × 151 = 41 (mod 466)
x = 99 × 41 = 331 (mod 466)
Deci (117, 41) este o semnătură a mesajului 331, ceea ce se poate verifica imediat, calculând
132117 11741 ≡ 303 (mod 467) şi 2331 ≡ 303 (mod 467).
Semnătura este deci validă.
Să mai arătăm o modalitate prin care Oscar poate utiliza un mesaj semnat anterior de Bob.
Să presupunem că (γ, δ) este o semnătură valida a lui x. Oscar poate semna atunci alte tipuri
de mesaje:
Fie h, i, j numere ı̂ntregi din intervalul [0, p − 2] cu (hγ − jδ, p − 1) = 1.
1.4. VARIANTE ALE PROTOCOLULUI DE SEMNĂTURĂ ELGAMAL 5

Calculăm:
l = γ h αi β j (mod p), y = δl(hγ − jδ)−1 (mod p − 1),
x0 = l(hx + iδ)(hγ − jδ)−1 (mod p − 1)
unde (hγ − jδ)−1 este calculat modulo p − 1. Se poate atunci verifica direct β l ly ≡
0
αx (mod p). Deci (l, y) este o semnătură validă a lui x0 .
Aceste două strategii construiesc semnături valide, dar se pare că nu este posibil ca cineva
să contrafacă semnătura unui mesaj ales de el, fără să rezolve o problemă de logaritmi discreţi.
Din acest motiv se consideră că nu există slăbiciuni ı̂n protocolul de semnătură El Gamal.
Să arătăm ı̂n final două maniere de a sparge acest protocol de semnătură, atunci când este
aplicat neglijent.

• Dacă ı̂ntregul aleator k este cunoscut, se determină imediat


a = (x − kδ)γ −1 mod (p − 1)
Din acest moment, Oscar, ştiind a, poate calcula semnăturile la fel ca Bob.

• Dacă se utilizează acelaşi k pentru mai multe mesaje. Aceasta ı̂i permite de asemenea lui
Oscar să determine a. El va proceda astfel:
Fie (γ, δi ) semnăturile mesajelor xi , i = 1, 2. Avem:
β γ γ δi ≡ αxi (mod p), i = 1, 2, deci αx2 −x1 ≡ γ δ2 −δ1 (mod p).
Înlocuind γ = αk se obţine ecuaţia de necunoscută k:
αx2 −x1 ≡ αk(δ2 −δ1 ) (mod p),
care este echivalentă cu x2 − x1 ≡ k(δ2 − δ1 ) (mod p − 1).
Dacă se ia d = (δ2 − δ1 , p − 1), din d | (p − 1) şi d | (δ2 − δ1 ) rezultă d | (x2 − x1 ).
Dacă notăm:

x2 − x1 δ2 − δ1 p−1
x0 = δ0 = p0 =
d d d

ecuaţia devine x0 ≡ kδ 0 (mod p). Cum (δ 0 , p0 ) = 1, se poate determina ² = (δ 0 )−1 (mod p0 ).


Valoarea lui k verifică deci relaţia k ≡ x0 (mod p), ceea ce conduce la determinarea a d
candidaţi la valoarea lui k, daţi de relaţia k = x0 + ip0 (mod p), i = 0, . . . , d − 1. Din
aceste d valori posibile, soluţia se determină testând relaţia γ ≡ αk (mod p)

1.4 Variante ale protocolului de semnătură ElGamal


În general, un mesaj este criptat şi decriptat o singură dată, fiind necesară doar securitatea
sistemului de criptare. În schimb, un document semnat – cum ar fi un contract – are o valoare
juridică, şi este posibil ca autenticitatea sa să fie verificată chiar şi după mai mulţi ani. Este deci
important să existe criterii de securitate mai severe pentru semnătura electronică decât pentru
criptare. Cum siguranţa protocolului de semnătură ElGamal este echivalentă cu complexitatea
problemei logaritmilor discreţi, este necesar să se folosească un modul p cât mai mare. Un p
de 1024 biţi conduce ı̂nsă la o semnătură ElGamal de 2048 biţi, ceea ce o elimină din multe
aplicaţii (cum ar fi exemplu smart-cardurile).
6 PRELEGEREA 1. SEMNĂTURI ELECTRONICE

1.4.1 Standard de semnătură electronică


Standardul de semnătură electronică (DSS – de la Digital Signature Standard) este o variantă a
protocolului de semnătură ElGamal, cu proprietatea că reduce substanţial lungimea semnăturii.
Protocolul de semnătură DSS este următorul:
Fie p un număr prim de 512 biţi, q un factor de 160 biţi ai lui p − 1 şi α ∈ Zp∗ o rădăcină
primitivă de ordin q a unităt ii.
Fie P = Zp∗ , A = Zq × Zq şi K = {(p, q, α, a, β) | β ≡ αa (mod p)}.
Valorile p, q, α, β sunt publice, iar a este secretă.
Pentru K = (p, q, α, a, β) şi pentru un număr (secret) k (1 ≤ k ≤ q − 1) se definesc:

• sigK (x, k) = (γ, δ) unde


γ = (αk mod p) mod q δ = (x + aγ)k −1 mod q

• Pentru x ∈ Zp∗ , γ, δ ∈ Zq funcţia de verificare este definită


verK (x, γ, δ) = T ⇐⇒ (αe1 β e2 mod p) mod q = γ
unde e1 = xδ −1 (mod q) e2 = γδ −1 (mod q)

Diferenţe ı̂ntre protocoalele de semnătură El Gamal şi DSS:

a. DSS se distinge ı̂n primul rând de El Gamal prin faptul că asigură o semnătură de 320
biţi pe un mesaj de 160 biţi, lucrând ı̂n Zp cu p de 512 biţi. Aceasta permite lucrul ı̂ntr-un
corp cu circa 2160 elemente. Ipoteza este aceea că ı̂n această bază, calculul logaritmilor
discreţi este foarte dificil.

b. În definirea lui δ semnul − s-a schimbat ı̂n +. Aceasta schimbă ecuaţia de verificare ı̂n:
αx β γ ≡ γ δ mod p.
Dacă (x + αγ, p − 1) = 1, atunci există δ −1 mod (p − 1) şi această ecuaţie se poate scrie
−1 −1
αxδ β γδ ≡ γ (mod p).

c. (idee a lui Schnorr). Să presupunem că q este un număr de 160 biţi astfel ı̂ncât q | (p−1) şi
α ∈ Zp∗ este o rădăcină primitivă de ordinul q a unitătii modulo p (pentru a găsi un astfel
(p−1)/q
de număr, se ia o rădăcină primitivă α0 ∈ Zp şi se construieşte α = α0 (mod p)). În
acest fel, β şi γ sunt de asemenea rădăcini de ordinul q ale unităţii. Deci exponenţii lui
α, β, γ se pot reduce modulo q, fără a modifica ecuaţia de verificare de mai sus.
Algoritmul de Schnorr foloseşte şi o funcţie de dispersie h : {0, 1}∗ → Zq (a se vedea
prelegerea următoare), pe baza căreia defineşte componentele semnăturii astfel:
γ = h(xkαk ), δ = k + αγ (mod q)
Pentru x ∈ {0, 1}∗ şi γ, δ ∈ Zq , procedura de verificare este
verK (x, (γ, δ)) = T ⇐⇒ h(xkαδ β −γ ) = γ
Relaţia de verificare este adevărată deoarece se obţine imediat αδ β −γ = αk (mod p)

Exemplul 1.4 Fie q = 101, p = 78q + 1 = 7879. 3 este rădăcină primitivă ı̂n Z7879 , deci se
poate lua α = 378 (mod 7879) = 170.
Dacă alegem de exemplu a = 75, obţinem β = αa (mod 7879) = 4567.
1.4. VARIANTE ALE PROTOCOLULUI DE SEMNĂTURĂ ELGAMAL 7

Să presupunem că Bob doreşte să semneze mesajul x = 1234 şi ia k = 50 (deci
k −1 (mod 101) = 99); el va avea:
γ = (17050 mod 7879) mod 101 = 2518 (mod 101) = 94
δ = (1234 + 75 × 94) × 99 (mod 101) = 97
Semnătura (94, 97) a mesajului 1234 se verifică prin calcul:
δ = 97−1 (mod 1010 = 25, e1 = 1234 × 25 (mod 1010 = 45, e2 = 94 × 25 (mod 101) = 27
−1

(17045 × 456727 mod 7879) mod 101 = 2518 mod 101 = 94


Semnătura este deci validă.
În varianta Schnorr trebuie calculată valoarea h(1234k2518) unde h este o funcţie de dis-
persie, iar 1234 şi 2518 sunt reprezentate ı̂n binar. Pentru a nu intra ı̂n detalii, să presupunem
că h(1234k2518) = 96. Atunci
δ = 50 + 75 × 96 (mod 101) = 79
şi semnătura este (96, 79).
Ea este verificată calculând 17079 4567−96 (mod 7879) = 2518 şi verificând h(1234k2518) = 96.
O altă variantă a protocolului DSS este protocolul de semnătură DSA (Digital Signature
Algorithm). Acesta a fost propus ı̂n 1991 şi adoptat ca standard de semnătură la 1 decembrie
1994 (după publicarea sa ı̂n Registrul Federal la 19 mai 1994). Singura modificare faţă de DSS
constă ı̂n ı̂nlocuirea mesajului x (din calculul lui δ şi al lui e1 ) cu SHA − 1(x), unde SHA − 1
este o funcţie de dispersie standard.
Exemplul 1.5 Să reluăm valorile lui p, q, α, a, β, k din Exemplul 1.4 şi să presupunem că Alice
vrea să semneze amprenta SHA − 1(x) = 22. Ea va calcula
k −1 (mod 1010 = 50−1 (mod 1010 = 99,
γ = (17050 (mod 7879)) (mod 1010 = 2518 (mod 101) = 94 şi
δ = (22 + 75 × 94) × 99 (mod 101) = 97.
Semnătura (94, 97) a amprentei 22 este verificată efectuând calculele;
δ −1 = 97−1 (mod 1010 = 25,
e1 = 22 × 25 (mod 101) = 45, e2 = 94 × 25 (mod 101) = 27
şi verificând că 17045 456727 (mod 7879) (mod 101) = 2518 (mod 101) = 94.
Când DSS a fost propus ı̂n 1991, a avut mai multe critici. Astfel:
• Mulţi s-au arătat nemulţumiţi de impunerea mărimii de 512 biţi pentru modul; o mărime
variabilă care să fie aleasă de beneficiari ı̂n funcţie de necesităt i ar fi fost mai convenabilă.
Ca răspuns, N IST a schimbat descrierea standardului pentru a permite alegerea ca modul
a oricărui număr divizibil cu 64 având ı̂ntre 512 şi 1024 biţi. În octombrie 2001 NIST
revine şi recomandă alegerea pentru p a unui număr prim de 1024 biţi.
• Semnăturile pot fi mult mai uşor generate decât verificate. Pentru comparaţie, ı̂n sistemul
RSA un exponent mic de decriptare poate conduce la un protocol de verificare mult mai
rapid decât semnătura. Obiecţia este ridicată din considerente practice, anume:
– Un mesaj este semnat o singură dată, dar poate fi verificat de foarte multe ori de-a
lungul timpului.
– Pe ce tipuri de calculatoare sunt efectuate aceste protocoale de semnătură şi/sau
verificare ? Cea mai mare parte a aplicaţiilor folosesc calculatoare de birou, cu
resurse limitate, care comunică cu sisteme puternice de calcul. Trebuie dezvoltat
deci un protocol care să oblige calculatorul de birou la cât mai puţine calcule.
8 PRELEGEREA 1. SEMNĂTURI ELECTRONICE

Răspunsul dat de N IST la această obiecţie a fost că este foarte puţin important ce calcul
este mai simplu, având ı̂n vedere sistemele actuale de calcul, tot mai performante.

1.4.2 Protocolul de semnătură ECDSA


În 2000 protocolul ECDSA (Elliptic Curve Digital Signature Algorithm) a fost aprobat sub
numele F IP S 186 − 2. Şi el este o variantă a protocolului ElGamal, construit pentru funcţii
eliptice. Să prezentăm o descriere a sa:
Fie p un număr prim sau o putere a lui 2 şi E o curbă eliptică peste Zp . Fie A un punct
din E de ordin q (număr prim) astfel ca Problema Logaritmului discret pentru A să fie
dificilă. Fie
P= {0, 1}∗ , A= Z1∗ × Zq∗ , K= {(p, q, E, A, m, B) | B = mA},
unde m ∈ Zq−1 . Valorile p, q, E, A, B sunt publice, m este cheia secretă.
Pentru K = (p, q, E, A, m, B) şi k ∈ Zq ales aleator, definim
sigK (x, k) = (r, s)
unde
kA = (u, v), r = u (mod q), s = k −1 (SHA1 (x) + mr) (mod q).
(dacă r · s = 0 se alege altă valoare aleatoare pentru k).
Pentru x ∈ {0, 1}∗ , r, s ∈ Zq∗ verificarea este definită prin
w = s−1 (mod q), i = w · SHA1 (x) (mod q),
j = w · r (mod q), (u, v) = iA + jB şi
verK (x, (r, s)) = T ⇐⇒ u (mod q) = r

Exemplul 1.6 Să considerăm curba eliptică y 2 = x3 + x + 6 definită peste Z11 . Alegem
parametrii protocolului de semnătură astfel: p = 11, q = 13, A = (2, 7), m = 7 şi B = (7, 2).
(a se vedea şi exemplul din prelegerea anterioară).
Să presupunem că avem un mesaj x cu SHA1 (x) = 4 şi Alice vrea să-l semneze folosind
valoarea aleatoare k = 3. Ea va calcula
(u, v) = 3 · (2, 7) = (8, 3), r = u (mod 13) = 8 şi s = 3−1 · (4 + 7 · 8) (mod 13) = 7.
Deci semnătura este (8, 7).
Bob verifică această semnătură efectuând următoarele calcule:
w = 7−1 (mod 13) = 2, i = 2 · 4 (mod 13) = 8, j = 2 · 8 (mod 13) = 3,
(u, v) = 8A + 3B = (8, 3) şi u (mod 13) = 8 = r.
Deci semnătura este validă.
1.5. PROTOCOALE DE SEMNĂTURĂ ”ONE-TIME” 9

1.5 Protocoale de semnătură ”One-time”


Ideea acestor protocoale se bazează pe faptul că funcţia care asigură semnătura este folosită
pentru a semna un singur document, după care ea este abandonată (cu toate că poate fi
verificată de un număr arbitrar de ori).
Poate cel mai cunoscut astfel de procedeu este Protocolul de semnătură Lamport:
Fie k > 0 un număr ı̂ntreg şi P = {0, 1}k . Dacă f : Y → Z este o funcţie neinversabilă,
se alege A = Y k . Se selectează aleator yi,j ∈ Y, 1 ≤ i ≤ k, j = 0, 1 şi fie zi,j = f (yi,j ).
Cheia K este lista celor 2k valori y (secrete) şi a celor 2k valori z (publice).
Pentru K = {(yi,j , zi,j ) | 1 ≤ i ≤ k, j = 0, 1} se defineşte:
sigK (x1 , . . . , xk ) = (y1,x1 , . . . , yk,xk )
şi
verK (x1 , . . . , xk , a1 , . . . , ak ) = T ⇐⇒ f (ai ) = zi,xi , 1 ≤ i ≤ k.
Conform acestui protocol, mesajul care trebuie semnat este un şir binar de lungime k.
Fiecare bit, de valoare j (j = 0, 1) este semnat prin zi,j , unde fiecare zi,j este imaginea printr-o
funcţie neinversabilă a unui yi,j .
Verificarea constă ı̂n aplicarea lui f şi compararea rezultatului cu cheia publică.
Exemplul 1.7 Fie 7879 un număr prim, iar 3 ∈ Z7879 un element primitiv. Se defineşte
f (x) = 3x mod 7879.
Dacă Bob doreşte să semneze un mesaj de trei biţi, el alege (secret) şase numere aleatoare
y1,0 = 5831 y2,0 = 803 y3,0 = 4285
y1,1 = 735 y2,1 = 2467 y3,1 = 6449
Calculează apoi imaginea lor prin funcţia f :
z1,0 = 2009 z2,0 = 4672 z3,0 = 268
z1,1 = 3810 z2,1 = 4721 z3,1 = 5731
Aceste numere z sunt publice.
Să presupunem că Bob vrea să semneze mesajul x = (1, 1, 0). Semnătura lui este
(y1,1 , y2,1 , y3,0 ) = (735, 2467, 4285)
Pentru a verifica semnătura, este suficient să se constate că:
3735 = 3810; 32467 = 4721; 34285 = 268,
toate calculele fiind realizate modulo 7879.
Oscar nu poate imita semnătura, deoarece f nu are inversă.
În plus, protocolul de semnătură nu poate fi utilizat decât pentru un singur mesaj: dacă
dispune de două mesaje cu aceeaşi semnătură, Oscar poate imita semnătura unui nou mesaj
(diferit de cele două).
De exemplu, dacă mesajele (0, 1, 1) şi (1, 0, 1) sunt semnate prin procedeul de sus cu
(y1,0 , y2,1 , y3,1 ) respectiv (y1,1 , y2,0 , y3,1 ), se pot imediat semna mesaje cum ar fi (1, 1, 1) sau
(0, 0, 1).
Deşi foarte simplu şi elegant, acest protocol nu este practic din cauza dimensiunii mari a
semnăturii. Reluând exemplul de mai sus, o implementare sigură necesită un modul p de 512
biţi. Aceasta ı̂nseamnă că fiecare bit al mesajului are o semnătură de 512 biţi; avem deci o
semnătură de 512 ori mai lungă decât mesajul !
De aceea a apărut o simplificare, care reduce lungimea semnăturii fără a diminua securitatea
ei. Numit Bos-Chaum, acest protocol este definit astfel:
10 PRELEGEREA 1. SEMNĂTURI ELECTRONICE

Fie k > 0 un număr ı̂ntreg şi P = {0, 1}k . Dacă n este un număr ı̂ntreg cu proprietatea
2k ≤ C2nn
, fie B mulţimea numerelor ı̂ntregi din intervalul [1, 2n] şi
φ:P→B
o funcţie injectivă ı̂n mulţimea B a părţilor lui B de n elemente.
Dacă f : Y → Z este o funcţie neinversabilă, fie A = Y n .
Se aleg aleator valorile yi ∈ Y, 1 ≤ i ≤ 2n şi fie zi = f (yi ).
Cheia K este lista celor 2n valori y (secrete) şi a celor 2n valori z (publice).
Pentru K = {(yi , zi ) | 1 ≤ i ≤ 2n}, se definesc
sigK (x1 , . . . , xk ) = {yj | j ∈ φ(x1 , . . . xk )}
şi
verK (x1 , . . . , xk , a1 , . . . , an ) = T ⇐⇒ {f (ai ) | 1 ≤ i ≤ n} = {zj | j ∈ φ(x1 , . . . , xk )}
Avantajul protocolului Bos-Chaum este acela că scurtează semnătura. De exemplu, să
presupunem că vrem să semnăm un mesaj de şase biţi (k = 6); cum 26 = 64 şi C84 = 70,
putem lua n = 4. Aceasta permite semnarea mesajului cu numai patru valori y (ı̂n loc de
şase la Lamport). De asemenea, şi cheia este mai scurtă, cu numai opt valori z faţă de 12 la
semnătura Lamport.
Protocolul de semnătură Bos-Chaum necesită o funcţie injectivă φ care asociază fiecărei
secvenţe de k biţi x = (x1 , . . . , xk ) o submulţime de n elemente. Un exemplu de algoritm
simplu care realizează o astfel de asociere este:
k
X
x← xi 2i−1
i=1
φ(x) ← ∅
t ← 2n
e←n
while t > 0 do
t←t−1
if x > Cte then
x ← x − Cte
e←e−1
φ(x) ← φ(x) ∪ {t + 1}.
enddo
Dacă vrem să dăm o estimare generală a valorii lui n din protocolul Bos-Chaum, plecăm de
n (2n)!
la inegalitatea 2k ≤ C2n
n
ı̂n care se evaluează C2n = 2
cu formula lui Stirling, obţinându-se
√ (n!)
22n / πn. După simplificări şi logaritmare ı̂n baza 2 se ajunge la relaţia:
log2 nπ
k ≤ 2n −
2
Asimptotic, n este de ordinul lui k/2, deci protocolul de semnătură Bos-Chaum reduce
mărimea semnăturii lui Lamport cu aproximativ 50%.

1.6 Semnături incontestabile


Semnăturile incontestabile au fost introduse de Chaum şi van Antwerpen ı̂n 1989. Ele prezintă
câteva caracteristici. Astfel:
1.6. SEMNĂTURI INCONTESTABILE 11

• Semnătura nu poate fi validată fără aportul semnatarului Bob. Aceasta ı̂l protejează pe
Bob de difuzarea fără consimtământ a unui document pe care se pretinde că l-ar fi semnat.
Validarea se face urmând un protocol de ı̂ntrebări şi răspunsuri.
• Pentru a evita ca Bob să-şi nege propria semnătură, există un protocol de dezminţire pe
care Bob trebuie să-l urmeze pentru a arăta că o semnătură este falsă.
Refuzul de a folosi acest protocol este o confirmare a autenticităţii semnăturii.
Deci, un protocol de semnătură incontestabilă este format dintr-o funcţie de semnă-tură, un
protocol de verificare şi o procedură de dezminţire.
Algoritmul Chaum-van Antwerpen este:
Fie p = 2q + 1 un număr prim cu proprietatea că q este prim şi α ∈ Zp∗ un element de
ordin q. Pentru 1 ≤ a ≤ q − 1, se defineşte β ≡ αa mod p.
Fie G subgrupul de ordin q al lui Zp generat de α.
Se definesc P = A = G, K = {(p, α, a, β) | β ≡ αa (mod p)}.
Valorile p, α, β sunt publice iar a este secretă.
Pentru K = (p, α, a, β), x ∈ G se defineşte y = sigK (x) = xa mod p.
Pentru x, y ∈ G, protocolul de verificare se efectuează astfel:

1. Alice alege aleator numerele e1 , e2 ∈ Zq∗ ;

2. Alice calculează c = y e1 β e2 mod p şi-l trimite lui Bob;


−1
3. Bob calculează d = ca mod q
mod p şi-l trimite lui Alice;

4. Alice admite autenticitatea lui y dacă şi numai dacă d ≡ xe1 αe2 mod p.

A. Să explicăm ı̂ntâi rolul lui p şi q ı̂n acest protocol. Calculele sunt efectuate ı̂n Zp . Este
necesar totuşi ca anumite calcule să fie făcute ı̂ntr-un subgrup al său de ordin prim (notat cu
G). În particular este nevoie să calculăm inverse modulo q (ceea ce justifică de ce q = card(G)
trebuie să fie prim). Alegând p = 2q + 1 cu q prim, se asigură acest deziderat şi - ı̂n plus -
dimensiunea lui G este maximă, lucru de dorit deoarece mesajele de semnat sunt elemente din
G.
Să arătăm ı̂ntâi cum admite Alice autenticitatea semnăturilor valide. În calculul de mai
jos, exponenţii sunt reduşi modulo q.
−1 −1 −1
d ≡ ca (mod p) ≡ y e1 a β e2 a (mod p).
−1
Cum β ≡ αa (mod p), avem β a ≡ α (mod p).
−1
De asemenea, din y = xa (mod p) rezultă y a ≡ x (mod p).
Se ajunge deci la d ≡ xe1 αe2 (mod p).
Exemplul 1.8 Fie p = 467. 2 este o rădăcină primitivă, deci 22 = 4 este un generator al lui
G, grupul reziduurilor patratice modulo 467. Vom lua deci α = 4.
Să presupunem a = 101; avem β = αa mod 467 = 449.
Bob semnează deci mesajul x = 119 cu y = 119101 mod 467 = 129.
Să presupunem că Alice vrea să autentifice semnătura y şi că alege pentru asta e1 = 38, e2 =
397. Ea calculează c = 13, la care Bob răspunde cu d = 9. Alice verifică atunci relaţia
11938 4397 ≡ 9 (mod 467).
Semnătura este acceptată ca autentică.
12 PRELEGEREA 1. SEMNĂTURI ELECTRONICE

B. Să arătăm acum că Alice nu poate accepta o semnătură falsă drept autentică decât cu
o probabilitate neglijabilă.

Teorema 1.1 Dacă y 6≡ xa (mod p) atunci Alice admite pe y ca semnătură autentică a lui x
cu probabilitate 1/q.

Demonstraţie: Se observă că orice ı̂ntrebare c corespunde la exact q perechi (e1 , e2 ) posibile
(deoarece y şi β sunt elemente ale grupului G de ordin q prim şi ı̂n definiţia lui c, fiecare e1
determină un e2 unic). Când Bob primeşte c, el nu ştie ce pereche (e1 , e2 ) a fost folosită pentru
a-l construi. Vom arăta că dacă y 6≡ xa (mod p), orice răspuns d nu poate fi consistent decât
cu o singură pereche (e1 , e2 ).
Deoarece α generează G, orice element din G se scrie ca o putere (unică modulo q) a lui α.
Deci c = αi , d = αj , x = αk , y = αm cu i, j, k, m ∈ Zq şi operaţiile aritmetice efectuate modulo
p. Să considerăm sistemul:
c ≡ y e1 β e2 (mod p) d ≡ xe1 αe2 (mod p).
El este echivalent cu
i ≡ me1 + ae2 (mod q) j ≡ ke1 + e2 (mod q).
Cum prin ipoteză y 6≡ xa (mod p), rezultă m 6≡ ak (mod q).
Astfel, matricea sistemului modulo q admite un determinant nenul, deci sistemul are soluţie
unică. Altfel spus, pentru orice d ∈ G, nu există răspuns corect la ı̂ntrebarea c decât pentru
un singur cuplu (e1 , e2 ). Deci probabilitatea ca Bob să răspundă corect lui Alice ı̂n condiţiile
teoremei este 1/q. 2
C. Să construim acum procedura de dezminţire. Ea foloseşte de două ori protocolul de
verificare. Algoritmul este:

1. Alice alege aleator e1 , e2 ∈ Zq∗ ;

2. Alice calculează c = y e1 β e2 (mod p) şi-l trimite lui Bob;


−1
3. Bob calculează d = ca mod q
(mod p) şi-l trimite lui Alice;

4. Alice verifică d 6≡ xe1 αe2 (mod p);

5. Alice alege aleator f1 , f2 ∈ Zq∗ ;

6. Alice calculează C = y f1 β f2 (mod p) şi-l trimite lui Bob;


−1
7. Bob calculează D = C a mod q
(mod p) şi-l trimite lui Alice;

8. Alice verifică D 6≡ xf1 αf2 (mod p);

9. Alice admite că y este fals dacă şi numai dacă


(dα−e2 )f1 ≡ (Dα−f2 )e1 (mod p)

Paşii 1 − 4 şi 5 − 8 corespund protocolului de verificare. Pasul 9 este validarea consistenţei


răspunsului, care permite lui Alice să determine dacă Bob a calculat bine răspunsurile sale
conform protocolului.
1.6. SEMNĂTURI INCONTESTABILE 13

Exemplul 1.9 Să luăm parametrii din exemplul anterior: p = 467, α = 4,


a = 101, β = 449. Fie mesajul x = 286 cu semnătura (greşită) y = 83.
Bob doreşte să dezmintă această semnătură.
Fie e1 = 45, e2 = 237 primele valori alese de Alice. Ea calculează c = 305 şi Bob răspunde
cu d = 109. Alice calculează atunci
28645 4237 (mod 467) = 149.
Deoarece 149 6= 109, Alice trece la pasul 5 al protocolului. Să presupunem că ea alege acum
f1 = 125, f2 = 9 şi calculează C = 270 la care Bob răspunde cu D = 68. Alice calculează acum
286125 49 (mod 467) = 25.
Cum 25 6= 68, Alice trece la pasul 9 şi efectuează testul de consistentă:
(109 × 4−237 )125 ≡ 188 (mod 467) (68 × 4−9 )45 ≡ 188 (mod 467)
Acum Alice este convinsă că semnătura nu este valabilă.
Pentru final, mai trebuiesc arătate două elemente:
• Bob poate să o convingă pe Alice să invalideze o semnătură incorectă.
• Bob nu poate să o convingă pe Alice să invalideze o semnătură corectă decât cu proba-
bilitate neglijabilă.
Teorema 1.2 Dacă y 6≡ xa (mod p) şi dacă Alice şi Bob urmează corect protocolul de dezmin-
ţire, atunci
(dα−e2 )f1 ≡ (Dα−f2 )e1 (mod p).
−1
Demonstraţie: Utilizând faptul că d ≡ ca (mod p) şi c ≡ y e1 β e2 (mod p), avem:
−1 −1
(dα−e2 )f1 ≡ ((y e1 β e2 )a α−e2 )f1 (mod p) ≡ y e1 f1 β e2 a f1 α−e2 f1 (mod p)
≡ y e1 f1 αe2 f1 α−e2 f1 (mod p) ≡ y e1 f1 (mod p).
−1
Un calcul similar folosind D ≡ C a (mod p), C ≡ y f1 β f2 (mod p) şi
β ≡ αa (mod p) arată că
(Dα−f2 )e1 ≡ y e1 f1 (mod p)
deci testul de consistentă de la pasul 9 reuşeşte. 2
Să studiem acum cazul când Bob ı̂ncearcă să dezmintă o semnătură validă. În acest caz
Bob nu va urma protocolul, şi va construi d şi D fără să respecte procedura.
Teorema 1.3 Să presupunem că y ≡ xa (mod p) şi Alice urmează procedura de dezminţire.
Dacă d 6≡ xe1 αe2 (mod p) şi D 6≡ xf1 αf2 (mod p) atunci probabilitatea ca (dα−e2 )f1 6≡
1
(Dα−f2 )e1 (mod p) este 1 − .
q
Demonstraţie: Să presupunem că avem (conform ipotezei):
y ≡ xa d 6≡ xe1 αe2 D 6≡ xf1 αe2 (dα−e2 )f1 ≡ (Dα−f2 )e1
toate calculele fiind făcute modulo p. Vom arăta că se ajunge la o contradicţie.
Testul de consistenţă (pasul 9) se rescrie D ≡ df01 αf2 (mod p) unde
d0 = d1/e1 α−e2 /e1 (mod p) nu depinde decât de paşii 1 − 4 ai protocolului. Aplicând Teorema
1
1.1 se obţine că y este o semnătură validă a lui d0 cu probabilitate 1 − . Dar, prin ipoteză, y
q
este o semnătură validă a lui x. Deci, cu mare probabilitate vom avea xa ≡ da0 (mod p) adică
x = d0 .
Pe de-altă parte, din d 6≡ xe1 αe2 (mod p) rezultă x 6≡ d1/e1 α−e2 /e1 (mod p), adică tocmai
x 6= d0 , contradicţie. 2
14 PRELEGEREA 1. SEMNĂTURI ELECTRONICE

1.7 Protocol de semnătură fără eşec


O semnătură fără eşec oferă protecţie contra unui adversar atât de puternic ı̂ncât poate con-
traface semnături. Protocolul de semnătură prezentat aici este construit de Heyst şi Pedersen
ı̂n 1992. Este un tip de semnătură one - time, compus dintr-o funcţie de semnătură, o funcţie
de verificare şi un protocol pentru proba de autentificare. Prezentarea sa ı̂n detaliu este:
Fie p = 2q + 1 un număr prim cu q prim, şi α ∈ Zp∗ un element de ordin q. Pentru
1 ≤ a0 ≤ q − 1 se defineşte β = αa0 (mod p).
Valorile p, q, α, β sunt publice şi considerate fixe.
Valoarea a0 este secretă pentru toată lumea (inclusiv Bob).
Fie P = Zq , A = Zq × Zq . O cheie este de forma K = (γ1 , γ2 , a1 , a2 , b1 , b2 ) unde
a1 , a2 , b1 , b2 ∈ Zq , γ1 = αa1 β a2 (mod p) γ2 = αb1 β b2 (mod p).
γ1 , g2 sunt publice, a1 , a2 , b1 , b2 sunt secrete.
Dacă x ∈ Zq , se defineşte
sigK (x) = (y1 , y2 ) unde y1 = a1 + xb1 (mod q) y2 = a2 + xb2 (mod q).
Pentru y = (y1 , y2 ) ∈ Zq × Zq , avem
verK (x, y) = T ⇐⇒ γ1 γ2x ≡ αy1 β y2 (mod p)
Se poate vedea direct că o semnătură corect construită este validată de funcţia de verificare.
Rămâne de studiat problema de securitate şi de ce procedeul este fără eşec. Să stabilim ı̂ntâi
câteva proprietăţi importante ale cheilor.
Două chei (γ1 , γ2 , a1 , a2 , b1 , b2 ) şi (γ 01 , γ 02 , a01 , a02 , b01 , b02 ) sunt echivalente dacă
γ1 = γ 01 , γ2 = γ 02 .
În fiecare clasă de echivalenţă sunt exact q 2 chei.
Lema 1.1 Dacă K, K 0 sunt chei echivalente, atunci

verK = T ⇐⇒ verK 0 = T.

Demonstraţie: Fie K = (γ1 , γ2 , a1 , a2 , b1 , b2 ) şi K 0 = (γ1 , γ2 , a10 , a02 , b01 , b02 ) cu


0 0 0 0
γ1 ≡ αa1 β a2 (mod p) ≡ αa1 β a2 (mod p) şi γ2 ≡ αb1 β b2 (mod p) ≡ αb1 β b2 (mod p).
Să presupunem că mesajul x este semnat cu y = (y1 , y2 ) folosind cheia K, unde
y1 ≡ a1 + xb1 (mod q) y2 ≡ a2 + xb2 (mod q)
Să presupunem că verificarea lui y se face cu cheia K 0 :
0 0 0 0 0 0 0 0
αy1 β y2 ≡ αa1 +xb1 β a2 +xb2 (mod p) ≡ αa1 β a2 (αb1 β b2 )x (mod p) ≡ γ1 γ2x (mod p).
Deci y se verifică şi cu cheia K 0 . 2
Lema 1.2 Fie o cheie K şi y = sigK (x). Există exact q chei K 0 echivalente cu K astfel ı̂ncât
y = sigK 0 (x).
Demonstraţie: Fie γ1 , γ2 componentele publice ale lui K. Trebuie determinat numărul de
quadrupluri (a1 , a2 , b1 , b2 ) astfel ı̂ncât
γ1 ≡ αa1 β a2 (mod p) γ2 ≡ αb1 β b2 (mod p)
y1 ≡ a1 + xb1 (mod q) y2 = a2 + xb2 (mod q).
Cum α generează Zq∗ , există exponenţii unici c1 , c2 , a0 ∈ Zq astfel ı̂ncât
γ1 ≡ αc1 (mod p), γ2 ≡ αc2 (mod p), β ≡ αa0 (mod p).
În acest fel, este necesar şi suficient să avem:
c1 ≡ a1 + a0 a2 (mod q) c2 ≡ b1 + a0 b2 (mod q)
1.7. PROTOCOL DE SEMNĂTURĂ FĂRĂ EŞEC 15

y1 ≡ a1 + xb1 (mod q) y2 ≡ a2 + xb2 (mod q).


Matricea
¯
acestui¯
sistem de ecuaţii cu necunoscutele a1 , a2 , b1 , b2 are rangul 3 (determinantul
¯ 1 a0 0 0 ¯
¯ ¯
¯ 0 0 1 a ¯
¯ 0 ¯
este ¯ ¯), deci sistemul are cel puţin o soluţie netrivială obţinută cu ajutorul cheii
¯ 1 0 x 0 ¯
¯ ¯
¯ 0 1 0 x ¯
K şi – ı̂n plus – dimensiunea spaţiului soluţiilor este 4 − 3 = 1, deci există exact q soluţii. 2

Lema 1.3 Fie o cheie K, y = sigK (x) şi verK (x0 , y 0 ) = T pentru x0 6= x. Există atunci cel
puţin o cheie K 0 echivalentă cu K astfel ca
y = sigK 0 (x), y 0 = sigK 0 (x0 )

Demonstraţie: Se face printr-un raţionament analog cu cel din lema precedentă. 2


Din ultimele două leme putem trage următoarea concluzie: fiind dată o semnătură validă y
a unui mesaj x, există exact q chei posibile care pot semna x. Pentru orice alt mesaj x0 6= x,
aceste q chei produc semnături diferite ale lui x0 . Se obţine astfel teorema următoare:

Teorema 1.4 Fiind date sigK (x) = y şi x0 6= x, Oscar nu poate calcula sigK (x0 ) decât cu
1
probabilitate .
q
De remarcat că rezultatul acestei teoreme nu depinde de puterea de calcul a lui Oscar;
securitatea provine din faptul că el nu poate distinge care din cele q chei posibile a fost utilizată.

Se poate explica acum noţiunea de semnătură fără eşec. S-a arătat că fiind dat un mesaj
x semnat cu y, Oscar nu poate calcula semnătura y 0 a lui Bob pe un alt mesaj x0 . Ar mai fi
posibilitatea ca Oscar să poată calcula o semnătură y” 6= sigK (x0 ) care să fie validă. Dar, dacă
1
ea ajunge ı̂napoi la Bob, acesta poate furniza cu probabilitate 1 − o probă de autentificare;
q
aceasta este valoarea a0 = logα β, cunoscută numai de autor.
Să presupunem că Bob are o pereche (x0 , y”) astfel ı̂ncât
verK (x0 , y”) = T şi y” 6= sigK (x0 ).
x0
Avem γ1 γ2 ≡ αy1 ” β y2 ” (mod p) unde y” = (y1 ”, y2 ”).
Bob poate calcula propria sa semnătură pentru x0 , pe care o notează y 0 = (y1 0 , y2 0 ) şi are
0 0 0
γ1 γ2x ≡ αy1 β y2 (mod p).
0 0
Deci αy”1 β y”2 ≡ αy1 β y2 (mod p). Scriind β = αa0 (mod p) se obţine:
0 0
αy”1 +a0 y”2 ≡ αy1 +a0 y2 (mod p) de unde y”1 + a0 y”2 ≡ y 01 + a0 y 02 (mod q)

sau y”1 − y 01 ≡ a0 (y 02 − y”2 ) (mod q). Evident y 02 6≡ y”2 deoarece y” este un fals.
Deci (y 02 − y”2 )−1 (mod q) există şi avem:
a0 = logα β = (y”1 − y 01 )(y 02 − y”2 )−1 (mod q).
Bineı̂nţeles, ı̂n verificarea probei de autentificare s-a presupus că nici Bob nu poate calcula
logaritmul discret logα β.
Ca o remarcă finală, acest procedeu este cu utilizare unică, deoarece cheia K a lui Bob poate
fi uşor determinată după două folosiri.
16 PRELEGEREA 1. SEMNĂTURI ELECTRONICE

Exemplul 1.10 Să presupunem p = 3467 = 2 × 1733 + 1. Numărul α = 4 are ordinul 1733 ı̂n

Z3467 . Dacă se ia a0 = 1567 vom avea β = 41567 (mod 3467) = 514.
Reamintim că Bob cunoaşte α şi β dar nu a0 .
Să presupunem că Bob construieşte cheia sa cu a1 = 888, a2 = 1024,
b1 = 786, b2 = 999 deci
γ1 = 4888 5141024 (mod 3467) = 3405 γ2 = 4786 514999 (mod 3467) = 2281.
În acest moment Bob este pus ı̂n prezenţa semnăturii false (822, 55) a mesajului 3383.
Această semnătură este validă, deoarece condiţia de verificare este satisfăcută:
3405 × 22813383 ≡ 2282 (mod 3467) 4822 51456 ≡ 2282 (mod 3467).
Dar Bob ştie că aceasta nu este semnătura sa şi trebuie să dovedească acest lucru. El
calculează propria sa semnătură:
(888 + 3383 × 786 (mod 1733), 1024 + 3383 × 999 (mod 1733)) = (1504, 1291)
după care evaluează logaritmul discret
a0 = (822 − 1504)(1291 − 55)−1 (mod 1733) = 1567
care constituie probă de autentificare, şi arată că semnătura nu ı̂i aparţine.
1.8. EXERCIŢII 17

1.8 Exerciţii
1.1 Să presupunem că Bob utilizează semnătura El Gamal şi semnează mesajele x1 , x2 obţi-
nând (γ, δ1 ) respectiv (γ, δ2 ) (cu aceeaşi valoare a lui γ ı̂n ambele sem-nături). Se consideră ı̂n
plus că (δ1 − δ2 , p − 1) = 1.

• Arătaţi că aceste informaţii sunt suficiente pentru determinarea lui k;

• Arătaţi cum se poate sparge protocolul de semnătură;

• Presupunând p = 3187, α = 5, β = 25703, efectuaţi calculul lui k şi a plecând de la


semnăturile (23972, 31396) pentru x = 8990 şi (23972, 20481) pentru x = 31415.

1.2 Protocolul de semnătură El Gamal este implementat folosind p = 31847,


α = 5, β = 26379. Să se scrie un program care:

• Verifică semnătura (20679, 11082) a mesajului x = 20543.

• Calculează exponentul secret a prin compromisul spaţiu - timp al lui Shanks. Apoi deter-
mină valoarea aleatoare k utilizată ı̂n semnătura lui x.

1.3 Bob utilizează procedeul de semnătură El Gamal ca ı̂n Exemplul 1.1: p = 467, α = 2, β =
132. Să presupunem căel semnează mesajul x = 100 cu (29, 51). Calculaţi semnătura falsă pe
care o poate obţine Oscar cu h = 102, i = 45, j = 293. Autentificaţi semnătura rezultată cu
funcţia de verificare.

1.4 Arătaţi că a doua metodă de atac din semnătura El Gamal furnizează o semnă-tură corectă
care satisface funcţia de verificare.

1.5 Modificăm puţin protocolul de semnătură El Gamal. Cheia este construită astfel: Bob
alege o rădăcină primtivă α ∈ Zp∗ , un exponent secret a (0 ≤ a ≤ p−2), (a, p−1) = 1 şi β = αa .
Cheia este K = (α, a, β) unde α, β sunt publice, iar a este secretă. Fie x ∈ Zp un mesaj care
trebuie semnat. Bob calculează semnătura sigK (x) = (γ, δ) prin:

γ = αk (mod p) δ = (x − kγ)a−1 (mod p − 1).

Singura diferentă fată de semnătura El Gamal este calculul lui δ.

• Descrieţi cum se poate verifica cu cheia publică a lui Bob o semnătură (γ, δ) pe un mesaj
x;

• Descrieţi avantajul noului procedeu (fată de cel vechi) din punct de vedere al calculelor;

• Comparaţi pe scurt securitatea celor două protocoale.

1.6 Bob utilizează procedeul DSS cu q = 101, p = 7879, α = 170, a = 75, β = 4567.
Determinaţi semnătura lui Bob pe mesajul x = 5001 utilizând valoarea aleatoare k = 49, şi
arătaţi cum poate fi verificată semnătura rezultată.
18 PRELEGEREA 1. SEMNĂTURI ELECTRONICE

1.7 În protocolul de semnătură Lamport, Bob semnează două mesaje x, x0 , ambele de câte k
biţi. Fie s = d(x, x0 ) numărul de coordonate ı̂n care diferă cele două mesaje. Arătaţi că Oscar
poate semna 2s − 2 mesaje noi.

1.8 În protocolul de semnătură Bos-Chaum cu k = 6, n = 4 sunt semnate mesajele x =


(0, 1, 0, 0, 1, 1), x0 = (1, 1, 0, 1, 1, 1). Determinaţi noile mesaje pe care le poate semna Oscar,
plecând de la semnăturile lui x şi x0 .

1.9 În protocolul de semnătură Bos-Chaum, Bob semnează două mesaje x, x0 . Fie s =
card(φ(x) ∪ φ(x0 )). Arătaţi că Oscar poate semna acum Csn − 2 mesaje noi.

1.10 Bob utilizează protocolul de semnătură incontestabilă Chaum-van Antwerpen ca ı̂n Ex-
emplul 1.7; deci p = 467, α = 4, a = 101, β = 449. Să presupunem că Bob este confruntat
cu semnătura y = 25 a mesajului x = 157 şi doreşte să arate că ea este falsă. Presupunând că
Alice alege valorile aleatoare e1 = 46, e2 = 123, f1 = 198, f2 = 11 ı̂n protocolul de dezminţire,
calculaţi ı̂ntrebările c, d ale lui Alice şi răspunsurile C, D ale lui Bob; verificaţi că Alice
admite dezminţirea.

1.11 Arătaţi că clasele de echivalentă de chei ı̂n protocolul de semnătură fără eşec Pedersen
- van Heyst conţine q 2 chei.

1.12 Bob utilizează protocolul de semnătură fără eşec Pedersen - van Heyst cu p = 3467, α =
4, a0 = 1567, β = 514 (valoarea lui a0 nu este cunsocută de Bob).

• Folosind faptul că a0 = 1567, determinaţi toate cheile posibile


K = (γ1 , γ2 , a1 , a2 , b1 , b2 ) astfel ca sigK (42) = (1118, 1449).

• Presupunem sigK (42) = (1118, 1449) şi sigK (969) = (899, 471). Fără a utiliza valoarea
lui a0 , determinaţi valoarea lui K (cea utilizată ı̂n protocolul cu cheie one - time).

1.13 Bob foloseşte protocolul de semnătură fără eşec Pedersen - van Heyst cu p = 5087, α =
25, β = 1866. Cheia este K = (5065, 5076, 144, 874, 1873, 2345). Se presupune că Bob este
confruntat cu semnătura (2219, 458) contrafăcută pe mesajul 4785.

• Arătaţi că ea satisface condiţia de verificare, deci este validă.

• Arătaţi cum poate Bob să calculeze proba de autenticitate plecând de la această semnătură.
Bibliografie

[1] J. N. Bos, D. Chaum - Provably unforgable signatures; Lecture Notes in Computer Science,
740(1993), 1 − 14

[2] D. Chaum, H. van Antwerpen - Undeniable signatures; Lecture Notes in Computer Science,
435(1990), 212 − 216

[3] W. Diffie, M.E. Hellman - Multiuser cryptographic techniques; AFIPS Conference Proceed-
ings, 45(1976), 109 − 112

[4] T. El Gamal - A public key cryptosystem and a signature scheme based on discrete algo-
rithms; IEEE Trans on Inf. Theory, 31(1985), 469 − 472

[5] E. van Heyst, T.P.Petersen - How to make efficient fail-stop signatures; Lecture Notes in
Computer Science, 658(1993), 366 − 377

[6] C. J. Mitchell, F. Piper, P. Wild - Digital signatures; Contemporary Cryptology, The Science
of Information Integrity, IEEE Press, (1992), 325 − 378

[7] M. E. Smid, D. K. Branstad - Response to comments on the N IST proposed digital signa-
ture standard; Lecture Notes in Computer Science, 740(1993), 76 − 88

[8] D. Stinton - Cryptographie, Theorie and Practique, Int. Thompson Publishing (1995)

[9] Digital signature standard; national Bureau of Standards, FIPS Publications 186, 1994

19
Prelegerea 3

Generatori de numere pseudo -


aleatoare

3.1 Numere aleatoare şi numere pseudo-aleatoare


Aproape toate sistemele de criptare şi protocoalele folosite ı̂n criptografie au un punct central:
alegerea unor numere arbitrare, necunoscute apriori, imprevizibile; denumirea standard este
numere aleatoare sau numere generate aleator. În general nu se poate vorbi de un singur
număr aleator decât ı̂ntr-un context statistic. Termenul corect este acela de şir de numere
aleatoare.
Folosirea calculatorului reduce termenul de numere aleatoare la un şir de biţi generaţi
aleator, grupaţi după o anumită regulă. Matematic, nu există o modalitate mai scurtă de
a specifica şirul decât secvenţa ı̂nsaşi.
Statistica oferă destul de puţine informaţii despre biţii generaţi aleator. De exemplu, se ştie
că 0 trebuie să apară la fel de frecvent ca 1, că 00 trebuie să apară de două ori mai rar decât
0 (sau 1) şi la fel de des ca 11, 10, 01. Există şi teste statistice (χ2 - Kolmogorov) care arată
cât de aleatoare sunt numerele dintr-un şir.
În criptografie este esenţial ca un număr aleator să nu paotă fi aflat. Un număr perfect
aleator este acela pe care Oscar nu-l poate ghici decât prin forţă brută. O parte destul de im-
portantă din criptanaliză se bazează pe exploatarea imperfecţiunilor unor funcţii care generează
numere aleatoare.
O generare de numere pur aleatoare se realizează prin colectarea şi procesarea de date
obţinute dintr-o sursă de entropie exterioară calculatorului. Sursa de entropie poate fi foarte
simplă, ca de exemplu variaţiile mişcării mouse-ului, sau intervalul de timp dintre apăsarea a
două taste. Surse foarte bune de entropie pot fi cele radioactive sau cele care folosesc zgomote
din atmosferă.
Proprietatea de a fi aleator a fost introdusă ı̂n calculatoare cu ajutorul generatorilor de
numere pseudo-aleatoare.

Definiţia 3.1 Fie m, k (m − 1 ≥ k > 0) numere ı̂ntregi. Un (k, m) generator de numere


pseudo-aleatoare este o aplicaţie recursivă
f : Z2k −→ Z2m
calculabilă ı̂n timp polinomial.

33
34 PRELEGEREA 3. GENERATORI DE NUMERE PSEUDO - ALEATOARE

În aplicaţii, m se obţine din k printr-o aplicaţie polinomială.


Un generator de numere pseudo-aleatoare trebuie să satisfacă anumite cerinţe:
• Să fie simplu şi rapid.
• Să producă şiruri de numere de lungime arbitrară care să nu conţină repetiţii. Deoarece
un calculator nu poate genera decât numere mai mici decât un număr dat, nu se poate
construi un generator cu perioadă infinită. Generatorul trebuie să aibă totuşi o perioadă
cât mai mare.
• Să producă numere independente unul de altul (sau cu o corelare cât mai vagă).
• Să genereze numere cu o repartiţie uniformă.
Fie S un circuit secvenţial cu m = |S| stări şi F = {f | f : S −→ S} mulţimea funcţiilor de
tranziţie. Un generator de numere pseudo-aleatoare este definit prin
xn = f (xn−1 ), x0 oarecare
Un astfel de generator este cu atât mai eficient cu cât satisface mai bine cerinţele anetrioare.

3.2 Generatori simpli de numere pseudo-aleatoare


3.2.1 Generatori liniari congruenţiali
Un astfel de generator (construit de Lehmer ı̂n 1949) este definit de formula
xn+1 = axn + b (mod m)
Valorile a (multiplicatorul), b (incrementul) şi m (modulul) sunt constante. Cheia de generare
este valoarea iniţială x0 .
Când b = 0 generatorul se numeşte multiplicativ.
Din definiţie rezultă imediat că orice generator liniar congruenţial intră ı̂ntr-o ciclare cărei
lungime se numeşte perioadă. Evident că perioada maximă a generator liniar este m. Ea poate
fi atinsă pentru anumite valori ale perechii (a, b) (de exemplu dacă (b, m) = 1). Un generator
congruenţial liniar de perioadă m se numeşte generator de perioadă maximală. O analiză a
strategiei de selecţie a valorilor pentru a asigura o perioadă maximă se poate găsi ı̂n [3] şi [4].
O analiză teoretică detaliată a generatorilor liniari congruenţiali se găseşte ı̂n [7].
În Tabelul 1 se află listaţi câţiva generatori de perioadă maximală. Numerele pseudo-
aleatoare obţinute nu depăşesc valoarea de pe ultima coloană.
a b m Mărime a b m Mărime
20
105 1283 6075 2 1277 24749 117128 228
21
211 1663 7875 2 2311 25367 120050 229
421 1663 7875 222 3877 29573 139968 230
430 2531 11979 223 8121 28411 134456 231
24
171 11213 53125 2 9301 49297 233280 232
141 28411 134456 225 2416 374441 1771875 233
26
421 17117 81000 2 17221 107839 510300 234
1093 18257 86436 227 84589 45989 217728 235
Tabelul 1
3.2. GENERATORI SIMPLI DE NUMERE PSEUDO-ALEATOARE 35

Avantajul generatorilor liniari congruenţiali este rapiditatea de calcul.


O generalizare a relaţiei de recurenţă este
xn+k = (ak xn + (ak − 1)c/b) (mod m)
care dă un generator de perioadă maximală când:

• (c, m) = 1;

• b = a − 1 este multiplu de p, pentru orice număr prim p care divide m;

• b (mod 4) = 0 dacă m (mod 4) = 0.

Dezavantajul generatorilor liniari congruenţiali este acela că ei nu mai pot fi folosiţi ı̂n
criptografie; ştiind prima valoare, numerele pot fi găsite uşor. Criptanaliza a fost realizată de
Jim Reeds ı̂n 1977 (cu completări ı̂n 1979) şi Joan Boyar ı̂n 1982. Ea a spart şi generatorii
pătratici
xn+1 = (ax2n + bxn + c) (mod m)
şi cubici
xn+1 = (ax3n + bx2n + cxn + d) (mod m)
Alţi cercetători au extins metodele de atac pentru spargerea oricărui generator polinomial
congruenţial.
Acum, acest tip de generator de numere pseudo-aleatoare este folosit ı̂n aplicaţii necrip-
tografice; de exemplu, ı̂n simulare ele asigură o comportare statistică bună ı̂n majoritatea
testelor.

3.2.2 Generatori Ranrot


Clasa generatorilor Ranrot a fost definită de danezul Agner Fog ı̂n 1997 ([2]), iniţial pentru
algoritmi Monte Carlo. Ea se bazează pe generatoare de numere Fibonacci, completate cu
operaţia de rotaţie pe biţi. Sunt studiate trei tipuri de generatoare Ranrot:

• Tip A: xn = ((xn−j + xn−k ) (mod 2b )) À r;

• Tip B: xn = ((xn−j À r1 ) + (xn−k À r2 )) (mod 2b );

• Tip B3: xn = ((xn−i À r1 ) + (xn−j À r2 ) + (xn−k À r3 )) (mod 2b );

• Tip W: zn = ((yn−j À r3 ) + (yn−k À r1 )) (mod 2b/2 ),


yn = ((zn−j À r4 ) + (zn−k À r2 )) (mod 2b/2 ),
xn = yn + zn · 2b/2 .

S-au folosit următoarele convenţii:

1. Toate numerele x sunt ı̂ntregi binare pe b biţi;

2. 0 < i < j < k ≤ n numere ı̂ntregi;

3. α À s este rotaţia secvenţei α spre dreapta cu s poziţii;

4. 0 ≤ ri ≤ b − 1 pentru primele două tipuri, 0 ≤ bi ≤ b/2 pentru tipul W .


36 PRELEGEREA 3. GENERATORI DE NUMERE PSEUDO - ALEATOARE

Valorile sunt calculate ı̂ntr-un vector (buffer) de k elemente, numit stare Sn .


Starea iniţială este
S1 = (x1 , x2 , . . . , xk )
iar trecerea de la o stare la alta se realizează printr-o deplasare spre stânga de forma
(xn−k , xn−k+1 , . . . , xn−1 ) −→ (xn−k+1 , . . . , xn−1 , xn )
unde xn este calculat conform formulei specifice tipului său.
Fie p = (j, k). Dacă p > 1, atunci sistemul se poate descompune ı̂n p sisteme independente.
Deci o primă condiţie de performanţă este (j, k) = 1, ceea ce asigură interdependenţa tuturor
numerelor din stare.
Din acelaşi motiv, la tipul W trebuie ca numărul k − j să fie prim.
Din modul de implementare al adunării binare rezultă o scurgere de informaţie (prin bitul de
transport - carry) de la biţii cei mai puţin semnificativi către cei mai semnificativi, informaţie
care nu se transferă ı̂n sens contrar. Pentru eliminarea acestui neajuns s-au ı̂ncercat diverse
variante, cum ar fi adunarea transportului la bitul cel mai puţin semnificativ (ı̂n loc de cel mai
semnificativ) – operaţie care ı̂mbunătăţeşte lungimea perioadei, dar nu şi caracterul aleator.
Varianta considerată a fost aceea de rotire a biţilor sumei rezultate. În plus, pentru ca toate
elementele din S să rămână interdependente, trebuie ca cel puţin un r să fie nenul. Prin
experimente s-a găsit că cele mai bune valori pentru numărul de poziţii rotite este aproape de
b b 2b b b 3b
pentru tipul A, de şi pentru tipul B şi aproape de , , pentru tipul B3.
2 3 3 4 2 4
Lungimea maximă a unei perioade la un generator Ranrot este (2k − 1) · 2b−1 .
Nu se cunoaşte ı̂ncă un algoritm de obţinere de generatori Ranrot de perioadă maximală;
cei cunoscutı̂ au fost găsiţi prin testări. Cel mai mare generator analizat are 232 stări.
Exemplul 3.1 Un generator Ranrot de tipul A cu j = 1, k = 4, b = 7, r = 4 are 24 cicluri de
perioade 1, 5, 9, 11, 14, 21, 129, 6576, 8854, 16124, 17689, 135756, 310417, 392239, 488483,
1126126, 1355840, 1965955, 4576377, 7402465, 8393724, 57549556, 184256986.
Importanţa restricţiilor impuse diverselor tipuri de generatori Ranrot este listată ı̂n Tabelul 2.
Regula A B B3 W
(j, k) = 1 ((j, i) = (k, i) = 1) *** *** *** ***
1<i<j <k−1 ** * * *
k − j impar - - - ***
un r 6= 0 *** *** *** **
toţi r 6= 0 *** ** * -
r distincţi - ** ** **
r>1 *** ** * *
(r, b) = 1 * * * *
(b, k) = 1 * * * *
Tabelul 2
S-a notat cu − o regulă fără importanţă, ∗ - importanţă minoră, ∗∗ - nerespectarea ei duce la
apariţia unor cicluri de perioadă mică, ∗ ∗ ∗ - regulă importantă.
În varianta iniţială, şi aceşti generatori sunt uşor de spart, deoarece starea iniţială se poate
deduce uşor din k valori consecutive ale lui x. Dacă ı̂nsă parametrii nu se cunosc, generatorii
Ranrot pot fi solosiţi cu succes ı̂n criptografie, având o securitate sporită.
3.2. GENERATORI SIMPLI DE NUMERE PSEUDO-ALEATOARE 37

Exemplul 3.2 Să considerăm o variantă de generator Ranrot:


xn = ((xn−1 À r1 ) + (Xn−2 À r2 ) + . . . + (xn−k À rk ) + h) (mod 2b )
unde h este un număr ı̂ntreg arbitrar. Pentru fiecare r sunt bk valori posibile, iar pentru
0 ≤ h ≤ 2b . Astfel, pentru k = 17, b = 32 numărul de variante este 1, 6 · 1035
Există un sistem de criptare (Power Crypto) bazat pe generatorul Ranrot de tip B3.

3.2.3 Generatorul Blum - Blum - Shub


Cel mai simplu şi – se pare – cel mai eficient generator de numere pseudo- aleatoare este Blum
- Blum - Shub (numit şi generator rezidual pătratic).
Definiţia 3.2 Fie p, q două numere prime. Dacă
p ≡ 3 (mod 4), q ≡ 3 (mod 4)
atunci numărul n = pq se numeşte ı̂ntreg Blum.
Algoritmul Blum - Blum - Shub (BBS pe scurt) de generare de numere pseudo-aleatoare
(prezentat ca un (k, m) generator) este:

Fie n = pq un ı̂ntreg Blum, unde p, q sunt numere prime pe k/2 biţi.


Fie x0 un reziduu pătratic modulo n. Se defineşte secvenţa

si+1 = s2i (mod n)

Dacă zi = si (mod 2) pentru 1 ≤ i ≤ m, atunci numărul aleator generat este

f (x0 ) = z1 z2 . . . zm .

Generarea biţilor nu este de fapt recursivă, deoarece zi (1 ≤ i ≤ m) se poate calcula direct cu


formula
2i (mod (p−1)(q−1))
zi = x0 (mod 2)

Exemplul 3.3 Fie p = 383, q = 503; deci n = 192649. Alegând x0 = 1013552 (mod n) =
20749, generatorul BBS va produce şirul pseudo-aleator 11001110000100111010. Detaliind
i 0 1 2 3 4 5 6 7 8 9 10
si 20749 143135 177671 97048 89992 174051 80649 45663 69442 186894 177046
zi − 1 1 0 0 1 1 1 0 0 0
i 11 12 13 14 15 16 17 18 19 20
si 137922 123175 8630 114386 14863 133015 106065 45870 137171 48060
zi 0 1 0 0 1 1 1 0 1 0

Securitatea acestui generator se bazează pe dificultatea factorizării lui n. n poate fi făcut public,
oricine poate genera o secvenţă pseudo-aleatoare pe baza lui. Totuşi, dacă n nu se descompune
ı̂n factori, nimeni nu poate prezice ieşirea; nici măcar o afirmaţie de genul: Următorul bit este
1 cu probabilitate 51%.
Mai mult, fiind dată o parte a secvenţei, nu există nici o modalitate de a prezice bitul
anterior sau cel ulterior secvenţei.
38 PRELEGEREA 3. GENERATORI DE NUMERE PSEUDO - ALEATOARE

Algoritmul BBS este destul de lent, dar are unele implementări mai rapide. Astfel, dacă n
este lungimea lui xi , pot fi păstraţi ultimii blog2 xi c biţi.
În acest moment BBS este considerat cel mai bun generator de numere pseudo-aleatoare
pentru protocoale de generare şi distribuţie a cheii.

3.3 Circuite liniare


Circuitele liniare1 sunt folosite pe scară largă ı̂n teoria codurilor detectoare şi corectoare de
erori (codurile ciclice şi codurile convoluţionale) precum şi ı̂n unele sisteme de criptare liniare
(AES de exemplu). Avantajul lor constă ı̂n modalitatea extrem de rapidă de calcul.
Teoria circuitelor liniare a fost stabilită ı̂n 1965 ([6]) de Ernst Selmer, şeful biroului de
criptografie al guvernului norvegian. Pentru detalii şi rezultate teoretice poate fi consultat
cartea de teoria codurilor [1].
Un LF SR – (Linear Feedback Shift Register) este un circuit liniar format dintr-un registru
serial şi o funcţie de ı̂ntoarcere (feedback). Dacă registrul este compus din n flip-flopuri de date
(DF − F ), vom avea un n − LF SR.

- bn bn−1 ... b2 b1 -
6
? ? ? ?
¾ Funcţie de ı̂ntoarcere

Funcţia de ı̂ntoarcere este o adunare modulo 2 (XOR) a anumitor biţi din registru; uneori ea
este numită configuraţie Fibonacci (vezi generatoarele Ranrot).

Exemplul 3.4 Să considerăm un 4 − LF SR dat de schema (poarta XOR s-a notat cu ⊕):
- s - - - s -
6
?
²¯
¾ + ¾ ?
±°

Funcţia de ı̂ntoarcere este formată dintr-un singur XOR ı̂ntre primul şi ultimul bit. Să pre-
supunem că iniţial cei patru biţi din registru sunt 1001. La fiecare tact se va obţine o nouă
configuraţie, anume:
0100, 0010, 0001, 1000, 1100, 1110, 1111, 0111, 1011, 0101, 1010, 1101, 0110, 0011
după care apare din nou 1001.
La ieşire va apare secvenţa 1001000111101011. Acest circuit asigură un generator de pe-
rioadă 16.

Un n − LF SR poate avea maxim 2n − 1 stări distincte (starea 00 . . . 0 este exclusă deoarece ea


formează un ciclu de lungime 1, neinteresant pentru generarea de numere pseudo-aleatoare).
Fie g(X) ∈ Z2 [X], g(X) = 1 + g1 X + . . . + gn X n polinomul asociat unui n − LF SR, unde
gi = 1 dacă şi numai dacă bitul i participă la o adunare modulo 2. Astfel, ı̂n Exemplul 3.4
polinomul este g(X) = 1 + X + X 4 .
1
Termenul din engleză este Shift Register.
3.4. GENERATORI BAZAŢI PE LF SR 39

Să considerăm un polinom g(X) ∈ Z2 [X], grad(g(X)) = n şi fie m cel mai mic număr
astfel ca g(X)|X m + 1. Atunci secvenţa binară generată de un n − LF SR asociat lui g(X) are
perioada m (este o m - secvvenţă).
Dacă g(X) este un polinom ireductibil peste Z2 , atunci m = 2n − 1, iar aceasta este valoarea
maximă posibilă (egalează numărul de stări distincte posibile din n − LF SR). Toate detaliile
teoretice care justifică aceste afirmaţii se găsesc ı̂n [1].

Lema 3.1 Un polinom g(X) ∈ Z2 [X] este ireductibil dacă şi numai dacă

1. Are un număr impar de termeni;

2. Cel puţin un termen este de forma X 2p+1 .

Demonstraţie: Exerciţiu.
În [5] pag. 376 este dat un tabel cu aproape 300 polinoame ireductibile de diverse grade.
Evident, un n − LF SR este un generator de secvenţe, dar proprietatea lor pseudo-aleatoare
este extrem de slabă; o stare internă oferă următorii n biţi din secvenţa de ieşire. Chiar dacă
funcţia de ı̂ntoarcere nu este cunoscută, ea poate fi determinată pe baza a 2n biţi de ieşire
(Algoritmul de decodificare Berlekamp - Massey). Totuşi, prin combinarea mai multor circuite
LF SR se pot obţine generatori de numere aleatoare acceptabili.

3.4 Generatori bazaţi pe LF SR


3.4.1 Generatorul Geffe
Generatorul Geffe combină ı̂ntr-o manieră neliniară trei LF SR, conform schemei următoare:

LF SR2 - 0

EM U X -

LF SR3 - 1

LF SR1 -

LF SR1 formează funcţia de selecţie a multiplexorului elementar, intrările fiind asigurate de


celelalte două LF SR-uri. Dacă a1 , a2 , a3 sunt ieşirile din cele trei LF SR-uri, ieşirea din gener-
atorul Geffe este dată de relaţia
b = (a1 ∧ a2 ) ⊕ (a1 ∧ a3 )
Perioada generatorului este cel mai mic multiplu comun al perioadelor celor trei LF SR-
uri. Deci, dacă cele trei polinoame care definesc circuitele au grade prime ı̂ntre ele, perioada
generatorului Geffe este produsul celor trei perioade.
Din punct de vedere criptografic generatorul nu rezistă unui atac prin corelare. Ieşirea din
generator coincide cu ieşirea din LF SR2 cam 75% din timp. Deci, dacă definiţiile polinomiale
ale circuitelor sunt cunoscute se poate ghici valoarea iniţială din LF SR2 şi genera secvenţa sa
40 PRELEGEREA 3. GENERATORI DE NUMERE PSEUDO - ALEATOARE

de ieşire. Apoi se numără de câte ori ieşirea din LF SR2 coincide cu ieşirea din generator. Dacă
nu s-a ghicit corect, cele două secvenţe coincid cam 50%; dacă s-a ghicit corect, ele coincid cam
75%.
Similar, ieşirea generatorului coincide cu cea din LF SR3 cam 75% din timp. Cu aceste
corelări secvenţa poate fi ghicită complet. Într-un articol din 1991, Zeng ş.a. ([8]) arată că
dacă polinoamele ireductibile au câte trei termeni iar cel mai mare LF RS este de lungime n,
atunci o secvenţăe 37n biţi la ieşirea din generator este suficientă pentru determinarea stărilor
interne din toţi LF SR.
Genratorul Geffe poate fi extins la 2k + 1 LF SR legaţi printr-un M U Xk . Acest lucru nu va
mări ı̂nsă securitatea generatorului.

3.4.2 Generatori ”Stop-and-Go”


• Cel mai cunoscut este generatorul Beth - Piper (după numele autorilor); structura sa este
următoarea:

LF SR2 a2 (t)
-
»
LF SR1 a1 (t)
- ¥¥ »
-6 ? -
- -
6 6 ¼ - b(t)
6 ¦¦ ¼
s - a3 (t)
LF SR3 -

CK s -6

Acest generator controlează ceasurile celor trei circuite. Astfel, ceasul de intrare ı̂n LF SR2
este controlat de ieşirea din LF SR1 ; ı̂n acest fel, LF SR2 şi schimbă starea la momentul
t numai dacă ieşirea din LF SR1 a fost 1 la momentul t − 1.
Nu se cunosc studii asupra complexităţii acestui generator. El totuşi nu a rezistat at-
acurilor corelate ([8]).

• Stop-and-Go alternativ: Această variantă foloseşte trei LF SR de lungimi diferite, legate


ı̂ntr-un circuit de forma:

» LF SR2 -
LF SR1 s -
- ¡¥ »
- ? -6 ? -
6 ¼ -
6 » -
?XX
- -e 6 ¢¦ ¼
³³ -
s - -
¼ LF SR3

CK s - ? -6

Când ieşirea din LF SR1 este 1 e activează LF SR2 ; ı̂n caz contrar este activat LF SR3 .
Ieşirea din generator este un XOR dintre cele două ieşiri.
Acest generator are o perioadă mare. Există un atac prin corelare asupra sa (mai precis
asupra LF SR1 ), dar acesta nu a slăbit substanţial siguranţa sa.
3.5. ALTE GENERATOARE DE NUMERE PSEUDO-ALEATOARE 41

• Generator Gollmann: Este o legare serială ”ı̂n cascadă” a mai multor circuite LF SR,
ceasul fiecărui LF SR fiind controlat de circuitul anterior.
1 - -
¡¥ »6 » ¡ ¡¥ »
6 » ¡¥ ·
?
- -? -
s -?
LF SR1 - -s - LF SR2 - - LF SR2 - -...
- -
¢¦ ¼
6 ¼ ¢ ¢¦ ¼
6 ¼ ¢¦ ¸
6 ? -6 ? -6
CK s s s - ...

Dacă la momentul t − 1 ieşirea din LF SRi este 1, atunci la momentul t este activat
LF SRi+1 . Ieşirea din generator este ieşirea din ultimul LF SR. Dacă toate circuitele
liniare au aceiaşi lungime n, complecitatea unui generator Gollmann cu k LF SR-uri este
n · (2n − 1)k−1

3.5 Alte generatoare de numere pseudo-aleatoare


3.5.1 Generatorul Mother-of-all
Este un generator propus de George Marsaglia.
Iniţial se aleg cinci numere ı̂ntregi x0 , x1 , x2 , x3 , c (nu toate nule), stocate pe 32 biţi fiecare.
Algoritmul este:

1. n ←− 4;

2. while n ≤ M AX do

(a) S ←− 2111111111 · xn−4 + 1492 · xn−3 + 1776 · xn−2 + 5115 · xn−1 + c;


¹ º
32 S
(b) xn ←− S (mod 2 ), c ←− 32 ;
2
(c) n ←− n + 1;

Suma intermediară S este stocată pe 64 biţi. Valoarea M AX este stabilită ı̂n funcţie de
lungimea secvenţei de numere pseudo-aleatoare generate.
Implementat ı̂n limbaj de asamblare, algoritmul este extrem de rapid, deoarece aici există
o instrucţiune de ı̂nmulţire a două numere ı̂ntregi pe 32 biţi fiecare, cu rezultatul pe 64 biţi.
Scris ı̂ntr-un limbaj de nivel ı̂nalt, algoritmul foloseşte numere ı̂n virgulă mobilă cu o mantisă
de 63 biţi.

3.5.2 Generatorul Blum - Micali


Fie g un număr prim, p un număr prim impar şi x0 o valoare iniţială. Se generează numerele
xi+1 = g xi (mod p)
p−1
Ieşirea din generator este 1 dacă xi < şi 0 altfel.
2
Securitatea acestui sistem se bazează pe problema logaritmului discret. Dacă p este suficient
de mare astfel ca problema logaritmului discret să fie dificilă, generatorul este sigur.
42 PRELEGEREA 3. GENERATORI DE NUMERE PSEUDO - ALEATOARE

3.5.3 Generator RSA


Sistemul de criptare RSA poate fi folosit şi pentru generare de numere aleatoare.
Fie n = pq un modul obţinut prin produsul a două numere prime mari, un număr e astfel
ca (e, (p − 1) · (q − 1)) = 1 şi x0 o valoare iniţială (x0 < n). Se defineşte
xi+1 = xei (mod n)
Ieşirea din generator este zi = xi (mod 2).
Securitatea generatorului se bazează pe dificultatea spargerii sistemului RSA. Dacă n este
suficient de mare, sistemul este sigur.

3.6 Securitatea generatorilor de numere pseudo-aleatoare


Definiţia 3.3 Fie Xn , Yn două distribuţii de probabilitate pe {0, 1}n . Notăm t ∈ Xn atunci
când t este ales astfel ca ∀z ∈ {0, 1}n ,
P r(x = z) = Xn (z)
Spunem că {Xn } este inseparabil de {Yn } ı̂n timp polinomial dacă pentru orice algoritm
probabilist A şi orice polinom Q există n0 astfel ca ∀n (n > n0 ) să avem
1
|P rt∈Xn (A(t) = 1) − P rt∈Yn (A(t) = 1)| <
Q(n)

Condiţia de inseparabilitate spune că pentru şiruri suficient de lungi nu există un algoritm
probabilist care să decidă dacă şirul a fost selectat urmând distribuţia Xn sau Yn . Intuitiv, nu
se poate face distincţie ı̂ntre distributia aleatoare şi cea uniformă.
Vom nota cu Un distribuţia uniformă pe {0, 1}n ; adică ∀α ∈ {0, 1}n ,
1
P rx∈Un (x = α) = n
2
Definiţia 3.4 Şirul {Xn } este pseudo-aleator dacă este inseparabil ı̂n timp polinomial de {Un }.

Algoritmul A din Definiţia 3.3 este numit test statistic ı̂n timp polinomial. Exemple de teste
statistice se găsesc ı̂n [3]. De asemenea, Marsaglia a construit ı̂n 1996 pachete de teste folosite
astăzi ca standard de securitate pentru generatorii de numere pseudo-aleatoare.

Definiţia 3.5 Un program determinist ı̂n timp polinomial


G : {0, 1}k −→ {0, 1}p
este un generator pseudo-aleator (PSRG) dacă verifică următoarele condiţii;

1. p > k;

2. {Gp }p este pseudo-aleator, unde Gp este distribuţia pe {0, 1}p obţinută astfel:

(a) pentru a obţine t ∈ G se alege x ∈ U ;


(b) se defineşte t = G(x).

Adică, pentru orice algoritm probabilist A şi orice polinom Q avem


¯ ¯ 1
¯ ¯
¯P rt∈Xn (A(t) = 1) − P rt∈Up (A(t) = 1)¯ <
Q(p)
Bibliografie

[1] A.Atanasiu - Teoria codurilor corectoare de erori, Editura Univ. Bucureşti, 2001;

[2] A.Fog - http://www.agner.org/random/theory;

[3] D.Knuth - The art of computer Programming, vol 2 (Seminumerical Algorithms)

[4] P. L´ Ecuyer - Random Numbers for Simulation, Comm ACM 33, 10(1990), 742-749, 774.

[5] B. Schneier - Applied Cryptograpgy, John Wiley & Sons 1996;

[6] E.S. Selmer - Linear Recurrence over Finite Field, Univ. of Bergen, Norway, 1966;

[7] E.H.Sibley - Random Number Generators: Good Ones are Hard to Find, Comm ACM 31,
10(1988), 1192-1201.

[8] K.C.Zeng, C.H.Yang, D.Y.Wei, T.R.N. Rao - Pseudorandom Bit Generators in Stream
Cipher Cryptography, IEEE Computer, 24 (1991), 8.17.

43
Prelegerea 4

Protocoale de distribuire a cheilor

4.1 Introducere
Am văzut că sistemele bazate pe chei publice nu necesită un canal sigur pentru transmiterea
unei chei private. Aceste avantaj este compensat ı̂nsă de faptul că un canal cu cheie publică este
mult mai lent decât unul cu cheie privată, el necesitând protocoale, procedee de autentificare
etc.
În această prelegere vom aborda această problemă, de stabilire a unor modalităţi de a
schimba mesaje ı̂ntre mai mulţi utilizatori, folosind protocoale rapide, fiecare având propria sa
cheie privată. Protocoalele vor consta din două părţi principale:
1. Distribuirea cheilor: un protocol prin care o persoană alege cheia privată şi o transmite
mai departe.
2. Punerea de acord: toţi participanţii stabilesc o cheie privată folosind un canal public.
Baza de comunicare constă dintr-o reţea (nesigură) care leagă n utilizatori. În general se
presupune că există o autoritate A numită arbitru, considerată apriori ca fiind onestă; ea
va verifica identităţile utilizatorilor, alegerea şi transmiterea cheilor iniţiale, precum şi alte
probleme curente.
Deoarece reţeaua nu este sigură, participanţii trebuie să prevadă unele atacuri din partea
lui Oscar. Acesta poate fi pasiv (adică doar să intercepteze mesaje) sau activ. Un adversar
activ este capabil să:
• modifice un mesaj ı̂n cursul transmisiei;
• transmită mesaje vechi;
• ı̂ncerce să se prezinte ca unul din utilizatorii reţelei.
Obiectivul lui Oscar este:
• Să ı̂i facă pe U şi V să accepte o cheie invalidă
• Să ı̂i facă pe U şi V să creadă că au schimbat chei ı̂ntre ei.
Scopul protocolului de distribuţie a cheilor sau al punerii de acord este ca ı̂n final cei doi
participanţi să deţină aceaşi cheie K, necunoscută de ceilalţi participanţi (exceptând eventual
A).

43
44 PRELEGEREA 4. PROTOCOALE DE DISTRIBUIRE A CHEILOR

4.2 Predistribuirea cheilor


Iniţial are loc o etapă de predistribuire a cheilor: pentru orice pereche de utilizatori (U, V ),
arbitrul A alege aleator o cheie KU,V = KV,U pe care o transmite ı̂n prealabil lui U şi V
printr-un canal sigur (neutilizat pentru comunicaţiile uzuale).
Deci, ı̂n această fază, A generează Cn2 chei pe care le distribuie celor n utilizatori. Fiecare
utilizator trebuie să păstreze cheia sa precum şi cele n − 1 chei de comunicaţie cu ceilalţi
utilizatori.
Această etapă este sigură, dar ridică o serie de probleme cum ar fi:
• existenţa de canale sigure ı̂ntre A şi fiecare din cei n participanţi;
• obligaţia pentru fiecare participant să stocheze n − 1 chei şi să participe la Cn2 transmisii
de chei solicitate de arbitru. Chiar pentru o reţea mică, acest lucru devine destul de
dificil.
Scopul protocoalelor prezentate mai departe este de a micşora (fără a periclita siguranţa comu-
nicării) cantitatea de informaţie care trebuie transmisă.

4.2.1 Protocolul Blom


Fie n (n ≥ 3) utilizatori şi p (p ≥ n) un număr prim. Fiecare cheie este un element din Zp .
Se alege un număr ı̂ntreg k, (1 ≤ k ≤ n − 2). Valoarea lui k este numărul maxim de intruşi
Oscar contra cărora trebuie construită protecţia. În procedeul Blom, A transmite printr-un
canal sigur k + 1 elemente din Zp fiecărui utilizator (ı̂n loc de n − 1 chei ı̂n varianta generală).
Fiecare pereche de utilizatori (U, V ) poate calcula o cheie KU,V = KV,U . Condiţia de securitate
este: orice coaliţie de k utilizatori diferiţi de U şi V nu poate obţine informaţii despre KU,V .
Pentru cazul k = 1 protocolul Blom este:

1. Se alege public un număr prim p şi pentru fiecare utilizator


U se alege rU ∈ Zp . Numerele rU sunt distincte.

2. A alege aleator trei numere a, b, c ∈ Zp şi formează polinomul


f (x, y) = a + b(x + y) + cxy (mod p)

3. Pentru fiecare utilizator U , A determină polinomul


gU (x) = f (x, rU ) (mod p)
şi transmite gU (x) lui U printr-un canal sigur.

4. Dacă U şi V doresc să comunice, cheia lor privată este


KU,V = KV,U = f (rU , rV )

Observaţii:
• Aplicaţia gU (x) de la pasul 3 este o aplicaţie afină, de forma gU (x) = aU + bu x, unde
aU = a + brU (mod p), bU = b + crU (mod p).
4.2. PREDISTRIBUIREA CHEILOR 45

• La pasul 4, U poate calcula cheia privată KU,V = f (rU , rV ) = gU (rV ), iar V – ı̂n mod
similar – KV,U = f (rU , rV ) = gV (rU ).

Exemplul 4.1 Să presupunem că sunt 3 utilizatori U, V, W şi p = 17. Cheile lor publice sunt
rU = 12, rV = 7, rW = 1.
Presupunem că arbitrul alege a = 8, b = 7, c = 2. Atunci
f (x, y) = 8 + 7(x + y) + 2xy
Polinoamele g sunt acum
gU (x) = 7 + 14x, gV (x) = 6 + 4x, gW (x) = 15 + 9x.
Cele trei chei private sunt KU,V = 3, KU,W = 4, KV,W = 10.
U poate calcula KU,V prin gU (rV ) = 7 + 14 · 7 = 3 (mod 17);
V poate calcula KV,U prin gV (rU ) = 6 + 4 · 12 = 3 (mod 17).

Să arătăm că nici un utilizator nu poate obţine informaţie asupra cheilor private ale celorlalţi
utilizatori.

Teorema 4.1 Protocolul Blom pentru k = 1 este necondiţionat sigur contra oricărui atac
individual.

Demonstraţie: Să presupunem că utilizatorul W doreşte să calculeze cheia KU,V = a + b(rU +
rV ) + crU rV mod p.
Valorile rU şi rV sunt publice, dar a, b, c sunt secrete. W cunoaşte propriile sale valori
aW = a + brW , bW = b + crW (mod p), care sunt coeficienţii propriului său polinom gW (x).
Vom arăta că informaţia deţinută de W este consistentă cu orice valoare posibilă m ∈ Zp a
cheii KU,V . Deci W nu poate obţine nici o informaţie asupra cheii KU,V . Să considerăm ecuaţia
matricială ı̂n Zp :
    
1 rU + rV rU rV a m

 1 rW 0    
  b  =  aW 

0 1 rW c bW
Prima ecuaţie este de fapt KU,V = m, iar celelalte două dau informaţia furnizată de gW (x)
despre a, b, c.
Determinantul matricii este
2
rW + rU rV − (rU + rV )rW = (rW − rU )(rW − rV )
unde toate calculele sunt efectuate ı̂n Zp . Cum rW este distinct de rU şi rV , acest determinant
este nenul, deci sistemul admite o soluţie unică (a, b, c). Cu alte cuvinte, orice valoare m ∈ Zp
este compatibilă cu informaţia deja deţinută de W . 2

O coaliţie ı̂ntre doi utilizatori W, X poate conduce la aflarea cheii KU,V . W şi X ştiu că:
aW = a + brW
bW = b + crW
aX = a + brX
bX = b + crX
Acesta este un sistem de 4 ecuaţii cu 3 necunoscute, din care se poate afla imediat soluţia
unică (a, b, c). După ce s-au aflat aceste trei valori, se poate construi polinomul f (x, y), din
care se poate determina mai departe restul informaţiei.
46 PRELEGEREA 4. PROTOCOALE DE DISTRIBUIRE A CHEILOR

Acest protocol poate fi generalizat pentru a rezista la atacul unei alianţe de k utilizatori.
Singura modificare se face la pasul 2, unde arbitrul foloseşte polinomul
k X
X k
f (x, y) = ai,j xi y j (mod p)
i=0 j=0

unde ai,j ∈ Zp (0 ≤ i ≤ k, 0 ≤ j ≤ k) şi ai,j = aj,i pentru orice i şi j.

4.2.2 Protocolul Diffie - Hellman


Este un protocol celebru, des folosit, bazat pe problema logaritmului discret.
Vom folosi grupul Zp unde p este număr prim (deşi construcţia funcţionează pentru orice
grup finit ı̂n care problema logaritmului discret este dificilă) şi fie α ∈ Zp un element primitiv.
p şi α sunt publice.
ID(U ) este o informaţie capabilă să identifice utilizatorul U ı̂n reţea (numele, adresa elec-
tronică, numărul de telefon etc). Orice utilizator U dispune de un număr secret aU (0 ≤ aU ≤
p − 2), putând să calculeze
bU = αaU (mod p)
Arbitrul A dispune de un algoritm de semnătură secret sigA şi o procedură de verificare
publică verA . Mai presupunem implicit că datele au fost ı̂n prealabil supuse unei funcţii de
dispersie criptografice h pe care – pentru simplificarea scrierii – nu o mai menţionăm explicit.
Anumite informaţii despre utilizatorul U sunt autentificate folosind un certificat care conţine
şi amprenta (semnătura) arbitrului; un certificat este o definit ca o secvenţă de forma

C(U ) = (ID(U ), bU , sigA (id(U ), bU )).

De remarcat că arbitrul nu trebuie să cunoască aU pentru a produce certificatul. Când U
intră ı̂n reţea, se generează un astfel de certificat, care poate fi păstrat ı̂n baza de date sau
poate fi comunicat chiar de U la fiecare utilizare. Semnătura lui A permite oricui să verifice
autenticitatea informaţiei pe care o conţine.
O cheie privată pentru U şi V este definită

KU,V = αaU aV (mod p).

Ea poate fi construită atât de U , prin KU,V = baVU (mod p) cât şi de V prin KU,V =
baUV (mod p) (reamintim, aU , aV sunt private, bU , bV sunt publice).

Exemplul 4.2 Să presupunem p = 25307 şi α = 2. Dacă luăm aU = 3578, vom avea bU =
23578 = 6113 (mod 25307), valoare pusă ı̂n certificatul lui U .
Să presupunem că V alege aV = 19956; atunci
bV = 219956 = 7984 (mod 25307).
U poate calcula cheia comună KU,V = 79843578 = 3694 (mod 25307).
Aceiaşi cheie este calculată şi de V :
KU,V = 611319956 = 3694 (mod 25307).
4.3. KERBEROS 47

Să studiem securitatea acestui protocol contra unui atac (activ sau pasiv). Semnătura lui
A pe certificate ı̂mpiedică producerea de informaţii publice false. Deci vor rămâne ı̂n discuţie
numai atacurile pasive, care se reduc la problema: W poate determina KU,V dacă nu este U
sau V ? Altfel spus: fiind date αaU şi αuV , ambele (mod p), se poate calcula αaU aV (mod p) ?
Aceasta este cunoscută şi sub numele de problema Diffie - Hellman, formulată astfel:
Fie I = (p, α, β, γ) unde p este număr prim, α ∈ Zp este primitiv, iar β, γ ∈ Zp∗ .
Se poate determina β logα γ (mod p) ?
(sau – echivalent, γ logα β (mod p))
Evident, securitatea protocolului Diffie - Hellman de predistribuire a cheii faţă de atacurile
pasive este echivalent cu dificultatea problemei Diffie - Hellman.
Dacă W poate calcula aU (sau aV ) plecând de la bU (bV ), el poate deduce KU,V aşa cum
face U (respectiv V ). Aceasta conduce la rezolvarea unei probleme de logaritm discret. Deci,
dacă problema logaritmului discret ı̂n Zp este dificilă, atunci protocolul de predistribuire a cheii
Diffie - Hellman nu poate fi atacat. Conjectura este aceea că problema Diffie - Hellman este
echivalentă cu problema logaritmului discret (aşa cum s-a conjecturat că spargerea sistemului
RSA este echivalentă cu factorizarea unui număr).
Teorema 4.2 A sparge sistemul de criptare El Gamal este echivalent cu a rezolva problema
Diffie - Hellman.
Demonstraţie: Să reamintim sistemul de criptare El Gamal: O cheie este K = (p, α, a, β) unde
β = αa (mod p); a este secret, iar p, α, β sunt publice. Criptarea unui mesaj x ∈ Zp se face
alegând aleator un număr k ∈ Zp−1 ; apoi eK (x, p) = (y1 , y2 ) unde
y1 = α k (mod p), y2 = xβ k (mod p)
Pentru y1 , y2 ∈ Zp∗ , decriptarea este definită prin
dK (y1 , y2 ) = y2 (y1a )−1 (mod p)
Să presupunem că dispunem de un algoritm A care rezolvă problema Diffie - Hellman şi ı̂ncercăm
un atac asupra mesajului criptat (y1 , y2 ). Aplicând A asupra intrărilor p, α, y1 şi β avem:
A(p, α, y1 , β) = A(p, α, αk , αa ) = αka = β k (mod p)
De aici rezultă x = y2 (β k )−1 (mod p), deci se poate decripta mesajul (y1 , y2 ).
Invers, să presupunem că dispunem de un algoritm B de decrptare pentru sistemul El Gamal.
Deci B admite la intrare (p, α, β, y1 , y2 ) şi calculează
³ ´−1
x = y2 y1logα β (mod p).
Fiind dată o apariţie (p, α, β, γ) a problemei Diffie - Hellman, se poate calcula uşor
µ³ ´ ¶−1
logα β −1
B(p, α, β, γ, 1) −1
=1 γ = γ logα β (mod p)
2

4.3 Kerberos
Un punct slab ı̂n metodele de predistribuire a cheilor prezentate este acela că fiecare pereche
de utilizatori primeşte mereu aceeaşi cheie. Acest lucru, pe o perioadă de timp mai lungă
pericilitează confidenţialitatea cheii. Este mult mai indicat să se calculeze câte o cheie nouă
(freshness) pentru fiecare contact direct.
48 PRELEGEREA 4. PROTOCOALE DE DISTRIBUIRE A CHEILOR

În plus, dacă se utilizează o distribuţie a cheilor ı̂n direct, nici un utilizator nu va mai fi
nevoit să stocheze cheile de comunicare cu ceilalţi utilizatori (ı̂nafara cheii de comunicare cu
arbitrul, bineı̂nţeles). Cheile de sesiune sunt transmise la simpla solicitare a lui A. Tot arbitrul
este responsabil de noutatea cheii livrate.
Kerberos este unul din cele mai răspândite sisteme de gestiune a cheilor. Să prezentăm
protocolul de fabricare a cheilor de sesiune asigurat de acest sistem.
Fiecare utilizator U ı̂mparte cu arbitrul o cheie DES notată KU . Ultimele versiuni folosesc
modul CBC de implementare a sistemului DES.
ID(U ) reprezintă o informaţie publică care identifică utilizatorul U . La solicitarea lui U de
a comunica cu V , arbitrul efectuează următorii paşi:
• Generează o cheie K;
• Înregistrează ora T a cererii;
• Stabileşte o durată L de validitate a lui K; deci cheia de sesiune este validă ı̂n intervalul
de timp [T, T + L].
Aceste informaţii sunt transmise de A lui U , apoi V . Protocolul Kerberos este următorul:

1. A generează K, T şi L.

2. A calculează
m1 = eKU (K, ID(V ), T, L), m2 = eKV (K, ID(U ), T, L)
pe care le trimite lui U .

3. U calculează dKU (m1 ) şi află K, T, L, ID(V ). Pe urmă calculează


m3 = eK (ID(U ), T )
şi trimite lui V mesajele m2 şi m3 .

4. V află K, T, L, ID(U ) din dKV (m2 ) şi T, ID(U ) din dKV (m2 ). Verifică dacă cele
două valori pentru T şi ID(U ) sunt identice.

5. V calculează
m4 = eK (T + 1)
pe care ı̂l trimite lui U .

6. U calculează dK (m4 ) şi verifică dacă este T + 1.

Fiecare din cele patru mesaje mi transmise are rolul său bine determinat. Astfel, m1 şi m2
servesc la transmiterea confidenţială a cheii K. La rândul lor, m3 şi m4 asigură o confirmare a
cheii; după primirea ei, U şi V sunt siguri că dispun de aceeaşi cheie de sesiune K.
Rolul lui T şi L este acela de protejare contra unui atac activ constând din ı̂nregistrarea
unor mesaje vechi şi retransmiterea lor ulterior.
Unul din slabiciunile sistemului Kerberos constă ı̂n imposibilitatea unei sincronizări a cea-
surilor utilizatorilor. În practică se admit anumite decalaje, stabilite de comun acord. În plus,
spargerea sistemului DES a condus la renunţarea treptată la sistemul Kerberos.
4.4. SCHIMBUL DE CHEI DIFFIE - HELLMAN 49

4.4 Schimbul de chei Diffie - Hellman


Dacă nu se acceptă un furnizor universal de chei, atunci va trebui stabilit un protocol de punere
de acord. Primul şi cel mai cunoscut astfel de protocol este protocolul de schimb de chei Diffie
- Hellman.
Fie p număr prim şi α ∈ Zp un element primitiv, ambele publice; eventual ele sunt alese de
U şi comunicate lui V . Protocolul de schimb este următorul:

1. U alege aleator aU ∈ [0, p − 2];

2. U calculează αaU (mod p) şi ı̂l trimite lui V ;

3. V alege aleator aV ∈ [0, p − 2];

4. V calculează αaV (mod p) şi ı̂l trimite lui U ;

5. U calculează K = (αaV )aU (mod p) iar V calculează K = (αaU )aV (mod p)

La sfârşitul protocolului, U şi V obţin aceeaşi cheie K = αaU aV (mod p). Procedeul este
asemănător cu cel de predistribuire a cheii, cu diferenţa că exponenţii aU şi aV se schimbă la
fiecare sesiune.

4.4.1 Protocol ı̂ntre staţii


Protocolul Diffie - Hellman se efectuează după schema următoare:
α aU -
U ¾ αaV V

Acest protocol este ı̂nsă vulnerabil la un atac activ al unui intrus W , care se interpune ı̂ntre U
şi V ı̂n modul următor:
α aU - αaU
0
-
U ¾ α a0V W ¾ αaV V

W interceptează mesajele lui U şi V şi le ı̂nlocuieşte cu ale sale. La sfârşitul lui, W a stabilit
0 0
o cheie de comunicaţie αaU aV cu U şi o cheie αaU aV cu V . Când U doreşte să trimită un mesaj
lui V , el va utliliza cheia pe care o ı̂mparte cu W ; acesta poate decripta mesajul şi apoi să ı̂l
cripteze cu cheia comună cu V . Acesta primeşte mesajul, fără să realizeze că a fost citit de W .
Acelaşi lucru se ı̂ntâmplă ı̂n cazul unui mesaj trimis de V către U .
Este necesar deci ca utilizatorii să şi autentifice punerea de acord a protocolului de stabilire
a cheilor. Acesta va fi numit protocol de punere de acord autentificat. Un astfel de acord, bazat
pe schimbul de chei Diffie - Helmann este numit protocol ı̂ntre staţii (ST S) şi este construit de
Diffie, Van Oorschot şi Wiener. O variantă ST S simplificată este:
50 PRELEGEREA 4. PROTOCOALE DE DISTRIBUIRE A CHEILOR

1. U generează aleator un număr aU ∈ [0, p − 2]; apoi calculează numărul αaU (mod p)
pe care ı̂l trimite lui V ;

2. V generează aleator un număr aV ∈ [0, p − 2];

3. V calculează αaV (mod p), apoi K = (αaU )aV (mod p) şi yV = sigV (αaV , αaU ).
Trimite lui U mesajul (C(V ), αaV (mod p), yV ).

4. U calculează K = (αaV )aU (mod p) şi verifică C(V ) cu verA , apoi yV cu verV extras
din C(V );

5. U calculează yU = sigU (αaU , αaV ) şi trimite lui V mesajul (C(U ), yU );

6. V verifică C(U ) cu verA , apoi yU cu verU extras din C(U ).

În această schemă, numărul prim p şi elementul primitiv α ∈ Zp sunt publice. Fiecare utilizator
U dispune de un protocol privat de semnătură sigU şi unul public de verificare verU . Arbitrul
A are de asemenea asociate funcţiile sigA respectiv verA . Certificatul lui U este
C(U ) = (ID(U ), verU , sigA (ID(U ), verU ))
Informaţiile schimbate ı̂n cadrul protocolului ST S simplificat sunt schematizate de diagrama
următoare:
α aU -
¾ α , sigV (αaV , αaU )
aV
U V
sigU (αaU , αaV ) -

Prin acest protocol, un intrus W nu se mai poate interpune ı̂ntre U şi V . Într-adevăr, dacă W in-
0 0
terceptează αaU şi ı̂l ı̂nlocuieşte cu αaU , el va trebui să ı̂nlocuiască de asemenea şi sigV (αaV , αaU )
0
cu sigV (αaV , αaU ), ceea ce nu poate decât ı̂n cazul aU = a0U şi aV = a0V (pentru că nu cunoaşte
sigV ).
0 0
La fel, W nu poate ı̂nlocui sigU (αaU , αaV ) cu sigU (αaU , αaV ), pentru că nu cunoaşte sigV .
Varianta aceasta de protocol nu oferă totuşi o confirmare a cheii. Pentru aceasta trebuie
modificat yV = eK (sigV (αaV , αaU )) ı̂n pasul 3 şi yU = eK (sigU (αaU , αaV )) ı̂n pasul 5.
În acest fel, ca la Kerberos, se obţine o confirmare a cheii decriptând o parte cunoscută a
cheii de sesiune. Acesta este protocolul ST S complet.

4.4.2 Punerea de acord M T I


Matsumoto, Takashima şi Imai au dezvoltat mai multe protocoale de punere de acord, bazate
pe schimbul de chei Diffie - Hellman. Aceste protocoale – numite MTI – necesită doar două
schimburi de informaţii ı̂ntre U şi V (câte unul pe fiecare sens) şi nu folosesc protocoale de
semnătură.
Unul din protocoalele M T I este definit astfel:
Fie p un număr prim şi α ∈ Zp un element primitiv, ambele publice. Fiecare utilizator
U posedă un identificator ID(U ), un exponent secret aU ∈ [0, p − 2] şi o valoare publică
bU = αaU (mod p).
4.4. SCHIMBUL DE CHEI DIFFIE - HELLMAN 51

Arbitrul dispune de un protocol de semnătură sigA şi unul de semnătură verA .


Fiecare utilizator posedă un certificat
C(U ) = (ID(U ), bU , sigA (ID(U ), bU )).
Protocolul M T I este dat mai jos. În urma lui, utilizatorii U şi V obţin aceeaşi cheie
K = αrU aV +rV aU (mod p).

1. U selectează aleator rU ∈ [0, p − 2], calculează


sU = αrU (mod p) şi trimite lui V (C(U ), sU ).

2. V selectează aleator rV ∈ [0, p − 2], calculează


sV = αrV (mod p) şi trimite lui U (C(V ), sV ).

3. U calculează K = saVU brVU (mod p), iar V calculează K = saUV brUV (mod p).

Exemplul 4.3 Să luăm p = 27803 şi α = 5. Dacă U alege aU = 21131, el va calcula bU =
521131 = 21420 (mod 27803), pe care ı̂l pune ı̂n certificatul său. La fel, dacă V alege aV = 17555,
va avea bV = 517555 = 17100 (mod 27803)
Presupunem că U selectează rU = 169; el va trimite lui V
sU = 5169 = 6268 (mod 27803).
Dacă V alege rV = 23456, el trimite lui U
sV = 523456 = 26759 (mod 27803).
Acum se poate calcula
KU,V = saVU brVU (mod p) = 2675921131 17100169 = 21600 (mod 27803)
Aceeaşi cheie 21600 o obţine şi V .

Semnătura arbitrului elimină posibilitatea interpunerii lui Oscar. Într-adevăr, dacă un intrus
W se interpune ı̂ntre U şi V , va avea loc scenariul
0
C(U ), αrU - C(U ), αrU -
0
U ¾ C(V ), αrV W ¾ C(V ), αrV V
0
În acest moment, U şi V vor calcula chei diferite: U calculează K = αrU aV +rV aU (mod p),
0
iar V calculeazăK = αrU aV +rV aU (mod p). În plus, nici una din cheile lui U sau V nu pot fi
calculate de W , pentru că aceasta ar solicita cunoaşterea exponentului secret aU respectiv aV .
Deci, deşi U şi V obţin chei distincte, nici una din ele nu poate fi calculată şi de W (ı̂n ipoteza
că problema logaritmului discret este dificilă). Altfel spus, U şi V sunt siguri că nici o altă
persoană nu poate calcula cheia. Această proprietate este numită autentificare implicită.
Pentru atacuri pasive, securitatea sistemului M T I se reduce tot la dificultatea problemei
Diffie - Hellman.

4.4.3 Chei auto-certificate


Metoda punerii de acord prezentată ı̂n acest paragraf este construită de Girault; ea nu necesită
certificat. Valoarea cheii publice asigură o autentificare implicită.
Protocolul lui Girault combină proprietăt ile sistemului RSA cu cele ale logaritmului discret.
Fie n = pq unde p = 2p1 + 1, q = 2q1 + 1 sunt numere prime sigure (p1 , q1 sunt numere prime
52 PRELEGEREA 4. PROTOCOALE DE DISTRIBUIRE A CHEILOR

distincte). Cum grupul multiplicativ Zn∗ este izomorf cu Zp ×Zq , ordinul maxim al unui element
din Zn∗ este deci cmmmc(p − 1, q − 1) = 2p1 q1 . Fie α ∈ Zn∗ de ordin 2p1 q1 . Vom utiliza problema
logaritmului discret ı̂n subgrupul ciclic al lui Zn∗ , generat de α.
În acest protocol, factorizarea n = pq este cunoscută numai de către arbitru. Valorile n, α
sunt publice, iar p, q sunt secrete (deci şi p1 , q1 ). A alege un exponent de criptare RSA public,
să spunem e. Exponentul de decriptare d = e−1 (mod φ(n)) este secret.
Fiecare utilizator U are un identificator C(U ) şi primeşte de la A o cheie publică auto-
certificată pU conform următorului protocol:

1. U alege un exponent secret aU şi calculează bU = αaU (mod n);

2. U trimite lui A valorile aU şi bU ;

3. A calculează pU = (bU − ID(U ))d (mod n), pe care ı̂l trimite lui U .

De remarcat aportul arbitrului ı̂n calculul lui pU . Se observă că


bU = peU + ID(U ) (mod n)
poate fi calculat folosind numai informaţiile publice.
Protocolul lui Girault este dat mai jos. Schematizat, schimbul de informaţii arată ı̂n felul
următor:
ID(U ), pU , αrU (mod n) -
U ¾ rV
ID(V ), pV , α (mod n) V

La sfârşitul acestui protocol, U şi V dispun de aceeaşi cheie:


K = αrU aV +rV aU (mod n).

1. U alege aleator rU şi calculează sU = αrU (mod n);


tripletul (ID(U ), pU , sU ) este trimis lui V .

2. V alege aleator rV şi calculează sV = αrV (mod n);


tripletul (ID(V ), pV , sV ) este trimis lui U .

3. U calculează cheia K = saVU (peV + ID(V ))rU (mod n).


Cheia calculată de V este K = saUV (peU + ID(U ))rV (mod n).

Exemplul 4.4 Să presupunem p = 839 şi q = 863. Vom avea n = 724057 şi φ(n) = 722356.
Elementul α = 5 are ordinul 2p1 q1 = φ(n)/2.
Dacă arbitrul A alege e = 84453 drept exponent de criptare, vom avea d = 125777.
Dacă ID(U ) = 500021 şi aU = 111899, vom avea bU = 488889 şi pU = 650704. În mod
similar, considerăm ID(V ) = 500022 şi aV = 123456, deci bV = 111692, pV = 683556.
Dacă U şi V vor să stabilească o cheie comună şi U alege numărul rU = 56381, iar V
numărul rV = 356935, vom avea sU = 171007, sV = 320688.
După protocol, cei doi vor dispune de cheia K = 42869.
4.4. SCHIMBUL DE CHEI DIFFIE - HELLMAN 53

Să studiem puţin evitarea atacurilor cu acest sistem de chei auto-certificate.


Cum valorile bU , pU , ID(U ) nu sunt semnate de A, nimeni nu poate verifica direct autentic-
itatea lor. Să presupunem că ele provin de la W (fără ajutorul arbitrului), care vrea să se dea
drept U . Dacă W furnizează ID(U ) şi dacă pU conduce la un bU 0 greşit, nu se poate calcula
exponentul aU 0 asociat (dacă problema logaritmului discret este dificilă). Fără aU 0 , W nu poate
determina cheia.
O situaţie similară apare dacă W se interpune ı̂ntre U şi V . El poate ı̂mpiedica pe U şi
V să obţină o cheie comună, dar nu poate efectua calculele lor. Are loc deci o autentificare
implicită, ca la M T I.
O ı̂ntrebare ar fi: De ce U trebuie să comunice arbitrului valoarea aU ? A poate determina
pU plecând de la bU , fără să cunoască aU . Acest lucru se face pentru ca arbitrul să fie convins
că U posedă aU , ı̂nainte de a calcula pU .
Dacă A nu face această verificare ı̂nainte de calculul lui pU , sistemul poate fi atacat.
0
Să presupunem că W alege un a0U fals şi determină bU 0 = αaU (mod n). Cu ele, stabileşte o
cheie publică falsă p0U = (b0U − ID(U ))d (mod n) ı̂n felul următor:
W calculează bW 0 = BU 0 − ID(U ) + ID(W ) şi trimite lui A perechea (bW 0 , ID(W )). Pre-
supunem că arbitrul calculează efectiv pentru W valoarea pW 0 = (bW 0 − ID(W ))d (mod n).
Atunci, din
bW 0 − ID(W ) ≡ bU 0 − ID(U ) (mod n)
0 0
se obţine imediat pW = pU .
Să presupunem acum că U şi V efectuează protocolul, iar W se interpune conform schemei
următoare:
0
ID(U ), pU , αrU mod n - ID(U ), pU 0 , αrU mod n -
U ¾ ID(V ), pV , αrV mod n W ¾ ID(V ), pV , αrV mod n V

0 0
V calculează deci cheia K 0 = αrU aV +rV aU (mod n), iar U calculează K = αrU aV +rV aU (mod n).
a0 0
W obţine K 0 calculând K 0 = sVU (peV + ID(V )))rU (mod n).
W şi V posedă deci aceeaşi cheie, ı̂n timp ce V crede că o ı̂mparte cu U . În acest moment,
W poate decripta mesajele trimise de V pentru U .
Prelegerea 5

Sisteme de partajare a secretelor

5.1 Sistemul confidenţial al lui Shamir


Într-o bancă, seiful trebuie deschis ı̂n fiecare zi. Banca are trei directori, dar nu ı̂ncredinţează
combinaţia seifului nici unuia din ei. Ea doreşte să dispună de un sistem de acces prin care
orice asociere de doi directori să poată deschide seiful, dar acest lucru să fie imposibil pentru
unul singur.
Ca un exemplu, conform revistei Time Magazin (4 mai 1992), ı̂n Rusia, accesul la arma
nucleară utilizează un astfel de sistem doi - din - trei. Cele trei persoane sunt Preşedintele
ţării, Preşedintele Parlamentului şi Ministrul Apărării.
Să prezentăm ı̂ntâi un sistem de partajare a secretului numit sistem confidenţial.1
Definiţia 5.1 Fie t, w două numere ı̂ntregi pozitive, t ≤ w. Un sistem confidenţial (t, w) este
o metodă de partajare a unei chei K ı̂ntre membrii unei mulţimi P de w participanţi, astfel
ıncât orice asociere de t participanţi să poată calcula K, lucru imposibil pentru asocieri de t − 1
sau mai puţini participanţi.
Exemplul precedent este deci un sistem confidenţial (2, 3).
Valoarea lui K este aleasă de un arbitru2 D. Vom presupune că D 6∈ P. D va distribui ı̂n
secret componente ale cheii membrilor grupului P, astfel ı̂ncât nici un participant să nu cunoască
componentele celorlalţi şi nici să fie capabil ca din componenta sa să poată recompune cheia
K.
Ulterior, participanţii unei submulţimi B ⊆ P pot pune ı̂n comun componentele cheii cunos-
cute de ei (sau să le dea unei autorităţi ı̂n care au ı̂ncredere) cu scopul de a determina K. Ei
trebuie să poată reuşi ı̂n această tentativă dacă şi numai dacă card(B) ≥ t.
Să notăm
P= {Pi | 1 ≤ i ≤ w}
mulţimea celor w participanţi. K este spaţiul tuturor cheilor posibile, iar S este spaţiul
componentelor (toate componentele posibile ale cheii).
Sistemul prezentat ı̂n această secţiune este datorat lui Shamir şi a fost creat ı̂n 1979. Fie
p (p ≥ w + 1) un număr prim şi K= Zp , S= Zp . Deci cheile şi componentele sunt numere din
Zp . Sistemul confidenţial al lui Shamir, prezentat mai jos, se bazează pe un polinom aleator
1
Threshold scheme ı̂n engleză, a seuil ı̂n franceză.
2
Dealer ı̂n engleză, initiateur ı̂n franceză.

55
56 PRELEGEREA 5. SISTEME DE PARTAJARE A SECRETELOR

a(X) de grad cel mult t − 1, ı̂n care termenul liber este K. Fiecare participant Pi află un punct
(xi , yi ) de pe graficul acestui polinom.

1. (Iniţializare): D alege w elemente distincte x1 , . . . , xw ∈ Zp (xi publice), fiecare xi


fiind comunicat lui Pi .

2. Să presupunem că D doreşte să repartizeze cheia K ∈ Zp . D va selecta aleator t − 1


elemente a1 , . . . , at−1 ∈ Zp şi construieşte polinomul
t−1
X
a(X) = K aj X j (mod p).
j=1

3. D calculează yi = a(xi ) şi comunică această valoare lui Pi (1 ≤ i ≤ w).

Fie acum o submulţime {Pi1 , . . . , Pit } de participanţi care doresc să reconstituie cheia. Ei ştiu
valorile xij şi yij = a(xij ) pentru 1 ≤ j ≤ t; a(X) ∈ Zq [X] este polinomul (secret) folosit de D.
Cum gradul lui este cel mult t − 1, putem scrie
a(X) = a0 + a1 X + . . . + at−1 X t−1
unde a0 = K iar a0 , . . . , at−1 ∈ Zq sunt necunoscute. Ele se află rezolvând sistemul liniar
de t ecuaţii yij = a(xij ). Dacă ecuaţiile sunt independente, soluţia este unică, iar valoarea lui
a0 este chiar cheia K.
Exemplul 5.1 Să presupunem p = 17, t = 3, w = 5, iar xi = i, (1 ≤ i ≤ 5). Dacă
B = {P1 , P3 , P5 } vor să afle cheia aducând fiecare informaţiile 8, 10 şi respectiv 11, ei vor
scrie polinomul general a(X) = a0 + a1 X + a2 X 2 şi vor reduce problema la rezolvarea ı̂n Z17 a
sistemului liniar

 a(1) =
 a0 + a1 + a2 = 8
a(3) = a0 + 3a1 + 9a2 = 10


a(5) = a0 + 5a1 + 8a2 = 11
Acesta admite soluţia unică ı̂n Z17 : a0 = 13, a1 = 10, a2 = 2.
Deci valoarea căutată este K = 13.

Teorema 5.1 În sistemul confidenţial al lui Shamir, orice mulţime B de t participanţi poate
reconstitui ı̂n mod unic cheia K.

Demonstraţie: Fie a(X) = a0 + a1 X + . . . + at−1 X t−1 polinomul ales de D, unde a0 = K.


Afirmaţia se reduce la a arăta că sistemul de ecuaţii yij = a(xij ) (1 ≤ j ≤ t), de necunoscute
a0 , . . . , at−1 , admite¯ soluţie unică. Determinantul acestui sistem este
¯ 1 xi 2 t−1 ¯¯
¯ 1 xi1 . . . xi1 ¯
¯ 1 x x 2 t−1 ¯ Y
¯ i2 21 . . . xi2 ¯
¯ ¯= (xik − xij ) (mod p)
¯
¯ ... ¯
¯ 1≤j<k≤t
¯ 1 x x2it . . . xt−1 ¯
it it
Deoarece toate numerele xi sunt distincte, iar Zp este corp, rezultă că acest produs este
nenul, deci sistemul are totdeauna soluţie unică, iar a0 este chiar cheia căutată. 2
Ce se ı̂ntâmplă dacă un grup de t − 1 participanţi ı̂ncearcă să calculeze cheia K ?
5.1. SISTEMUL CONFIDENŢIAL AL LUI SHAMIR 57

Dacă procedează conform algoritmului anterior, vor obţine un sistem de t − 1 ecuaţii cu t


necunoscute. Fie y0 o valoare arbitrară a cheii K. Vom avea y0 = a0 = a(0), care formează a
t - a ecuaţie a sistemului. Acesta oferă de asemenea soluţie unică. Deci, pentru orice valoare
K ∈ Zp există un polinom unic aK (X) ∈ Zp [X] care verifică toate condiţiile:
yij = aK (xij ) (1 ≤ j ≤ t − 1), y0 = aK (0).
Rezultă că orice valoare a lui K este consistentă cu componentele deţinute de cei t − 1
participanţi; asocierea lor nu oferă nici o informaţie suplimentară pentru aflarea cheii.
Mai există o modalitate de abordare a sistemului confidenţial al lui Shamir: folosind poli-
noamele de interpolare Lagrance. Acestea oferă o exprimare explicită a polinomului a(X), sub
forma
Xt Y x − xik
a(X) = yij .
j=1 xij − xik
1≤k≤t
k 6= j

Evident, acesta este un polinom de grad cel mult t − 1, cu proprietatea yij = a(xij ), ∀j =
1, . . . , t. Cum un astfel de polinom este unic, rezultă că el este chiar polinomul căutat.
Un grup B de t participanţi poate calcula a(X) pe baza acestei formule. De fapt, nici nu
este nevoie se determine tot polinomul: este suficient să obţină K = a(0). Deci, ı̂nlocuind ı̂n
formulă pe X cu 0, avem
t
X Y xik
K= yij .
j=1 xik − xij
1≤k≤t
k 6= j

Dacă definim
Y xik
bj = (1 ≤ j ≤ t),
xik − xij
1≤k≤t
k 6= j

aceste valori pot fi precalculate şi făcute publice de către arbitru. Cheia este atunci o combinaţie
liniară de t componente:
t
X
K= bj yij .
j=1

Exemplul 5.2 Să revenim la Exemplul 5.1. Participanţii {P1 , P3 , P5 } pot calcula b1 , b2 , b3 ;
se obţine (calculele sunt făcute modulo 17):
x3 x5
b1 = = 3 ∗ 5 ∗ (−2)−1 ∗ (−4)−1 = 4.
(x3 − x1 )(x5 − x1 )
Similar, b2 = 3, b5 = 11. Cu componentele 8, 10 şi 11, cheia se determină imediat:
K = 4 ∗ 8 + 3 ∗ 10 + 11 ∗ 11 = 13 (mod 17)

Această variantă oferă o simplificare a algoritmului Shamir pentru cazul w = t. Ea funcţionează


pentru K= Zm , S= Zm (m nu este obligatoriu număr prim şi – chiar mai mult – este posibil
ca m ≤ w). Noul algoritm este:
58 PRELEGEREA 5. SISTEME DE PARTAJARE A SECRETELOR

1. D alege aleator t − 1 elemente y1 , . . . , yt−1 ∈ Zm ;


t−1
X
2. D calculează yt = K − yi (mod m);
i=1

3. Fiecare element yi este transmis ı̂n secret lui Pi (1 ≤ i ≤ t).

Cei t participanţi pot determina cheia K pe baza formulei


t
X
K= yi (mod m).
i=1

Evident, t − 1 participanţi nu pot obţine cheia K. Chiar dacă pun ı̂n comun componentele lor,
ei pot determina valoarea K − y, unde y este componenta celui care lipseşte. Cum y este o
valoare aleatoare din Zm , nu se va obţine nici o informaţie suplimentară referitoare la cheie.
Acesta este deci un sistem confidenţial (t, t).

5.2 Structura de acces şi partaj a secretului general


În paragraful precedent am studiat situaţia când orice asociere de t participanţi din totalul
de w poate calcula cheia. Vom restrânge aici această condiţie, specificând ce submulţimi de
participanţi pot avea acces la cheie şi pentru ce submulţimi acest acces este interzis. Fie Γ o
mulţime de submulţimi ale lui P, fiecare din ele reprezentând o asociaţie autorizată să calculeze
cheia K. Γ se numeşte structură de acces, iar submulţimile ei se numesc submulţimi autorizate.
Fie K o mulţime de chei şi S o mulţime de componente. Când arbitrul D doreşte să
repartizeze o cheie K ∈ K, el va distribui câte o componentă fiecărui participant, urmând ca
ulterior, o submulţime de participanţi să ı̂ncerce să determine K punând ı̂n comun componentele
cunoscute de ei.
Definiţia 5.2 Un sistem perfect de partajare a secretelor cu structura de acces Γ este un pro-
cedeu de partajare a secretului unei chei K peste o mulţime P de participanţi, astfel ı̂ncât:
1. Orice submulţime autorizată B ⊆ P de participanţi poate reconstitui cheia din componen-
tele cunoscute de ei;

2. Orice submulţime neautorizată B ⊆ P de participanţi nu posedă nici o informaţie despre


valoarea lui K.
Un sistem confidenţial (t, w) realizează structura de acces Γ= {B ⊆ P | card(B) ≥ t}. O
asemenea structură de numeşte structură confidenţială. Conform paragrafului precedent, sis-
temul confidenţial al lui Shamir este perfect şi realizează o structură confidenţială.
Să studiem securitatea sistemelor de partajare a secretelor. Ca de obicei, nu se impune nici
o restricţie asupra puterii de calcul a submulţimilor neautorizate.
Fie B ∈ Γ şi B ⊆ C ⊆ P. Dacă C caută să determine cheia K, ea va reuşi lucrând numai
cu B şi ignorând participanţii din C \ B. Altfel spus, structura de acces satisface condiţia de
monotonie:
5.3. CONSTRUCŢIA CIRCUITELOR MONOTONE 59

Dacă B ∈ Γ şi B ⊆ C ⊆ P, atunci C ∈ Γ.


În continuare vom presupune că orice structură de acces este monotonă.
Un element B ∈ Γ este minimal dacă ∀A ⊂ B =⇒ A 6∈ Γ. Vom nota cu Γ0 mulţimea
elementelor minimale din Γ. Se observă că această mulţime caracterizează complet Γ. Mai
exact,
Γ= {C ⊆ P | ∃B ∈ Γ0 , B ⊆ C}.
Spunem că Γ este ı̂nchiderea lui Γ0 şi notăm prin Γ = Γ0 .

Exemplul 5.3 Fie P= {P1 , P2 , P3 , P4 } şi Γ0 = {{P1 , P2 , P4 }, {P1 , P3 , P4 }, {P2 , P3 }}. Vom avea
Γ= {{P1 , P2 , P4 }, {P1 , P3 , P4 }, {P2 , P3 }, {P1 , P2 , P3 }, {P2 , P3 , P4 }, {P1 , P2 , P3 , P4 }}.
Invers, fiind dat Γ, se vede imediat că Γ0 este mulţimea părţilor sale minimale.

În cazul structurilor confidenţiale de acces, baza este mulţimea submulţimilor formate cu t
participanţi.

5.3 Construcţia circuitelor monotone


Ideea din această secţiune aparţine lui Benaloh şi Leichter; ea constă ı̂n construirea unui cir-
cuit combinaţional care recunoaşte structura de acces şi generează un sistem de partajare a
secretului. Un astfel de circuit este numit de autori circuit monoton.
Fie C un circuit computaţional cu w intrări notate prin variabilele booleene x1 , . . . , xw
(corespunzătoare celor w participanţi P1 , . . . , Pw ) şi o ieşire booleană y = C(x1 , . . . , xw ). Pre-
supunem că la construcţia circuitului sunt folosite numai porţi AN D şi OR (fără porţi N OT ).
Un astfel de circuit este numit monoton dacă modificarea unei intrări din 0 ı̂n 1 nu va implica
niciodată transformarea ieşirii y din 1 ı̂n 0.
Vom nota
B(x1 , . . . , xw ) = {Pi | xi = 1}
mulţimea participanţilor asociaţi ı̂n mulţimea B. Presupunând că circuitul C este monoton,
vom avea
Γ(C)= {B(x1 , . . . , xw ) | C(x1 , . . . , xw = 1}.
Circuitul C fiind monoton, Γ(C) este o mulţime monotonă de părţi ale lui P.
Fiind dată o mulţime monotonă Γ de părţi ale lui P, se poate construi uşor un circuit
monoton C cu Γ(C)= Γ. Un exemplu de construcţie este următorul:
Fie Γ0 o bază a lui Γ. Vom construi formula  booleană
 (ı̂n forma normal disjunctivă)
_ ^
 Pi 
B∈Γ0 Pi ∈B
Fiecare clauză din această formă normală este legată printr-o poartă AN D, iar disjunc-ţia
finală corespunde unei porţi OR. Numărul total de porţi folosite este card(Γ0 ) + 1.
Fie acum C un circuit monoton care recunoaşte Γ. Vom prezenta un algoritm care permite
arbitrului D să construiască un sistem perfect de partajare a secretului cu structura de acces
Γ. Vom folosi sistemul confidenţial (t, t) din paragraful anterior. Mulţimea cheilor este deci
K= Zm .
Algoritmul parcurge circuitul de la ieşire spre intrare, marcând recursiv cu xV ∈ K, fiecare
arc V parcurs (ı̂n sens invers). Iniţial, arcului care marchează ieşirea y i se atribuie valoarea
xout = K a cheii. Formal, algoritmul este:
60 PRELEGEREA 5. SISTEME DE PARTAJARE A SECRETELOR

1. xout ← K;

2. pentru orice poartă G din care iese un arc marcat x, iar arcele care intră sunt
nemarcate, execută:

(a) Dacă G este o poartă OR, atunci xV ← x pentru orice arc V care intră ı̂n G;
(b) Dacă G este o poartă AN D şi V1 , . . . , Vt sunt arcele care intră ı̂n G, atunci
i. Alege aleator xV,1 , . . . , xV,t−1 ∈ Zm ;
t−1
X
ii. Calculează xV,t = x − xV,i (mod m);
i=1
iii. Marchează arcul Vi cu xV,i , (1 ≤ i ≤ t).

Exemplul 5.4 Pentru mulţimea din Exemplul 5.3, avem Γ0 = {{P1 , P2 , P4 }, {P1 , P3 , P4 },
{P2 , P3 }}, deci se poate asocia expresia booleană
(P1 ∧ P2 ∧ P4 ) ∨ (P1 ∧ P3 ∧ P4 ) ∨ (P2 ∧ P3 ).
Circuitul monoton asociat este desenat mai jos; ı̂n paralel au fost marcate şi arcele, conforma
algoritmului descris:
x1 x2 x3 x4
u u u u
? -
¾ ?
¾ ? - ¾ ? -
a1 a2 K−a1 −a2 c1 K−c1 K−b1 −b2 ?
b2??b1
??? ??
½¼ ¹¸ ½¼
? K -K ¾ K ?
§???¦
¹¸
K ?

Aici a1 , a2 , b1 , b2 , c1 , c2 sunt numere alese aleator ı̂n Zm . Fiecare participant primeşte drept
componentă două numere:
1. a1 şi b1 pentru P1 ,
2. a2 şi c1 pentru P2 ,
3. b2 şi K − c1 pentru P3 ,
4. K − a1 − a2 şi K − b1 − b2 pentru P1 .
Fiecare submulţime autorizată poate calcula valoarea lui K. Astfel, {P1 , P2 , P4 } determină
K = a1 + a2 + (K − a1 − a2 ), submulţimea {P1 , P3 , P4 } calculează K = b1 + b2 + (K − b1 − b2 ),
iar {P2 , P3 } va calcula K = c1 + (K − c1 ).

Să vedem acum ce se ı̂ntâmplă cu mulţimile neautorizate.


Ca o remarcă, dacă o mulţime B este neautorizată, orice submulţime a sa va fi de asemenea
neautorizată.
Definiţia 5.3 O mulţime B ⊆ P este maximal neautorizată dacă
∀B1 ⊂ B =⇒ B1 ∈ Γ.
Este suficient deci de demonstrat că mulţimile maximal neautorizate nu pot afla cheia din
informaţiile pe care le deţin.
5.4. RATA DE INFORMAŢIE 61

Exemplul 5.5 Revenind la exemplul anterior, mulţimile maximal neautorizate sunt {P1 , P2 },
{P1 , P3 }, {P1 , P4 }, {P2 , P4 }, {P3 , P4 }. În fiecare caz, pentru determinarea cheii K lipseşte o
informaţie definită aleator. De exemplu, {P1 , P2 } deţin informaţiile a1 , a2 , b1 şi c1 . Pentru a
reconstitui cheia K ar avea nevoie cel puţin de numărul K − a1 − a2 , sau de K − c1 .
Sisteme cu aceeaşi structură de acces pot fi obţinute folosind şi alte circuite.
Exemplul 5.6 Să reluăm Exemplul 5.3 şi să rscriem expresia booleană sub formă normal con-
junctivă:
(P1 ∨ P2 ) ∧ (P1 ∨ P3 ) ∧ (P2 ∨ P3 ) ∧ (P2 ∨ P4 ) ∧ (P3 ∨ P4 )
Construind sistemul confidenţial corespunzător acestei expresii, vom avea următoarea distri-
buţie a componentelor (omitem detaliile):
1. P1 primeşte a1 şi a2 ;
1. P2 primeşte a1 , a3 şi a4 ;
1. P3 primeşte a2 , a3 şi K − a1 − a2 − a3 − a4 ;
1. P4 primeşte a4 şi K − a1 − a2 − a3 − a4 ;
Teorema 5.2 Fie C un circuit boolean monoton. Construcţia sa generează un sistem perfect
de partajare a secretului, a cărui structură de acces este Γ(C).
Demonstraţie: Vom folosi o recurenţă asupra numărului de porţi din circuitul C. Cazul când
C are o singură poartă este banal: dacă poarta este OR, fiecare participant conţine cheia K
şi structura de acces este mulţimea tuturor părţilor nevide ale lui P; dacă poarta este AN D şi
are t intrări, se obţine sistemul confidenţial (t, t) definit anterior.
Să presupunem că pentru j > 1, orice circuit C cu mai puţin de j porţi verifică teorema,
şi fie C un circuit cu j porţi. Vom considera ultima poartă G a acestui circuit (din care iese
rezultatul y). Ea nu poate fi decât OR sau AN D. Dacă G este o poartă OR, să considerăm cele
t arce care intră ı̂n G : Vi (1 ≤ i ≤ t). Acestea sunt arcele de ieşire din t circuite Ci ; conform
ipotezei de inducţie, fiecare astfel de circuit defineşte un sub-sistem de partajare a secretului,
cu structura de acces Γ(Ci ). Vom avea – evident
t
[
Γ(C) = Γ(Ci ).
i=1
Cum valoarea cheii se atribuie fiecărui arc Vi , sistemul va avea structura de acces Γ(C).
Procedeul este similar dacă G este o poartă AN D. În acest caz,
t
\
Γ(C) = Γ(Ci ).
i=1
Deoarece K este repartizată peste toate arcele Vi conform unui sistem confidenţial (t, t),
sistemul total va admite Γ(C) drept structură de acces. 2
Când o mulţime autorizată B doreşte aflarea cheii, ea trebuie să ştie circuitul utilizat de
arbitru pentru construirea sistemului şi să deducă de aici ce componente sunt necesare pentru
parcurgerea arcelor respective. Această informaţie trebuie să fie publică. Numai valoarea
componentelor trebuie să fie secretă.

5.4 Rata de informaţie


Fie P o mulţime de participanţi şi S spaţiul tuturor componentelor posibile ale cheii. O
distribuţie de componente este o funcţie
62 PRELEGEREA 5. SISTEME DE PARTAJARE A SECRETELOR

f : P−→ S
Ea codifică matematic modalitatea de repartizare a informaţiilor ı̂ntre participanţi. f (Pi )
va fi componenta distribuită participantului Pi (1 ≤ i ≤ w).
Pentru fiecare K ∈ K, fie F K mulţimea tuturor distribuţiilor posibile ale cheii K. În general,
F K este publică. Definim [
F= FK.
K∈K
F este ansamblul complet al tuturor distribuţiilor posibile de chei. Rolul arbitrului va fi de
a selecta aleator un element f ∈ F K şi de a distribui componentele ı̂n conformitate cu această
alegere.
Pentru o submulţime B ⊆ P (autorizată sau nu) de participanţi, se defineşte S(B) =
{f |B | f ∈ F}, unde funcţia fB : B −→ S este restricţia distribuţiei de părţi f la submulţimea
B; ea este deci definită prin fB (Pi ) = f (Pi ), ∀Pi ∈ B.
Deci S(B) este mulţimea tuturor distribuţiilor posibile ale componentelor la elementele
submulţimii B.
Ne punem acum problema evaluării performanţelor sistemelor perfecte de partajare a se-
cretelor construite anterior, pe baza structurilor de acces monotone.
În cazul unui sistem confidenţial (t, w), circuitul boolean construit pe baza expresiei ı̂n forma
normal disjunctivă are 1 + Cwt porţi. Fiecare participant primeşte o componentă formată din
t−1
Cw−1 numere din Zm . Această partajare este foarte slabă comparativ cu sistemul confidenţial
al lui Shamir (t, w), care oferă acelaşi rezultat folosind componente formate dintr-un singur
număr.
Pentru măsurarea performanţelor sistemelor perfecte de partajare a secretelor, vom folosi
un instrument numit rată de informaţie.
Definiţia 5.4 Considerăm un sistem perfect de partajare a secretelor cu structura de acces Γ.
Rata de informaţie a unui participant Pi este prin definiţie
log2 (card(X))
ρi = .
log2 (card(S(Pi )))
S(Pi ) ⊆ S este mulţimea componentelor posibile pe care le poate primi participantul Pi . S-a
notat cu X = K mulţimea cheilor posibile.
Rata de informaţie a sistemului este
ρ = min{ρi | 1 ≤ i ≤ w}.
Exemplul 5.7 Să comparăm cele două sisteme date ca exemplu ı̂n paragraful anterior. Sis-
log2 m 1
temul din Exemplul 5.4 are rata de informaţie ρ = 2
= .
log2 m 2
log2 m 1
Pentru sistemul din Exemplul 5.6, avem ρ = = .
log2 m3 3
Primul sistem este deci mai bun.
În general, dacă se construieşte un sistem de partajare a secretelor plecând de la un circuit
monoton C, rata sa de informaţie se obţine folosind următoarea teoremă:
Teorema 5.3 Fie C un circuit boolean monoton. Există atunci un sistem perfect de partajare
a secretelor, cu structura de acces Γ(C), care admite
½ ¾
ca rată de informaţie
1
ρ = max
1≤i≤w ri
unde ri este numărul de arce de intrare ı̂n circuit (pentru valorile xi ).
5.5. SISTEMUL DE PARTAJARE AL LUI BRICKELL 63

Evident, este preferabilă o rată de informaţie cât mai mare. Valoarea ei este ı̂nsă limitată
superior, conform teoremei următoare:

Teorema 5.4 Pentru orice sistem perfect de partajare a secretelor cu structura de acces Γ,
rata de informaţie verifică inegalitatea ρ ≤ 1.

Demonstraţie: Să considerăm un sistem perfect de partajare a secretelor având structura de


acces Γ. Fie B ∈ Γ0 şi Pj ∈ B un participant. Definim B 0 = B \ {Pj }. Fie g ∈ S(B). Cum
B 0 6∈ Γ, distribuţia componentelor g|B 0 nu dă nici o informaţie asupa cheii. Deci, pentru orice
K ∈ K există o distribuţie a componentelor gK ∈ F astfel ca gK |B 0 = g|B 0 . Cum B ∈ Γ, vom
avea gK (Pj ) 6= gK 0 (Pj ) pentru K 6= K 0 . Deci card(S(Pj )) ≥ card(K), adică ρ ≤ 1. 2
Un sistem cu ρ = 1 va fi numit ideal. Ca un exemplu, sistemul confidenţial al Shamir are
ρ = 1, deci este un sistem ideal. În schimb, rata de informaţie pentru un sistem confidenţial
1
(t, w) bazat pe circuite monotone construite cu forma normal disjunctivă este t−1 , extrem de
Cw−1
ineficientă dacă 1 < t < w.

5.5 Sistemul de partajare al lui Brickell


Sistemul construit ı̂n acest paragraf este cunoscut sub numele de construcţia vectorială a lui
Brickell.
Fie Γ o structură de acces, p un număr prim, iar d ≥ 2 un număr ı̂ntreg. Fie
k: P−→ Zpd
o funcţie cu proprietatea
(1, 0, . . . , 0) ∈ hk (Pi ) | Pi ∈ Bi ⇐⇒ B ∈ Γ. (A)
Altfel spus, vectorul (1, 0, . . . , 0) este o combinaţie liniară de vectori din mulţimea
{k (Pi ) | Pi ∈ B} dacă şi numai dacă B este o submulţime autorizată.
Plecând de la această funcţie, vom construi un sistem de partajare a secretelor cu K=
S(Pi ) = Zp (1 ≤ i ≤ w). Pentru orice a = (a1 , . . . , ad ) ∈ Zpd . vom defini o funcţie de distribuţie
a componentelor fa : P−→ S prin fa (x) = a· k (x).
S-a notat cu · produsul scalar a doi vectori. Algoritmul de partajare a secretelor Brickell
este următorul:

1. (Iniţializare) Pentru 1 ≤ i ≤ w, D atribuie lui Pi vectorul k (Pi ) ∈ Zpd .


Aceşti vectori sunt publici.

2. Pentru repartizarea cheii K ∈ Zp , arbitrul D alege aleator d − 1 elemente


a 2 , . . . , ad ∈ Zp .

3. Folosind vectorul a = (K, a2 , . . . , ad ), arbitrul calculează componenta


yi = a· k (Pi ) (1 ≤ i ≤ w), pe care o dă lui Pi .

Vom avea rezultatul următor:


64 PRELEGEREA 5. SISTEME DE PARTAJARE A SECRETELOR

Teorema 5.5 Dacă k verifică proprietatea (A), mulţimea distribuţiilor de componente F K ,


K ∈ K formează un sistem perfect de partajare a secretelor, cu structura de acces Γ.
Demonstraţie: Să arătăm ı̂ntâi că dacă B este o mulţime autorizată, participanţii lui B pot
calcula cheia K. Deoarece (1, 0, . . . , 0) ∈ hk (Pi ) |X
Pi ∈ Bi, putem scrie
(1, 0, . . . , 0) = ci k (Pi )
{i|Pi ∈B}
unde ci ∈ Zp . Fie si componenta lui Pi . Vom avea si = a· k (Pi ), unde a este vectorul
necunoscut ales de D, iar K = a1 = a · (1, X
0, . . . , 0). Vom avea deci
K= ci a· k (Pi ).
{i|Pi ∈B}
X
Componenţii grupului B pot reconstitui deci cheia K = ci si .
{i|Pi ∈B}
Ce se ı̂ntâmplă dacă B nu este autorizat ? Fie e dimensiunea spaţiului vectorial
hk (Pi ) | Pi ∈ Bi (evident, e ≤ card(B)). Să considerăm K ∈ K şi sistemul liniar
k (Pi ) · a = si ∀Pi ∈ B
(1, 0, . . . , 0) · a = K
cu necunoscutele a1 , . . . , ad . Matricea sistemului are rangul e + 1 deoarece (1, 0, . . . , 0) 6∈
hk (Pi ) | Pi ∈ Bi. Deci, independent de valoarea lui K, spaţiul soluţiilor este d − e − 1, adică ex-
istă pd−e−1 distribuţii de componente ı̂n fiecare F K , consistente cu componentele participanţilor
din B. 2
Sistemul confidenţial (t, w) al lui Shamir este un caz particular al acestei construcţii. Într-
adevăr, fie d = t şi k (Pi ) = (1, xi , x2i , . . . xt−1
i ), pentru 1 ≤ i ≤ w, unde xi este coordonata x
dată de Pi . Sistemul obţinut este echivalent cu cel al lui Shamir.
Un alt rezultat general se referă la structurile de acces care admit ca bază un ansamblu
de perechi care definesc un graf multipartit complet. Reamintim, un graf G = (V, E) este
multipartit complet dacă V se poate partiţiona ı̂n submulţimile V1 , . . . , Vs astfel ı̂ncât {x, y} ∈ E
dacă şi numai dacă x ∈ Vi , y ∈ Vj cu i 6= j.
Mulţimile Vi se numesc componente. Dacă card(Vi ) = ni (1 ≤ i ≤ s), graful este notat
Kn1 ,...,ns . Graful multipartit complet K1,...,1 cu s componente este de fapt un graf complet şi se
notează Ks .
Teorema 5.6 Fie G = (V, E) un graf multipartit complet. Atunci există un sistem perfect de
partajare a secretelor, ideal, cu structura de acces E peste mulţimea V de participanţi.
Demonstraţie: Fie V1 , . . . , Vs componentele lui G, şi x1 , . . . , xs ∈ Zp distincte (p ≥ s). Fie şi
d = 2. Pentru fiecare participant v ∈ Vi se defineşte k (v) = (xi , 1). Proprietatea (A) se verifică
imediat, deci – conform Teoremei 5.5 – afirmaţia este demonstrată. 2
Vom aplica acest rezultat considerând structurile de acces posibile pentru patru partici-
panţi. Va fi suficient să luăm ı̂n calcul numai structurile a căror bază nu se poate partiţiona ı̂n
două mulţimi nevide. De exemplu, Γ0 = {{P1 , P2 }, {P3 , P4 }} poate fi partiţionată ı̂n {{P1 , P2 }}∪
{{P3 , P4 }}, fiecare cu dezvoltarea sa independentă, deci nu o vom lua ı̂n considerare. O listă
completă a structurilor de acces neizomorfe pentru 2, 3 sau 4 participanţi este dată ı̂n Tabelul
5.1 (s-a notat cu ρ∗ valoarea maximă a ratei de informaţie pentru structura respectivă).
Se pot construi sisteme ideale pentru 10 din aceste 18 structuri de acces. Acestea sunt
structuri confidenţiale sau structuri a căror bază este un graf multipartit, pentru care se aplică
Teorema 5.6.
5.5. SISTEMUL DE PARTAJARE AL LUI BRICKELL 65

Tabelul 5.1: Structuri de acces cu maxim 4 participanţi

Nr.crt w Submulţimile lui G0 ρ∗ Rezultate


1. 2 P1 P2 1 Confidenţial (2, 2)
2. 3 P1 P2 , P2 P3 1 Γ0 ' K1,2
3. 3 P1 P2 , P2 P3 , P1 P3 1 Confidenţial (2, 3)
4. 3 P1 P2 P 3 1 Confidenţial (3, 3)
5. 4 P1 P2 , P2 P3 , P3 P4 2/3
6. 4 P1 P2 , P1 P3 , P1 P4 1 Γ0 ' K1,3
7. 4 P1 P2 , P1 P4 , P2 P3 , P3 P4 1 Γ0 ' K2,2
8. 4 P1 P2 , P2 P3 , ; P2 P4 , P3 P4 2/3
9. 4 P1 P2 , P1 P3 , P1 P4 , P2 P3 , P2 P4 1 Γ0 ' K1,1,2
10. 4 P1 P2 , P1 P3 , P1 P4 , P2 P3 , P2 P4 , P3 P4 1 Confidenţial (2, 4)
11. 4 P1 P2 P3 , P1 P4 1
12. 4 P1 P3 P4 , P1 P2 , P2 P3 2/3
13. 4 P1 P3 P4 , P1 P2 , P2 P3 , P2 P4 2/3
14. 4 P1 P2 P3 , P1 P2 P4 1
15. 4 P1 P2 P3 , P1 P2 P4 , P3 P4 1
16. 4 P1 P2 P3 , P1 P2 P4 , P1 P3 P4 1
17. 4 P1 P2 P3 , P1 P2 P4 , P1 P3 P4 , P2 P3 P4 1 Confidenţial (3, 4)
18. 4 P1 P2 P3 P4 1 Confidenţial (4, 4)

Exemplul 5.8 Să considerăm structura de acces cu numărul 9 din Tabelul 5.1; deci d = 2 şi
p ≥ 3. Definim k prin
k (P1 ) = (0, 1), k (P2 ) = (0, 1), k (P3 ) = (1, 1), k (P4 ) = (1, 2).
Aplicând Teorema 5.6 se obţine o structură perfectă de partajare a secretelor, ideală pentru
acest tip de acces.
Rămân de studiat opt structuri de acces. Se poate utiliza construcţia lui Brickell pentru patru
din ele: structurile 11, 14, 15 şi 16.
Exemplul 5.9 Pentru structura de acces 11 vom considera d = 3 şi p ≥ 3. Definiţia lui k este
k (P1 ) = (0, 1, 0), k (P2 ) = (1, 0, 1), k (P3 ) = (0, 1, −1), k (P4 ) = (1, 1, 0).
Calculând, se obţine k (P4 )− k (P1 ) = (1, 1, 0) − (0, 1, 0) = (1, 0, 0) şi
k (P2 )+ k (P3 )− k (P1 ) = (1, 0, 1) + (0, 1, −1) − (0, 1, 0) = (1, 0, 0).
Deci (1, 0, 0) ∈ hk (P1 ), k (P2 ), P(P3 )i şi (1, 0, 0) ∈ hk (P1 ), k (P4 )i.
Mai rămâne de arătat că (1, 0, 0) 6∈ hk (Pi ) | Pi ∈ Bi pentru orice mulţime maximală neau-
torizată B. Există numai trei astfel de mulţimi: {P1 , P2 }, {P1 , P3 }, {P2 , P3 , P4 }. Pentru fiecare
caz se arată că sistemul liniar asociat nu are soluţie. De exemplu, să considerăm sistemul
(1, 0, 0) = a2 k (P2 ) + a3 k (P3 ) + a4 k (P4 )
cu a2 , a3 , a4 ∈ Zp . Se obţine sistemul echivalent
a2 + a4 = 1
a3 + a4 = 0
a2 − a3 = 0
66 PRELEGEREA 5. SISTEME DE PARTAJARE A SECRETELOR

care nu are soluţie.

Exemplul 5.10 Pentru structura de acces 14 vom defini d = 3, p ≥ 2, iar k va fi:


k (P1 ) = (0, 1, 0), k (P2 ) = (1, 0, 1), k (P3 ) = (0, 1, 1), k (P4 ) = (0, 1, 1).
Proprietatea (A) se verifică imediat; deci se poate aplica Teorema 5.6.

În mod similar se pot construi sisteme perfecte de partajare a secretelor ideale pentru structurile
15 şi 16.
Cele patru sisteme rămase nu admit construcţia unor astfel de sisteme.

5.6 Construcţia prin descompunere


Prezentăm aici o altă modalitatea de construire a sistemelor de partajare a secretelor, remar-
cabilă prin performanţele rezultatelor, care maximizează rata de informaţie.

Definiţia 5.5 Fie Γ o structură de acces cu baza Γ0 şi K un set de chei. O K - descompunere
ideală a lui Γ0 este un set {Γ1 , . . . , Γn } cu proprietăt ile

1. Γk ⊆ Γ0 (1 ≤ k ≤ n);
n
[
2. Γ k = Γ0 ;
k=1

3. ∀ k (1 ≤ k ≤ n) există un sistem perfect de partajare


[ a secretelor, ideal, cu mulţimea de
chei K, peste mulţimea de participanţi P k = B.
B∈Γk

Pentru o K - descompunere ideală a structurii de acces Γ se poate construi uşor un sistem


perfect de partajare a secretelor.

Teorema 5.7 Fie Γ o structură de acces cu baza Γ0 , K un set de chei şi o K - descompunere
ideală {Γ1 , . . . , Γn } a lui Γ. Pentru fiecare participant Pi , fie Ri = card{k | Pi ∈ P k }.
Există atunci un sistem perfect de partajare a secretelor cu structură de acces Γ şi rată de
informaţie ρ = 1/R, unde R = max {Ri }.
1≤i≤w

Demonstraţie: Pentru 1 ≤ k ≤ n există un sistem ideal de structură de acces de bază Γk peste


mulţimea K. Notăm F k mulţimea distribuţiilor componentelor sale. Vom construi un sistem
cu structură de acces Γ peste mulţimea K. Mulţimea distribuţiilor componentelor sale este
generată după regula: dacă arbitrul D doreşte să ı̂mpartă cheia K (ı̂n cazul 1 ≤ k ≤ n), el va
genera aleator o distribuţie de componente fk ∈ F kK şi va distribui efectiv aceste componente
participanţilor din P k .
Se verifică uşor că acest sistem este perfect. Să determinăm rata sa de informaţie. Vom
avea card(S(Pi )) = [card(K)]Ri pentru orice i (1 ≤ i ≤ w). Deci ρi = 1/Ri şi
1
ρ= ,
max{Ri | 1 ≤ i ≤ w}
ceea ce incheie demonstraţia. 2
O generalizare a acestui rezultat – pentru s K - descompuneri ideale se bazează pe teorema
5.6. CONSTRUCŢIA PRIN DESCOMPUNERE 67

Teorema 5.8 (Construcţia prin descompunere): Fie Γ o structură de acces de bază Γ0 , s ≥ 1


un număr ı̂ntreg, şi K un set de chei. Presupunem că s-a construit o K - descompunere ideală
Dj = {Γj,1 , . . . , Γj,nj } a lui Γ0 , şi fie P j,k mulţimea participanţilor la structura de acces Γj,k .
Pentru fiecare participant Pi definim
s
X
Ri = card{k | Pi ∈ P j,k }.
j=1
Există atunci un sistem perfect de partajare a secretelor, cu structura de acces Γ, a cărui
rată de informaţie este ρ = s/R, unde R = max (Ri ).
1≤i≤w

Demonstraţie: Pentru 1 ≤ j ≤ s şi 1 ≤ k ≤ n se poate construi un sistem ideal cu baza Γj,k şi
mulţimea de chei K. Vom nota F j,k mulţimea corespunzătoare de distribuţii a componentelor.
Vom construi un sistem cu structura de acces Γ şi mulţimea de chei Ks . Mulţimea sa de
distribuţii de componente F se generează astfel: dacă arbitrul D doreşte să ı̂mpartă cheia
K = (K1 , . . . , Ks ) (pentru 1 ≤ k ≤ n), el va genera aleator o distribuţie de componente
f j,k ∈ F j,k
Kj , pe care le distribuie efectiv participanţilor din P j,k .
În continuare se repetă demonstraţia Teoremei 5.7. 2

Exemplul 5.11 Să considerăm structura de acces 5 din Tabelul 5.1, a cărei bază nu este un
graf multipartit complet.
Fie p un număr prim şi să considerăm două Zp - descompuneri:
Γ = {{P1 , P2 }}
D1 = {Γ1,1 , Γ1,2 } cu 1,1
Γ1,2 = {{P2 , P3 }, {P3 , P4 }}
şi
Γ = {{P1 , P2 }, {P2 , P3 }}
D2 = {Γ2,1 , Γ2,2 } cu 2,1
Γ2,2 = {{P3 , P4 }}
Aceste descompuneri corespund lui K2 şi K1,2 , deci sunt descompuneri ideale. Ambele oferă
o rată de informaţie ρ = 1/2. Dacă le vom combina conform Teoremei 5.8 cu s = 2, vom
obţine o rată de informaţie maximă ρ = 2/3.
Luând ca bază Teorema 5.6, putem obţine efectiv un astfel de sistem. D alege aleator
patru elemente b1,1 , b1,2 , b2,1 , b2,2 ∈ Zp . Pentru o cheie (K1 , K2 ) ∈ Zp2 , arbitrul va distribui
componentele astfel:
1. P1 primeşte b1,1 şi b2,1 ;
2. P2 primeşte b1,1 + K1 , b1,2 şi b2,1 + K2 ;
3. P3 primeşte b1,2 + K1 , b2,1 şi b2,2 ;
4. P4 primeşte b1,2 şi b2,2 + K2 .
(toate calculele sunt efectuate ı̂n Zp ).

Exemplul 5.12 Fie structura de acces 8 din Tabelul 5.1. Vom considera K= Zp pentru un
număr prim p ≥ 3. Vom utiliza două K - descompuneri ideale
Γ = {{P1 , P2 }}
D1 = {Γ1,1 , Γ1,2 } cu 1,1
Γ1,2 = {{P2 , P3 }, {P2 , P4 }, {P3 , P4 }}
şi
Γ = {{P1 , P2 }, {P2 , P3 }, {P2 , P4 }}
D2 = {Γ2,1 , Γ2,2 } cu 2,1
Γ2,2 = {{P3 , P4 }}
D1 corespunde lui K2 şi K3 , iar D2 – lui K2 şi K1,3 ; deci ambele sunt K - descompuneri.
Aplicând Teorema 5.8 cu s = 2 se va obţine ρ = 2/3. Similar exemplului precedent, o construcţie
efectivă se realizează astfel:
68 PRELEGEREA 5. SISTEME DE PARTAJARE A SECRETELOR

D alege aleator (şi independent) patru elemente b1,1 , b1,2 , b2,1 , b2,2 ∈ Zp . Pentru o cheie
(K1 , K2 ) ∈ Zp2 , arbitrul va distribui componentele astfel:
1. P1 primeşte b1,1 + K1 şi b2,1 + K2 ;
2. P2 primeşte b1,1 , b1,2 şi b2,1 ;
3. P3 primeşte b1,2 + K1 , b2,1 + K2 şi b2,2 ;
4. P4 primeşte b1,2 + 2K1 , b21 + K2 şi b2,2 + K2 .
(toate calculele sunt efectuate ı̂n Zp ).
Prelegerea 6

Sisteme electronice de plată

6.1 Proprietăţi de bază ale sistemelor electronice de plată


Sistemele electronice de plată realizează tranzacţii financiare prin intermediul informaţiei trans-
misă prin canale de telecomunicaţie. În prezent sistemele de plată electronice există ı̂n mai
multe forme, printre care: cecuri digitale (digital checks), cărti de credit (credit cards), bani
electronici (electronic cash).
În această prelegere vom trata sistemele de plată care utilizează monezile electronice şi sunt
definite prin anumite proprietăţi criptografice. Utilizând acest tip de sisteme, vom incerca
realizarea unui model care va imita sistemul bancar clasic de emitere a numerarului, cu singura
diferentă că totul este realizat digital.
T. Okamoto şi K. Ohta au propus ı̂n 1991 şase proprietăţi fundamentale ale unui sistem
digital de plată:

1. Securitatea:
Protocolul de tranzacţie trebuie să asigure un nivel de securitate ridicat, utilizănd tehnici
criptografice. Vor fi prevenite atacuri care ı̂ncearcă să modifice sau să reproducă informa-
ţia transmisă.

2. Anonimitatea:
Această trăsătură permite utilizatorului să rămână anonim ı̂n timpul desfăşurării proto-
colului de tranzacţie.

3. Portabilitatea:
Securitatea şi folosirea sistemului digital nu trebuie să fie dependente de caracteristicile
fizice ale calculatoarelor folosite. În plus, informaţia va putea fi transferată prin orice
reţea de calculatoare, fără să existe o reţea specială care să aiba drepturi separate.

4. Transferul ı̂n ambele sensuri:


Monezile digitale se pot transfera ı̂ntre utilizatori, fără ca acest transfer să fie realizat
printr-o bancă.

5. Capacitatea de a realiza tranzacţii ”off-line”:

69
70 PRELEGEREA 6. SISTEME ELECTRONICE DE PLATĂ

Protocolul de tranzacţie ı̂ntre două părti trebuie să se desfăşoare ı̂n orice moment, fără
autentificarea unei a treia părţi şi fără ca utilizatorii să fie conectaţi obligatoriu la o
instituţie financiară de control.

6. Divizibilitatea:
O monedă electronică obţinută de utilizator din contul său poate fi ı̂mpărţită ı̂n monezi
de valori mai mici, cu scopul de a fi folosite (separat sau nu) la diferite tranzacţii.

Scenariul sistemului de plată electronic presupune 3 tipuri de participanţi:

• Un utilizator (sau client) pe care-l vom nota de obicei U.

• Un comerciant (sau magazin) care va accepta banii electronici ai clientului, furnizând ı̂n
schimb anumite bunuri. Acesta se va nota S.

• O instituţie financiară (sau bancă, notată B) unde atât clientul, cât şi comerciantul au
conturi deschise. Este posibil să fie o reţea de bănci care comunică şi realizează tranzacţii
ı̂ntre ele, dar noi vom considera pentru simplificare existenţa unei singure bănci.

6.2 Securitatea plăţilor electronice


Pentru securitatea unui sistem electronic de plată mai sunt necesare câteva proprietătı̂ supli-
mentare:

• Intimitatea (Privacy) sau protecţia ı̂mpotriva interceptării mesajelor

• Autentificarea utilizatorului: fiecare dintre cele două părţi implicate ı̂ntr-un protocol
trebuie să fie sigură de identitatea celeilalte părţi.

• Integritatea mesajului: destinatarul trebuie să verifice dacă mesajul primit a fost (sau
nu) modificat ı̂n tranzit.

• Imposibilitatea negării (Non-repudiation): cel care a trimis un mesaj nu va putea să


nege mai târziu acest lucru.

David Chaum, iniţiatorul sistemelor electronice de plată, defineşte ı̂ncă două trăsături de
bază ale acestora:

• Imposibilitatea băncii de a urmai utilizatorul după protocolul de extragere a monezilor


electronice – ı̂n cazul ı̂n care acesta este onest (adică va utiliza monezile o singură dată).
Vom vedea ulterior că pentru un sistem de ı̂ncredere se impune ca banca să aibă posibili-
tatea de a-l identifica pe cel care comite o fraudă (ı̂ncearcă să folosească acceaşi monedă de
mai multe ori). Mai mult decât atât, s-au elaborat sisteme (toate folosind o componentă
hardware de tip card, chip sau micro-procesor) care previn frauda.
Dacă se respectă această condiţie, sistemul se va numi fără urmărire (un-traceable).
6.2. SECURITATEA PLĂŢILOR ELECTRONICE 71

• Imposibilitatea de a deduce identitatea utilizatorului, dacă se urmăresc mai multe monezi


folosite de acesta; altfel spus – nu se poate realiza o legătura ı̂ntre monezile folosite ı̂n
tranzacţii diferite pentru a obţine informaţii suplimentare.
În acest caz, sistemul se va numi fără legături (un-linkable).
De remarcat că sistemul de plată folosind cărţi de credit nu dispune de aceste ultime două
proprietăţi; de aceea David Chaum ı̂mpreună cu alţi cercetători au propus sistemul de plată cu
monezi electronice, care va oferi utilizatorilor lor aceste două garanţii suplimentare.
Într-un protocol de tranzacţie al unui astfel de sistem, succesiunea evenimentelor este
următoarea:
1. Protocolul de extragere al monezilor (withdrawal protocol);
Utilizatorul va extrage monezi de o anumită valoare din contul său din bancă şi le va
stoca ı̂ntr-o componentă hard (harddisk sau card).
2. Protocolul de plata (payment protocol);
Utilizatorul va transfera bani digitali comerciantului (sau magazinului) de la care a
cumpărat bunuri.
3. Protocolul de depozit (deposit protocol);
Comerciantul va transfera banii primiţi ı̂n contul său din bancă, apoi va livra clientului
bunurile plătite.
Aceste protocoale se pot implementa ı̂n două moduri:
• on-line: Comerciantul ia legătura cu banca şi verifică validitatea monezii trimisă de
client, ı̂nainte de a-i livra acestuia bunurile.
Acesta este modul care se utilizează ı̂n prezent de către tranzacţiile cu cărti de credit.
• off-line: Comerciantul acceptă monezile clientului după un protocol de verificare cu
acesta, fără a face apel la bancă. Protocolul de depozit la bancă se va desfăşura periodic
(de exemplu la sfârşitul săptămânii).
La sistemele de tip ”on-line”, protocoalele de plată şi de depozit nu sunt practic separate.
Cel mai mare dezavantaj al acestor sisteme – şi unul din motivele pentru care nu se folosesc
la operaţiile cu sume mici – este faptul că la fiecare tranzacţie trebuie apelată banca. Cum
numărul utilizatorilor de Internet şi de sisteme electronice comerciale creşte accelerat, aceasta
devine o problemă dificilă de comunicare.
Tipul de fraudă cel mai frecvent ı̂nţâlnit constă ı̂n utilizarea unei monezi de mai multe ori
(double-spending sau multiple-spending). Pentru a se proteja ı̂mpotriva acestei fraude, banca va
menţine o bază de date cu toate monezile electronice folosite. Executând protocolul de depozit,
banca va căuta moneda primită ı̂n baza de date şi – dacă se află deja acolo – o va respinge. Dacă
plata se face ”on-line” se va preveni utilizarea unei aceleiaşi monezi de mai multe ori. Dacă
se foloseşte sistemul ”off-line”, se defineşte un mecanism suplimentar prin care banca va putea
identifica utilizatorul care a comis frauda. Dezavantajul la sistemele ”off-line” este intervalul
de timp după care se face identificarea, timp ı̂n care utilizatorul necinstit poate să dispară. De
aceea sistemele ”off-line” nu sunt recomandate pentru sume mari de bani.
Pentru realizarea sistemelor care dispun de proprietăţile enunţate, se foloseşte criptografia
cu cheie publică.
72 PRELEGEREA 6. SISTEME ELECTRONICE DE PLATĂ

6.3 Protocoale de semnătură ”blind”


Introdus de Chaum ı̂n 1983, protocolul de semnătură blind (blind signature protocol) este
extrem de util ı̂n crearea sistemelor de plăţi electronice.
Pentru uşurinţa exprimării vom nota cu B partea care semnează un mesaj, şi cu U partea
care primeşte semnătura.

Definiţia 6.1 Un protocol de semnătură (P, A, K, S, V) se numeşte protocol de semnătură


blind dacă ∀x ∈ P (x complet necunoscut lui B) U poate să obţină de la B un mesaj semnat
valid (x, sigK (x)).

Exemplul 6.1 Protocolul de semnătură blind RSA.


Fie p, q, n definite ca la sistemul cu cheie publică RSA. Vom avea
P = A = Zn , K={(n, p, q, a, b), n = pq, ab ≡ 1 (mod ϕ(n))}.
Fie x mesajul care trebuie semnat. Paşii protocolului blind sunt următorii:

1. U alege aleator un numar r ∈ Zn şi trimite lui B numărul x0 = rb x (mod n).

2. B semnează mesajul x0 : y 0 = sigK (x0 ) = sigK (rb x) = (rb x)a (mod n) ≡ rxa (mod n) şi
trimite y 0 lui B.

3. U ı̂mparte y 0 la r şi obţine y = y 0 r−1 = xa (mod n).

La sfârşitul protocolului, U obţine (x, y = sigK (x)): un mesaj semnat valid, astfel ı̂ncât B nu
cunoaşte x.
Observăm ca funcţiile sigK şi verK sunt cele definite ı̂n protocolul de semnătura RSA:
sigK (x0 ) = (x0 )a (mod n)
verK (x0 , y 0 ) = T ⇔ x0 = (y 0 )b (mod n).

6.4 Scheme de identificare


O schemă de identificare este un protocol ı̂ntre două părţi: P (prover) şi V (verifier) ı̂n care P
demonstrează cunoaşterea cheii sale secrete fără a o revela, iar V la sfârşitul protocolului este
convins de identitatea lui P.
Orice schemă de identificare se poate transforma ı̂ntr-un protocol de semnatură prin uti-
lizarea unei funcţii de dispersie. Vom prezenta schema de identificare şi protocolul de semnătură
definite de Clauss Schnorr, a căror securitate este bazată pe problema logaritmului discret.
În protocoalele lui Schnorr se aleg:

• două numere prime p şi q, astfel ı̂ncât q|p − 1,

• un parametru t

• un generator g ∈ Zp asfel ı̂ncât g q ≡ 1 (mod p).


6.4. SCHEME DE IDENTIFICARE 73

Pentru securitate se recomandă ca q să aibă ı̂n reprezentarea binară minim 150 biţi, p – minim
512 biţi, iar parametrul t – ı̂n jur de 72 biţi.
Numerele (p, q, g) vor fi făcute publice.
Pentru a genera o pereche (cheie publică, cheie privată), un utilizator P alege aleator un
număr s < q şi calculează v = g −s (mod p). s va fi cheia sa privată, iar v cheia sa publică.
Protocolul de Autentificare:
Presupunând că P vrea să ı̂i demonstreze identitatea sa lui V, cei doi parcurg următorul
protocol:

Protocolul de autentificare Schnorr:

1. P alege aleator un număr r (0 < r < q), calculează b = g r (mod p) pe care-l trimite
lui V.

2. V trimite lui P un număr aleator x, x ∈ (0, 2t − 1), numit provocare.

3. P calculează y = r + sx (mod q) şi ı̂i răspunde lui V cu y.

4. V verifică relaţia b = g y v x (mod p) şi acceptă autentificarea lui P dacă ea este


ı̂ndeplinită.

Protocolul se numeşte de tip provocare - răspuns.


Dacă P urmează acest protocol pas cu pas, atunci:
g y v x ≡ g r+sx g −sx ≡ g r ≡ b (mod p),
deci relaţia de la pasul 4 este verificată şi P este autentificat.
Ideea acestui protocol constă ı̂n construcţia de către P a unei drepte d : y = r + sx de
pantă secreta s. P ı̂i va demonstra lui V cunoasterea dreptei d, răspunzând la o provocare x
cu punctul y corespunzător de pe dreaptă. Verificând relaţia de la pasul 4, V este convins că
P cunoaşte panta secretă a dreptei, fără a o putea calcula şi el.
De fiecare dată când iniţiază acest protocol, P trebuie să aleagă o nouă valoare pentru r.
Altfel, V se va afla ı̂n posesia a două puncte ale dreptei, determinând astfel panta dreptei –
care este chiar cheia secreta s a lui P. Vom demonstra acest lucru:

Propoziţia 6.1 Executand de două ori protocolul de autentificare Schnorr cu acelaşi număr r
ales la pasul 1, ı̂n final V va fi ı̂n posesia cheii secrete s a lui P.

Demonstraţie: După pasul 1, V cunoaşte b = g r (mod p).


Fie x1 , x2 cele două provocări diferite trimise de V ı̂n cele două execuţii ale protocolului
Schnorr;
( (0 ≤ x1 , x2 ≤ 2t − 1). În final V va cunoaşte:
y1 = r + sx1 (mod q)
y2 = r + sx2 (mod q)
Rezolvând acest sistem, se obţine
y1 − y2 = s(x1 − x2 ) (mod q) ⇒ s = (y1 − y2 )(x1 − x2 )−1 (mod q). 2
Protocolul de semnătură:
Să arătăm cum poate fi transformat protocolul de autentificare Schnorr ı̂ntr-un protocol de
semnătură digitală.
74 PRELEGEREA 6. SISTEME ELECTRONICE DE PLATĂ

Introducem o funcţie de dispersie H fără coliziuni tari. Presupunem că U doreşte să obţină
de la B o semnătură asupra unui mesaj m. Similar protocolului de autentificare Schnorr, B va
avea cheia publică v şi cheia sa secretă s.
Protocolul de semnătură Schnorr

1. B alege un număr aleator r (0 < r < q) şi calculează b = g r (mod p).

2. B concatenează m cu b şi formează x = H(m k b).

3. B calculeaza y = r + sx (mod q) şi trimite lui U perechea (x, y).

4. U calculează b0 = g y v x (mod p) şi x0 = H(m k b0 ).


Dacă x = x0 , atunci U acceptă (x, y) ca o semnătură validă pentru m.

Observăm că pentru a transforma protocolul de autentificare Schnorr ı̂ntr-un protocol de


semnătură este suficient să ı̂nlocuim provocarea cu dispersia asupra documentului care tre-
buie semnat. Ideea poate fi folosită la toate protocoalele de autentificare de tip provocare /
răspuns.
Formal, protocolul de semnătură Schnorr este definit astfel:
P = A = Zp , K={(p, q, g, s, v, r)|v = g −s (mod p), p|q − 1}.
Dacă K = (p, q, g, s, v, r) ∈ K, cheia (p, q, g, v) este publică, iar cheia (s, r) este secretă.
Pentru K = (p, q, g, s, v, r) ∈ K, x ∈ P, y ∈ A,
sigK (x) = r + sx (mod q)
verK (x, y) = T ⇐⇒ x = H(m k g y v x ) (mod p).
Dacă B urmează protocolul de semnătură Schnorr, atunci:
b0 = g y v x ≡ g r+sx g −sx ≡ g r ≡ b (mod p) x0 = H(m k b0 ) = H(m k b) = x,
deci relaţia de la pasul 4 este verificată şi U acceptă semnătura lui B drept validă.
Observăm că determinarea cheii secrete s din cheia publică v, cunoscând g, este echivalentă
din punct de vedere al complexităţii cu rezolvarea problemei logaritmilor discreţi.

6.5 Problema reprezentării ı̂n grupuri


În această secţiune vom discuta despre problema reprezentării ı̂n grupuri, problemă care stă
la baza construcţiei unui sistem de plată electronic. Vom demonstra, de asemenea, echivalenta
acestei probleme – din punct de vedere al complexităţii – cu problema logaritmilor discreţi.

6.5.1 Definirea problemei reprezentării


Definiţia 6.2 Fie k ≥ 2 număr natural şi q un număr prim. Un tuplu generator de lungime
k pentru grupul Zq este un k-tuplu (g1 , . . . , gk ) astfel ı̂ncât gi ∈ Zq \{1}, ∀i ∈ {1, 2, . . . , n} şi
gi 6= gj , ∀i 6= j.
Pentru orice h ∈ Zq , (a1 , . . . , ak ) este o reprezentare a lui h ı̂n raport cu tuplul generator
k
Y ai
(g1 , . . . , gk ) dacă gi = h (mod q).
i=1
6.5. PROBLEMA REPREZENTĂRII ÎN GRUPURI 75

Propoziţia 6.2 Fie k ≥ 2 un număr natural şi q un număr prim. Pentru orice h ∈ Zq şi orice
(g1 , . . . , gk ) tuplu generator, există exact q k−1 reprezentări ale lui h ı̂n raport cu (g1 , . . . , gk ).

Demonstratie: Cum q este prim, orice element din Zq este primitiv, deci generator al grupului
multiplicativ Zq \ {1}.
Alegem primele k − 1 elemente ale unui k-tuplu (a1 , . . . , ak ) aleator in q k−1 moduri şi din
k
Y k−1
Y
relaţia ai
gi = h (mod q) determinăm gkak = h( giai )−1 (mod q) deci
i=1 i=1
Q ai −1
ak = loggk h( k−1
i=1 gi ) (mod q).
Logaritmul are sens, deoarece din definiţia tuplului generator, gk 6= 1.
Din problema logaritmilor discreţi, ak este unic determinat, deci există exact q k−1 reprezen-
tări ale lui h ı̂n raport cu (g1 , . . . , gk ). 2
Acest rezultat relativ simplu arată că fixând h şi un tuplu generator (g1 , . . . , gk ), printr-o
cautare exhaustivă ı̂n mulţimea k-tuplurilor peste Zq , probabilitatea de a obţine o reprezentare
qk−1 1
a lui h ı̂n raport cu (g1 , . . . , gk ) este = .
qk q
Astfel, suntem ı̂n măsură să enunţăm problema reprezentării ı̂n grupuri cu cardinalul număr
prim.

Problema reprezentării:
Fie q un număr prim, k ≥ 2 un număr natural, (g1 , . . . , gk ) un tuplu generator şi h ∈ Zq .
Să se găsească o reprezentare a lui h ı̂n raport cu (g1 , . . . , gk ) ı̂n Zq , ı̂n cazul ı̂n care aceasta
există.

Observăm că pentru k = 1 se obţine problema logaritmilor discreţi; de aceea am considerat


ı̂n definiţie k ≥ 2 pentru a face distincţie intre cele două probleme.

6.5.2 Echivalenţa problemei reprezentării cu problema logaritmilor


discreţi
Să reamintim căteva definiţii relative la algoritmii probabilişti.

Definiţia 6.3 Un algoritm probabilist este un algoritm care foloseşte numere aleatoare.
Probabilitatea de succes a unui algoritm probabilist este probabilitatea ca acesta să ofere un
răspuns corect.
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 ı̂ntotdeauna corect, sau poate eşua şi să nu dea
nici un răspuns cu probabilitatea ². Probabilitatea de succes pentru un algoritm Las-Vegas este
1 − ².

Observaţia 6.1 Dacă construim un algoritm Las-Vegas pentru rezolvarea unei probleme, pu-
1
tem să ı̂l apelăm de un număr mediu de ori pentru a obţine răspuns, care este ı̂ntotdeauna
1−²
corect.

Teorema 6.1 Fie q un număr prim mare. Următoarele afirmaţii sunt echivalente:
76 PRELEGEREA 6. SISTEME ELECTRONICE DE PLATĂ

1. Există 0 < P1 ≤ 1 şi un algoritm probabilist polinomial ı̂n timp A1 care – având la intrare
un tuplu generator de lungime k şi un element h ∈ Zq – calculează o reprezentare a lui h
cu probabilitatea de succes cel puţin P1 .

2. Există 0 < P2 ≤ 1 şi un algoritm probabilist polinomial ı̂n timp A2 care – având la
intrare un tuplu generator de lungime k – calculează o reprezentare netrivială a lui 1 cu
probabilitatea de succes cel puţin P2 .

3. Exista 0 < P3 ≤ 1, h ∈ Zq şi un algoritm probabilist polinomial ı̂n timp A3 care –


având la intrare un tuplu generator de lungime k – calculează o reprezentare a lui h cu
probabilitatea de succes cel puţin P3 .

4. Există 0 < P4 ≤ 1 şi un algoritm probabilist polinomial ı̂n timp A4 care rezolvă prob-
lema logaritmilor discreţi (având la intrare g ∈ Zq \ {1} şi h ∈ Zq , calculează logg h) cu
probabilitatea de succes cel puţin P4 .

Demonstratie: Vom demonstra implicaţiile:


(1) =⇒ (2), (1) =⇒ (3), (4) =⇒ (1), (1) =⇒ (4), (2) =⇒ (4), (3) =⇒ (4).

• (1) =⇒ (2);
Presupunând existenţa algoritmului A1 şi a lui P1 , fie (g1 , . . . , gk ) intrarea ı̂n algoritmul
A2 . Se introduc ı̂n A1 tuplul generator (g1 , . . . , gk ) şi h = 1. După executarea lui A1 ,
suntem ı̂n posesia unei reprezentări a lui 1 ı̂n raport cu (g1 , . . . , gk ) cu probabilitatea de
succes P2 = P1 .

• (1) =⇒ (3);
Alegem un element arbitrar h ∈ Zq \ {1} şi tuplul generator (g1 , . . . , gk ), intrare pentru
A3 . Se execută A1 care calculează o reprezentare a lui h cu probabilitatea de succes P1 .
Atunci există P3 = P1 .

• (4) =⇒ (1);
Există algoritmul A4 şi probabilitatea 0 < P4 ≤ 1. Construim algoritmul A1 care primeşte
la intrare tuplul generator (g1 , . . . , gk ) şi h ∈ Zq .

1. for i = 1, 2, . . . , k − 1 do
(a) Se generează aleator hi ∈ Zq∗ ;
(b) Se introduc gi , hi ı̂n A4 care calculează ai .
(c) if giai 6= hi (mod q) then STOP (eşec).
k−1
Y
2. Se calculează ak = loggk (h h−1
i ) (mod q);
i=1
3. STOP cu succes şi răspuns (a1 , . . . , ak ).

Corectitudine: Algoritmul asfel construit este de tip Las-Vegas cu probabilitatea de succes


P4
P1 = .
k−1
6.5. PROBLEMA REPREZENTĂRII ÎN GRUPURI 77

În cazul ı̂n care A1 se termină cu succes, la pasul 2 avem giai = hi (mod q), ∀i ∈
{1, . . . , k − 1} (deci ai = loggi hi (mod q), ∀i ∈ {1, . . . , k − 1}).
k−1
Y k−1
Y k−1
Y
ak = loggk (h h−1
i ) (mod q) ⇐⇒ gkak = h h−1
i (mod q) ⇐⇒ hi gkak =
i=1 i=1 i=1
k
Y ai
h (mod q) ⇐⇒ gi = h (mod q) ⇐⇒ (a1 , . . . , ak ) este o reprezentare a lui h.
i=1

1
Algoritmul se repetă de un număr mediu de ori pentru fiecare i ∈ {1, . . . , k − 1}
P4
pentru ca ı̂n pasul (b) să obţinem ai = loggi hi (mod q). Deci, algoritmul trebuie rulat
1
de un număr mediu de (k − 1) ori, ceea ce ı̂nseamnă că probabilitatea de succes a
P4
P4
algoritmului A1 este P1 = .
k−1

• (1) =⇒ (4);

Există algoritmul A1 şi probabilitatea 0 < P1 ≤ 1. Construim algoritmul A4 care primeşte


la intrare g ∈ Zq \ {1} şi h ∈ Zq .

1. Se generează aleator un k-tuplu (u1 , . . . , uk ) ∈ Zqk ; se calculează gi = g ui , 1 ≤ i ≤ k.


2. Se rulează algoritmul A1 cu intrarea (g1 , . . . , gk ) şi h.
3. Fie (a1 , . . . , ak ) ieşirea lui A1 ;
k
Y ai
if (a1 , . . . , ak ) nu e o reprezentare a lui h (h 6= gi (mod q)) then STOP (eşec).
i=1
k
X
4. Se calculează logg h = ai ui (mod q). STOP (succes).
i=1

Corectitudine: Algoritmul astfel construit este de tip Las-Vegas cu probabilitate de succes


P4 = P1 .

În cazul ı̂n care algoritmul de mai sus se terimină cu succes, avem:
k
Y k
Y k
X
ai
h= gi = g ai ui (mod q) =⇒ logg h = ai ui (mod q).
i=1 i=1 i=1

1
Algoritmul se repetă de un număr mediu de ori pentru a obţine o reprezentare corectă
P1
a lui h ı̂n pasul 3. Deci probabilitatea de succes a algoritmului A4 este P4 = P1 .

• (2) =⇒ (4);

Există algoritmul A2 şi probabilitatea 0 < P2 ≤ 1. Construim algoritmul A4 care primeşte


la intrare g ∈ Zq \ {1} şi h ∈ Zq .
78 PRELEGEREA 6. SISTEME ELECTRONICE DE PLATĂ

1. Se generează aleator un k-tuplu (u1 , . . . , uk ) ∈ Zqk ; se calculează g1 =


hu1 (mod q), gi = g ui (mod q), 2 ≤ i ≤ k − 1.
2. Se generează aleator o permutare π ∈ Sk şi se ruleaza algoritmul A2 cu intrarea
(gπ(1) , . . . , gπ(k) ).
3. Fie (a1 , . . . , ak ) ieşirea lui A2 .
k
Y ai
if [(a1 , . . . , ak ) nu e o reprezentare a lui 1 ( gπ(i) 6= 1 (mod q))] or [aπ−1 (1) = 0]
i=1
then STOP (eşec).
k
X
4. Se calculează logg h = −(u1 aπ−1 (1) )−1 ui aπ−1 (i) (mod q); STOP (succes).
i=2

Corectitudine: Algoritmul asfel construit este de tip Las-Vegas cu probabilitate de succes


2P2
P4 = .
k
Dacă algoritmul se termină cu succes, atunci (a1 , . . . , ak ) este o reprezentare a lui 1 ı̂n
raport cu (gπ(1) , . . . , gπ(k) ), ceea ce este echivalent cu:
k
Y k
Y
ai a −1 (1) aπ−1 (i)
gπ(i) = 1 (mod q) ⇐⇒ g1 π gi = g 0 (mod q) ⇐⇒
i=1 i=2
k
Y
hu1 aπ−1 (1) gui aπ−1 (i) = g 0 (mod q) şi logaritmând, relaţia este echivalentă cu:
i=2
k
X
u1 aπ−1 (1) logg h + ui aπ−1 (i) = 0 (mod q)
i=2

de unde se obţine formula din pasul 4 pentru logg h.


De remarcat că la pasul 4, aπ−1 (1) 6= 0, ceea ce asigură existenţa inversului (u1 aπ−1(1) )−1
ı̂n Zq .
1
Algoritmul se repetă de un număr mediu de ori până se obţine la pasul 3 o reprezentare
P2
(a1 , . . . , ak ) a lui 1.
Pentru fiecare reprezentare (a1 , . . . , ak ) a lui 1, ı̂n cazul cel mai defavorabil k − 2 com-
k
Y ai
ponente ale k-tuplului (a1 , . . . , ak ) sunt nule (cum gπ(i) = 1 (mod q), dacă ar fi nule
i=1
k − 1 componente, ar rezulta ai = 0 ∀i = 1, 2, . . . , k, deci A2 ar calcula o reprezentare
trivială a lui 1, contradicţie cu ipoteza (2)). Rezultă că avem cu o probabilitate cel puţin
2
, aπ−1 (1) 6= 0.
k
1 k
Atunci algoritmul se va repeta de cel mult ori, probabilitatea de succes fiind cel
P2 2
puţin P4 = 2Pk 2 .

• (3) =⇒ (4);
6.5. PROBLEMA REPREZENTĂRII ÎN GRUPURI 79

Există h0 ∈ Zq şi algoritmul A3 care având la intrare un tuplu generator de lungime k


determină o reprezentare a lui h0 cu probabilitatea de succes P3 . Construim algoritmul
A4 care primeşte la intrare g ∈ Zq \ {1} şi h ∈ Zq .

1. i = 1.
2. Se generează aleator un k-tuplu (u1 , . . . , uk ) ∈ Zqk ;
se calculează gi1 = hui1 , gij = g uij (mod q) pentru j = 2, . . . , k.
3. Se generează aleator o permutare πi ∈ Sk ;
Se rulează algoritmul A3 cu intrarea (gi1 , . . . , giπi (k) ).
4. Fie (ai1 , . . . , aik ) ieşirea lui A3 ;
if (ai1 , . . . , aik) nu e o reprezentare a lui h ı̂n raport cu (gi1 , . . . , gik ) then STOP
(eşec).
5. i = i + 1 goto 1.
6. if u21 a2π−1 (1) = u11 a1π−1 (1) (mod q) then STOP (eşec).
2 1

7. Se calculează
k
X k
X
logg h = (u21 a2π−1 (1) − u11 a1π−1 (1))−1 ( u1j a1π−1 (j) − u2j a2π−1 (j) ) (mod q).
2 1 1 2
j=2 j=2

Corectitudine: Algoritmul asfel construit este de tip Las-Vegas cu probabilitatea de succes


P2
P4 = 3 .
k
Dacă algoritmul se termină cu succes, atunci (a11 , . . . , a1k ) şi (a21 , . . . , a2k ) sunt reprezen-
tări ale lui h0 ı̂n raport cu (g1π1 (1) , . . . , g1π1 (k) ), respectiv (g2π1 (1) , . . . , g2π1 (k) ) ceea ce este
echivalent cu
k
Y k
Y k
Y a −1 k
Y a −1
0 a1j a2j 1π (j) 2π (j)
h = g1π1 (j) = g2π2 (j) (mod q) =⇒ g11 a1π−1 (1) g1j 1
= g21 a2π−1 (1) g2j 2
1 2
j=1 j=1 j=2 j=2
k
Y k
Y
u11 a u1j a −1 u21 a u2j a −1
1π −1 (1) 2π −1 (1)
(mod q) ⇔ h 1 g1π (j)
1 =h 2 g2π (j)
2 (mod q)
j=2 j=2

şi logaritmând ı̂n baza g, rezultă:


k
X k
X
u11 a1π−1 (1) logg h + u1j a1π−1 (j) = u21 a2π−1 (1) logg h + u2j a2π−1 (j) (mod q)
1 1 2 2
j=2 j=2

de unde se obţine formula din pasul 7 pentru logg h.


De remarcat că la pasul 7, u11 a1π−1 (1) 6= u21 a1π−1 (1) , ceea ce asigură existenţa inversului
1 2
(u11 a1π−1 (1) − u21 a1π−1 (1) )−1 ı̂n Zq .
1 2

1
Pentru i = 1 algoritmul se repetă de un număr mediu de ori pentru a obţine o
P3
reprezentare (a11 , . . . , a1k ) a lui h0 .
1
Pentru i = 2 algoritmul se repetă ı̂n cazul cel mai defavorabil de un număr de k ori,
P3
deoarece trebuie repetat pasul 6 de cel mult k ori.
80 PRELEGEREA 6. SISTEME ELECTRONICE DE PLATĂ

1 k k
Astfel, algoritmul se repetă de cel mult = 2 ori până se obţine răspunsul ”succes”.
P3 P3 P3
P32
Deci probabilitatea de succes este cel puţin
k
Cu aceasta echivalenţa celor două probleme din punct de vedere al complexităţii este complet
demonstrată. Deoarece problema logaritmilor discreţi este NP - completă ı̂n Zq pentru valori
mari ale lui q prim, va rezulta că şi problema reprezentării ı̂n Zq este NP-completă.

Corolarul 6.1 Alegâng q prim asfel ı̂ncât problema logaritmilor discreţi este NP-completă, nu
există un algoritm polinomial ı̂n timp care, având la intrare un tuplu generator (g1 , . . . , gk )
scoate la ieşire un număr h ∈ Zq şi două reprezentări diferite ale lui h ı̂n raport cu (g1 , . . . , gk )
cu o probabilitate ne-neglijabilă.

Demonstraţie:
Presupunem, prin reducere la absurd, existenţa unui astfel de algoritm A. Construim
următorul algoritm:

1. Fie (g1 , . . . , gk ) un tuplu generator. Se ruleaza algoritmul A cu intrarea (g1 , . . . , gk ).


Se primesc ca răspuns h şi două reprezentări ale acestuia (a1 , . . . , ak ) şi (b1 , . . . , bk )
ı̂n raport cu (g1 , . . . , gk ).

2. Răspuns la ieşire: (a1 − b1 (mod q), . . . , ak − bk (mod q)).

k
Y ai −bi
Evident: gi = 1 (mod q), deci (a1 −b1 (mod q), . . . , ak −bk (mod q)) este o reprezentare
i=1
a lui 1 ı̂n raport cu (g1 , . . . , gk ).
Am construit astfel algoritmul A2 , polinomial ı̂n timp din teorema 6.1, ceea ce contrazice
presupunerea de NP-completitudine a problemei logaritmilor discreţi.
k
Y ai
Corolarul 6.2 Funcţia f : Zqk =⇒ Zq definitiă f (a1 , . . . , ak ) = gi este o funcţie de dispersie
i=1
fără coliziuni tari.
Demonstraţie:
Din Corolarul 6.1, este calculabil dificil să se obţină un număr h ∈ Zq şi două reprezentări
diferite ale acestuia (a1 , . . . , ak ) şi (b1 , . . . , bk ) ı̂n raport cu (g1 , . . . , gk ). Rezultă că este calculabil
dificil să obţinem x = (a1 , . . . , ak ) ∈ Zqk şi x1 = (b1 , . . . , bk ) ∈ Zqk asfel ı̂ncât f (x) = f (x1 ); adică
f este fără coliziuni tari.
Această funcţie de dispersie nu e suficient de rapidă pentru aplicaţii practice, dar constituie
un model teoretic sugestiv.

6.5.3 Demonstrarea cunoaşterii unei reprezentări


Fie p şi q două numere prime mari, cu proprietatea q|p − 1.
Presupunem că un utilizator P (Prover) cunoaşte o reprezentare (a1 , . . . , ak ) ∈ Zqk a unui
număr h ∈ Zq ı̂n raport cu tuplul generator (g1 , . . . , gk ) ∈ Zqk . P doreşte să ı̂i demonstreze lui
V (Verifier) acest lucru, fără a-i revela reprezentarea sa secretă (a1 , . . . , ak ).
6.5. PROBLEMA REPREZENTĂRII ÎN GRUPURI 81

Construim un protocol de tip provocare-răspuns care ı̂i permite lui P demonstrarea


cunoaşterii reprezentării (a1 , . . . , ak ).

1. P generează aleator k numere w1 , . . . , wk ∈ Zq şi trimite lui V numărul z =


k
Y wi
gi (mod q).
i=1

2. V generează o provocare c ∈ Zq şi o trimite lui P.

3. P calculează raspunsul ri = wi + cai (mod q), pentru i = 1, . . . , k, şi trimite


(r1 , . . . , rk ) lui V.
k
Y ri
4. V acceptă dacă şi numai dacă zhc = gi (mod q).
i=1

Teorema 6.2
1. (Completitudinea) Dacă P este ı̂n posesia reprezentării (a1 , . . . , ak ) a lui h ı̂n raport
cu (g1 , . . . , gk ) şi urmează protocolul pas cu pas, atunci V accepta ı̂n pasul 4.
2. (Consistenţa) Dacă P nu cunoaşte o reprezentare a lui h ı̂n raport cu (g1 , . . . , gk ), atunci
nu există o strategie pentru el astfel ı̂ncât V să accepte cu o probabilitate ne-neglijabilă.
3. (Ascunderea informaţiei) Chiar dacă V ar dispune de o putere de calcul nelimitată,
executând protocolul pas cu pas, nu va reuşi să afle ı̂n final reprezentarea cunoscută de P
cu o probabilitate ne-neglijabilă.
Demonstraţie:
1. Presupunând că protocolul este executat corect de ambele părţi, la pasul 4 avem:
k
Y k
Y k
Y k
Y k
Y
zhc = giwi hc = giwi ( giai )c = giwi +ai c = giri (mod q), deci V acceptă la pasul
i=1 i=1 i=1 i=1 i=1
4.
2. P nu cunoaşte o reprezentare a lui h ı̂n raport cu (g1 , . . . , gk ), deci nu poate să respecte
protocolul la pasul 3.
Distingem două situaţii:
• P urmează protocolul ı̂n pasul 1, deci P alege aleator w1 , . . . , wk ∈ Zq şi calculează
k
Y wi
z= gi (mod q).
i=1
După ce primeşte provocarea c a lui V, P trebuie să determine numerele r1 , . . . , rk
care să verifice relaţia din pasul 4:
k
Y k
Y k
Y
ri
zhc = gi (mod p) =⇒ giwi hc = giri (mod q) =⇒
i=1 i=1 i=1
k
Y k
Y (ri −wi )c−1
hc = giri −wi (mod q) =⇒ h= gi (mod q).
i=1 i=1
82 PRELEGEREA 6. SISTEME ELECTRONICE DE PLATĂ

Deci, dacă P reuşeşte să determine r1 , . . . , rk asfel ı̂ncât V să accepte la pasul 4,
el va cunoaşte o reprezentare a lui h ı̂n raport cu (g1 , . . . , gk ) şi anume: ((r1 −
w1 )c−1 , . . . , (rk − wk )c−1 ), ceea ce contrazice ipoteza.
• P nu urmează protocolul din pasul 1, deci P alege un număr z pentru care nu
cunoaşte o reprezentare ı̂n raport cu (g1 , . . . , gk ).
k
Y ri
În pasul 3, P trebuie să determine numerele r1 , . . . , rk astfel ı̂ncât zhc = gi
i=1
c
(mod q), problemă echivalentă cu determinarea unei reprezentări a lui zh ı̂n raport
cu (g1 , . . . , gk ). Cum problema reprezentării este NP-completă pentru p, q convenabil
alese şi protocolul se desfăşoară ı̂n timp real, nici ı̂n acest caz P nu are o strategie
cu o probabilitate de succes ne-neglijabilă pentru a-l convinge pe V să accepte.

3. La sfârşitul protocolului V este ı̂n posesia următoarelor informaţii: z, c, r1 , . . . , rk .


Avem ri = wi + cai (mod q) ⇐⇒ ai = c−1 (ri − wi ) (mod q), deci problema deter-
minării lui (a1 , . . . , ak ) este echivalentă cu problema determinării lui (w1 , . . . , wk ). În plus
a1 , . . . , ak sunt unic determinate de w1 , . . . , wk .
k
Y wi
Singura informaţie pe care V o are despre w1 , . . . , wk este z = gi (mod q).
i=1
Dispunând de o putere de calcul nelimitată, V poate să determine o reprezentare a lui z
ı̂n raport cu (g1 , . . . , gk ).
Conform Propozitiei 6.2, există exact q k−1 reprezentări ale lui z ı̂n raport cu (g1 , . . . , gk ),
1
deci probabilitatea ca V să calculeze exact aceeaşi reprezentare (w1 , . . . , wk ) este k−1 ,
q
adică neglijabilă.
Prelegerea 7

Sistemul electronic de plată Brands

7.1 O scurtă prezentare a sistemelor de plată electronice


”off-line”
Prima şi cea mai simplă schemă a fost definită de Chaum, Fiat şi Naor. Prezentăm, pe scurt,
ideea acestui protocol.
Fie n, p, q, a, b parametrii sistemului RSA şi f o funcţie de dispersie fără coliziuni tari. O
monedă electronică de o valoare fixată d este reprezentată sub forma

(x, (f (x))b (mod n)

cu x ales aleator. Pentru fiecare valoare a unei monezi trebuie folosit un alt exponent de criptare
b şi un exponent de decriptare corespunzator a. Identitatea utilizatorului trebuie inclusă ı̂n
moneda electronică asfel ı̂ncât dacă moneda este folosită corect, identitatea nu poate fi dedusă;
alfel identitatea poate fi calculată.
Pentru aceasta este folosită o tehnică numită Cut-and-Choose: când U doreşte să extragă
o monedă din bancă, construieşte un mesaj format din k perechi de numere (k este numărul de
candidaţi). Aceste numere au proprietatea că dintr-o pereche se poate calcula identitatea lui U
(de exemplu printr-un simplu XOR ı̂ntre cele două numere ale perechii), iar având la dispoziţie
un singur număr din fiecare pereche nu se poate deduce nici o informaţie. U concatenează cei
k candidaţi şi obţine o semnătură ”blind” de la B asupra mesajului trimis cu protocolul de
semnătură ”blind” RSA.
În momentul ı̂n care U doreşte să folosească moneda la magazinul S, primeşte o provocare
de la S de k biţi aleatori. Pentru fiecare bit, U răspunde cu primul număr al perechii core-
spunzătoare numărului bitului (dacă bitul este 0) sau cu al doilea număr – dacă bitul este 1.
(De exemplu, dacă provocarea este 0110 . . . , U răspunde cu primul număr din prima pereche, al
doilea număr din a doua pereche, al doilea număr din a treia pereche etc). Când S depozitează
moneda la bancă, ı̂i trimite lui B provocarea ı̂mpreună cu numerele trimise de U. B păstrează
ı̂ntr-o bază de date moneda ı̂mpreună cu provocarea şi răspunsul lui U.
Dacă U ı̂ncearcă refolosirea monezii, primeşte o nouă provocare aleatoare de k biţi, care
1
diferă de prima ı̂n cel puţin un bit cu o probabilitate destul de mare (1 − k ). Astfel pentru
2
bitul care diferă, U va revela ambele numere ale perechii corespunzătoare. Acum banca poate
calcula din cele două numere identitatea lui U.

83
84 PRELEGEREA 7. SISTEMUL ELECTRONIC DE PLATĂ BRANDS

Deşi este conceptual simplă, această schemă nu este eficientă, deoarece fiecare monedă tre-
buie ı̂nsoţită de 2k numere mari. Modelul Chaum-Fiat-Naor satisface primele patru proprietăţi
definite ı̂n prelegerea anterioară.
Okamoto şi Ohta au descris un sistem universal de plată care satisface toate cele şase
proprietăţi, dar – din păcate – este ineficient din punct de vedere al dimensiunii mesajelor
transmise. În schimb ei au avut ideea de a introduce proprietatea de divizibilitate a monezilor
electronice. Pentru fiecare monedă de valoare d se asociază un arbore binar etichetat astfel:
nodul rădăcină (de nivel 0) are valoarea d, cele două noduri de pe nivelul 1 au etichetele d/2 şi
d
– ı̂n general – nodurile de pe nivelul k sunt etichetate cu k . Dacă d = 2s , arborele are s + 1
2
nivele, cu frunzele având valoarea minimă 1.
Orice sumă mai mică decât d poate fi folosită după următoarele reguli:

1. Odată ce un nod este folosit, toţi succesorii şi predecesorii săi nu vor putea fi folosiţi la o
plată viitoare;

2. Nici un nod nu poate fi folosit mai mult decât o dată.

Aceste două reguli asigură folosirea unui singur nod pentru orice drum de la rădăcină la o
frunză, ceea ce face imposibilă folosirea unei valori mai mari decât valoarea rădăcinii d.
Exemplul 7.1 Să presupunem că U are o monedă ı̂n valoare de 4 unităţi. Se construieşte
arborele binar:
²¯
Γ0 ³±°
4a
³ ³ aa
³³
²¯ aa²¯
Γ00 2
±° 2 Γ01
±°
, l ½ Z
,
²¯ l²¯ ²¯
½ Z²¯
1
±° 1
±° 1
±° 1
±°
Γ000 Γ001 Γ010 Γ011
Pentru a realiza o plată de 3 unităţi, U foloseşte Γ00 şi Γ010 . Singurul nod care poate fi
utilizat la o plată viitoare este Γ011 ı̂n valoare de o unitate.
Dacă cel puţin una din cele două reguli este ı̂ncălcată, atunci exista un drum de la radacina la
o frunza pe care s-au folosit 2 noduri si se va putea determina identitatea lui U.
Mai exact, fiecare utilizator U are o valoare secretă s care relevă identitatea sa, iar fiecare
nod i al arborelui are asignată o valoare secretă ti . Se construieşte dreapta y = sx + ti pentru
fiecare nod i. Când se face o plată utilizând un nod particular n, U va revela ti pentru toţi i
predecesori ai lui n. Magazinul S va trimite o provocare x1 la care U raspunde cu y1 = sx1 + tn .
Dacă acelaşi nod n este folosit a doua oară, U primeşte ı̂ncă o provocare x2 la care răspunde
cu y2 = sx2 + tn , deci U a revelat două puncte (x1 , y1 ), (x2 , y2 ) ale dreptei y = sx + tn , de unde
se poate calcula s şi apoi identitatea lui U.
Dacă se folosesc două noduri n şi m de pe acelaşi drum de la rădăcină la o frunză, pre-
supunem că n este succesor al lui m. Când se foloseşte nodul n se relevă tm ; apoi – dacă se
foloseşte nodul m – U răspunde la provocarea x1 a lui S cu y1 = sx1 + tm .
Deci şi ı̂n acest caz S poate calcula s şi identitatea lui U.
Un alt dezavantaj al acestei scheme ar fi că se pot realiza legături ı̂ntre plăţi, adică se poate
deduce dacă două plăţi provin din aceeaşi monedă şi deci, de la aceeaşi persoană.
7.2. INIŢIALIZAREA SISTEMULUI BRANDS 85

Protocoalele discutate până acum pot să detecteze identitatea utilizatorilor necinstiţi, fără
ı̂nsă a putea preveni utilizarea unei monezi de două ori. Singurul mod prin care s-ar putea
realiza acest lucru este prin ı̂ncorporarea unei componente hardware (chip sau smart card) ı̂n
calculatorul utilizatorului, cu rolul de observator al tuturor plăţilor. În plus, nici un protocol
de plată al utilizatorlui nu poate fi efectuat fără o informaţie secretă deţinută de observator.
Astfel, observatorul autorizează şi participă activ la toate tranzacţiile.
Totuşi, se poate ı̂ntâmpla ca utilizatorul să reuşească printr-o modalitate oarecare să afle
informaţia secretă a observatorului. În acest caz sistemul trebuie să asigure detectarea utiliza-
torului care a comis frauda, la fel ca ı̂n primele protocoale discutate.
Cele mai cunoscute şi utilizate protocoale de plată ”off-line” cu monezi electronice aparţin lui
Ştefan Brands. Primul sistem real de tip ”off-line”, numit ”DigiCash”, se bazează ı̂n totalitate
pe aceste protocoale.

7.2 Iniţializarea sistemului Brands


Se caută două numere prime mari p şi q cu proprietatea q|p − 1 (p şi q sunt alese la fel ca ı̂n
schema de identificare Schnorr) şi H o funcţie de dispersie fără coliziuni tari. Se generează un
subgrup Gq de ordin q al lui Zp (aici se vor efectua toate calculele din sistem).
Iniţializarea sistemului constă ı̂n generarea de către bancă a următoarelor cinci numere
distincte:

1. g ∈ Gq , x ∈ Zq∗ ; se calculează h = g x (mod q). Tuplul generator (g, h) ∈ Gq × Gq


constituie cheia publică a băncii, iar x ∈ Zq∗ cheia secretă.

2. Un tuplu generator (g1 , g2 ) cu g1 , g2 ∈ Gq .

3. Un generator d ∈ Gq .

Vom presupune pentru ı̂nceput că există ı̂n sistem monezi de o singură valoare, apoi vom
arăta cum se pot introduce monezi de valori diferite.
Securitatea acestei scheme constă ı̂n alegerea numerelor g, h, g1 , g2 , d astfel ı̂ncât nici un
utilizator să nu poată exprima oricare din aceste numere ca o combinaţie de puteri ale celorlalte.
Acest lucru este din punct de vedere al complexităţii la fel de dificil ca şi găsirea unei reprezentări
netriviale a lui 1 ı̂n raport cu (g, h, g1 , g2 , d) – o problemă NP-completă pentru p şi q convenabil
alese (prelegerea precedentă).
Când utilizatorul U ı̂şi deschide un cont ı̂n bancă, el generează aleator numerele u1 , u2 ∈ Zq∗
şi calculează I = g1u1 g2u2 (mod p). (u1 , u2 ) va constitui cheia secretă a lui U, iar I ∈ Gq va
fi pseudonimul folosit de B pentru identitatea reală a lui U. B stochează ı̂ntr-o bază de date
identitatea reală a lui U, numărul contului său şi I. Este important ca U să cunoască o singură
reprezentare a lui I ı̂n raport cu (g1 , g2 ). Dacă U utilizează o monedă de două ori, B poate să
determine (u1 , u2 ).
O monedă electronică este reprezentată sub forma (m, sigK (m)) cu anumite restricţii asupra
lui m, după cum vom vedea in continuare.
86 PRELEGEREA 7. SISTEMUL ELECTRONIC DE PLATĂ BRANDS

7.3 Tehnici pentru crearea sistemului


7.3.1 Protocolul de semnătură Chaum - Pedersen
Protocolul de semnătură Chaum - Pedersen este un protocol de tip Schnorr. Fie m ∈ Gq
mesajul care trebuie semnat. Presupunem că U doreşte o semnătură de la B asupra lui m.
Paşii protocolului sunt următorii:

1. B generează aleator w ∈ Zq şi trimite lui U numerele z = mx (mod p), a =


g w (mod p) şi b = mw (mod p).

2. U generează aleator provocarea c = H(m k z k a k b) şi o trimite lui B.

3. B răspunde cu r = w + cx (mod q).

4. U acceptă dacă şi numai dacă hc a = g r (mod p) şi z c b = mr (mod p).


(de verificat; nu coincide cu pag 22 din licenta)

Se observă ca singura diferenţă faţă de schema lui Schnorr este trimiterea la pasul 1 a ı̂ncă
două numere: z şi b. sigK (m) = (z, a, b, r) va constitui semnătura asupra mesajului m.
Formal, protocolul de semnatura Chaum-Pedersen este:

P =Gq ,
A =G3q × Zq ,
K= {(p, q, g, h, x)| p, q prime, q|p − 1, h = g x (mod p)}.
Cheia (p, q, g, h) este publică, iar x este secretă.
∀K ∈ K , m ∈ Gq şi w ∈ Zq aleator, definim
sigK (m, w) = (z, a, b, r), unde z = mx (mod p), a = g w (mod p), b = mw (mod p),
c = H(m k z k a k b), r = w + cx (mod q).
verK (m, (z, a, b, r)) = T ⇐⇒ hc a = g r (mod p), z c b = mr (mod p).

Dacă U şi B urmează protocolul, după primii 3 paşi avem:


g r = g w+cx = (g x )c g w = hc a (mod p),
mr = mw+cx = (mx )c mw = z c b (mod p),
deci U acceptă ı̂n pasul 4.

7.3.2 Protocolul restrictiv de semnătură ”blind” Chaum - Pedersen


În această secţiune descriem o variantă simplificată a schemei de semnătură ”blind” folosită
ı̂n protocolul de extragere. Pentru a transforma protocolul de semnătură Chaum - Pedersen
ı̂ntr-un protocol de semnătură ”blind”, U trebuie să obţină un nou mesaj m0 şi noile numere
a0 , b0 , z 0 , c0 = H(m0 k z 0 k a0 k b0 ). B răspunde cu r, pe care U ı̂l transformă ı̂n r0 astfel ı̂ncât
(z 0 , a0 , b0 , r0 ) să fie o semnătură validă asupra lui m0 . Protocolul este următorul:
7.3. TEHNICI PENTRU CREAREA SISTEMULUI 87

1. B generează aleator w ∈ Zq şi trimite lui U valorile z = mx (mod p), a = g w (mod p)


şi b = mw (mod p).

2. U generează aleator trei numere s ∈ Zq∗ , u, v ∈ Zq , apoi calculează:


0
m0 = ms (mod p), w0 = uw + v (mod q), a0 = au g v = g w (mod p),
0
b0 = aus (m0 )v = (m0 )w (mod p), z 0 = z s = (m0 )x (mod p), c0 = H(m0 ||z 0 ||a0 ||b0 )
şi trimite lui B numărul c = c0 u−1 (modq).

3. B răspunde cu r = w + cx (mod q).

4. U acceptă dacă şi numai dacă hc a = g r (mod p) şi z c b = mr (mod p).

Se observă că (z, a, b, r) nu este o semnătură validă asupra lui m deoarece r este un răspuns
la o provocare diferită de H(m||z||a||b). Dar U poate calcula r0 = ur + v (mod q) şi obţine
sigK (m0 ) = (z 0 , a0 , b0 , r0 ), o semnătură validă asupra lui m0 . Semnătura poate fi verificată de
oricine.
U acceptă la pasul 4 deoarece relaţiile sunt verificate la fel ca ı̂n protocolul anterior.

Propoziţia 7.1 Daca r0 = ur + v (mod q), atunci (z 0 , a0 , b0 , r0 ) constituie o semnătură validă


asupra lui m0 .

Demonstraţie: ( 0 0
0 0 0 0 0 hc a0 = g r (mod p)
Pentru K = (p, q, g, h, x, w), verK (m , (z , a , b , r )) = T ⇔ 0 0
(z 0 )c b0 = (m0 )r (mod p)
0 0
Dar r0 = ur+v = u(w+cx)+v (mod p) =⇒ g r = g u(w+cx)+v = g ucx g v+uw = (g x )uc g w =
0 0 0 0 0
hc a0 (mod p) şi (m0 )r = (m0 )ucx (m0 )uw+v = (m0 )xc (m0 )w = (z 0 )c b0 (mod p),
deci sigK (m0 ) = (z 0 , a0 , b0 , r0 ). 2
0
Protocolul este de tip ”blind” deoarece B nu cunoaşte m , mesajul pentru care U a obţinut
o semnătură.

Propoziţia 7.2

1. Dacă U urmează protocolul pas cu pas, atunci perechea (m0 , sigK (m0 )) nu poate fi legată
de nici o execuţie specifică a protocolului.

2. Chiar dacă B află m0 , reprezentarea (s, t) a lui m0 ı̂n raport cu (m, g) cunoscută de U ı̂i
este ascunsa lui B ı̂n setul tuturor reprezentărilor lui m0 .

Demonstratie:
La finalul protocolului, B este ı̂n posesia următoarelor informaţii: w, z, a, b, c. Arătăm că
există q alegeri posibile pentru (s, u, v) care produc ı̂n final aceeaşi pereche (m0 , sigK (m0 )).
Fie s ∈ Zq fixat (sunt posibile q − 1 alegeri pentru s) şi m0 , sigK (m0 ) = (z 0 , a0 , b0 , r0 ) fixate.
Să analizăm ı̂n câte moduri putem alege u, v.
Se calculează ı̂n mod unic c0 = H(m0 ||z 0 ||a0 ||b0 ) (mod q). Deci uc = c0 (mod q) =⇒ u =
c0 c−1 (mod q), deci şi u este unic determinat.
88 PRELEGEREA 7. SISTEMUL ELECTRONIC DE PLATĂ BRANDS

r0 = ur + v = u(w + cx) + v = uw + c0 x + v (mod q) =⇒ v = r0 − uw − c0 x (mod q). Să


arătăm că u şi v astfel determinate verifică relaţiile pentru a0 şi b0 .
0 0 0 0 0 0
au g v = au g r −uw−c x = au g r (g w )−u (g x )−c = au hc a0 a−u h−c = a0 (mod p)
0 0 0 0 0
(m0 )w = (m0 )uv+w = bus (m0 )v = bus (m0 )r −uw−c x = (mw )us (m0 )r (m0 )−uw ((m0 )x )−c =
0 0
mwus (z 0 )c b0 (ms )−uw (z 0 )−c = b0 (mod p)
Am demonstrat asfel că există exact q −1 alegeri pentru (s, u, v) care produc aceeasi pereche
(m , sigK (m0 )), deci B nu realizează ı̂n care execuţie specifică a protocolului s-a semnat mesajul
0

m0 . 2

7.3.3 Generarea aleatoare a unei reprezentari


În faza de iniţializare a sistemului, U trebuie să genereze un tuplu (u1 , u2 ) pentru a-şi deschide
un cont ı̂n bancă şi a calcula pseudonimul său I = g1u1 g2u2 (mod p). Banca trebuie să se asigure
că U nu cunoaşte două reprezentări ale lui I ı̂n raport cu (g1 , g2 ).
Prin următorul protocol U şi B generează ı̂mpreuna un număr aleator h ∈ Zq şi o reprezen-
tare a acestuia ı̂n raport cu tuplul generator (g1 , . . . , gk ).

k+1
Y
1. U generează aleator tuplul (x1 , . . . , xk+1 ) şi trimite lui B h0 = gixi (mod p).
i=1

2. B trimite lui U un tuplu ales aleator (y1 , . . . , yk ).

3. U trimite xk+1 lui B.

Dacă U a fost corect la pasul 3, (x1 + y1 , . . . , xk + yk ) este o reprezentare a lui h =


Yk
0 xk+1
h gk+1 ( giyi ) (mod p) ı̂n raport cu (g1 , . . . , gk ).
i=1
k
Y k
Y k
Y
−x
Într-adevăr, g1x1 +y1 . . . gkxk +yk = xi yi
gi gi = h0 gk+1k+1 yi
gi = h (mod p).
i=1 i=1 i=1

7.4 Sistemul de bază Brands


În această secţiune sunt descrise cele trei protocoale care formează sistemul de bază: protocolul
de extragere a monezilor electronice, protocolul de plată şi protocolul de depozit. Se presupune
că ı̂n sistem există monezi de o unică valoare. Ulterior vom arăta cum se pot introduce ı̂n
sistem monezi de diferite valori.

7.4.1 Protocolul de extragere a monezilor


Dacă utilizatorul U având identitatea I = g1u1 g2u2 (mod p) doreşte să extragă o monedă din
contul său, mai ı̂ntâi trebuie să convingă banca că ı̂ntr-adevăr el este posesorul contului de unde
se face extragerea. Pentru aceasta U şi B vor executa protocolul din prelegerea anterioară, prin
care U ı̂i demonstrează lui B cunoaşterea unei reprezentări a lui I ı̂n raport cu (g1 , g2 ), fără a
o revela.
7.4. SISTEMUL DE BAZĂ BRANDS 89

Pentru fiecare extragere a unei monezi, este executat următorul protocol:

1. U ı̂i demonstrează lui B cunoaşterea reprezentării (u1 , u2 ) a lui I ı̂n raport cu (g1 , g2 )
prin protocolul din prelegerea anterioară.

2. B realizează următoarele operaţii:

(a) extrage din contul lui U valoarea fixată a monezii;


(b) calculează m = Id (mod p);
(c) generează aleator w ∈ Zq ;
(d) trimite lui U: z = mx (mod p), a = g w (mod p) şi b = mw (mod p).

3. U realizează următoarele operatı̂i:

(a) calculează m = Id (mod p);


(b) generează aleator s ∈ Zq∗ , u, v ∈ Zq ;
(c) calculează: m0 = ms = I s ds = g1u1 s g2u2 s ds (mod p),
0
z 0 = z s (mod p), w0 = uw + v (mod q), a0 = au g v = g w (mod p), b0 =
0
bus (m0 )v = (m0 )w (mod p);
(d) determină aleator a descompunere a lui m0 in A şi B (m0 = AB (mod p)) astfel:
determină aleator fiecare din numerele u1 s, u2 s ca sumă de două numere:
u1 s = x1 + x2 (mod q), u2 s = y1 + y2 (mod q), s = z1 + z2 (mod q),
apoi calculează A = g1x1 g2y1 dz1 (mod p) şi B = g1x2 g2y2 dz2 (mod p);
(e) calculeaza c0 = H(m0 ||z 0 ||a0 ||b0 ||A);
(f) trimite lui B mesajul c = c0 u−1 (mod q).

4. B răspunde cu r = cx + w (mod q).

5. U acceptă dacă şi numai dacă g r = hc a (mod p), mr = z c b (mod p).


În final, U calculează r0 = ru + v (mod q).

Conform propoziţiilor 7.1 şi 7.2, ı̂n final U este ı̂n posesia unui mesaj semnat
(A, B, sigK (A, B)) = (z 0 , a0 , b0 , r0 )
care nu poate fi legat de nici o execuţie specifică a protocolului. În plus, m0 = AB (mod p).
Descompunerea lui m0 ı̂n A şi B a fost făcuta pentru ca U să poate să demonstreze ı̂n protocolul
de plată identitatea sa, fără a o dezvălui.
Dacă U urmează protocolul, atunci se va afla ı̂n final ı̂n posesia reprezentărilor lui m0 , A, B
ı̂n raport cu (g1 , g2 , d) care sunt (u1 s, u2 s, s), (x1 , y1 , z1 ) şi respectiv (x2 , y2 , z2 ). Din Corolarul
?.1 (prelegerea precedentă), U nu poate afla două reprezentări ale lui m0 ı̂n timp polinomial.
Cum (x1 + x2 , y1 + y2 , z1 + z2 ) este de asemenea o reprezentare a lui m0 rezultă că trebuie
ı̂ndeplinite simultan condiţiile (toate modulo q):
u1 s = x1 + x2 , u2 s = y1 + y2 , s = z1 + z2 .
Faptul că U acceptă ı̂n pasul 5 se deduce similar protocolului din ?.3.2.
90 PRELEGEREA 7. SISTEMUL ELECTRONIC DE PLATĂ BRANDS

7.4.2 Protocolul de plată


Când U doreşte să folosească o monedă la magazinul S este executat următorul protocol:

1. U ı̂i trimite lui S:


A = g1x1 g2y1 dz1 (mod p), B = g1x2 g2y2 dz2 (mod p), sigK (A, B) = (z 0 , a0 , b0 , r0 ).
(Dacă ı̂n sistem sunt monezi de valori diferite U trebuie să trimită şi valoarea mo-
nezii.)

2. S se asigură că AB 6= 1.
Apoi el verifică semnătura băncii:
( 0 0
0 0 g r = hc a0 (mod p)
verK (m , sigK (m )) = T ⇔ 0 0 cu c0 = H(AB||z 0 ||a0 ||b0 ||A).
(m0 )r = (z 0 )c b0 (mod p)
Dacă relaţiile sunt ı̂ndeplinite, S este convins că moneda a fost emisă de bancă şi
trimite lui U o provocare c ∈ Zq∗ \ {1}.

3. U răspunde cu
r1 = x1 + cx2 , r2 = y1 + cy2 , r3 = z1 + cz2
(toate calculele sunt modulo q).

4. S acceptă dacă şi numai dacă g1r1 g2r2 dr3 = AB c (mod p).

Teorema 7.1
1. (Completitudinea) Dacă U urmează protocolul pas cu pas şi protocolul de extragere a
monezii a fost executat corect, atunci S acceptă la pasul 4.

2. (Consistenţa) Dacă U nu cunoaşte câte o reprezentare a lui A, respectiv B ı̂n raport cu


(g1 , g2 , d), atunci nu există strategie pentru el astfel ı̂ncât S să accepte cu o probabilitate
de succes ne-neglijabilă.

3. (Ascunderea informaţiei) Chiar dacă S dispune de o putere de calcul nelimitată, iar


U şi S execută protocolul pas cu pas, S nu va reuşi să afle ı̂n final identitatea lui U cu o
probabilitate ne-neglijabilă.

Demonstraţie:

1. Dacă protocolul este executat pas cu pas, la pasul 4 avem:


g1r1 g2r2 dr3 = g1x1 +cx2 g2y1 +cy2 dz1 +cz2 = g1x1 g2y1 dz1 (g1x2 g2y2 dz2 )c = AB c (mod p),
deci S acceptă.

2. U ar trebui să determine numerele r1 , r2 , r3 ∈ Zq asfel ı̂ncât g1r1 g2r2 dr3 = AB c (mod p),
ceea ce este echivalent cu determinarea unei reprezentări a lui AB c ı̂n raport cu (g1 , g2 , d),
care este o problemă pe care U nu o poate rezolva ı̂n timp polinomial.
Astfel, se deduce un lucru foarte important pentru securitatea sistemului:
7.4. SISTEMUL DE BAZĂ BRANDS 91

S acceptă ⇔ U cunoaşte câte o reprezentare a lui A şi B ı̂n raport cu (g1 , g2 , d) şi
este cinstit =⇒ U cunoaşte o reprezentare a lui m0 ı̂n raport cu (g1 , g2 , d).
Deci, dacă U nu cunoaşte o reprezentare a lui m0 ı̂n raport cu (g1 , g2 , d), nu are nici o
şansa să-l facă pe S să accepte la pasul 4.

3. La sfârşitul protocolului, S se află ı̂n posesia următoarelor informaţii:


A, B, z”, a”, b”, r”, c, r1 , r2 , r3 .
Considerăm sistemul (ı̂ntâi cu necunoscutele u1 , u2 , s, r1 , r2 , r3 , iar a doua oară cu ne-
cunoscutele x(1 , x2 , y1 , y2 , z1 , z2 ):
x 1 + x 2 = u1 s y1 + y2 = u2 s z1 + z2 = s
x1 + cx2 = r1 y1 + cy2 = r2 z1 + cz2 = r3
(toate ecuaţiile sunt scrise modulo q).
Din acest sistem se deduce că problema determinării lui (u1 , u2 ) este echivalentă cu prob-
lema determinării numerelor: x1 , x2 , y1 , y2 , z1 , z2 .
Informaţiile pe care S le are despre x1 , x2 , y1 , y2 , z1 , z2 sunt:

 x1 + cx2 = r1
 (mod q) (1) A = g1x1 g2y1 dz1 (mod p) (4)
y1 + cy2 = r2 (mod q) (2) B = g1x2 g2y2 dz2 (mod p) (5)


z1 + cz2 = r3 (mod q) (3) g1r1 g2r2 dr3 = AB c (mod p) (6)
(1) ⇔ x1 = r1 − cx2 (mod q), (2) ⇔ y1 = r2 − cy2 (mod q) , (3) ⇔ z1 = r3 − cz2 (mod q)
Înlocuind x1 , y1 , z1 ı̂n (4) şi folosind (6) rezultă:
A = g1r1 −cx2 g2r2 −cy2 dr3 −cz2 (mod p) ⇐⇒ g1r1 g2r2 dr3 = A(g1x2 g2y2 dz2 )c (mod p) ⇐⇒
1
g1x2 g2y2 dz2 = (A−1 g1r1 g2r2 dr3 ) c = B (mod p). (7)
Relatia (7) este echivalentă cu (5), ceea ce demonstrează că din relaţiile (1),(2) şi (3) nu
se obţine nici o informaţie ı̂n plus, deci (4) şi (5) sunt de fapt singurele informaţii esenţiale
pe care S le are despre x1 , x2 , y1 , y2 , z1 , z2 .
De aici rezultă că determinarea lui (x1 , y1 , z1 ) este echivalentă cu determinarea unei
reprezentări a lui A ı̂n raport cu (g1 , g2 , d), iar determinarea lui (x2 , y2 , z2 ) este echivalentă
cu determinarea unei reprezentări a lui B.
Dacă dispune de o putere de calcul nelimitată, S poate determina o reprezentare a lui A
şi o reprezentare a lui B ı̂n raport cu (g1 , g2 , d). Probabilitatea ca aceste reprezentări să
1 1 1
fie egale cu cele cunoscute de U este 2 2 = 4 din Propoziţia ?.2 (prelegerea anterioară).
q q q
1
Deci probabilitatea ca S să afle identitatea lui U după executarea protocolului este .
q4

7.4.3 Protocolul de depozit


După un anumit interval de timp, toate magazinele depozitează la bancă monezile electronice
primite de la clienţi. Protocolul executat de un magazin S cu banca pentru trimiterea fiecărei
monezi este următorul:
92 PRELEGEREA 7. SISTEMUL ELECTRONIC DE PLATĂ BRANDS

1. S şi B urmează protocolul provocare/raspuns (prelegerea anterioară) prin care S


demonstrează cunoaşterea reprezentării identităţii sale ı̂n raport cu (g1 , g2 ).

2. S trimite lui B mesajele A, B, sigK (A, B), c, r1 , r2 , r3 .

3. B verifică validitatea semnăturii sigK (A, B), stochează A, B, sigK (A, B), c, r1 , r2 , r3
ı̂ntr-o bază de date şi creditează contul lui S cu valoarea monezii.

Teorema 7.2 Dacă moneda (A, B, sigK (A, B)) apare de două ori ı̂n baza de date a băncii,
atunci banca poate determina identitatea utilizatorului necinstit care a utilizat moneda de două
ori.

Demonstraţie:
Dacă moneda (A, B, sigK (A, B)) apare de două ori ı̂n baza de date, rezultă că banca dispune
de două seturi de răspunsuri ale lui U: (r1 , r2 , r3 ) şi (r1 0 , r2 0 , r3 0 ) corespunzătoare celor două
provocări c si c0 ale lui S.
Din relaţiile de verificare ale ( protocolului de plată rezultă:
g1r1 g2r2 dr3 = AB c (mod p) (1)
r1 0 r2 0 r3 0 c0
g1 g2 d = AB (mod p) (2)
0
Ridicând (1) la puterea c (şi (2) la puterea c, rezultă:
0 0 0 0 0
Ac B cc = g1r1 c g2r2 c dr3 c (mod p)
0 0 0 0
Ac B cc = g1r1 c g2r2 c dr3 c (modp)
Împărţind cele două relaţii rezultă:
0 0 0 0 0 0 0
Ac −c = g1r1 c −r1 c g2r2 c −r2 c dr3 c −r3 c (mod p) =⇒
(r c0 −r 0 c)(c0 −c)−1 (r2 c0 −r2 0 c)(c0 −c)−1 (r3 c0 −r3 0 c)(c0 −c)−1
A = g1 1 1 g2 d (mod p) (3)
(r1 −r1 0 )(c−c0 )−1 (r2 −r2 0 )(c−c0 )−1 (r3 −r3 0 )(c−c0 )−1
Analog se obţine: B = g1 g2 d (mod p) (4)
x1 y1 z1 x2 y2 z2
Dar A = g1 g2 d (mod p) (5) şi B = g1 g2 d (mod p) (6)
Cum nu se cunoaşte o reprezentare netrivială a lui 1 ı̂n raport cu (g1 , g2 , d), din (3),(4),(5)
şi (6)
(
rezultă (toate relaţiile sunt modulo q):
(r1 c0 − r1 0 c)(c0 − c)−1 = x1 (r2 c0 − r2 0 c)(c0 − c)−1 = y1 (r3 c0 − r3 0 c)(c0 − c)−1 = z1
(r1 − r1 0 )(c − c0 )−1 = x2 (r2 − r2 0 )(c − c0 )−1 = y2 (r3 − r3 0 )(c − c0 )−1 = z2
Ceea ce ı̂nseamnă că banca poate să calculeze:
u1 s = x1 + x2 = (r1 c0 − r1 0 c)(c0 − c)−1 + (r1 − r1 0 )(c − c0 )−1 (mod q) (7)
0 0 0 −1 0 0 −1
u2 s = y1 + y2 = (r2 c − r2 c)(c − c) + (r2 − r2 )(c − c ) = y2 (mod q) (8)
0 0 0 −1 0 0 −1
s = z1 + z2 = (r3 c − r3 c)(c − c) + (r3 − r3 )(c − c ) = z2 (mod q) (9)
0 −1 0 0
Din (9) =⇒ s = (c − c) (r3 (c − 1) − r3 (c − 1)) (mod q) =⇒
s−1 = (r3 (c0 − 1) − r3 0 (c − 1))−1 (c0 − c) (mod q) (10).
−1 0 −1 0 0 0 0
Din (7) şi (10) rezultă u1 = u1 ss = (c − c) (r1 (c − 1) − r1 (c − 1))(r3 (c − 1) − r3 (c −
1)) (c − c) = (r1 (c0 − 1) − r1 0 (c − 1))(r3 (c0 − 1) − r3 0 (c − 1))−1 (mod q)
−1 0

şi analog u2 = (r2 (c0 − 1) − r2 0 (c − 1))(r3 (c0 − 1) − r3 0 (c − 1))−1 (mod q),


deci banca poate să calculeze identitatea utilizatorului necinstit. 2
7.5. CORECTITUDINEA SISTEMULUI DE BAZĂ 93

7.5 Corectitudinea sistemului de bază


Următoarea teoremă este fundamentală pentru demonstrarea securităţii sistemului:

Teorema 7.3 În protocolul de extragere a monezilor, U nu poate să obţină o semnătură asupra
unui mesaj m0 pentru care cunoaşte o reprezentare ı̂n raport cu (g1 , g2 , d), dar care nu este o
putere a lui m.

Demonstraţie:
Presupunem – prin reducere la absurd – că U poate să obţină o semnătură asupra lui m0 , cu
m0 de forma m0 = ms g1r = g1u1 s+r g2u2 s ds (mod p), cu s, r ∈ Zq arbitrare. Celelalte cazuri pentru
forma lui m0 se vor rezolva analog.
Dacă U poate obţine o semnătură validă asupra lui m0 , rezultă că U poate să calculeze
sigK (m0 ) = (z 0 , a0 , b0 , r0 ) ı̂n timp polinomial.
Să vedem cât de difcilă este pentru U calcularea lui b0 .
0
b0 = (m0 )w = (m0 )uw+v = (ms g1r )uw+v = msuw msv (g1ru )w g1rv = bsu msv g1rv (g1ru )w (mod p).
Notăm g3 = g1ru =⇒ g3w = g1−rv m−sv b−su b0 (mod q), cu g1 , m, b, s, u, v, r, g3 cunoscute, iar w
necunoscut lui U (w este ales de B aleator la fiecare execuţie a protocolului). Deci calcularea
lui b0 este la fel de dificilă ca şi calcularea lui g3w .
Fie s ∈ Zp astfel ı̂ncât g3 = g s (mod p).
Presupunând că b0 se poate calcula ı̂n timp polinomial, rezulta că şi g3w se poate calcula ı̂n
timp polinomial.
Dar U cunoaşte g3 = g s , g w , g, m, mw şi reuşeşte să determine g ws = g3w , adică cheia Diffie-
Hellman unică pentru g w , g s .
Cum u şi w sunt alese aleator, avem că şi g w , g s = g3 = g1ru sunt aleatoare ı̂n Gq . Am
construit asfel un algoritm polinomial care are la intrare numerele aleatoare g s , g w şi calculează
cheia unică Diffie-Hellman, ceea ce reprezintă o contradicţie cu NP-completitudinea acestei
probleme.
De aici rezultă că b0 nu se poate calcula polinomial, deci U nu poate obţine o semnătură
asupra lui m0 care nu e multiplu de m. 2
Consecinţă: Din Teoremele 7.1 şi 7.3 deducem că U poate să obţină o semnătură asupra
lui m0 pe care o poate folosi ı̂ntr-un protocol de plata dacă şi numai dacă impunem următoarele
restricţii asupra lui m0 (care justifică calificativul ”restrictiv” dat acestui protocol de semnătură):

1. m0 este de forma ms m ∈ Gq ;

2. U cunoaşte o reprezentare a lui m0 ı̂n raport cu (g1 , g2 , d) care este multiplu al reprezentării
lui m.

Să enunţăm câteva proprietăţi importante ale sistemului:

1. Securitatea:
Din consecinţa anterioară rezultă că identitatea utilizatorului este inclusă ı̂n m0 (m0 =
ms = I s ds ); astfel, dacă utilizatorul foloseşte moneda o singură dată ı̂i este garantată
anonimitatea. În schimb, dacă moneda este folosită de două ori, se poate detecta identi-
tatea utilizatorului necinstit, cum am arătat ı̂n Teorema 7.2.
94 PRELEGEREA 7. SISTEMUL ELECTRONIC DE PLATĂ BRANDS

Securitatea acestui sistem se bazează pe presupunerea de NP-completitudine a problemei


reprezentării ı̂n grupuri, a problemei determinării cheii unice Diffie-Hellman şi pe ipoteza
că funcţia de dispersie folosită ı̂n sistem este fără coliziuni tari.
Falsificarea unei monezi presupune imitarea semnăturii băncii, ceea ce este calculabil
dificil. Presupunând – totuşi – că U fasifică o monedă (m0 , sigK (m0 )) (dispunând de o
putere de calcul foarte mare), pentru a avea vreo şansă ca moneda să ı̂i fie acceptată ı̂n
protocolul de plată, trebuie să cunoască o reprezentare a lui m0 ı̂n raport cu (g1 , g2 , d)
(din Teorema 7.1). Astfel, sarcina falsificatorului devine şi mai dificilă.
2. Anonimitatea utilizatorilor este de asemenea garantată de Teorema 7.1.
3. Sistemul este fără legături.
O monedă nu poate fi legată de nici o execuţie specifică a protocolului de extragere,
conform Propoziţiei 7.2.
4. Sistemul este fără urmărire.
Tranzacţiile utilizatorului nu pot fi urmărite de bancă după protocolul de extragere a
monezilor. În momentul ı̂n care moneda este depozitată ı̂n bancă de către un magazin,
banca nu poate deduce din care cont a fost extrasă iniţial.
5. Sistemul este off-line.
6. Sistemul asigură protejarea utilizatorilor ı̂mpotriva acuzării nedrepte a băncii.
Dacă banca acuză un utilizator U că a folosit o monedă de două ori, ea trebuie să dezvăluie
juriului o reprezentare a identitătii lui U, de exemplu (u1 , u2 ). Dacă U este onest,
reprezentarea (u1 , u2 ) coincide cu cea cunoscută de U cu o probabilitate 1q (prelegerea
anetrioară). Deci, cu o probabilitate mare (1 − 1q ), cele două reprezentări sunt dis-
tincte. Asfel, U se află ı̂n posesia a două reprezentări ale lui I ı̂n raport cu (g1 , g2 ),
deci poate calcula o reprezentare a lui 1 ı̂n raport cu (g1 , g2 ). U prezintă juriului această
reprezentare a lui 1, ceea ce constituie proba nevinovăţiei sale (U nu ar fi putut calcula
altfel o reprezentare a lui 1, deoarece aceasta este o problemă NP - completă).
7. Introducerea monezilor de valori diferite. Există cel puţin două metode:
• Banca poate să utilizeze câte o cheie publică diferită pentru fiecare tip de monedă.
Astfel, dacă ı̂n sistem există k monezi distincte, banca dispune de k chei publice:
(g, h1 ), . . . , (g, hk ) şi de k chei secrete corespunzătoare: x1 , . . . , xk cu xi = loggi hi ,
∀i = 1, 2, . . . k.
• Se utilizează k generatori d1 , . . . , dk (ı̂n loc de unul singur d utilizat ı̂n sistemul de
bază). Fiecare generator di reprezintă o anumită valoare (de exemplu di reprezintă
valoarea 2i−1 ). Atunci se poate forma orice monedă de valoare cuprinsă ı̂ntre 1
şi 2k folosind reprezentarea ı̂n binar a valorii monezii. Generatorul di apare ı̂n
reprezentarea monezii dacă bitul i din reprezentarea binară este 1.
De exemplu, pentru o monedă de valoarea 11 = 10112 , m = Id4 d2 d1 , iar pentru o
moneda de valoare 18 = 100102 , m = Id5 d2 .
Înlocuirea lui m = Id cu m = Idip . . . di1 este singura modificare realizată ı̂n proto-
coalele sistemului de bază.
Prelegerea 8

Cecuri electronice

8.1 Sistemul de plată cu cecuri nedivizibile


Sistemele de plată cu monezi electronice pot fi extinse ı̂n mod natural la sisteme care utilizează
cecuri electronice.
Ideea acestei extensii se bazează pe intrpducerea a k noi generatori (f1 , . . . , fk ) ∈ Gkg , unde
fi reprezintă o anumită valoare (de exemplu 2i−1 unităţi). După cum s-a văzut ı̂n prelegerea
anterioară, orice sumă de cel mult 2k − 1 poate fi reprezentată ca un produs de generatori fi ,
conform reprezentării binare a valorii sumei.
Succesiunea de evenimente ı̂n sistemul de cecuri nedivizibile este următoarea:
1. Protocolul de extragere a cecului electronic:
Dacă utilizatorul U (cunoscut băncii prin identitatea sa I = g1u1 g2u2 mod p)) doreşte să
extragă din bancă un cec de valoare maximă 2k − 1, generează aleator (a1 , . . . , ak ) ∈ Zqk
m
Y ai
şi calculează m = fi (mod p). Banca extrage din contul lui U valoarea 2k − 1 şi
i=1
stochează ı̂ntr-o bază de date identitatea lui U ı̂mpreuna cu m.

2. Protocolul de plată:
Utilizatorul U doreşte să folosească la magazinul S o sumă de valoare mai mică sau egală
cu 2k − 1 (presupunem, pentru claritate, k ≥ 3 şi U utilizează suma de 5 = 1012 unităţi).
Atunci, U trebuie să ı̂i releve lui S: valorile A, B, semnătura pe care a obţinut-o de
la bancă asupra lui (A, B) şi numerele (a1 , a3 ), corespunzătoare reprezentării ı̂n binar a
valorii sumei.

3. Protocolul de depozit:
Magazinul S depozitează la bancă cecul electronic (A, B, sigK (A, B)) ı̂mpreună cu partea
folosită din cec: (a1 , a3 ). Banca stochează perechea (a1 , a3 ) ı̂ntr-o listă de recuperare.

4. Protocolul de recuperare a sumei nefolosite:


Utilizatorul U doreşte să recupereze suma din cec pe care nu a utilizat-o (corespunzătoare
generatorilor f2 , f4 , . . . , fk ). U trimite băncii (A, B, sigK (A, B) şi (a2 , a4 , . . . , ak ). Banca
verifică faptul că m = AB este asociat cu I ı̂n baza sa de date şi că (a2 , a4 , . . . , ak ) nu
sunt pe lista de recuperare.

95
96 PRELEGEREA 8. CECURI ELECTRONICE

Dacă banca acceptă, ea şterge din baza de date m şi creditează contul lui U cu suma
nefolosită din cec: 2k − 1 − 5 = 2k − 6.

Deoarece cecul este nedivizibil, un utilizator are dreptul să folosească un cec o singură
dată. Dacă nu a utilizat valoarea maximă a cecului, U trebuie să urmeze ı̂mpreună cu banca
protocolul de recuperare.
Vom construi mai târziu şi un sistem de cecuri cu proprietatea de divizibilitate.

8.1.1 Iniţializarea sistemului de cecuri


Numerele p, q, g, x, h, g1 , g2 , funcţia de dispersie H şi subgrupul Gq al lui Zq sunt generate ca
ı̂n sistemul de bază. Apoi, banca generează următoarele numere:

• Două tupluri generatoare de lungime k: (e1 , . . . , ek ) ∈ Gkq şi (f1 , . . . , fk ) ∈ Gkq .

• Doi generatori: d1 , d2 ∈ Gkq .

Deschiderea unui cont se similar ca ı̂n sistemul de bază, utilizatorul U fiind cunoscut prin
pseudonimul său I = g1u1 g2u2 (mod p), cu u1 , u2 generate aleator ı̂n Zq .
Un cec electronic este de forma (m0 , sigK (m0 )) cu restricţia că există s ∈ Zq∗ cu m0 =
ms (mod p), unde m conţine de această dată atât identitatea utilizatorului care a extras cecul,
cât şi valoarea maximă a cecului:
2
Y k
Y
ui ai bi a
m=( gi )dz11 ( ei fi )d2k+1 (mod p)
i=1 i=1
| {z }| {z }
identitate valoare
Rolul generatorului d1 este acelaşi ca ı̂n sistemul de bază (să asigure că identitatea utiliza-
torului rămâne ascunsă dacă acesta este onest), iar rolul lui d2 va fi să ı̂mpiedice realizarea de
legături de către bancă după protocolul de recuperare.

8.1.2 Protocolul de extragere a cecurilor


Presupunând că utilizatorul U cu identitatea I = g1u1 g2u2 (mod p) doreşte să extragă un cec de
valoare maximă 2k − 1, U şi B urmează protocolul următor:

1. U ı̂i demonstrează lui B cunoaşterea reprezentării (u1 , u2 ) a lui I ı̂n raport cu (g1 , g2 ),
prin protocolul din Prelegerea ? (cunoaşterea unei reprezentări).

2. U generează aleator 2k + 1 numere distincte a1 , a2 , . . . , ak+1 , b1 , b2 , . . . , bk ∈ Zq∗ .


k
Y ai b i a
Apoi U calculează m1 = ( ei fi )d2k+1 şi trimite m1 lui B.
i=1

3. B efectuează următoarele operaţii:

(a) extrage din contul lui U valoarea maximă a cecului;


(b) stochează m1 şi I ı̂ntr-o bază de date a cecurilor emise;
(c) calculează m2 = Id1 (mod p), m = m1 m2 (mod p);
8.1. SISTEMUL DE PLATĂ CU CECURI NEDIVIZIBILE 97

(d) generează aleator w ∈ Zq ;


(e) trimite lui U numerele z = mx (mod p), a = g w (mod p) şi b = mw (mod p).
4. U realizează următoarele operaţii:
(a) calculează m2 = Id1 (mod p), m = m1 m2 (mod p);
(b) generează aleator s ∈ Zq∗ , u, v ∈ Zq ;
k
Y ai s bi s a s
(c) calculează m0 = ms = ms1 ms2 = g1u1 s g2u2 s ds1 ( ei fi )d2k+1 (mod p);
i=1
0 s 0 0
z = z (mod p), w = uw + v (mod q), a0 = au g v = g w ) (mod p), b0 =
0
bus (m0 )v = (m0 )w ) (mod p);
(d) U determină aleator o descompunere a lui m0 ı̂n A şi B (m0 = AB (mod p)) astfel:
determină aleator fiecare din numerele u1 s, u2 s, s, a1 s, b1 s, . . . , ak s, bk s, ak+1 s ca sume
de câte două numere:
u1 s = x1 + x2 (mod q) u2 s = y1 + y2 (mod q) s = z1 + z2 (mod q),
a1 s = α1A + α1B (mod q) b1 s = β1A + β1B (mod q) . . .
ak s = αkA + αkB (mod q) bk s = βkA + βkB (mod q) ak+1 s = αA + αB (mod q)
apoi U calculează
k
Y k
Y
A = g1x1 g2y1 dz11 ( αiA βiA
ei fi )dα2 A (mod p), B = g1x2 g2y2 dz12 ( αiB βiB
ei fi )dα2 B (mod p) şi
i=1 i=1
0 0 0 0 0
c = H(m ||z ||a ||b ||A);
(e) trimite lui B numărul c = c0 u−1 (mod q).
5. B răspunde cu r = cx + w (mod q).
6. U acceptă protocolul dacă şi numai dacă g r = hc a (mod p), mr = z c b (mod p).
În final, el calculează r0 = ru + v (mod q).
(z 0 , a0 , b0 , r0 ) constituie o semnătură validă asupra lui m0 confomr Propoziţiei ?.1 (prelegerea
anterioară).
Rezultatele demonstrate pentru sistemul de bază rămân valabile şi ı̂n sistemul cu cecuri.

Propoziţia 8.1 Dacă U urmează protocolul anterior, atunci perechile (m0 , sigK (m0 )) nu pot fi
legate de nici o execuţie specifică a protocolului.

Demonstraţia este similară celei de la Propozitia ?.2, arătând că există exact q valori posibile
pentru (s, u, v) care produc aceeaşi pereche (m0 , sigK (m0 )). 2

Propoziţia 8.2 În protocolul de extragere a monezilor, U nu poate să obţină o semnătură
asupra unui mesaj m0 pentru care cunoaşte o reprezentare ı̂n raport cu (g1 , g2 , d1 , e1 , f1 , . . . , ek ,
fk , d2 ), dar care nu este o putere a lui m.

Demonstraţia este similară celei de la Teorema ?.3, arătând că obţinerea unei semnături
pentru un mesaj m0 , unde m0 nu este multiplu de m, este echivalentă din punct de vedere
al complexităţii cu construcţia unui algoritm care rezolvă problema determinării cheii unice
Diffie-Hellman. 2
98 PRELEGEREA 8. CECURI ELECTRONICE

Observaţia 8.1 Cheia publică folosită de bancă pentru cecuri trebuie să difere de cheia publică
pentru monezi.
Aceasta deoarece, dacă ar fi egale, U ar putea să trimită la pasul 2 al protocolului de extragere
a cecului electronic, m1 = g1t cu t aleator in Zq şi să obţină o semnătură asupra lui m0 = ms
cu m = g1u1 +t g2u2 d1 (mod p). Apoi, U ar putea să folosească această semnătură ca o monedă şi
ar ı̂ncălca afirmaţiile demonstrate ı̂n Teorema ?.2, cu consecinţe asupra securităţii sistemului.
Să demonstrăm acest lucru.

Propoziţia 8.3 Dacă utilizatorul U foloseşte de două ori ı̂n sistemul de bază o monedă de
forma (m0 , sigK (m0 )) cu m0 = ms (mod p) şi m = g1u1 +t g2u2 d1 (mod p), t ales aleator ı̂n Zq∗ ,
atunci B nu are suficiente informaţii pentru a determina identitatea lui U cu o probabilitate
ne-neglijabilă.

Demonstraţie:
Similar demonstraţiei Teoremei ?.2, B poate calcula
(u1 + t)s = x1 + x2 = (r1 c0 − r1 0 c)(c0 − c)−1 + (r1 − r1 0 )(c − c0 )−1 (mod q),
u2 s = y1 + y2 = (r2 c0 − r2 0 c)(c0 − c)−1 + (r2 − r2 0 )(c − c0 )−1 = y2 (mod q),
s = z1 + z2 = (r3 c0 − r3 0 c)(c0 − c)−1 + (r3 − r3 0 )(c − c0 )−1 = z2 (mod q),
unde r1 , r2 , r3 , respectiv r1 0 , r2 0 , r3 0 sunt răspunsurile date de U ı̂n cele două protocoale de
plată ı̂n care acesta a utilizat moneda.
De aici, B deduce u2 şi u1 + t. Cum t a fost ales aleator de U ı̂n Zq∗ , B are q − 1 posibilităţi
1
de alegere pentru t, deci cunoaşte identitatea lui U cu probabilitatea 2
q−1

8.1.3 Protocolul de plată


Dacă U doreşte să folosească suma 2j − 1 din cecul său (corespunzătoare generatorilor
(e1 , f1 ), . . . , (ej , fj )) la magazinul S, este este parcurs următorul protocol:
1. U ı̂i trimite lui S numerele A, B, sigK (A, B) = (z 0 , a0 , b0 , r0 ).
De asemenea, el ı̂l informează pe S asupra sumei pe care doreşte să o utilizeze (2j − 1 ı̂n
acest caz).

2. S se asigură că AB 6= 1.
( 0 0
0 0 g r = hc a0 (mod p)
Apoi el verifică semnătura băncii: verK (m , sigK (m ) = T ⇔ 0 0
(m0 )r = (z 0 )c b0 (mod p)
cu c0 = H(AB||z 0 ||a0 ||b0 ||A)
şi trimite lui U o provocare c ∈ Zq∗ \ {1}.

3. U verifică dacă c 6= 1, apoi calculează şi trimite lui S răspunsurile:

for i = 1 to j do ri = (ri1 , ri2 , ri3 , ri4 ) ← (αiA , αiB , βiA , βiB )


for i = j + 1 to k do ri = (ri1 , ri2 ) ← (αiA + cαiB , βiA + cβiB )
rk+1 = (r(k+1)1 , r(k+1)2 , r(k+1)3 ) ← (x1 + cx2 , y1 + cy2 , z1 + cz2 )
rk+2 ← αA + cαB .
8.1. SISTEMUL DE PLATĂ CU CECURI NEDIVIZIBILE 99

Pentru fiecare generator care apare ı̂n expresia sumei, U relevă puncte, iar pentru gener-
atorii care nu apar, U releva drepte.

4. S acceptă ⇐⇒



 r13 + r14 6= 0 ... rj3 + rj4 6= 0


 AB 6= 1
 c  
j
Y j
Y k
Y

 r r r r


 AB c = eri i1 firi3  eri i2 firi4   eri i1 firi2  g1(k+1)1 g2(k+1)2 d1(k+1)3 d2k+2 (mod p)

i=1 i=1 i=j+1

Teorema următoare este o consecinţă imediată a Teoremei ?.1:


Teorema 8.1
1. (Completitudinea) Dacă U urmează protocolul pas cu pas şi protocolul de extragere a
cecului electronic a fost executat corect, atunci S acceptă ı̂n pasul 4.

2. (Consistenţa) Dacă U nu cunoaşte câte o reprezentare a lui A respectiv B ı̂n raport


cu (g1 , g2 , d1 , e1 , f1 , . . . , ek , fk , d2 ), atunci nu există strategie pentru el astfel ı̂ncât S să
accepte cu o probabilitate de succes ne-neglijabilă.

3. (Ascunderea informaţiei) Chiar dacă S dispune de o putere de calcul nelimitată, iar


U şi S execută protocolul pas cu pas, S nu va reuşi să afle ı̂n final identitatea lui U cu o
probabilitate ne-neglijabilă.
Demonstraţie:

1. Dacă protocolul este executat pas cu pas, la pasul 4 avem:


ri3 + ri4 = βiA + βiB = bi s, ∀i, 1 ≤ i ≤ j.
Cum bi 6= 0, s 6= 0 dacă U urmează protocolul, rezultă ri3 + ri4 6= 0, ∀i, 1 ≤ i ≤ j.
m0 = ms , s 6= 0 =⇒ m0 6= 1 =⇒ AB 6= 1.
 c  
Yj j
Y Yk
r r r r
eiri1 firi3  eiri2 firi4   eri i1 firi2  g1(k+1)1 g2(k+1)2 d1(k+1)3 d2k+2 =
i=1 i=1
 ci=j+1
 
j
Y α j
Y α Yk
β β α +cα β +cβiB  g x1 +cx2 g y1 +cy2 dz1 +cz2 dαA +cαB =
ei iA fi iA  ei iB fi iB   ei iA iB fi iA 1 2 1 2
i=1 i=1 i=j+1
à k ! à à k ! !c
Y α Y α
x1 y1 z1 β α x y z β α
g1 g2 d1 ei iA fi iA
d2 A g1 2 g2 d12
2
ei iB fi iB
d2 B = AB c (mod p)
i=1 i=1
deci S acceptă ı̂n pasul 4.

2. U ar trebui să determine numerele r1 , r2 , . . . , rk+2 ∈ Zq astfel ı̂ncât


 c  
j
Y j
Y k
Y
ri1 ri3  ri2 ri4   r r r r
AB c = ei fi ei fi eri i1 firi2  g1(k+1)1 g2(k+1)2 d1(k+1)3 d2k+2 (mod p),
i=1 i=1 i=j+1

ceea ce este echivalent cu determinarea unei reprezentări a lui AB c ı̂n raport cu


(g1 , g2 , d1 , e1 , f1 , . . . , ek , fk , d2 ), care este o problemă pe care U nu o poate rezolva ı̂n timp
polinomial.
100 PRELEGEREA 8. CECURI ELECTRONICE

Similar demonstraţiei Teoremei ?.1, se deduce că dacă U nu cunoaşte o reprezentare a


lui m0 ı̂n raport cu (g1 , g2 , d1 , e1 , f1 , . . . , ek , fk , d2 ), nu are nici o şansă să-l faca pe S să
accepte la pasul 4.

3. La sfârşitul protocolului, S se află ı̂n posesia următoarelor informaţii:


A, B, z 0 , a0 , b0 , r0 , c, r1 , r2 , . . . , rk+2 .
Analog demonstraţiei folosite la Teorema ?.1, se deduce că problema determinării lui
(u1 , u2 ) este echivalentă cu problema determinării numerelor: x1 , x2 , y1 , y2 , z1 , z2 . Deter-
minarea lui (x1 , y1 , z1 ) se poate face doar prin determinarea unei reprezentări a lui A ı̂n
raport cu (g1 , g2 , d1 , e1 , f1 , . . . , ek , fk , d2 ), iar determinarea lui (x2 , y2 , z2 ) prin aflarea unei
reprezentări a lui B.
Dacă dispune de o putere de calcul nelimitată, S poate să determine o reprezentare a lui
A şi o reprezentare a lui B ı̂n raport cu (g1 , g2 , d1 , e1 , f1 , . . . , ek , fk , d2 ). Probabilitatea ca
1
aceste reprezentări să fie egale cu cele cunoscute de U este (cf. Propoziţiei ?.4) 2k+3 . Deci
q
probabilitatea ca S să afle identitatea lui U după executarea protocolului, este neglijabilă.
2

8.1.4 Protocolul de depozit


Pentru a depozita un cec electronic, magazinul S urmează ı̂mpreună cu B protocolul următor:

1. S demonstrează lui B cunoaşterea reprezentării identităţii sale ı̂n raport cu (g1 , g2 ), prin
protocolul din Prelegerea ?.

2. S trimite lui B numerele: A, B, sigK (A, B), c, r1 , r2 , . . . rk+2 .

3. B verifică validitatea semnăturii sigK (A, B), stochează A, B, sigK (A, B), c, r1 , r2 , . . . , rk+2
ı̂ntr-o bază de date şi creditează contul lui S cu valoarea cecului.
În plus faţă de protocolul de depozit pentru monezi electronice, B introduce ı̂n lista de
recuperare termenii (ri1 + ri2 )(ri3 + ri4 )−1 (mod q), pentru 1 ≤ i ≤ j.

Propoziţia 8.4 Dacă moneda (A, B, sigK (A, B)) apare de două ori ı̂n baza de date a băncii,
atunci banca poate determina identitatea utilizatorului necinstit care a utilizat moneda de două
ori.

Demonstraţia acestei propoziţii este analogă cu demonstraţia Teoremei ?.2 pentru sistemul de
bază. 2

8.1.5 Protocolul de recuperare


Dacă utilizatorul U doreşte să recupereze valoarea nefolosită din cecul (m0 , sigK (m0 )) (core-
spunzătoare generatorilor (ej+1 , fj+1 ), . . . , (ek , fk )), el urmează ı̂mpreună cu banca următorul
protocol:
1. U ı̂i trimite lui B identitatea sa I ı̂mpreună cu m1 .

2. B verifică dacă m1 este asociat lui I ı̂n baza de date a cecurilor emise.
8.1. SISTEMUL DE PLATĂ CU CECURI NEDIVIZIBILE 101

3. U trimite lui B ai , bi , cu j < i ≤ k.

4. B verifică dacă bi 6= 0, ∀i, j < i ≤ k si dacă ai (bi )−1 (mod q), (i = j + 1, . . . k) nu aparţin
listei de recuperare.
Daca B acceptă, se trece la pasul 5.

5. U ı̂i demonstreaza

lui
−1
B prin protocolul din Prelegerea ? cunoaşterea unei reprezentări a
k
Y
lui m1  eai i fibi  (mod p) ı̂n raport cu (e1 , f1 , . . . , ej , fj , d2 ).
i=j+1

6. Dacă B acceptă proba lui U, el creditează contul lui U cu suma corespunzătoare şi imtro-
duce ai (bi )−1 , i = j + 1, . . . , k ı̂n lista de recuperare. Apoi şterge m1 din baza de date a
cecurilor emise

Teorema 8.2 Presupunând că protocoalele de extragere, de plată şi de depozit sunt executate
corect, dacă U este necinstit ı̂n protocolul de recuperare, atunci B nu acceptă să-i returneze
suma cerută la pasul 6.

Demonstraţie:
În cazul ı̂n care U este necinstit, ar fi două situaţii de analizat:
1. U a utilizat anterior cel puţin una din perechile (ai , bi ), j < i ≤ k.
În acest caz, ı̂n protocolul de depozit al cecurilor, banca a stocat ı̂n lista de recuperare
valoarea (ri1 + ri2 )(ri3 + ri4 )−1 = (αiA + αiB )(βiA + βiB )−1 = ai s(bi s)−1 = ai b−1
i . Deci
protocolul de recuperare se opreşte la pasul 4 şi B nu acceptă să-i returneze lui U valoarea
cerută de acesta.

2. U ı̂ncearcă să genereze perechi (ai 0 , bi 0 ), j < i ≤ k care nu au fost generate ı̂n protocolul
de extragere a cecurilor. În acest caz U ar trebui să determine numerele (ai 0 , bi 0 ), j <
 −1
k
Y 0 0
i ≤ k astfel ı̂ncât să cunoască o reprezentare a lui m1  eai i fibi  ı̂n raport cu
i=j+1
(e1 , f1 , . . . , ej , fj , d2 ). Acest lucru este echivalent pentru U cu determinarea numerelor
ai 0 , (1 ≤ i ≤ k + 1) şi bi 0 , (1 ≤ i ≤ k) astfel ı̂ncât:
 −1   Ã k !
k
Y j
Y Y a0 b0
0 0 0 0 a 0 a 0
m1  eai i fibi  a i b
=  ei fi  d2
i k+1
⇐⇒ m1 = ei fi
i i
d2k+1 (mod q).
i=j+1 i=1 i=1

Deoarece protocolul de extragere


à k
a fost executat
!
corect, avem:
Y a b a
m1 = ei i fi i d2k+1 (mod q).
i=1
Cum U nu poate determina ı̂n timp polinomial două reprezentări diferite ale lui m1 ı̂n
raport cu (e1 , f1 , . . . , eK , fK , d2 ), rezultă ca ai 0 = ai , ∀i ∈ {1, 2, . . . , k + 1} şi bi 0 = bi , ∀i ∈
{1, 2, . . . , k}.
Am demonstrat astfel că U este obligat să folosească ı̂n protocolul de recuperare perechi (ai , bi )
care au fost generate ı̂n protocolul de extragere. Deci ı̂n niciunul din cele două cazuri, B nu
acceptă să-i returneze lui U suma cerută, iar altă strategie pentru U nu există. 2
102 PRELEGEREA 8. CECURI ELECTRONICE

Din punct de vedere al securităţii, sistemul de cecuri este echivalent cu sistemul de bază,
toate proprietăţile demonstrate pentru sistemul de bază rămânând valabile şi la sistemul de
cecuri.
Sistemul de cecuri nu este ı̂nsă eficient, deoarece orice cec poate fi utilizat o singură dată, iar
după protocolul de plată utilizatorul este obligat să urmeze ı̂mpreună cu banca protocolul de
recuperare. Aceste dezavantaj poate fi eliminat parţial folosind un protocol de cecuri divizbile.

8.2 Sistemul de plată cu cecuri divizibile


Un cec divizibil este caracterizat de o valoare maximă şi de proprietatea de divizibilitate:
utilizatorul care a extras cecul din bancă poate să utilizeze părti ale lui ı̂n diferite tranzacţii, cu
condiţia să nu depăşească suma maximă. În orice moment, utilizatorul poate sa ceară băncii
să-i returneze suma neutilizată a cecului, caz ı̂n care banca şi utilizatorul vor urma protocolul
de recuperare.
Pentru a obţine proprietatea de divizibilitate, modificăm sistemul de plată cu cecuri nedi-
vizibile ı̂n felul următor:

1. La iniţializarea sistemului, banca generează toate numerele şi tuplurile generatoare folosite
ı̂n sistemul de cecuri nedivizibile. În plus, banca generează ı̂ncă un tuplu generator
(h1 , h2 , . . . , hk ) ∈ Gkq .

2. Un cec electronic este reprezentat sub forma (m0 , sigk (m0 )) cu restricţia că există s ∈ Zq∗
astfel ı̂ncât m0 = ms (mod p), unde forma lui m este de această dată:
k ³
Y ´
ai b i ai r ak+1
m = (g1u1 r g2u2 r d1 ) ei fi hi d2 (mod p),
i=1
cu a1 , . . . , ak+1 , b1 , . . . , bk , r alese aleator de U la pasul al doilea al protocolului de ex-
tragere.
Valoarea cecului este dată de termenii de forma eai i fibi hai i r (ı̂n acest caz ea este 2k − 1),
iar generatorii d1 şi d2 au acelaşi rol ca ı̂n sistemul de cecuri nedivizibile.

Să arătăm cum se modifică ı̂n acest caz protocoalele de extragere a cecurilor, de plată şi de
depozit.

8.2.1 Protocolul de extragere a cecurilor electronice divizibile


Presupunând că utilizatorul U cu identitatea I = g1u1 g2u2 (mod p) doreşte să extragă un cec de
valoare maximă 2k − 1, U şi B urmează protocolul următor:

1. U ı̂i demonstrează lui B cunoaşterea reprezentării (u1 , u2 ) a lui I ı̂n raport cu (g1 , g2 ) prin
protocolul din Prelegerea ?.

2. U generează aleator 2k + 2 numere distincte a1 , a2 , . . . , ak+1 , b1 , . . . , bk ∈ Zq∗ . Apoi el


k ³
Y ´
ai bi ai r ak+1
calculează m = (g1u1 r g2u2 r d1 ) ei fi hi d2 (mod p) şi trimite m lui B.
i=1

3. B realizează următoarele operaţii:


8.2. SISTEMUL DE PLATĂ CU CECURI DIVIZIBILE 103

(a) extrage din contul lui U valoarea maximă a cecului;


(b) stochează m şi I ı̂ntr-o bază de date a cecurilor emise;
(c) generează aleator w ∈ Zq ;
(d) trimite lui U numerele z = mx (mod p), a = g w (mod p) şi b = mw (mod p).

4. U realizează următoarele operaţii:

(a) generează aleator s ∈ Zq∗ , u, v ∈ Zq ;


k ³
Y ´
ai s bi s ai rs ak+1 s
(b) calculează: m0 = ms = (g1u1 rs g2u2 rs ds1 ) ei fi hi d2 (mod p),
i=1
0
z 0 = z s (mod p), w0 = uw + v (mod q), a0 = au g v (= g w ) (mod p),
0
b0 = bus (m0 )v (= (m0 )w ) (mod p),
(c) determină o descompunere aleatoare m0 = AB (mod p) astfel: scrie ı̂n mod aleator
fiecare dintre numerele u1 rs, u2 rs, s, a1 rs, . . . , ak rs, ak+1 s ca sumă de două numere
(toate calculele se fac modulo q):
u1 rs = x1 + x2 , u2 rs = y1 + y2 , s = z1 + z2 ,
a1 rs = α1A + α1B . . . , ak rs = αkA + αkB , ak+1 s = αA + αB
(d) calculează:
à k !
Y as bs α
A= (g1x1 g2y1 dz11 ) i
ei fi hi
i iA αA
d2 (mod p),
Ãi=1
k
!
Y
B = (g1x2 g2y2 dz12 ) αiB
hi αB
d2 (mod p) şi c0 = H(m0 ||z 0 ||a0 ||b0 ||A),
i=1

(e) trimite lui B numărul c = c0 u−1 (mod q).

5. B răspunde cu r = cx + w (mod q).

6. U acceptă dacă şi numai dacă g r = hc a (mod p), mr = z c b (mod p).


În final, U calculează r0 = ru + v (mod q).
(z 0 , a0 , b0 , r0 ) va constitui o semnătură validă asupra lui m0 (după cum rezultă din Propoziţia
?.1).

8.2.2 Protocolul de plată


Dacă U doreşte să folosească suma 2j − 1 din cecul său (corespunzătoare generatorilor
(e1 , f1 , h1 ), . . . , (ej , fj , hj )) la magazinul S, este executat următorul protocol:
1. U ı̂i trimite lui S numerele A, B, sigK (A, B) = (z 0 , a0 , b0 , r0 ).
În plus, U ı̂l informează pe S asupra sumei pe care doreşte să o cheltuiască (2j − 1 ı̂n
acest caz).

2. S se asigură că AB 6= 1.
( 0 0
0 0 g r = hc a0 (mod p)
Apoi S verifică semnătura bancii: verK (m , sigK (m ) = T ⇔ 0 0
(m0 )r = (z 0 )c b0 (mod p)
104 PRELEGEREA 8. CECURI ELECTRONICE

cu c0 = H(AB||z 0 ||a0 ||b0 ||A)


şi trimite o provocare c ∈ Zq∗ \ {1}.
3. U verifică dacă c 6= 1, apoi calculează şi trimite lui S răspunsurile:
for i = 1 to j do ri = (ri1 , ri2 , ri3 ) ← (ai s, bi s, αiA + cαiB )
rk+1 = (r(k+1)1 , r(k+1)2 , r(k+1)3 ) ← (x1 + cx2 , y1 + cy2 , z1 + cz2 )
rk+2 ← αA + cαB
k
Y
rk+3 ← eai i s fibi s hαi iA +cαiB .
i=j+1

Pentru fiecare generator (ei , fi , hi ) care apare ı̂n expresia sumei, U relevă puncte pentru
exponenţii lui ei şi fi şi o dreaptă pentru exponentul lui hi , iar pentru generatorii care nu
apar, U nu relevă nimic.




ri1 , ri2 6= 0, i = 1, . . . , j

 AB 6= 1
4. S acceptă ⇐⇒ j

 r(k+1)1 r(k+1)2 r(k+1)3 Y r
 c
 AB = (g1
 g2 d1 ) (eri i1 firi2 hri i3 ) d2k+2 rk+3 (mod p)
i=1

Propoziţia 8.5 (Completitudinea) Dacă U este onest ı̂n protocolul de plată, atunci S ac-
ceptă la pasul 4.

Demonstraţie:
Dacă protocolul este executat pas cu pas, la pasul 4 avem ri1 = ai s, ri2 = bi s, ∀i, (1 ≤ i ≤ j).
Cum ai 6= 0, bi 6= 0, s 6= 0 rezultă ri1 6= 0, ri2 6= 0, ∀i, (1 ≤ i ≤ j).
m0 = ms , s 6= 0 =⇒ m0 1 =⇒ AB 6= 1.
³ r j
´Y
(k+1)1 r(k+1)2 r(k+1)3 r
g1 g2 d1 (eiri1 firi2 hri i3 ) d2k+2 rk+3 =
i=1
³ j ³
´Y ´ k
Y ³ ´
= g1x1 +cx2 g2y1 +cy2 dz11 +cz2 eai i s fibi s hαi iA +cαiB dα2 A +cαB ai s bi s αiA +cαiB
ei fi hi =
i=1 i=j+1
k ³
" Ã k ! #c
Y ´ Y α
= (g1x1 g2y1 dz11 ) ai s bi s αiA
ei fi hi αA
d2 (g1x2 g2y2 dz12 ) iB
hi α B
d2 = AB c (mod p)
i=1 i=1

8.2.3 Protocolul de depozit


Pentru a depozita un cec electronic, magazinul S urmează – ı̂mpreună cu B – protocolul
următor:
1. S demonstrează lui B cunoaşterea reprezentării identităţii sale ı̂n raport cu (g1 , g2 ) prin
protocolul din Prelegerea ?.
2. S trimite lui B numerele A, B, sigK (A, B), c, r1 , r2 , . . . rj , rk+1 , rk+2 , rk+3 .
3. B verifică validitatea semnăturii sigK (A, B), stochează A, B, sigK (A, B), c, r1 , r2 , . . . , rj ,
rk+1 , rk+2 , rk+3 ı̂ntr-o bază de date şi creditează contul lui S cu valoarea cecului.
B introduce ı̂n lista de recuperare termenii ri1 (ri2 )−1 (mod q), pentru 1 ≤ i ≤ j.
8.2. SISTEMUL DE PLATĂ CU CECURI DIVIZIBILE 105

Teorema 8.3

1. Dacă U foloseşte de două ori aceeaşi parte a unui cec divizibil, B poate afla identitatea
sa.

2. Dacă U utilizează un cec de două ori, dar este onest (utilizează de fiecare dată părţi
nefolosite ale cecului), atunci probabilitatea ca B să afle identitatea lui U este neglijabilă.

Demonstraţie:

1. Presupunem – fără a restrânge generalitatea, că U utilizează ı̂n două protocoale de plată
distincte valoarea corespunzătoare generatorului (e1 , f1 , h1 ).
B se va afla ı̂n posesia următoarelor informaţii: A, B, c, r1 , rk+1 , rk+2 , rk+3 , c0 , r1 0 , rk+1 0 ,
rk+2 0 , rk+3 0 , unde c 6= c0 sunt
( cele două provocări trimise de S ı̂n două protocoale de plată.
r(k+1)1 = x1 + cx2 (mod q)
r(k+1)1 0 = x1 + c0 x2 (mod q)
Acesta este un sistem liniar cu determinantul c0 − c 6= 0; el admite soluţia unică:
(
x1 = (c−1 − (c0 )−1 )−1 (c−1 r(k+1)1 − (c0 )−1 r(k+1)1 0 ) (mod q)
x2 = (c − c0 )−1 (r(k+1)1 − r(k+1)1 0 ) (mod q)
Analog se determină:
(
y1 = (c−1 − (c0 )−1 )−1 (c−1 r(k+1)2 − (c0 )−1 r(k+1)2 0 ) (mod q)
y2 = (c − c0 )−1 (r(k+1)2 − r(k+1)2 0 ) (mod q)
(
z1 = (c−1 − (c0 )−1 )−1 (c−1 r(k+1)3 − (c0 )−1 r(k+1)3 0 ) (mod q)
z2 = (c − c0 )−1 (r(k+1)3 − r(k+1)3 0 ) (mod q)
(
α1A = (c−1 − (c0 )−1 )−1 (c−1 r13 − (c0 )−1 r13 0 ) (mod q)
α1B = (c − c0 )−1 (r13 − r13 0 ) (mod q)
Apoi se pot calcula:
(
u1 rs = x1 + x2 (mod q) (1) u2 rs = y1 + y2 (mod q) (2)
s = z1 + z2 (mod q) (3) a1 rs = α1A + α1B (4)
−1
Din r11 = a1 s şi din (4) rezultă r = (a1 rs)(a1 s)−1 = (α1A + α1B )r11 (mod q) (5).
Din (1), (2) şi (3) se pot calcula:
(
u1 r = (u1 sr)(s)−1 = (x1 + x2 )(z1 + z2 )−1 (mod q)
u2 r = (u2 sr)(s)−1 = (y1 + y2 )(z1 + z2 )−1 (mod q)
Din (5) va rezulta acum:
−1
u1 = (u1 r)r−1 = (x1 + x2 )(z1 + z2 )−1 [(α1A + α1B )r11 ] = (x1 + x2 )(z1 + z2 )−1 r11 (α1A +
α1B )−1 (mod q), u2 = (y1 + y2 )(z1 + z2 )−1 r11 (α1A + α1B )−1 (mod q).
Deci B a calculat identitatea lui U: (u1 , u2 ).

2. Valoarea unui cec fiind 2k − 1, putem presupune că U utilizează ı̂n primul protocol de
plată valoarea 2j − 1 (corespunzătoare generatorilor (e1 , f1 , h1 ), . . . , (ej , fj , hj )), iar ı̂n al
doilea protocol, valoarea 2k − 2j (corespunzătoare generatorilor (ej+1 , fj+1 , hj+1 ), . . . ,
(ek , fk , hk )). Atunci B se va afla ı̂n posesia informaţiilor:
106 PRELEGEREA 8. CECURI ELECTRONICE

A, B, c, r1 , . . . , rj , rk+1 , rk+2 , rk+3 , c0 , rj+1 0 , . . . , rk 0 , rk+1 0 , rk+2 0 , rk+3 0 .


Valorile x1 , x2 , y1 , y2 , z1 , z2 se determină la fel ca ı̂n demonstraţia primului punct, iar
pentru αA , αB avem:
(
αA = (c−1 − (c0 )−1 )−1 (c−1 rk+2 − (c0 )−1 rk+2 0 ) (mod q)
αB = (c − c0 )−1 (rk+2 − rk+2 0 ) (mod q)
ri1 = ai s, ri2 = bi s, (1 ≤ i ≤ j), ri1 0 = ai s, ri2 0 = bi s, (j + 1 ≤ i ≤ k).




ai = ri1 (z1 + z2 )−1 (mod q)i = 1, . . . , j

 0 −1
 ai = ri1 (z1 + z2 ) (mod q)i = j + 1, . . . , k

Cum s = z1 + z2 (mod q) =⇒ ak+1 = (α + α )(z + z )−1 (mod q)
A B 1 2

 −1

 bi = ri2 (z 1 + z 2 ) (mod q), i = 1, . . . , j


 b = r 0 (z + z )−1 (mod q), i = j + 1, . . . , k
i i2 1 2

u1 rs, u2 rs, u1 r, u2 r se calculează identic cu primul punct.


B mai ştie că m0 = ms (mod p). Din m0 şi s = z1 + z2 (mod q), B va determina
1
m = (m0 ) s (mod p).
k ³
à k !−1 à !r
Y ´ Y a b k
Y
ai bi ai r ak+1 −ak+1 ai
Dar m = (g1u1 r g2u2 r d1 ) e i fi hi d2 (mod p) ⇔ md1 −1 i i
ei fi d2 = I hi (mod p)
i=1 i=1 i=1
à k !−1 k
Y −a Y
Notând m1 = md−1
1 eai i fibi d2 k+1 şi m2 = ai
hi , obţinem m1 = (Im2 )r (mod p)
i=1 i=1
cu m1 , m2 cunoscute.
B trebuie să determine identitatea lui U din următoarea ecuaţie cu necunoscutele I şi r:
m1 = (Im2 )r (mod p).
Ecuaţia are exact q − 1 soluţii: pentru fiecare valoare a lui r ∈ Zq∗ , se determină ı̂n mod
1
unic I = m1r m−1
2 (mod p).
1
Deci B determină I (identitatea lui U), cu probabilitatea q−1
. 2

Protocolul de recuperare este identic cu cel pentru sistemul de cecuri nedivizibile, Teorema
8.2 rămânând adevărată şi ı̂n cazul sistemului de cecuri care acceptă divizibilitatea.
Se observă că ı̂n protocolul de plată U trebuie să releve m0 , deci toate plăţile efectuate cu
părţi ale aceluiaşi cec pot fi legate ı̂ntre ele. Găsirea unei reprezentări a cecului astfel ı̂ncât să
nu poată fi realizate legături ı̂ntre plăţile făcute cu acelaşi cec rămâne o problemă deschisă.
Prelegerea 9

Protocoale de vot electronic

Guvernele şi organizaţiile democratice au nevoie de anumite mecanisme pentru a permite


alegătorilor să voteze. În mod tradiţional, alegerile reprezintă pentru persoanele cu drept de vot
mecanismele oficiale prin care acestea ı̂şi pot exprima opţiunile ı̂n mod democratic, ı̂n timp ce
sondajele constituie una din cele mai bune metode neoficiale de aflare a opţiunilor electoratului.
Atât ı̂n alegeri cât şi ı̂n sondaje intimitatea şi securitatea sunt deziderate obligatorii dar al căror
cost poate creşte substanţial. Mecanismele care asigură securitatea şi intimitatea alegătorilor
pot fi scumpe şi/sau consumatoare de timp pentru administratorii acestora şi neconvenabile
pentru alegători. Organizarea de alegeri sigure devine şi mai dificilă atunci când alegătorii sunt
distribuiţi pe o mare zona geografică.
Acestea sunt câteva motive pentru care poate fi propusă cu succes modalitatea de vot
electronic. Primele idei apar ı̂n anii 80, iar ideile dezvoltate ı̂n acest interval de timp ı̂l fac din
ce ı̂n ce mai credibil pentru utilizarea sa ı̂ntr-un mediu informatizat.

9.1 Caracteristici ale unui sistem de vot


Deşi există numeroase protocoale şi sisteme de votare, procedura de bază pentru organizarea de
alegeri democratice este standard. Această procedură – indiferent dacă este vorba de o votare
clasică sau una electronică – implică ı̂n general ı̂ndeplinirea a patru sarcini:

1. Înregistrarea: crearea unei liste de persoane care au dreptul să voteze;

2. Validarea: verificarea datelor personale ale celor care doresc să voteze. Se permite
votarea numai pentru cei care au drept să voteze şi nu au votat deja.

3. Colectarea voturilor de la centrele de votare.

4. Numărarea voturilor.

Pentru a avea ı̂ncredere ı̂n rezultatul alegerilor, oamenii trebuie să aibă dovezi că aceste sarcini
au fost ı̂ndeplinite ı̂n mod corect. Există ı̂nsă numeroase posibilităţi de corupere a sistemului
ı̂n timpul ı̂ndeplinirii fiecăreia din aceste sarcini. De exemplu:

• Autorităţile electorale pot trişa permiţând alegătorilor fără drept de vot să se ı̂nregistreze
la vot, iar alegătorilor ı̂nregistraţi să voteze de mai multe ori. De asemenea poate pierde

107
108 PRELEGEREA 9. PROTOCOALE DE VOT ELECTRONIC

1
sau adăuga voturi suplimentare.

• Alegătorii fără drept de vot se pot ı̂nregistra (cel mai frecvent folosind numele unei per-
soane decedate) sau cei cu drept de vot se pot ı̂nregistra sub mai multe nume.

• Se poate ı̂ncerca participarea la vot sub o identitate falsă.

• Cutiile cu voturi, voturile sau maşinile de numărat pot fi compromise.

Atunci când se proiectează un sistem electronic de vot este esenţial să se implementeze modali-
tăţi prin care cele patru condiţii menţionate mai sus să fie ı̂ndeplinite fără a sacrifica intimitatea
alegătorilor sau a oferi posibilităţi de fraudă. În plus, mai trebuie ı̂ndeplinite câteva condiţii
specifice unui astfel de sistem. Conform cu [5], [6], un sistem de vot electronic trebuie să
satisfacă următoarele cerinţe:

1. Anonimitatea votanţilor: Nu există nici o modalitate prin care poate fi dezvăluită


identitatea unei persoane care votează.

2. Acurateţe: Oricine poate verifica validitatea voturilor şi se poate asigura că voturile nu
au fost schimbate, multiplicate sau eliminate de cineva (inclusiv de autorităţi).

3. Necoliziune: Garanţia că toate voturile legale diferă ı̂ntre ele.

4. Corectitudine de număr: Suma voturilor repartizate pe candidaţi este egală cu numaul


de voturi valide.

5. Verificabilitate: Orice votant poate controla dacă votul său a fost numărat şi repartizat
candidatului pe care l-a votat.

6. Detectarea dublei votari: Dacă apare un vot dublu, organizatorii pot identifica per-
soana care a votat de mai multe ori.

În această prelegere vom prezenta câteva protocoale de vot care să ı̂ndeplinească cât mai multe
din aceste cerinţe.

9.2 Protocol independent de vot


Cele mai simple protocoale de vot nu folosesc nici o autoritate, bazăjndu-se numai pe alegători.
Sunt primele protocoale concepute pentru votare, bazate pe aplcări succesive de criptări şi/sau
semnări digitale de mesaje. Anonimitatea se obţine prin aplicarea de permutări ı̂n diverse faze.
Pentru exemplificare, prezentăm protocolul lui Michael Merritt:
Sunt N alegători, fiecare alegător i având cheia publică de criptare ei şi cheia privată di ,
precum şi o semnătură electronică sigi . Protocolul este următorul;

1. Fiecare alegător i ataşează un număr aleator ri la votul său mi .


1
Este celebră declaraţia dictatorului rus I.V.Stalin: Nu este important pe cine votează lumea; important este
cine numără voturile.
9.3. PROTOCOL CU AUTORITATE CENTRRALĂ 109

2. Criptează perechea (mi , ri ) cu cheile publice ale tuturor alegătorilor ı̂n ordinea 1, . . . , N ,
obţinând secvenţa eN (eN −1 (. . . (e1 (mi , ri )) . . .).
3. Repetă pasul anterior, adăugând după fiecare criptare câte un număr aleator Ri distinct
(pe care-l trimite lui i). Se obţine

eN (RN , eN −1 (. . . (R2 , e1 (R1 , eN (eN −1 (. . . (e1 (mi , ri )) . . .)

4. Toate aceste voturi sunt strânse de alegătorul N . Fiecare alegător i:


(a) Decriptează mesajul cu cheia sa secretă di , scoate numărul Ri şi se asigură că este
pe lista numerelor aleatoare primite.
(b) Amestecă cele N voturi şi le trimite lui i − 1 (alegătorul 1 le trimite lui N ).
După afectuarea acestui pas, alegătorul N dispune de N mesaje de forma
eN (eN −1 (. . . (e1 (mi , ri )) . . .).
pe care le semnează cu semnătura sa sigN .
5. Procedeul se reia, fiecare alegător i:
(a) Verifică validitatea semnăturii alegătorului i + 1;
(b) Decriptează mesajele primite;
(c) Aplică propria sa semnătură sigi şi trimite lui i − 1 cele N mesaje de forma
sigi (ei (. . . (e1 (mi , r + i) . . .).
6. Toţi alegătorii confirmă semnătura alegătorului 1. Voturile sunt numărate ı̂n comun,
fiecare alegător putându-se convinge de existentă votului său datorită numărului aleator
ataşat.

În timpul procesului de votare numărul de voturi este constant, deci pierderea sau adăugarea
unui vot este uşor de detectat.
Amestecul voturilor asigură anonimitatea.
De asemenea, voturile nu pot fi ı̂nlocuite; o astfel de ı̂ncercare pe parcursul primei runde este
depistată prin numărul aleator introdus incorect. Dacă alegătorul i ı̂nlocuieşte votul alegştorului
j (j > i), atunci alegătorul j va detecta acest lucru la ı̂nceputul celei de-a doua runde de
decriptări (pasul 5).
O ı̂ncercare de ı̂nlocuire pe parcursul celei de-a doua runde este depistată la decriptarea
finală când fiecare alegător ı̂şi verifică prpriul său număr ri .
Un defect major al acestui protocol constă ı̂n implementarea dificilă datorată numărului
mare de calcule, dependent de numărul de votanţi N .

9.3 Protocol cu autoritate centrrală


Pentru micşorarea volumului de calcule se poate itnroduce o nouă entitate care se ocupă cu
ı̂nregistrarea alegătorilor; ea este numită de obicei autoritate centrală (AC). Prezentăm o
variantă de protocol cu autoritate centrală. Se presupune că prin carta de alegător, fiecare
persoană k dispune de două chei ek (publică) şi dk (secretă).
110 PRELEGEREA 9. PROTOCOALE DE VOT ELECTRONIC

1. AC ı̂ntreabă fiecare alegător dacă doreşte sau nu să participe la alegeri.

2. Se publică o listă cu toţi alegătorii ı̂nregistraţi.

3. Fiecare alegător primeşte de la AC un ID (printr-un protocol de dezvăluire parţială a


secretelor)

4. Fiecare alegător i trimite spre AC perechea (ID, ei (ID, m)).

5. AC publică ei (ID, m) pentru toţi alegătorii de pe lista de la punctul (2).

6. Fiecare alegător i trimite anonim spre AC perechea (ID, di ).

7. AC asociază mesajele după ID, le decriptează, verifică autenticitatea voturilor şi publică
perechile (ID, m) pentru toţi participanţii la vot.

Acest sistem ı̂mpiedică atât alegătorii neautorizaţi să voteze, cât şi pe cei neautorizaţi să voteze
de două ori. Alegătorilor nu li se pot afla identitatea reală, deoarece fiecare ID se obţine printr-
un protocol de dezvăluire parţială a secretelor, deci AC nu ştie la cine a ajuns fiecare ID.
Există şi ı̂n acest protocol câteva neajunsuri. Primul – şi cel mai important – este acela că
o autoritate centrală reprezintă un punct de corupţie asupra căruia nu există control. ea poate
falsifica voturi ı̂n numele alegătorilor care se abţin, poate pierde voturi valide (nici un alegător
nu poate demonstra că a trimis ı̂ntr-adevar un vot). În plus, implementarea sa rămâne destul
de complexă.
O primă idee de ı̂mbunătăţire a sistemului a constat ı̂n introducerea mai multor autorităţi
centrale, dependente una de alta. De exemplu, se pot introduce două autorităţi: una care se
ocupă de legitimitatea alegătorilor (să ı̂i spunem AL - agentı̂e de legimitate), alta care se ocupă
de numărarea efectivă a voturilor (AT - agenţie de tabulare). Un vot valid trebuie să treacă
prin ambele agenţii pentru validare. Prima recunoaşte dreptul alegătorului de a vota (fără a
vedea conţinutul votului), eliberându-i un buletin. A doua agenţie primeşte votul ı̂mpreună cu
buletinul de validare. O variantă de astfel de protocol (ı̂n ipoteza că cele două agenţii nu se
aliază pentru falsificarea votării) este:

1. Fiecare alegător (după demonstrarea identităţii sale) solicită AL un număr de autentifi-


care.

2. AL generează aleator numere de autentificare şi le distribuie.

3. AL trimite spre AT lista tuturor numerelor de autentificare.

4. Fiecare votant alege aleator un ID (număr de validare) şi trimite spre AT un triplet
format din numărul de autentificare, ID şi votul său.

5. AT verifică numărul de autentificare şi – dacă este pe listă – ı̂l bifează şi publică votul
ı̂mpreună cu nunmărul de validare.
9.4. PROTOCOLUL MU-VARADHARAJAN 111

9.4 Protocolul Mu-Varadharajan


După 1986 au fost publicate diverse protocoale de vot, fiecare având avantajele şi dezavantajele
sale. A se vedea de exemplu [1] (primul protocol de vot utilizabil pe scară largă), [2], [4], [7],
[8], [9].
În continuarea acestei prelegeri vom prezenta un protocol de vot electronic pentru o reţea
informatică (bazat pe schemele de semnătură electronică ElGamal şi RSA) propus de Mu şi
Varadjarajan ı̂n 1998 ([6]). Ulterior ı̂n [3] sunt demonstrate şi corectate câteva slăbiciuni.
Componentele protocolului Mu-Varadharajan sunt:
• V - mulţime finită nevidă de votanţi;
• AS - un server de autentificare a votantilor;
• V S - o mulţime finită de servere de votare;
• T CS - un server de numărare a buletinelor de vot;
• CA - un certificat de autenticitate.
Protocolul conţine trei etape:
1. Obţinerea buletinului de vot;
2. Votarea (şi colectarea buletinelor de vot);
3. Numărarea buletinelor de vot.

9.4.1 Iniţializarea
Vom nota cu p un număr prim mare şi cu t ştampila de timp. De asemenea, α k β va reprezenta
concatenarea secvenţelor α şi b.
Înainte de a incepe protocolul de vot:
• Fiecare participant V primeşte o pereche de chei RSA : (eV , dV ) şi un modul nV obţinut
prin ı̂nmulţirea a două numere prime mari. Reamintim, conform algoritmului RSA:
eV · dV ≡ 1 (mod φ(nV ))
• AS deţine un modul nAS şi o pereche de chei RSA (eAS , dAS ). nAS şi eAS sunt publice,
cunoscute de toti votanţii.
• Orice votant valid V are un certificat de votant CertV eliberat pe termen lung de CA.
Acesta este semnat de cheia secretă a lui CA, iar conţinutul lui include
– un număr serial,
– identitatea votantului V ,
– identitatea CA,
– cheia publică eV şi modulul nV ,
– intervalul de valabilitate,
– o ştampilă de timp.
112 PRELEGEREA 9. PROTOCOALE DE VOT ELECTRONIC

9.4.2 Etapa I: Obţinerea buletinului de vot


1. V trebuie să demonstreze că este un alegător valid. Pentru aceasta el alege un factor
blind b şi trei numere aleatoare g, r, k1 ∈ Zp∗ . Pe baza lor calculează parametrii
a = g r (mod p),
x1 = gbeAS (mod nAS ), (1)
x2 = g k1 beAS (mod nAS ),
x3 = abeAS (mod nAS ) (2)
şi trimite lui AS cvadruplul (V, AS, CertV , (x1 k x2 k x3 k t)dV (mod nV )).
2. AS verifică ı̂ntâi validitatea certificatului şi validează semnătura
(x1 k x2 k x3 k t)dV (mod nV )). Apoi AS alege un număr aleator k2 şi calculează
x4 = (k2 k t)eV (mod nV )
x5 = (x3k 2 2
1 x2 x3 )
dAS
(mod nAS ) = (y1 y2 a)dAS b3(k2 +1) (mod nAS )
k1 +k2 k1 +2k2 eV
unde y1 = g , y2 = g . Mesajul (AS, V, x4 , (x5 k t) (mod nV )) este trimis lui V .
Parametrul k2 este diferit pentru fiecare votant, iar AS stochează ı̂n baza sa de date k2
ı̂mpreună cu identitatea lui V (CertV ).
3. Prin decriptarea lui x4 , V obţine k2 . Deci V poate calcula y1 şi y2 , după care determină
s = x5 b−3(k2 +1) = (y1 y2 a)dAS (mod nAS )
s este semnătura RSA pentru produsul y1 y2 a.
Pentru un vot m, V poate genera acum o semnătură (s1 , s2 ) de tip ElGamal:
s1 = (k1 + k2 )−1 (ma − r) (mod p − 1), (3)
s2 = (k1 + 2k2 )−1 (ma − r) (mod p − 1). (4)
Buletinul de vot al lui V este
T = a k g k y1 k y2 k s k s1 k s2 k m.

9.4.3 Etapa II: Votarea (şi colectarea buletinelor de vot)


În această fază V poate trimite prin reţea buletinul său de vot spre un server de votare V S.
Scopul principal al unui V S este de a garanta validitatea buletinului de vot. Protocolul conţine
doi paşi:
1. V trimite T spre V S;
2. V S decriptează T şi verifică validitatea lui a, y1 , y2 folosind semnătura s şi cheia publică
eAS . Apoi V S determină corectitudinea semnăturii (s1 , s2 ) pentru m, folosind relaţiile:
ay1s1 = g ma (mod p), (5)
ay2s2 = g ma (mod p) (6)
Dacă rezultatul acestei verificări este pozitiv, atunci V S are certitudinea că buletinul T
este valid.
V S stochează toate buletinele de vot şi trimite ı̂n final baza de date prin reţea către serverul
de numărare a buletinelor T CS.
9.5. SLĂBICIUNI ALE PROTOCOLULUI MU-VARADHARAJAN 113

9.4.4 Etapa III: Numărarea buletinelor de vot


Toate V S-urile trimit buletinele către T CS. Scopul acestuia este de a număra voturile şi de a
depista pe cei care au votat de mai multe ori.
Să presupunem că V foloseşte parametrii a, g, k1 , k2 pentru a semna şi un alt vot m0 şi să
trimită un al doilea buletin T = a k g k y1 k y2 k s k s01 k s02 k m0 spre alt V S.
Pentru a detecta o dublă votare, V S verifică parametrii a, g, y1 , y2 din toate buletinele T
pentru a vedea dacă ei se repetă. În caz afirmativ, el rezolvă sistemul liniar
ma0 − ma
k1 + k2 = 0 (mod p − 1) (7)
s1 − s1
ma0 − ma
k1 + 2k2 = 0 (mod p − 1) (8)
s2 − s2
şi află k2 . Folosind baza de date a lui AS, se identifică ı̂n mod unic votantul V .

9.5 Slăbiciuni ale protocolului Mu-Varadharajan


În [3] se arată că totuşi există două modalităţi prin care cineva poate vota de mai multe ori
fără să fie depistat.
Să presupunem că V a obţinut buletinul valid de vot T = a k g k y1 k y2 k s k s1 k s2 k m.
Pe baza lui poate genera un alt buletin valid T 0 astfel:

9.5.1 Atacul 1
La ı̂nceput V calculează g 0 , y 01 , y 02 , a0 cu relaţiile
g 0 = q c0 (mod p),
−1
y 01 = (g 0 )(k1 +k2 +c1 )c0 (mod p),
−1
y 02 = (g 0 )(k1 +2k2 +c2 )c0 (mod p),
−1
a0 = (g 0 )(r+c3 )c0 (mod p),
unde c0 , c1 , c2 , c3 sunt numere ı̂ntregi care evrifică condiţiile c1 + c2 + c3 = 0, c1 c2 c3 6= 0.
Acum V generează buletinul T 0 = a0 g 0 y 01 k y 02 k s k s01 k s02 k m unde (s01 , s02 ) este semnătura
votului m cu cheile (k1 + k2 + c1 )c−1 −1
0 respectiv (k1 + 2k2 + c2 )c0 ; anume
s01 = ((k1 + k2 + c1 )c−1 −1 0 −1
0 ) (ma − (r + c3 )c0 ) (mod p − 1)
s02 = ((k1 + 2k2 + c2 )c−1 −1 0 −1
0 ) (ma − (r + c3 )c0 ) (mod p − 1)
În faza de votare şi de colectare a buletinelor, V poate trimite către V S şi al doilea buletin
T 0 . V S verifică ı̂ntâi semnătura s, apoi validitatea lui a0 , y 01 , y 02 folosind ecuaţia
seAS = y1 y2 a (mod nAS ) = y 01 y 02 a0 (mod nAS )
În continuare V S verifică validitatea lui (s01 , s02 ) cu ecuaţiile (5) şi (6). Cum toate sunt
corecte, V S crede că T 0 este un buletin valid şi-l trimite lui T CS. Aici, pentru protejarea contra
dublei votări, T CS verifică parametrii a0 , g 0 , y 01 , y 02 şi decide că ei au fost folosiţi o singură dată.
Deci atacul funcţionează. Chiar dacă V S detectează că semnătura s a mai fost utilizată, el nu
va putea detecta identitatea votantului ilegal (cu (7) şi (8)).

9.5.2 Atacul 2
Similar primului atac, V alege ı̂ntâi aleator numărul h şi calculează
2 2 2 2
g 0 = g h , a0 = ah , y 01 = y1h , y 02 = y2h , s0 = sh
114 PRELEGEREA 9. PROTOCOALE DE VOT ELECTRONIC

Apoi, semnătura (s01 , s02 ) pentru m poate fi calculată cu o variantă a relaţiilor (3) şi (4)
folosind cheile (k1 + k2 )h respectiv (k1 + 2k2 )h:
s01 = (k1 + k2 )−1 h−1 (ma0 − hr) (mod p − 1),
s02 = (k1 + 2k2 )−1 h−1 (ma0 − hr) (mod p − 1).
Deci V poate genera un nou buletin de vot T 0 = a0 k g 0 k y 01 k y 02 k s0 k s01 k s02 k m.
V S este convins de validitatea lui T 0 pentru că relaţiile
2
(s0 )eAS = (y1 y2 a)h = y 01 y 02 a0 (mod nAS )
0 0
(y 01 )s1 a0 = (g 0 )a m (mod p)
0 0
(y 02 )s2 a0 = (g 0 )a m (mod p)
sunt verificate.
Cu aceste atacuri, un votant poate vota de oricâte ori vrea, fără să fie detectat.

9.6 Protocolul Mu-Varadharajan modificat


Pentru a evita slabiciunile ı̂n faţa atacurilor prezentate anterior, este construită o variantă
ı̂mbunătăţită a protocolului de vot Mu-Varadharajan. Noua schemă are tot trei etape; acestea
sunt (s-au folosit aceleaşi notaţii):

9.6.1 Etapa I: Obţinerea buletinului de vot


1. V alege doi factori blind b1 , b2 şi două nuemre aleatoare k1 , r. Cu aceşti parametri cal-
culează w1 şi w2 după formulele
w1 = g r be1AS (mod nAS )
w2 = g k1 b2eAS (mod nAS )
unde g ∈ Zp∗ este un parametru public al sistemului.
V trimite lui AS structura {V, AS, CertV , t, w1 , w2 , ((w1 k w2 k t)dV (mod nV ))}.

2. V S verifică validitatea certificatului şi validează semnătura (w1 k w2 k t)dV (mod nV ).


Dacă rezultatul verificării este pozitiv, AS poate fi sigur că parametrii primiţi sunt corecţi.
El continuă alegând un număr aleator k2 diferit pentru fiecare votant şi calculează
w3 = (k2 k t)eV (mod nV )
w4 = (w1 · AS)dAS (mod nAS ) = (a · AS)dAS b1 (mod nAS )
w5 = (w2 · g k2 · AS)dAS (mod nAS ) = (y1 · AS)dAS b2 (mod nAS )
w6 = (w22 · g k2 · AS)dAS (mod nAS ) = (y2 · AS)dAS b22 (mod nAS )
unde a = g r , y1 = g k1 +k2 , y2 = g k1 +2k2 .
Mesajul {AS, V, w3 , ((w4 k w5 k w6 k t)eV (mod nV ))} este trimis lui V . În paralel, AS
stochează ı̂n baza sa de date k2 ı̂mpreună cu identitatea lui V .

3. V obţine k2 prin decriptarea lui w3 , iar pe baza lui poate determina y1 şi y2 . Mai departe,
V determină semnătura (s1 , s2 , s3 ) (eliminând factorii blind) conform relaţiilor
s1 = w4 b1−1 = (a · AS)dAS quad(mod nAS )
s2 = w5 b2−1 = (y1 · AS)dAS quad(mod nAS )
9.6. PROTOCOLUL MU-VARADHARAJAN MODIFICAT 115

s3 = w6 b2−2 = (y2 · AS)dAS quad(mod nAS )

4. V aplică o schemă de semnătură ElGamal pentru a semna votul m. Fie y1 , y2 cheile


publice ale sistemului de criptare ElGamal şi x1 = k1 + k2 , x2 = 2k1 + k2 cheile se-
crete corespunzătoare; deci y1 = g k1 +k2 (mod p) şi y2 = g 2k1 +k2 (mod p). Semnătura
((a, s4 ), (a, s5 )) pentru votul m este generată de ecuaţiile
s4 = x−1
1 (ma − r) (mod p − 1) respectiv

s5 = x−1
2 (ma − r) (mod p − 1).

Buletinul de vot al lui V este T = s1 k s2 k s3 k s4 k s5 k a k y1 k y2 k m.

9.6.2 Etapa II: Votarea (şi colectarea buletinelor de vot)


1. V trimite buletinul de vot T lui V S.

2. V S verifică validitatea lui a, y1 , y2 folosind ecuaţiile


AS · a = se1AS (mod nAS ) (9)
AS · y1 = se2AS (mod nAS ) (10)
AS · y2 = se3AS (mod nAS ) (11)
Dacă toate sunt verificate, V S trece la verificarea corectitudinii semnăturii ((a, s4 ), (a, s5 ))
folosind relaţiile:
g ma = y1s4 a = y2s5 a (mod p)
Dacă ele se verifică, V S acceptă T ca valid. În final, V S formează o bază de date cu toate
buletinele de vot valide, pe care o trimite prin reţea lui T CS.

9.6.3 Etapa III: Numărarea buletinelor de vot


După ce primeşte buletinele de vot de la toate V S-urile, T CS face public conţinutul lor şi le
numără. În plus, el este responsabil cu detectarea dublei votări.
Să presupunem că un votant V foloseşte aceiaşi parametri y1 , y2 , a pentru a semna un vot
diferit m0 şi trimite acest buletin unui alt V S. Atunci:

1. T CS verifică y1 , y2 , a pentru toate buletinele T pentru a vedea dacă apar de mai multe
ori.

2. Dacă aceste valori au aparut de două ori şi m = m0 se ia ı̂n considerare un singur buletin.
Dacă m 6= m0 rezultă că este un caz de dublă votare şi T CS află identitatea acestuia,
calculând
m0 a − ma
x1 = 0 (mod p − 1) şi
s4 − s4
m0 a − ma
x2 = 0 (mod p − 1).
s5 − s5
De aici, x2 − x1 = (2k1 + k2 ) − (k1 + k2 ) = k1 şi deci k2 = x1 − k1 . Cu ajutorul lui k2 se
poate afla cine a ı̂ncercat să trişeze.
116 PRELEGEREA 9. PROTOCOALE DE VOT ELECTRONIC

9.7 Securitatea protocolului Mu-Varadharajan modificat


În ipoteza că serverul de autentificare SA este sigur şi deci nu va genera nici un buletin de vot
fără consimţământul votantului, sistemul construit verifică toate restricţiile unui sistem de vot
electronic. În plus, el are o securitate sporită, rezultată din următoarele observaţii:

9.7.1 Rezistenţa la atacurile 1 şi 2


Să presupunem că un votant forţează parametrii a, y1 , y2 ı̂n conformitate cu Atacul 1; el nu va
putea totuşi să obţină semnătura (s1 , s2 , s3 ) dată de ecuaţiile (9), (10), (11) pentru că nu ştie
cheia secretă dAS .
În al doilea atac, V poate obţine uşor componenta s02 = (AS · y 02 )dAS dar nu poate gebera
restul semnăturiii pentru vatul m. De exemplu, să presupunem s02 = s22 = (AS 2 · y22 )dAS
şi y 02 = AS · y22 . Deci parametrul y 02 poate trece de verificare. Dar – din cauza problemei
logaritmilor discreţi – votantul nu poate obţine cheia secretă corespunzătoare x01 . Fără cheia
secretă, V nu poate genera o semnătură corectă.

9.7.2 Rezistenţa faţă de un atac aliat


Să presupunem că doi votanţi V1 , V2 cu semnăturile valide (s11 , s12 , s13 ) respectiv (s21 , s22 , s23 )
colaborează pentru obţinerea unei noi semnături (s01 , s02 , s03 ) definită prin
s0i = s1i · s2i (mod nAS ), i = 1, 2, 3, 4.
Totuşi ei nu vor putea calcula parametrii r0 , x01 , x02 din cauza dificultăţii de rezolvare a
problemei logaritmului discret.
Bibliografie

[1] J. Benaloh – Verifiable sectret-ballot elections, Ph.D thesis, Yale University, Technical report
561 (1987)

[2] J.D. Cohen – Improving Privacy in Cryptographic Elections

[3] I.Chang Lin, M.Hwang, C.Chang – Security enhancement for anonymous secure e-voting
over a network, Computer Science $ interfaces 25 (2003), 131-139

[4] K. Iversen – A criptographic scheme for cmputerized general elections, proc. Crypto 1,
Springer LNCS 576 (1992), 405 - 419.

[5] C.I. Lei, C.I. Fan – A universal single-authority election system, IEICE Transactions on
Fundamentals E81-A (10) (1998), 2186-2193

[6] Y.Mu, V. Varadharajan – Anonymous e-voting over a network, Proc. of the 14th Annual
Computer Security Applications Conference, ASAC8 (1998) 293-299

[7] H. Nurmi, A. Salomaa, L. Santean – Secret ballot elections in computer networks, Computer
and Security 10 (1991), 553 - 560.

[8] C. Park, K. Itoh, K. Kurosawa – it Efficient anonymous channel and all or nothing election
scheme, Proc. Eurocrypt 3, Springer LNCS 765 (1994), 248 - 259.

[9] A. Renvall – Cryptogtaphic Protocols and techniques for Communication, Ph.D. Thesis

117

S-ar putea să vă placă și