Ascunderea informat ¸iei in text folosind

gramatici de tip LR(k)
Traian Florin Serb˘anut ¸˘ a
11 martie 2002
2
Cuprins
1 Introducere 5
1.1 Prezentarea lucr˘arii . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Scurt˘a istorie a steganografiei . . . . . . . . . . . . . . . . . . 5
2 Preliminarii teoretice 9
2.1 Gramatici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.1 Gramatici independente de context . . . . . . . . . . . 9
2.1.2 Gramatici de tip LR(k) . . . . . . . . . . . . . . . . . 11
2.1.3 Algoritm de parsare pentru gramatici de tip LR(k) . . 14
2.2 Gramatici ponderate . . . . . . . . . . . . . . . . . . . . . . . 19
2.3 Coduri Huffman . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3.1 Codificare . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3.2 Construct ¸ia codurilor Huffman . . . . . . . . . . . . . . 22
3 Sistemul de criptare 25
3.1 Prezentarea sistemului . . . . . . . . . . . . . . . . . . . . . . 25
3.2 Extinderea sistemului . . . . . . . . . . . . . . . . . . . . . . . 27
3.3 Algoritmii de criptare ¸si decriptare . . . . . . . . . . . . . . . 28
3.3.1 Algoritmul de criptare . . . . . . . . . . . . . . . . . . 28
3.3.2 Procesul de decriptare . . . . . . . . . . . . . . . . . . 30
3.4 Sigurant ¸a sistemului . . . . . . . . . . . . . . . . . . . . . . . 31
3.4.1 Analiza teoretic˘a a securit˘at ¸ii sistemului . . . . . . . . 31
3.4.2 Metode de ˆımbun˘at˘ at ¸ire a securit˘atˆıi sistemului . . . . 32
4 Concluzii 35
A Coduri Huffman 39
B Construct ¸ia unei tabele de parsare 41
C Exemplu de aplicare a cript˘arii/decript˘arii 51
3
4 CUPRINS
Capitolul 1
Introducere
1.1 Prezentarea lucr˘arii
Aceast˘a lucrare trateaz˘a ascunderea informat ¸iei folosind gramatici de tip
LR(k). De¸si criptosistemul prezentat poate fi folosit ¸si pentru criptare efi-
cient˘a, am preferat s˘a p˘astrez ˆıncadrarea init ¸ial˘ a dat˘a ˆın [Way96], deoarece
mi se pare mai potrivit˘a.
Deoarece ˆın descrierea criptosistemului folosesc elemente din teoria lim-
bajelor formale - gramatici de tip LR(k) - ¸si din teoria codurilor - coduri
Huffman -, am ales s˘a prezint aceste elemnte ˆın cadrul ˆın care sunt definite,
prezentˆand doar rezultatele ¸si algoritmii care i-am folosit ˆın aplicat ¸ia demon-
strativ˘a. De aceea capitolul II, intitulat Preliminarii teoretice descrie
aceste elemente pe care se bazeaz˘a criptosistemul.
Capitolul III este destinat criptosistemului. Prezint mai ˆıntˆai un cripto-
sistem simplu, cu cˆateva inconveniente, apoi ar˘at cum se poate extinde astfel
ˆıncˆ at s˘a fie eliminate acele inconveniente.
ˆ
In finalul capitolului, dau ni¸ste
rezultate teoretice privind securitatea sitemului.
ˆ
In capitolul IV fac descrierea aplicat ¸iei, indicˆand algoritmii folosit ¸i, pre-
cum si modul de utilizare al aplicat ¸iei.
ˆ
In sfˆar¸sit, ˆın capitolul V prezint cˆateva concluzii asupra criptosistemului,
precum ¸si metode de ˆımbun˘at˘ at ¸ire ¸si diversificare.
Dar, mai ˆıntˆ ai, s˘a trecemˆın revistˆa cateva metode de ascundere a informat ¸iei
utilizate de-a lungul timpului.
1.2 Scurt˘a istorie a steganografiei
Cuvˆantul steganografie provine de la grecescul steganos care ˆınseammn˘a
ascuns (secret) ¸si graphein care ˆınseamn˘ a reprezentare grafic˘a (scriere)¸si,
5
6 CAPITOLUL 1. INTRODUCERE
tradus astfel, steganografia inseamn˘a scriere ascuns˘a, ¸si acesta este sensul
folosit ˆın ziua de azi, adic˘a scriere care nu este vizibil˘a unui observator oare-
care. De exemplu, scrierea de c˘atre copii a mesajelor cu ”cerneal˘a simpatic˘a”
este un exemplu de steganografie deoarece scrierea este ascuns˘a ˆın sensul c˘a
nu poate fi citit˘a decˆat de cineva care ¸stie s˘a o caute.
Dar sub aceast˘a denumire, se g˘ase¸ste o gam˘a larg˘a de metode secrete de a
comunica. Inafar˘a de cerneala invizibil˘a, mai sunt micropuncte (folosite in al
II-lea r˘azboi mondial), rearanjar˘ari ale caracterelor (altele decˆat permut˘ arile
¸si substitut ¸iile folosite ˆın criptografie), semn˘aturi digitale, canale ascunse,
cominicat ¸ii spread-spectrum (bazate pe ˆımpr˘ a¸stierea semnalului).
,,Staganografia este arta ¸si ¸stiint ¸a comunic˘arii ˆıntr-un fel ˆın care se as-
cunde existent ¸a comunic˘arii.
ˆ
In contrast cu criptografia, ˆın care inamicului
ˆıi este permis s˘a detecteze, intercepteze ¸si s˘a modifice mesaje, f˘ar˘a a putea
ˆınc˘ alca anumite premize de securitate garantate de un anumit criptosistem,
scopul steganografiei este de a ascunde mesaje ˆın alte mesaje inofensive astfel
ˆıncˆ at s˘a nu-i permit˘a inamicului nici m˘acar s˘a detecteze existent ¸a unui mesaj
ascuns.” (Markus Kuhn)[SH]
Unul dintre primele documente care atest˘a folosirea procedeelor steganografice
se g˘ase¸steˆın Istoriile lui Herodot. In Grecia antic˘ a, textul se scria pe pl˘acut ¸e
acoperite cu cear˘a.
ˆ
In una din povestiri, Demeratus voia s˘a anunt ¸e Sparta de
intent ¸iile lui Xerxes (ˆımp˘ aratul Persiei) de a invada Grecia. Pentru a evita
capturarea mesajului, el a r˘azuit ceara de pe pl˘acut ¸e ¸si a scris mesajul direct
pe lemn, apoi a acoperit din nou pl˘acut ¸ele cu cear˘a. Astfel, t˘ablit ¸ele p˘areau
goale ¸si nefolosite ¸si au trecut de inspect ¸ia santinelelor f˘ar˘ a ˆıntreb˘ ari.
Alt˘a metod˘a ingenioas˘a constaˆın urm˘atoarele: mesagerul era ras ˆın cap ¸si
se scria mesajul pe pielea capului sau. Astfel, mesajul r˘amˆanea de nedetectat
pˆan˘ a cˆand mesagerul era din nou ras ˆın cap.
Vechii chinezi, foloseau de asemenea o metod˘a ce implica ceara: mesajul
era scris pe m˘atase fin˘a, care era apoi introdus˘aˆıntr-o bil˘a, acoperit˘a cu cear˘a
¸si ˆınghit ¸it˘a de mesager.
Cerneala invizibil˘a (simpatic˘a) a fost folosit˘a timp de secole de majori-
tatea civilizat ¸iilor fiind folosit˘a cu succces ¸si ˆın al II-lea r˘azboi mondial.
Surse obi¸snuite de cerneal˘a invizibil˘ a sunt laptele, ot ¸etul, sucurile de fructe ¸si
urina. Toate acestea se ˆınnegresc la c˘aldur˘a. Metodele moderne care implic˘a
cerneal˘a invizibil˘a sunt mult mai complexe ¸si pentru obt ¸inerea mesajului sunt
necesare procedee asem˘an˘ atoare develop˘ arii.
Odat˘a cu tehnologia informat ¸iei ¸si informat ¸ia digital˘a, steganografia ¸si-a
g˘asit locul ˆın semn˘aturi digitale (care presupun ascunderea informat ¸iei ˆın
date, f˘ar˘a a perturba prea mult ˆıntelesul acestora).
Ascunderea informat ¸iei se poate ˆın imagini (pe bitul cel mai put ¸in semni-
ficativ al culorilor, la imagini arhivate, etc.), ˆın arhive, ˆın fi¸siere executabile
1.2. SCURT
˘
A ISTORIE A STEGANOGRAFIEI 7
(asem˘an˘ ator viru¸silor).
ˆ
In al II-lea razboi mondial, germanii au descoperit tehnologia Mikrat
(micro-punct)[MD] care const˘a ˆın proiectarea unei imagini ˆıntr-o alt˘a imag-
ine, mult mic¸sorat˘ a de m˘arimea unui punct tipografic. Referindu-se la aceast˘a
tehnic˘a, directorul FBI J. Edgar Hoover o denumea ”capodopera spionajului
inamic”.
Comunicarea spread-spectrum (prinˆımpr˘ a¸stierea semnalului) [SS]presupune
existent ¸a unei game largi de canale de comunicat ¸ie (de exemplu band˘a ra-
dio) ¸si const˘a de exemplu ˆın transmiterea de pachete mici aleator pe diferite
canale, sincronizarea f˘acˆ andu-se cu ajutorul unui generator de numere pseudo-
aleatoare.
O alt˘a metod˘a, care e refolosit˘a sub diverse forme ¸si ast˘azi este sistemul
de criptare folosit de cardinalul Richelieu care consta ˆıntr-un ¸sablon care se
a¸seza peste foaia de hˆartie, apoi se scrie ˆın g˘aurile ¸sablonului mesajul, dup˘a
care se ˆındep˘arteaz˘ a ¸sablonul ¸si se completeaz˘a foaia astfel ˆıncˆ at s˘a rezulte
un mesaj inofensiv.
Putem include aici ¸si mesajele care ascund dup˘a o anumit˘ a regul˘a litere
ˆın cuvintele unui text, spre exemplu ˆın prima sau a doua liter˘a din fiecare
cuvˆant. Mesajul din exemplul urm˘ator a fost trimis de un spion german in
al II-lea r˘azboi mondial:
Apparently neutral’s protest is thoroughly discounted and ig-
nored. Isman hard hit. Blockade issue affects pretext for embargo
on by products, ejecting suets and vegetable oils.
Dac˘a select˘am a dou˘a liter˘a din fiecare cuvˆant, mesajul obt ¸inut este
Pershing sails from NY June 1.
De asemenea, se pot ascunde mesaje si prin a¸sezareaˆın pagin˘a sau spat ¸ierea
unui text. De exemplu, s˘a zicem c˘a avem un mesaj M1 ˆın care dorim s˘a
evident ¸iem ni¸ste cuvinte. pentru aceasta creem mesajul M2 care este M1 ˆın
care am marit put ¸in spat ¸iul din fat ¸a cuvintelor ce trebuie evident ¸iate ¸si l-am
mic¸sorat pe cel de dupa la fel de put ¸in. In acest fel, prin suprapunerea celor
2 texte, textul rezultat va avea ˆıngro¸sate acele cuvinte.
Exemplu: Fie mesajele:
Cerneala invizibil˘ a (simpatic˘a) a fost folosit˘a timp de
secole de majoritatea civilizat ¸iilor fiind folosit˘a cu succces ¸si ˆın
al doilea r˘azboi mondial.
¸si
8 CAPITOLUL 1. INTRODUCERE
Cerneala invizibil˘a (simpatic˘a) a fost folosit˘a timp de
secole de majoritatea civilizat ¸iilor fiind folosit˘a cu succces ¸si ˆın
al doilea r˘azboi mondial.
Prin suprapunerea celor dou˘a mesaje se obt ¸ine urm˘atorul mesaj:
Cerneala invizibil˘ a (simpatic˘a) a fost folosit˘a timp de
secole de majoritatea civilizat ¸iilor fiind folosit˘a cu succces ¸si ˆın
al doilea r˘azboi mondial.
Cerneala invizibil˘a (simpatic˘a) a fost folosit˘a timp de
secole de majoritatea civilizat ¸iilor fiind folosit˘a cu succces ¸si ˆın
al doilea r˘azboi mondial.
ˆın care dac˘a citim literele ˆıngro¸sate ˆın ordine obt ¸inem numele Claudia.
Capitolul 2
Preliminarii teoretice
ˆ
In acest capitol voi defini cˆateva din elementele matematice care stau la
baza sistemului de criptare propus. Ele fac parte fie din teoria limbajelor
formale (gramaticile de tip LR(k)), fie din teoria codurilor ¸si a compresiei
de date (arbori Huffman ¸si coduri Huffman). Le voi prezenta pe amˆandoua
acordˆandu-le important ¸˘a egal˘a ˆın cele dou˘a sect ¸iuni ce urmeaz˘a.
2.1 Gramatici
Definit ¸ia 1.1 (V

):
Dat˘a fiind o mult ¸ime V numit˘a alfabet, se define¸ste V

ca fiind monoidul
liber generat de V cu operat ¸ia de concatenare. Elementele lui V

se numesc
cuvinte peste alfabetul V ¸si sunt alatur˘ari oarecare de simboluri din V .
Pentru w ∈ V

, prin [w[ ˆıntelegem lungimea cuv˘antului w (num˘arul de sim-
boluri care ˆıl formeaz˘a.
Elementul neutru fat ¸˘a de operat ¸ia de concatenare se noteaz˘a cu λ ¸si este
cuv˘antul vid.
Notat ¸ia αβ, unde α, β ∈ V

ˆınseamn˘a ¸sirul obt ¸inut prin concatenarea celor
dou˘a ¸siruri.
2.1.1 Gramatici independente de context
Definit ¸ia 1.2 (Gramatic˘a independent˘a de context):
O gramatic˘a independent˘a de context este un cvadruplu (N, Σ, S, P), unde:
N este o mult ¸ime finit˘a de simboluri, numite simboluri neterminale (vari-
abile)
9
10 CAPITOLUL 2. PRELIMINARII TEORETICE
Σ este o mult ¸ime finit˘a de simboluri numite simboluri terminale (alfabet)
S este un simbol din N, numit simbolul de start
P este o mult ¸ime de perechi (A, α), unde A ∈ N ¸si α ∈ (N ∪ Σ)

. O astfel
de pereche se nume¸ste product ¸ie ¸si se noteaz˘a cu A −→ α.
Pe parcursul acestei lucr˘ari, voi folosi litere mici de la ˆınceputul alfa-
betului (a, b, c, ...) pentru a nota elementele din Σ (terminalele) ¸si litere mari
(A, B, C, S, ...) pentru elementele din N (variabilele). Pentru elemente din
(N ∪ Σ)

voi folosi litere grece¸sti mici (α, β, γ) iar pentru elemente din Σ

(cuvintele) voi folosi litere mici de la sfar¸situl alfabetului (w, x, y, ...).
Definit ¸ia 1.3 (derivare):
Fie G = (N, Σ, S, P) o gramatic˘a independent˘a de context ¸si α, β ∈ (N∪Σ)

.
Spunem c˘a α deriveaz˘a ˆın β (¸si not˘am cu α=⇒β) dac˘a ∃A ∈ N, α
1
, α
2
, β
1

(N ∪ Σ)

a.ˆı. α = α
1

2
, β = α
1
β
1
α
2
¸si A −→ β
1
∈ P
Not˘am cu

=⇒ˆınchiderea reflexiv˘a ¸si tranzitiv˘a a relat ¸iei =⇒(corespunzˆand
deriv˘arii ˆın mai multi pa¸si) ¸si cu
+
=⇒ˆınchiderea tranzitiv˘a a relat ¸iei =⇒(core-
spunzˆand deriv˘arii ˆın cel put ¸in un pas).
Pentru a fi mai explicit ¸i, α

=⇒β dac˘a exist˘a deriv˘arile
α=⇒α
1
=⇒α
2
... =⇒α
n
=⇒β
cu n ≥ 0 iar la α
+
=⇒β, diferent ¸a este c˘a n ≥ 1.
Definit ¸ia 1.4 (S¸ir generat de o gramatic˘a):
Fie G = (N, Σ, S, P) o gramatic˘a independent˘a de context ¸si w ∈ Σ

. Spunem
c˘a gramatica G genereaz˘a ¸sirul w dac˘a exist˘a derivarea S

=⇒w
Definit ¸ia 1.5 (Arbore asociat unei deriv˘ari):
Fiecarei product ¸ii A −→ w
0
X
1
w
1
X
2
...X
n
w
n
, A ∈ N, w
i
∈ Σ

, i = 0, n ¸si
X
j
∈ N, j = 1, n i se poate asocia un arbore av˘and r˘ad˘acina etichetat˘a cu A
¸si frunzele cu w
i
, i = 0, n respectiv X
j
, j = 1, n.
ˆ
In acela¸si fel asociem prin extensie fic˘arei deriv˘ari S

=⇒w un arbore de
derivare cu r˘ad˘acina etichetat˘a cu S, nodurile etichetate cu neterminale
¸si frunzele etichetate cu ¸siruri de terminale astfel ˆıncˆat subarborele format
dintr-un nod ¸si descendent ¸ii s˘ai direct ¸i s˘a fie arborele product ¸iei care s-a
folosit la derivare.
2.1. GRAMATICI 11
Definit ¸ia 1.6 (Limbaj generat de o gramatic˘a):
Numim limbaj generat de o gramatica G = (N, Σ, S, P) (¸si not˘am L(G)
mult ¸imea tuturor ¸sirurilor care pot fi generate de gramatic˘a, adic˘a
L(G) = ¦w ∈ Σ

[S

=⇒w¦
Definit ¸ia 1.7 (Gramatic˘a ambigu˘a):
Fie G = (N, Σ, S, P) o gramatic˘a independent˘a de context. Spunem c˘a G este
ambigu˘a dac˘a ∃w ∈ L(G) pentru care exist˘a doi arbori de derivare distinct ¸i.
ˆ
In caz contrar, spunem c˘a gramatica este neambigu˘a.
Deoarece pentru sistemul de criptare propus ne intereseaz˘a ca fiecare ¸sir
generat de gramatic˘a s˘a aib˘a un unic arbore de derivare, c˘at si ca descoperirea
acelui unic arbore s˘a se fac˘a ˆıntr-un timp rezionabil de mic.
Gramaticile LR(k) ofera acest lucru, adic˘a condit ¸ia de neambiguitate ¸si
gasirea arborelui de derivare in ordin de timp liniar fat ¸˘ a de m˘arimea ¸sirului
de intrare.
2.1.2 Gramatici de tip LR(k)
Mai ˆıntˆai voi da ˆınc˘a cˆateva definit ¸ii preg˘atitoare:
Definit ¸ia 1.8 (derivare dreapt˘a):
Fie G = (N, Σ, S, P) o gramatic˘a independent˘a de context ¸si α = α
1
Aw ∈
(N ∪ Σ), unde A ∈ N ¸si w ∈ Σ

. Spunem c˘a α=⇒
d.d.
β dac˘a ¸si numai dac˘a
∃A −→ β
1
∈ P a.ˆı. β = α
1
β
1
w (i.e. β a fost obt ¸inut din α prin derivarea
celui mai din dreapta neterminal).
Not˘am cu

=⇒
d.d.
¸si cu
+
=⇒
d.d.
ˆınchiderile corespunz˘atoare ale relatiei =⇒
d.d
.
Se poate observa c˘a ¸sirul de deriv˘ari drepte prin care este obt ¸inut un
cuvˆant este dat de parcurgerea in postordine a arborelui de derivare asociat
cuvˆantului.
Definit ¸ia 1.9 (First
k
):
Fie G = (N, Σ, S, P) o gramatic˘a independent˘a de context ¸si α ∈ (N ∪ Σ)

.
Atunci:
First
k
(α) = ¦w ∈ Σ

[[w[ < k ¸si α

=⇒w sau [w[ = k ¸si α

=⇒wx¦
Din definit ¸ie se poate observa c˘a First
0
(α) = λ, ∀α ∈ (N ∪ Σ)

.
12 CAPITOLUL 2. PRELIMINARII TEORETICE
Vom mai avea nevoie de urm˘atoarea definit ¸ie:
Definit ¸ia 1.10 (Σ
∗k
):
Fie Σ un alfabet. Atunci Σ
∗k
= ¦w ∈ Σ

[[w[ ≤ k¦
D˘am acum definit ¸ia gramaticilor de tip LR(k):
Definit ¸ia 1.11 (Gramatici de tip LR(k)):
Fie G = (N, Σ, S, P) o gramatic˘a independent˘a de context ˆın care sim-
bolul de start nu apare ˆın membrul drept al niciunei product ¸ii. Spunem
c˘a G este gramatic˘a de tip LR(k), k ≥ 0, dac˘a oricare ar fi deriv˘arile
drepte S

=⇒
d.d.
αAw=⇒
d.d.
αβw ¸si S

=⇒
d.d.
γBx =⇒
d.d.
αβy astfel ˆıncˆat First
k
(w) =
First
k
(y), atunci α = γ, A = B ¸si x = y.
Se observ˘a c˘a din γBx =⇒
d.d.
αβy rezult˘a c˘a exist˘a B −→ δ ¸si γδx = αβy,
adic˘a δ = β.
Intuitiv, dac˘a αβw ¸si αβy sunt obt ¸inute prin deriv˘ari drepte ¸si avem
FIRST
k
(w) = FIRST
k
(y) ¸si dac˘a A −→
d.d.
β este ultima product ¸ie folosit˘a
ˆın obt ¸inerea lui αβw prin deriv˘ari drepte, atunci product ¸ia A −→
d.d.
β tre-
buie folosit˘a ¸si pentru a reduce αβw (la αAy) la parsare. Deoarece A de-
riv˘a ˆın β independent de w, condit ¸ia din definit ¸ie spune c˘a exist˘a suficient˘ a
informat ¸ie ˆın FIRST
k
(w) pentru a determina c˘a αβ a fost derivat din αA.
Cˆand pars˘am, nu poate exista confuzie despre cum ar trebui s˘a reducem o
product ¸ie obt ¸inut˘ a prin deriv˘ari drepte.
Condit ¸ia ca S s˘a nu apar˘a ˆın membrul drept al unei product ¸ii a fost pus˘a
pentru a putea determina ˆın timpul pars˘arii dac˘a accept˘am ¸sirul de intrare
cˆand obt ¸inem un S (ˆın urma unei reduceri).
ˆ
In general, gramaticile independente de context nu cont ¸in suficient˘ a informat ¸ie
ˆın FIRST(k) pentru a determina din ce a fost derivat ¸sirul pe care ˆıl ex-
amin˘am. Mai mult, aceste gramatici pot fi ambigue, pe cˆand gramaticile
LR(k) nu.
Pentru a ar˘ata c˘a restrict ¸ia ca simbolul de start nu apare ˆın dreapta nici
unei product ¸ii nu restrˆange din generalitate, d˘am urm˘atoarea definit ¸ie:
Definit ¸ia 1.12 (Extensia unei gramatici independente de context):
Fie G = (N, Σ, P, S) o gramatic˘a independent˘a de context. Extensia gra-
maticii G se define¸ste ca fiind
G

= (N ∪ ¦S

, Σ ∪ ¦$¦, S

, P ∪ ¦S

S$¦¦
unde S

, $ nu apart ¸in mult ¸imii N ∪ Σ.
2.1. GRAMATICI 13
Gramatica extins˘a G

este aproape G, avˆ and ˆın plus o nou˘a product ¸ie
de start S

S$. Presupunem c˘a S

S$ este product ¸ia cu indexul 0 ˆın G

¸si
c˘a celelalte product ¸ii ale lui G sunt numerotate 1, 2, ..., p. Am ad˘augat o
nou˘a product ¸ie de start pentru ca, atunci cˆand se cere o act ¸iune de reducere
folosind o product ¸ia cu indexul 0, s˘a putem interpreta aceast˘a ”reducere” ca
un semnal de acceptare.
Este evident c˘a w ∈ L(G) ⇐⇒ w$ ∈ L(G

) Putem, deci, presupune c˘a
ˆıntr-o gramatic˘a simbolul de start nu apare ˆın membrul drept al nici unei
product ¸ii, f˘ar˘a ca aceasta s˘a ne restrˆang˘ a generalitatea.
Exemple:
Fie gramatica G:
S −→ AB
A −→ a
B −→ CD[aE
C −→ ab
D −→ bb
E −→ bba.
G nu este LR(1), deoarece avem deriv˘arile (ˆın gramatica extins˘a):
S

d.d.
S =⇒
d.d.
AB=⇒
d.d.
ACD=⇒
d.d.
ACbb =⇒
d.d.
Aabbb ¸si
S

d.d.
S =⇒
d.d.
AB=⇒
d.d.
AaE =⇒
d.d.
Aabba
Dac˘a lu˘am ¸sirul Aabw nu putem determina dac˘a el a fost obt ¸inut din ACw
sau nu uitˆandu-ne la primul simbol din w. Totu¸si, G este LR(2).
Fie gramatica G:
S −→ Ab[Bc
A −→ Aa[λ
B −→ Ba[λ
G nu este LR(k) oricare ar fi k, deoarece avem urm˘atoarele deriv˘ari drepte:
S

d.d.
S

=⇒
d.d.
Aa
k
b =⇒
d.d.
a
k
b
S

d.d.
S

=⇒
d.d.
Ba
k
c =⇒
d.d.
a
k
c
Aceste deriv˘ari respect˘a ipotezele definit ¸iei unei gramatici LR(k), cu α = λ,
β = λ, w = a
k
b, γ = λ ¸si y = a
k
c. Totu¸si, avem A = B, deci G nu este
LR(k)∀k ∈ IN
Totu¸si, gramatica de mai sus nu este ambigu˘a, ba chiar genereaz˘a acela¸si
limbaj cu urm˘atoarea gramatic˘a LR(0):
S −→ C[D
C −→ aC[b
D −→ aD[c
Definit ¸ia 1.13 (Analiz˘a sintactic˘a):
Fie G = (N, Σ, S, P) o gramatic˘a independent˘a de context ¸si w ∈ Σ

. A
14 CAPITOLUL 2. PRELIMINARII TEORETICE
analiza sintactic w ˆınseamn˘a a ar˘ata algoritmic dac˘a w ∈ L(G). E de ˆınteles
c˘a, ˆın acest caz se obt ¸in ¸si deriv˘arile prin care este obt ¸inut w.
Un astfel de algoritm care face analizaza sintactic˘a se mai nume¸ste ¸si parser.
2.1.3 Algoritm de parsare pentru gramatici de tip LR(k)
Pentru fiecare gramatic˘a LR(k) G = (N, Σ, S, P) poate fi construit un
parser determinist. Acest parser va avea o mult ¸ime de st˘ari ¸si dou˘a tabele
de parsare, numite actiune ¸si goto. Tabela actiune ne va spune la fiecare
pas dac˘a trebuie s˘a facem o act ¸iune deplasare (adic˘a s˘a avans˘am ˆın ¸sirul de
intrare) sau una de reducere, iar ˆın cazul unei act ¸iuni de reducere, ne spune
ce product ¸ie s-a folosit pentru derivare.
Tabela actiune este definit˘a pe mult ¸imea st˘arilor ¸si Σ
∗k
¸si pentru o stare
s ¸si un cuvˆant u poate avea valorile deplasare care spune c˘a se avanseaz˘a ˆın
¸sirul de parsat, eroare, acceptare sau un numar j care desemneaz˘a product ¸ia
care se reduce.
Tabela goto este definit˘a pe mult ¸imea st˘arilor ¸si Σ ¸si pentru o stare s ¸si
o liter˘a a poate avea valoarea eroare sau un num˘ ar i desemnˆand starea ˆın
care se va trece din starea s la ˆıntˆalnirea literei a.
Aceste dou˘a tabele definite, algoritmul de parsare este relativ simplu. El
este asociat unei gramatici extinse. Algoritmul lucreaz˘a cu triplete de forma
(S, W, π), unde S este stiva de lucru ce cont ¸ine st˘arile ¸si literele/neterminalele
care au produs aceste st˘ari, W este cuvˆantul care a r˘amas de parsat ¸si π stiva
product ¸iilor care au fost reduse (stiva de ie¸sire). La sfˆar¸situl algoritmului,
dac˘a se termin˘a cu acceptarea cuvˆantului, ¸sirul din buffer-ul de ie¸sire este
derivarea dreapt˘a a cuvˆantului de intrare relativ la gramatica init ¸ial˘ a (ig-
norˆand simbolul $).
Algoritmul 1.1: parsare(z, G, actiune, goto, π) Algoritmul testeaz˘a apartenent ¸a
cuvˆantului z la limbajul generat de gramatica G ¸si determin˘a o derivare
dreapt˘a a acestuia ˆın caz afirmativ.
Intrare: z = a
1
. . . a
n
cuvˆant, G gramatic˘a LR(k), actiune ¸si goto tabelele
de parsare associate lui G.
Iesire: dac˘a avem acceptare procedura returneaza adevarat ¸si π este derivarea
dreapt˘a a lui z.
Algoritmul actioneaz˘a ca un automat, folosind dou˘a stive, ˆın felul urm˘ator
Configurat ¸ia init ¸ial˘ a (0, z$, λ)
2.1. GRAMATICI 15
pentru o configurat ¸ie (sS, aW, π). fie u, format din primele (cel mult)k
simboluri ale lui aW.
(sS, aW, π) ¬ (s

asS, W, π)
dac˘a actiune(s, u) = deplasare ¸si s

= goto(s, a).
(sS, aW, π) ¬ (tAs

S

, aW, iπ)
dac˘a actiune(s, u) = i ¸si product ¸ia i este A −→ α iar s

S

e
obtinut din sS prin scoaterea a 2 [ α [ simboluri ¸si t = goto(s

, a)
(sS, aW, π) ¬ acceptare
dac˘a actiune(s, u) = acceptare
(sS, aW, π) ¬ eroare
dac˘a actiune(s, u) = eroare
Cel mai simplu mod de a ar˘ata cum funct ¸ioneaz˘a un parser LR(k) este
printr-un exemplu, ˆın care avem deja construite tabelele actiune ¸si goto.
Procedeul de construire al acestor tabele ˆıl vom explica mai jos.
Gramatica care genereaz˘a limbajul expresiilor aritmetice simple cu nu-
mere naturale separate de ’;’este LR(1). Definit ¸ia gramaticii, ¸si tabelele,
actiune ¸si goto, sunt destul de elaborate ¸si le-am inclus ˆın anexa 2.1.3.
Algoritmul procedeaz˘a astfel: Extrage cˆate k litere din ¸sirul de intrare
(fie u acest ¸sir) ¸si aplic˘a funct ¸ia actiune perechii (s, u), unde s este starea
din cap˘atul stivei st˘arilor. Dac˘a rezutatul este eroare, atunci algoritmul se
opre¸ste. Dac˘a rezultatul este i, iar regula i este A −→ α atunci se scot 2 [ α [
simboluri din stiv˘a st˘arilor. Aceast˘a regul˘a se aplic˘a pˆan˘ a cˆand nu mai avem
reduceri de f˘acut.
S¸i pentru reducere ¸si pentru deplasare, se aplic˘a funct ¸ia goto primului
simbol din u (fie el u
1
) ¸si primei st˘ari din stiv˘a, apoi u
1
¸si starea obt ¸inut˘a se
adaug˘a stivei.
Pentru gramatica dat˘a ca exemplu ¸si ¸sirul de intrare 1 + 0$, algoritmul
de parsare va funct ¸iona astfel:
16 CAPITOLUL 2. PRELIMINARII TEORETICE
Starea curent˘a a automatului Se reduce
(s
0
, 1 + 0$, λ)
¬ (s
10
1s
0
, +0$, λ)
¬ (s
11
C
1
s
0
, +0$, P
15
) C
1
−→ 1
¬ (s
51
N
0
s
11
C
1
s
0
, +0$, P
12
P
15
) N
0
−→ λ
¬ (s
12
Ns
0
, +0$, P
9
P
12
P
15
) N −→ C
1
N
0
¬ (s
14
Fs
0
, +0$, P
8
P
9
P
12
P
15
) F −→ N
¬ (s
15
Ts
0
, +0$, P
6
P
8
P
9
P
12
P
15
) T −→ F
¬ (s
16
Es
0
, +0$, P
4
P
6
P
8
P
9
P
12
P
15
) E −→ T
¬ (s
20
+s
16
Es
0
, 0$, P
4
P
6
P
8
P
9
P
12
P
15
)
¬ (s
1
0s
20
+ s
16
Es
0
, $, P
4
P
6
P
8
P
9
P
12
P
15
)
¬ (s
12
Ns
20
+ s
16
Es
0
, $, P
10
P
4
P
6
P
8
P
9
P
12
P
15
) N −→ 0
¬ (s
14
Fs
20
+ s
16
Es
0
, $, P
8
P
10
P
4
P
6
P
8
P
9
P
12
P
15
) F −→ N
¬ (s
21
Ts
20
+ s
16
Es
0
, $, P
6
P
8
P
10
P
4
P
6
P
8
P
9
P
12
P
15
) T −→ F
¬ (s
16
Es
0
, $, P
3
P
6
P
8
P
10
P
4
P
6
P
8
P
9
P
12
P
15
) E −→ E + T
¬ (s
17
S
1
s
0
, $, P
2
P
3
P
6
P
8
P
10
P
4
P
6
P
8
P
9
P
12
P
15
) S
1
−→ E
¬ (acceptare, P
2
P
3
P
6
P
8
P
10
P
4
P
6
P
8
P
9
P
12
P
15
)
Ultima component˘a a unei st˘ari a parserului reprezint˘ a ¸sirul de deriv˘ari
drepte necesar pentru a obt ¸ine din ¸sirul de simboluri de pe stiv˘a ¸sirul de
intrare parsat. Astfel, la sfˆarsit avem pe stiv˘a simbolul E, din care obt ¸inem
¸sirul init ¸ial de intrare (a+a∗a) prin aplicarea, pe rˆand, a regulilor 1,3,6,4,6,2,4
¸si 6 ˆın derivare dreapt˘a.
Construct ¸ia tabelelor actiune ¸si goto
ˆ
In aceast˘a sect ¸iune voi ar˘ata cum se pot construi cele dou˘a tabele care
stau la baza parserului LR(k). Pentru aceasta, sunt necesare cˆateva definit ¸ii:
Fie G = (N, Σ, P, S) o gramatic˘a independent˘a de context.
Definit ¸ia 1.14 (Prefix viabil):
Fie S

=⇒
d.d.
αAw=⇒
d.d
αβw (rezult˘a w ∈ Σ

o derivare dreapt˘a ˆın G. Spunem
c˘a ¸sirul γ este un prefix viabil al lui αβw dac˘a γ este un prefix al lui αβ.
Definit ¸ia 1.15 (Configurat ¸ie LR(k)):
Fie G

” extensia lui G. Numim configurat ¸ie LR(k) o regul˘a de forma
(A −→ α.β; u), unde A −→ αβ ∈ P ¸si u ∈ Σ
∗k
.
u se nume¸ste simbol lookahead
Definit ¸ia 1.16 (Configurat ¸ie LR(k) valid˘a):
Spunem c˘a configurat ¸ia LR(k) (A −→ α.β; u) este valid˘a pentru prefixul via-
2.1. GRAMATICI 17
bil αβ, dac˘a exist˘a o derivare S

=⇒
d.d.
αAw=⇒
d.d.
αβγw astfel ˆıncˆat u = FIRST
k
(w$).
Definit ¸ia 1.17 (
ˆ
Inchiderea unei mult ¸imi de configurat ¸ii LR(k)):
Definim ˆınchiderea unei mult ¸imi I de configurt ¸ii LR(k) ca fiind multimea J
rezultat˘a ˆın urma aplic˘arii urm˘atorului algoritm.
Algoritmul 1.2: Inchidere
ˆ
Inchiderea unei mult ¸imi de configurat ¸ii LR(k)
Intrare: I - mult ¸ime de configurat ¸ii LR(k)
Iesire: J - inchiderea mult ¸imii I
J ←− I
repet˘a
pentru ∀A −→ α.Bβ; u ∈ J, B ∈ N
pentru ∀B −→ γ ∈ P
pentru ∀v ∈ First
k
(βu)
J ←− J ∪ ¦B −→ .γ; v¦
pˆan˘a cˆand nu se mai adug˘a configurat ¸ii noi
Urm˘atorul algoritm produce la ie¸sire mult ¸imea de configurat ¸ii ˆın care
se poate ajunge dintr-o mult ¸ime I init ¸ial˘a prin avansarea peste un termi-
nal/neterminal. Algoritmul fose¸ste procedura Inchidere.
Algoritmul 1.3: GOTO(I, X)
Intrare: I - mult ¸ime de configurat ¸ii LR(k), X ∈ N ∪ Σ
Iesire: J
J ←− ¦A −→ αX.β; u[A −→ α.Xβ; u ∈ I¦
J ←− Inchidere(I)
Iar acum, definim mult ¸imile canonice LR(k) asociate gramaticii extinse
G

” ca fiind ie¸sirea urm˘atorului algoritm.
Algoritmul 1.4: config(G

)
18 CAPITOLUL 2. PRELIMINARII TEORETICE
Intrare: I - mult ¸ime de configurat ¸ii LR(k), X ∈ N ∪ Σ
Iesire: C - mult ¸imea mult ¸imilor canonice
C ←− ¦inchidere(¦S

−→ .S; $¦)¦
repet˘a
pentru ∀I ∈ C
pentru ∀X ∈ N ∪ Σ
dac˘a GOTO(I, X) = Ø ¸si GOTO(I, X) ∈ C
C ←− C ∪ ¦GOTO(I, X)¦
pˆan˘a cˆand nu se mai adaug˘a noi mult ¸imi de configurat ¸ii
Acest algoritm produce o mult ¸ime de configurat ¸ii pe care o vom numerota:
C = ¦I
0
, I
1
, . . . , I
n
¦
unde I
0
corespundere ˆınchiderii mult ¸imii ¦S

−→ .S; $¦. La aceast˘a mult ¸ime
de configurat ¸ii asociem o mult ¸ime de st˘ari o¦/, ∞, . . . , `¦ ˆın care fiecare stare
s ∈ o i se asociaz˘a mut ¸imii de configurat ¸ii I
s
.
ˆ
Inainte de a ar˘ata algoritmul de construire a tabelelor actiune ¸si goto,
mai aven nevoi de o definitie:
Definit ¸ia 1.18 (Funct ¸ie FIRST f˘ar˘a λ):
Funct ¸ia FIRST f˘ar˘a λ (FFL
G
k
(α)) se define¸ste astfel:
(1) Dac˘a α nu ˆıncepe cu un neterminal, atunci FFL
k
(α) = FIRST
k
(α)
(2) Dac˘a α ˆıncepe cu un neterminal, atunci
FFL
k
(α) = ¦w [ w ∈ FIRST
k
(α) ¸si exist˘a o derivare α

=⇒
d.d.
β =⇒
d.d
wx, unde
β = Awx oricare ar fi A un neterminal¦
Definit ¸ia 1.19 (tabelele actiune ¸si goto):
Fie G o gramatic˘a independent˘a de context, fie o mult ¸imea de st˘ari ale lui
G determinat˘a ˆın urma algoritmului config(G

) ¸si l : P −→ IN funct ¸ia care
asociaz˘a numere product ¸iilor. Se definesc funct ¸iile a ¸si g astfel:
a : o Σ
∗k
−→ l(P) ∪ ¦deplasare, acceptare, eroare¦
a(k, u) =







l(A −→ α) dac˘a A −→ α.; u ∈ I
k
¸si A = S

deplasare dac˘a A −→ α.β; v ∈ I
k
, β = λ ¸si u ∈ FFL
k
(βv)
acceptare dac˘a S

−→ S.; $ ∈ I
k
eroare altfel
g : o Σ ∪ N −→ o ∪ ¦eroare¦
2.2. GRAMATICI PONDERATE 19
g(k, X) =

j dac˘a GOTO(I
k
, X) = I
j
eroare altfel
Dac˘a funct ¸iile a ¸si g sunt bine definite (nu au ie¸siri multiple pentru aceea¸si
intrare, definim tabelele actiune ¸si goto ca fiind graficele respectiv ale lui a ¸si
g.
Considerat ¸ii teoretice
Pentru demonstrat ¸iile acestor rezultate, vezi [AU72]
Teorema 1.1: O gramatic˘a G = (N, Σ, S, P) este LR(k) dac˘a ¸si numai
dac˘ a urm˘atoarea condit ¸ie este valabil˘a ∀u ∈ Σ
∗k
. Fie αβ un prefix viabil al lui
αβw, unde αβw a fost obt ¸inut prin deriv˘ari drepte (ˆın gramatica augmentat˘a
G

). Dac˘a product ¸ia cu punct [A −→ β., u] este valid˘a pentru αβ, atunci nu
exist˘a o alt˘a product ¸ie cu punct [A
1
−→ β
1

2
, v] care s˘a fie valid˘a pentru
αβ, cu u ∈ FFL
k

2
v).
Aceast˘a teorem˘a ne asigur˘a c˘a o gramatic˘a este LR(k) dac˘a ¸si numai dac˘a
tabelele actiune ¸si goto pot fi create.
Teorema 1.2: Algoritmul 1.4 determin˘a ˆın mod corect mult ¸imea mult ¸imilor
canonice.
Teorema 1.3: Algoritmul 1.1 determin˘a ˆın mod corect o derivare dreapt˘a
a ¸sirului de intrare, dac˘a exist˘a una, sau se termin˘a cu eroare altfel.
2.2 Gramatici ponderate
ˆ
In vorbirea curent˘a anumite sintagme apar mai des, ˆın funct ¸ie de specificul
textului, patricularit˘at ¸ile persoanei care ˆıl scrie precum ¸si alt ¸i factori. Pot fi
incluse aici ticurile verbale, precum ¸si exclamat ¸ii ¸si interjectii care apar mai
des (de exemplu ˆın cadrul unui meci de fotbal). De asemenea, ˆın descrierea
unei scene de lupt˘a s˘a zicem dintr-un film, este natural s˘a apar˘a mai des
numele personajul principal.
De aceea, atunci cˆand incerc˘am modelarea limbajului natural folosind
gramatici, este natural s˘a ˆıncerc˘ am s˘a model˘am ¸si acest aspect, folosind
probabilit˘ati (ponderi) asociate product ¸iilor care s˘a ajute la generarea de
text statistic asem˘an˘ ator cu realitatea.
20 CAPITOLUL 2. PRELIMINARII TEORETICE
Definit ¸ia 2.20 (gramatic˘a ponderat˘a):
Se nume¸ste gramatic˘a ponderat˘a asociat˘a unei gramatici independente de
context G = (N, Σ, S, P) perechea GP = (G, p), unde p : P −→ ', unde
p((A, α)) este ponderea asociata product ¸iei A −→ α ¸si influent ¸eaz˘a (prin
m˘arime) alegerea lui α in derivarea variabilei A.
Prin normalizare, se poate da o semnificat ¸ie de probabilitate ponderii
asociate unei product ¸ii.
Definit ¸ia 2.21 (gramatic˘a ponderat˘a normalizat˘a):
Se nume¸ste gramatic˘a ponderat˘a normalizat˘a asociat˘a lui G gramatica pon-
derat˘a GP = (G, p) avˆand urm˘atoarea restrict ¸ie:
∀A ∈ N,

(A,α,p
A,α
)∈P

p
A,α
= 1
.
ˆ
In acest caz, pA, α reprezint˘a probabilitatea ca la derivarea variabilei A s˘a
se foloseasca product ¸ia A −→ α.
2.3 Coduri Huffman
Codurile Huffman reprezint˘ a o tehnic˘a foarte utilizat˘a ¸si eficient˘ a ˆın com-
presia de date. Ideea de baz˘a este utilizarea unei modalit˘at ¸i optime pen-
tru reprezentarea fiec˘arui caracter sub forma unui ¸sir binar, ˆın funct ¸ie de
frecvent ¸a acestuia.
Voi expune mai ˆıntˆ ai cateva not ¸iuni preg˘atitoare din teoria codurilor (din
[Ata01]), apoi voi da algoritmii pentru crearea ¸si folosirea codurilor Huffman
(din [CLR90]).
2.3.1 Codificare
Definit ¸ia 3.22 (Codificare):
Fiind date mult ¸imile A (alfabetul surs˘a) ¸si B (alfabetul cod), o codificare
este o aplicat ¸ie injectiv˘a K : A −→ B

.
Elementele mult ¸imii K(A) ⊆ B

se numesc cuvinte-cod, iar K(A) se
nume¸ste cod.
Dac˘a B are numai dou˘a simboluri, codificarea K se nume¸s te binar˘a.
2.3. CODURI HUFFMAN 21
Definit ¸ia 3.23 (Codificare a mesajelor):
Pentru o codificare K : A −→ B

, se nume¸s te codificare a mesajelor
(textului) sursa aplicat ¸ia K

: A

−→ B

definita recursiv prin:
• K

(λ) = λ (λ este cuvˆantul vid);
• K

(aα) = K

(a)K

(α), ∀a ∈ A, α ∈ A

.
Definit ¸ia 3.24 (Codificare unic decodabil˘a):
Codificarea K este unic decodabil˘a dac˘a K

este injectiv˘a.
Definit ¸ia 3.25 (Codificare prefix (instantanee)):
1. O codificare K : A −→ B

se nume¸ste instantanee dac˘a K(A) are
proprietatea prefixului (dac˘a α, αβ ∈ K(B) atunci β = λ).
Observ˘am c˘a o codificare prefix este evident unic decodabil˘a (din definit ¸ie).
Avantajul codurilor instantanee este acela c˘a dac˘a se cunoa¸ste dinainte
frecvent ¸a simbolurilor surs˘a, atunci simbolurile surs˘a care apar mai frecvent
pot fi codificate cu cuvinte cod mai scurte, realiz˘andu-se astfel o codificare
mai eficient˘ a (cerint ¸˘a ˆın compresia de date). O astfel de codificare eficient˘a
este realizat˘a de codurile Huffman.
Coduri Huffman
Definit ¸ia 3.26 (Surs˘a de informat ¸ie):
O surs˘a de informat ¸ie este o pereche S = (A, P) unde
A = ¦a
1
, a
2
, . . . , a
n
¦ este alfabetul surs˘a (mult ¸ime ordonat˘a);
P = ¦P(a
1
), P(a
2
), . . . , P(a
n
)¦ este mult ¸imea ordonat˘a a probabilit˘at ¸ilor
elementelor lui A, deci
0 ≤ P(a
i
) ≤ 1, (1 ≤ i ≤ n);
n

i=1
P(a
i
) = 1.
22 CAPITOLUL 2. PRELIMINARII TEORETICE
Fie K o codificare a unei surse de informat ¸ie. Dac˘a se noteaz˘a cu d
i
=
[K(a
i
)[ ([α[ reprezint˘a lungimea secvent ¸ei α), se poate defini lungimea medie
L a cuvintelor cod prin
L =
n

i=1
d
i
P(a
i
).
O codificare este eficient˘a dac˘a lungimea medie a secvent ¸elor cod este cˆat
mai mic˘a.
Definit ¸ia 3.27 (Cod Huffman):
Fiind dat˘a o surs˘a de informat ¸ie S ¸si un alfabet cod, un cod Huffman este
un cod instantaneu avˆand lungimea medie minim˘a.
Lungimea medie minim˘a a unui cod Huffmann se noteaz˘a cu L
min
(S).
2.3.2 Construct ¸ia codurilor Huffman
Construct ¸ia codurilor Huffman binare se face pornind de la urm˘atoarea
observat ¸ie: O surs˘a cu dou˘a simboluri are evident un cod Huffman de cuvinte
cod ¦0, 1¦ (¸si deci L
min
(S) = 1).
O surs˘a cu trei simboluri ¦a
1
, a
2
, a
3
¦ n care a
1
are probabilitate maxim˘a,
poate fi redus˘a la cazul a dou˘a simboluri ¦a
1
, a
2,3
¦ unde P(a
2,3
) = P(a
2
) +
P(a
3
). Pentru aceste dou˘a simboluri o codificare Huffman este K(a
1
) =
0, K(a
2,3
) = 1. De asemenea pentru sursa cu simbolurile ¦a
2
, a
3
¦ o codificare
Huffman este K(a
2
) = 0, K(a
3
) = 1. Combinˆ and cele dou˘a rezultate obt ¸inem
un cod Huffman pentru sursa original˘a:
a
1
a
2
a
3
0 10 11
Bazat pe acest procedeu de compunere a unor codurilor Huffman mai
simple pentru a genera unul mai complex, se poate construi un algoritm
Greedy care construie¸ste o codificare Huffman.
Procedeul de construire.Se dau:
A - alfabetul
∀a ∈ A, P(c) probabilitatea/frecvent ¸a de aparit ¸ie a lui c
(A, P) reprezint˘a sursa de informat ¸ie.
Algoritmul 3.5: Huffman(A)
1 n ←− [A[
2 min-heap Q ←− A
2.3. CODURI HUFFMAN 23
3 pentru i ←− 1, n −1
3.1 aloc˘a nod z
3.2 extrage min Qˆın x
3.3 extrage min Qˆın y
3.4 z.fius ←− x
3.5 z.fiud ←− y
3.6 P(z) ←− P(x) + P(y)
3.7 Q ←− z
4 return min(Q).
Algoritmul construie¸ste arborele binar corespunz˘ator unei codific˘ari Huff-
man. Construct ¸ia este ”bottom-up”, avˆ and ca frunze simbolurile surs˘a. Co-
dul unui simbol a este dat de drumul de la r˘ad˘acina arborelui A p˘ana la
frunza ce ˆıl reprezint˘ a astfel:
Algoritmul 3.6: cod(a,A)
1 dac˘a a = root(A) return ””
2 p ←− parinte(a)
3 dac˘a a = fius(p) return cod(p, A) +

0

altfel return cod(p, A) +

1

Deoarece toate caracterele sunt frunze in arborele codific˘arii, codurile lor
nu pot fi prefixul codurilor altor caractere, deci avem de a face cu o codificare
prefix.
Prezent˘ am acum algoritmul care dintr-un ¸sir de ’bit ¸i’ extrage un caracter
incepˆand de la pozit ¸ia index ¸si avanseaz˘a index-ul ˆın mod corespunz˘ator:
Algoritmul 3.7: getNextChar(index,A)
1 a ←− root(A)
2 cˆat timp a nu e frunz˘a
2.1 dac˘a sir[index] =

0

atunci a ←− fius(a) altfel a ←− fiud(a)
2.2 index ←− index + 1
3 return c
24 CAPITOLUL 2. PRELIMINARII TEORETICE
Cu ace¸sti trei algoritmi se poate realiza compresia/decompresia unui text.
Scopul nostru este ˆıns˘a de a inversa procesul, folosind arborii Huffman pentru
a codifica product ¸iile corespunz˘atoare unei variabile, conform ponderilor lor,
¸si de a genera text pornind de la o secvent ¸˘a de bit ¸i c˘areia i se asociaz˘a o
product ¸ie din gramatic˘a.
Pentru demonstrat ¸iile privind corectitudinea algoritmilor, vezi [CLR90].
Capitolul 3
Sistemul de criptare
Vom defini un sistem de ascundere a informat ¸iei bazat pe gramatici de tip
LR(k), prin elementele sale componente: mult ¸imea textelor clare, mult ¸imea
textelor criptate, mult ¸imea cheilor, precum ¸si funct ¸iile de criptare/decriptare.
De asemenea, vom prezenta un rezultat teoretic privind sigurant ¸a sistemului.
3.1 Prezentarea sistemului
Voi prezenta mai ˆıntˆ ai un sistem simplu, care are limit˘ari ˆın privint ¸a
capacit˘atii de criptare. Apoi vom ar˘ata cum se poate extinde pentru a elimina
aceste limit˘ari.
Mai ˆıntˆ ai, asociem fiec˘arei variabile X dintr-o gramatic˘a ponderat˘a un
arbore Huffman avˆ and ca surs˘a de informat ¸ie product ¸iile care au ca membru
stˆang pe X ¸si probabilit˘at ¸ile asociate lor. Pentru variabilele care nu au decˆat
o product ¸ie, arborele Huffman asociat lor nu va avea decˆat un nod (adic˘a
r˘ad˘ acina) (¸si deci codificarea Huffman asociat˘a lor va fi vid˘a).
Cheile de criptare
ˆ
Incepem cu cheile de criptare pentru c˘a, a¸sa cum vom vedea, ele determin˘a
mult ¸imea textelor clare. Mult ¸imea cheilor de criptare / este:
/ = ¦(GP, H)¦
unde GP = (G, p)) gramatic˘a LR(k) ponderat˘a ¸si H mult ¸imea codific˘arilor
Huffman ata¸sate variabilelor lui GP.
Putem impune condit ¸ia ca gramatica GP s˘a nu cont ¸in˘ a product ¸ii inuti-
lizabile (care nu apar ˆın nici un arbore de derivare asociat lui G.
25
26 CAPITOLUL 3. SISTEMUL DE CRIPTARE
Textele criptate asociate unei chei
Mult ¸imea textelor criptate pentru o cheie k = (G, H) ∈ / este mult ¸imea
tuturor ¸sirurilor care se pot genera folosind gramatica G, adic˘a L(G)
Textele clare asociate unei chei
Dat˘a fiind o funct ¸ie cod : P −→ ¦0, 1¦

care d˘a codul asociat fiec˘arei
product ¸ii A −→ α corespunz˘ator codific˘arii lui A din H, ¸si Cod extensia ei
unic˘a la P

mult ¸imea textelor clare se define¸ste ca fiind:
( = ¦x ∈ ¦0, 1¦

[∃w ∈ L(G) obt ¸inut prin ¸sirul D = d
1
, d
2
. . . d
n
de
deriv˘ari drepte ¸si x = Cod(D)¦
Funct ¸ia de decriptare
Funct ¸ia de decriptare ˆıntoarce ¸sirul de bit ¸i ascuns ˆıntr-un cuvˆant w ∈
L(G) ¸si o putem defini astfel:
D
k
= Cod ◦ parse : L(G) −→ (
unde parse este funct ¸ia care pentru un cuv˘ant al limbajului d˘a unicul ¸sir de
deriv˘ari drepte asociat lui
Funct ¸ia de criptare
ˆ
Intrucˆ at gramatica este neambigu˘a, fiecare text clar este unic determinat
de un cuv˘ant al limbajului. Adic˘a, funct ¸ia D
k
este bijectiv˘a. Definim funct ¸ia
de criptare astfel:
E
k
= D
−1
k
: ( −→ L(G)
Observatii
Precum se poate vedea, am definit textele criptate ˆınaintea celor clare re-
spectiv funct ¸ia de decriptare ˆınaintea celei de criptare. Aceasta se datoreaz˘a
faptului c˘a atunci cˆand cript˘am folosind acest sistem efectu˘am practic un
procedeu asem˘an˘ ator decompresiei datelor comprimate prin metoda de com-
presie Huffman.
Marele dezavantaj al acestui sistem este acela c˘a nu poate s˘a cripteze
dacˆat acele ¸siruri care corspund unor cuvinteˆın limbajul generat de gramatic˘a
¸si doar dup˘a ce construim gramatica ¸si codific˘aril Huffman putem spune dac˘a
mesajul poate fi criptat cu ajutorul acestei chei.
Se impune deci g˘asirea unei metode de extindere a acestui sistem, care s˘a
elimine aceste dezavantaje (sau s˘a le minimizeze).
3.2. EXTINDEREA SISTEMULUI 27
3.2 Extinderea sistemului
O condit ¸ie esent ¸ial˘a care trebuie pus˘a este ca m˘acar o variabil˘a X dintr-o
gramatic˘a s˘a aib˘a dou˘a product ¸ii asociate. Dac˘a acest lucru se ˆıntˆampl˘ a,
putem fi siguri c˘a folosind aceast˘a gramatic˘a ˆın procesul de criptare, vom
putea cripta un mesaj avˆ and cel put ¸in un bit (acel ascuns c˘and se deriveaz˘a
variabila X. De asemenea, se impune condit ¸ia:
∀X ∈ N∃w ∈ Σ

, X

=⇒w (3.1)
Plec˘am de la presupunerea c˘a orice cuv˘ant din L(G) reprezint˘ a o entitate
de un anumit fel (de exemplu o expresie aritmetic˘a). Atunci, pentru a putea
genera cuvinte oric˘at de lungi, trebuie s˘a leg˘am cumva aceste cuvinte ˆıntre
ele (de exemplu prin cuvinte de leg˘atur˘a). De aceea o dat˘a fiind o gramatic˘a
G = (N, Σ, S, P), o extindem la urm˘atoarea gramatic˘a:
G
1
= (N ∪ ¦S
1
, X
leg
¦, Σ ∪ Σ
leg
, S
1
, P ∪ ¦S
1
−→ S
1
X
leg
S, S
1
−→ S¦ ∪ P
leg
)
ˆın care:
• S
1
este noul simbol de start
• X
leg
este variabila care reprezint˘a leg˘aturile ˆıntre entit˘at ¸i
• Σ
leg
este alfabetul utilizat ˆın product ¸iile lui X
leg
• P
leg
este mult ¸imea de product ¸ii asociate lui X
leg
. Acestei mult ¸imi de
product ¸ii i se asociaz˘a o codificare Huffman ca pentru orice alt˘a vari-
abil˘a.
Obesrv˘am c˘a dac˘a X
leg
are doar o product ¸ie asociat˘a (X −→ α), putem
s˘a-l elimin˘am ¸si s˘a-l ˆınlocuim cu α ˆın singura product ¸ie ˆın care apare, caz ˆın
care gramatica ar fi:
G
1

= (N ∪ ¦S
1
¦, Σ ∪ Σ
leg
, S
1
, P ∪ ¦S
1
−→ S
1
αS, S
1
−→ S¦)
Pentru a putea cripta acum orice ¸sir vom proceda ˆın felul urm˘ator:
1 La folosirea variabilei S
1
ˆın derivare nu se ascunde nici un bit, codificarea
atasat˘a ei fiind Ø.
2 complet˘am mesajul criptat cu un ¸sir de bit ¸i care indic˘a sf˘ar¸situl mesajului.
3
ˆ
In mod implicit, la derivarea variabilei S
1
se folose¸ste product ¸ia S
1
−→
S
1
X
leg
S.
28 CAPITOLUL 3. SISTEMUL DE CRIPTARE
4 dup˘a ascunderea ˆıntregului mesaj, pentru a ˆıncheia derivarea, deriv˘am
fiecare variabil˘a r˘amas˘ a ˆın criptat ˆıntr-un ¸sir w ∈ Σ

5 la decriptare, se va ret ¸ine din ¸sirul de bit ¸i rezultat doar ceea ce se g˘ase¸ste
ˆınaintea indicatorului de sf˘ar¸sit de fi¸sier.
Folosirea observat ¸iei 3 ne asigur˘a c˘a putem cripta ¸siruri oric˘at de lungi
(gramatica este recursiv˘a ¸si folosim aceast˘a recursivitate).
Observat ¸ia 4 ne asigur˘a c˘a procedura care relizeaz˘a criptarea este un
algoritm (se termin˘a).
Observat ¸ia 2 ne asigur˘a c˘a putem recupera ¸sirul intact la decriptare.
ˆ
In concluzie, prin aceast˘a exetnsie, noul sistem de criptare rezultat poate
realiza criptarea oric˘arui mesaj. Voi da mai jos algoritmii de criptare/decriptare
¸si apoi voi ar˘ata cum se aplic˘a ace¸stia pe un exemplu particular.
3.3 Algoritmii de criptare ¸si decriptare
3.3.1 Algoritmul de criptare
Mai ˆıntˆ ai s˘a ar˘at˘am acum cum putem construi cuvinte (rezonabil de mici)
ˆın care poate deriva orice neterminal. Avem nevoie de ele la sfˆar¸situl proce-
sului de criptare (obs. 4). Pentru aceasta d˘am urm˘atorul algoritm:
Algoritmul 3.1: cuvinte(G)
Intrare: G = (N, Σ, S, P) Gramatic˘a care respect˘a condit ¸ia 3.1
Iesire: P

mult ¸ime care cont ¸ine product ¸ii de forma X −→ w, w ∈ Σ

, cel
put ¸in una pentru fiecare variabil˘a a lui G.
P

←− P`¦A −→ αAβ¦
(elimin˘am product ¸iile cu recursie imediat˘a)
cˆat timp apar neterminale ˆın derapta product ¸iilor
pentru toate product ¸iile A −→ αXβ ∈ P

, X ∈ N
dac˘a exist˘a o product ¸ie X −→ w, w ∈ Σ

pentru toate product ¸iile X −→ w, w ∈ Σ

P

←− P

∪¦A −→ αwβ¦
P

←− P

`¦A −→ αwβ¦
3.3. ALGORITMII DE CRIPTARE S¸I DECRIPTARE 29
Teorema 3.1: Dac˘a condit ¸ia 3.1 este ˆındeplinit˘a, procedura cuvinte este
un algoritm ¸si se termin˘a cu ie¸sirea dorit˘a.
Demonstrat ¸ie:
• Condit ¸ia 3.1 asigur˘a existent ¸a a cel put ¸in unui cuv˘ant pentru fiecare
variabil˘ a.
• Finititudinea algoritmului rezult˘a din faptul c˘a neterminalele seˆınlocuiesc
doar cu ¸siruri de terminale.
• Faptul c˘a algoritmul nu cicleaz˘a ˆıntr-o stare intermediar˘ a este dat de
condit ¸ia c˘a gramatica nu are simboluri inutilizabile.
Se porne¸ste de la simbolul de start S
1
¸si se efectueaz˘a doar deriv˘ari drepte.
Dac˘a codificarea lui S
1
nu este vid˘a, la derivare alegem acea product ¸ie al c˘arei
cod este prefix ˆın textul clar ¸si avans˘amˆın textul clar s˘arind peste acest cod.
Apoi procedeul se repet˘a, t ¸inˆ and cont de observat ¸iile din sect ¸inuea anterioar˘ a.
Acum d˘am algoritmul care realizeaz˘a acest lucru folosind procedura getNextChar
(algoritmul 2.3.2) ¸si procedura cuvinte definit˘a mai sus:
Algoritmul 3.2: cripteaza(sir, G, H)
P

←− cuvinte(G)
sir ←− sir < EOF >
criptat ←− S
1
index ←− 0
cˆat timp index ≤ [sir[
A ←− cea mai din dreapta variabil˘a
dac˘a A = S
1
ˆınlocuie¸ste S
1
cu S
1
SX
leg
S
altfel
α ←− getNextChar(index, H
A
), unde H
A
e arborele asociat lui
A
ˆınlocuie¸ste A cu α ˆın criptat
pentru toate variabilele r˘amase ˆın criptat
A ←− cea mai din dreapta variabil˘a
30 CAPITOLUL 3. SISTEMUL DE CRIPTARE
ˆınlocuie¸ste A folosind o product ¸ie oarecare din P

return criptat
Datorit˘a observat ¸iior din sect ¸iunea anterioar˘ a, algoritmul se termin˘a generˆand
un element al lui L(G) ¸si ascunzˆand bit ¸ii din sir.
Observat ¸ii:
• Variabila index se modific˘a (cre¸ste) ˆın procedura getNextChar.
• Dac˘a arborele are un singur nod, acela este ¸si r˘ad˘acin˘ a ¸si frunz˘a ¸si este
singurul ¸sir ˆın care se poate deriva, deci se ˆınlocuie¸ste f˘ara a ascunde
nici un bit.
• Cu cˆat arborii Huffman au ˆınaltime mai mare (i.e. sunt mai multe
alegeri de f˘acut la un moment dat) cu atˆat putem ascunde mai mult ¸i
bit ¸i.
• Datorit˘a deriv˘arilor drepte, se produce ¸si o amestecare a ordinii bit ¸ilor
ˆın textul criptat.
3.3.2 Procesul de decriptare
Dat fiind un text criptat w ∈ L(G) vrem s˘a obt ¸inem textul clar care ˆıi
corespunde. Deoarece G este LR(k), pentru orice cuvˆant ˆın L(G) parserul
determin˘a ¸sirul (unic) de deriv˘ari drepte prin care se obt ¸ine acel cuv˘ant.
ˆ
Inlocuim apoi fiecare product ¸ie din ¸sirul de deriv˘ari cu codul corespunz˘ator
ei din H ¸si obt ¸inem un ¸sir de bit ¸i care cont ¸ine mesajul init ¸ial. Nu ne r˘amˆ ane
decˆat s˘a consider˘am mesajul doar p˘anˆ a la ˆıntˆ alnirea marcajului < EOF >.
Prezent˘ am sub form˘a de algoritm implementarea observat ¸iilor precedente.
Algoritmul de decriptare folose¸ste procedur˘a parsare (1.1), precum ¸si proce-
dura cod (algoritmul 2.3.2).
Algoritmul 3.3: Decripteaza(w, G, H)
Intrare: w textul criptat, (G, (H)) cheia de criptare.
Iesire: clar textul clar corespunz˘ator lui w, sau eroare dac˘a w nu e recunos-
cut ca text criptat.
dac˘a !parseaza(w, G, actiune, goto, π)
return eroare
clar
1
←− ””
3.4. SIGURANT¸ A SISTEMULUI 31
cˆat timp π = iπ

Fie A −→ α product ¸ia cu num˘ arul i
c ←− cod(α, H
A
), unde H
A
e arborele de codificare asociat lui A
clar
1
←− clar
1
+c
π ←− π

determin˘a clar de lungime minim˘a cu proprietatea clar < EOF > prefix al
lui clar
1
dac˘a ∃clar return clar
altfel return eroare
Deoarece procedura parseaza este un algoritm, execut ¸ia ei se termin˘a ¸si
produce un ¸sit finit de etichete ale product ¸iilor folosite la derivare. Acest ¸sir
de etichete este transformat printr-o singur˘a parcurgere ˆıntr-un ¸sir finit de
biti. Din acest nou ¸sir este extras un prefix reprezentˆand textul clar.
Datorit˘a acestor observat ¸ii, putem afirma c˘a procedura decripteaza este
algoritm, si realizeaz˘a decriptarea unui ¸sir dat la intrare.
Pentru a face ˆıntelese mai bine procedeele de criptare/decriptare, am
inclus un exemplu detaliat ˆın anexa C.
3.4 Sigurant ¸a sistemului
3.4.1 Analiza teoretic˘a a securit˘at ¸ii sistemului
Securitatea acestui tip de criptare se bazeaz˘a pe dificultatea g˘asirii acelei
gramaticii care a generat un text, adic˘a a arborelui de parsare asociat textu-
lui.
ˆ
Intr-adev˘ar, se poate g˘asi o gramatic˘a care s˘a genereze un text, dar sunt
foarte multe gramatici care pot genera acela¸si text. Iar la product ¸ii diferite
se asociaz˘a arbori Huffman diferit ¸i, deci si cript˘ari diferite.
Problema revine la a determina exact acea gramatic˘a cu care este produs
textul. Dac˘a ar exista un algoritm ˆın timp determinist polinomial care s˘a
ˆınvet ¸e s˘a genereze arborele de parsare pentru un text dat, atunci acest algo-
ritm ar putea s˘a fie antrenat s˘a prezic˘a ¸si apartenent ¸a unui ¸sir la limbajul
generat de o gramatic˘a.
Teorema 4.2: Fie A un algoritm care poate ˆınv˘at ¸a s˘a genereze arborele
de parsare ¸si fie G
1
o gramatic˘a. Atunci cu acest algoritm se poate prezice
apartenent ¸a unui ¸sir la L(G
1
)
32 CAPITOLUL 3. SISTEMUL DE CRIPTARE
Demonstrat ¸ie: Consider˘am G
1
= (N
1
, Σ, S
1
, P
1
) ¸si fie G
2
= (N
2
, Σ, S
2
, P
2
) o
alt˘a garmatic˘a peste acelasi alfabet. Fie G = (N, Σ, S, P), unde: N = N
1

N
2
∪ ¦S¦ ¸si P = P
1
∪ P
2
∪ ¦S −→ S
1
,S −→ S
2
¦. Antren˘am algoritmul
A cu exemple din L(G), ¸si arborii lor de parsare. Algoritmul A ˆınv˘at ¸˘ a s˘a
genereze arborele de parsare pentru orice ¸sir w ∈ L(G). Atunci ∀w ∈ L(G)
A determin˘a dac˘a S deriv˘a ˆın S
1
sau ˆın S
2
, adic˘a dac˘a w ∈ L(G
1
) sau nu.
Dar, precum afirm˘a um˘atoarea teorem˘a, corolar ˆın [AK91], dac˘a inver-
sarea RSA-ului e o problem˘a intratabil˘a, atunci nu se poate ˆınv˘ at ¸a un pro-
gram s˘a prezic˘a apartenent ¸a unui ¸sir la limbajul generat de o gramatic˘a
neregulat˘a. Dar mai ˆıntˆai, ni¸ste definit ¸ii preg˘atitoare.
Definit ¸ia 4.1 (definit ¸ii preg˘atitoare):
Fie X = ¦0, 1¦

Prin reprezentare de concepte ( ˆıntelegem orice submult ¸ime a lui XX.
Pentru un element 'u, x` ∈ (, u e un nume de concept ¸si x un exemplu. Se
spune c˘a x e membru al conceptului u.
Definim (
DFA
ca o mult ¸ime de perechi 'u, x` astfel ˆıncˆat u este codarea bi-
nar˘a a unui automat finit determinist M peste X ¸si x este un cuvˆant acceptat
de M.
ˆ
In mod asem˘an˘ator se definesc ¸si (
2DFA
, (
NFA
¸si (
CFG
corespunz˘atoare au-
tomatelor infinite ¸si gramaticilor independente de context.
Reuniunile finite de AFD sunt reprezentate de (
∪DFA
iar intersect ¸iile finite
de AFD de (
∩DFA
.
Teorema 4.3: Dac˘a presupunem intratabilitatea oric˘arei din urm˘atoarele
trei probleme: testarea reziduurilor p˘atratice modulo un num˘ar compus, in-
versarea cript˘arii RSA sau factorizarea intregilor Blum, atunci urm˘atoarele
reprezent˘ari de concepte nu sunt predictibile ˆın timp polinomial folosind cereri
de apartenent ¸˘a: (
∪DFA
, (
∩DFA
, (
2DFA
, (
NFA
¸si (
CFG
3.4.2 Metode de ˆımbun˘at˘at ¸ire a securit˘atˆıi sistemului
Exist˘a diverse procedee care permit modificarea product ¸iilor unei gra-
matici astfel ˆıncˆat criptarea obt ¸inut˘ a folosind noua gramatic˘a s˘a difere de
criptarea obt ¸inut˘ a folosind gramatica init ¸ial˘ a.
Astfel de procedee sunt expansiunile, contract ¸iile ¸si permut˘arile.
3.4. SIGURANT¸ A SISTEMULUI 33
Expansiunea
Expansiunea: Fie A o variabil˘a ¸si α
i
, i = 1, n expresiile ˆın care deriv˘a A.
Fie α
ik
, k = 1, m un subsir al lui α
i
. Pentru orice product ¸ie B −→ β
1

2
,
ad˘aug˘ am product ¸iile B −→ β
1
α
ik
β
2
. La sfˆar¸sit, ¸stergem product ¸iile A −→
α
ik
.
Contract ¸ia
Contract ¸ia este un procedeu invers expansiunii (care adaug˘a noi variabile
gramaticii).
Permutarea
Permutarea const˘a ˆın permutarea product ¸iilor unei variabile, din care
rezult˘a modificarea arborilor Huffman, deci ¸si a cript˘arii.
Aceste modific˘ari pot fi efectuate simultan de c˘atre cei doi parteneri care
comunic˘a folosind un generator de numere pseudo-aleatoare sincronizat (cu
aceea¸si s˘amˆant ¸a). Aceasta s˘amˆant ¸˘ a are valoarea unei chei suplimentare de
criptare.
Detalii privind aceste procedee se gasesc in [Way96].
34 CAPITOLUL 3. SISTEMUL DE CRIPTARE
Capitolul 4
Concluzii
Sistemul prezentat este destul de bun, ˆın sensul c˘a pentru anumite chei
poate fi comparat cu RSA-ul sau cu alte sisteme puternice de criptare.
Pentru o implementare pe internet a acestui sistem vezi [SPAM].
Dezavantaje:
• faptul ca o gramatic˘a trebuie sa fie destul de elaborat˘a pentru a-i p˘ac˘ ali
pe cei ce pot intercepta mesajele
• e necesar un schimb prealabil de chei pe un canal sigur
• datorit˘a m˘arimii lor, cheile nu se pot schimba
• nu se ¸stie ce gramatici au puterea de criptare echivalent˘ a cu RSA (de¸si
se ¸stie c˘a exist˘a)
Avantaje:
• cu ajutorul acestui sistem se poate ascunde informat ¸ie ˆın text aparent
inofensiv.
• asa cum am ar˘atat mai sus de¸si cheile nu se pot schimba prea des, ele
se pot transforma
• este u¸sor de proiectat o gramatic˘a (realizarea unei gramatici necesit˘a
put ¸ine not ¸iuni teoretice) ¸si depinde doar de imaginat ¸ia celui ce o creaz˘a.
Indicat ¸ii pentru construirea unei gramatici ”bune”
• Gramatica trebuie s˘a fie construit˘a astfel ˆıncˆ at s˘a simuleze o situat ¸ie
din viat ¸a real˘a bazat˘a pe repetit ¸ie cum ar fi comentariul uni meci sau
povestirea unei telenovele sau un basm, sau ca ˆın exemplul nostru un
discurs de candidatur˘a. Oricum, sunt multe domenii care implic˘a o
oarecare rutin˘a (mai ales privite din afar˘a)
35
36 CAPITOLUL 4. CONCLUZII
• Cu cˆat mai multe variabile sunt, cu atˆat mai bine. Adic˘a se poate merge
cu construct ¸ia textului pˆan˘ a ls structura frazei, sau chiar a cuvˆantului.
• este bun˘a folosirea a cˆat mai multe product ¸ii pentru o variabil˘a pentru
a putea ascunde cˆat mai mult˘ a informat ¸ie. Dac˘a avem 2
n
product ¸ii
pentru o variabil˘ a, atunci derivˆand-o putem ascunde n bit ¸i. Putem
folosi fraze asem˘an˘ atoare, sinonime, etc.
• mult ¸imea neterminalelor dintr-o product ¸ie s˘a fie cˆat mai mic˘a pentru
ca s˘a ascundem c˘at mai mult cu c˘at mai put ¸ine cuvinte. (de aceea
exemplu dat e doar ˆın scop didactic)
Informat ¸ia (¸sirul de bit ¸i) trebuie s˘a fie aleatoare, de aceea se recomand˘a o
preprocesare care s˘a randomizeze intrarea (ori o alt˘a criptare, ori o arhivare).
Prezent˘ am ca exemplu de cheie pentru acest sistem, care realizeaz˘a o
criptare eficient˘ a (f˘ar˘ a modificarea dimensiunii init ¸iale).
G = (N, Σ, S, P), unde:
• N = ¦A
i
: i = 0, 255¦ mult ¸imea variabilelor;
• Σ = ¦t
j
: j = 0, 255¦ mult ¸imea caracterelor ASCII;
• S este una din variabile (s˘a zicem A
0
;
• Product ¸iile sunt de forma A
i
−→ t
j
A
k1
. . . A
k(ij)
: i, j = 0, 255.
Aceast˘a gramatic˘a pemiterea ascunderea a 8 bit ¸i de informat ¸ie la fiecare
alegere, producˆand un singur caracter (deci tot 8 bit ¸i) ceea ce ˆınseamn˘ a o
conservare a m˘arimii textului, una din cerint ¸ele unui bun sistem de criptare.
Bibliografie
[Way96] Wayner, Peter, Disappearing Cryptography, Being and Nothingness
on the Net
[Ata01] Atanasiu, Adrian, curs de teroria codurilor
[AK91] Angluin, D., Kharitonov, M., When won’t memebership queries
help?, ACM Press 1991
[KV89] Kearns, M., Valiant, L. G., Cryptographic Limitations on Learning
Boolean Formulae and Finite Automata
[AU72] Aho, A. V., Ullman, J. D., The Theory of Parsing, Translation And
Compiling
[CLR90] Cormen, Th. H., Leiserson, Ch. E., Rivest R. R., Introduction to
Algorithms, MIT Press 1990
[SPAM] http://www.spammimic.com.
[SH] http://www.jjtc.com/Steganography/
[SS] http://www.tapr.org/
[MD] http://www89.pair.com/techinfo/Microdot/microdot.htm
37
38 BIBLIOGRAFIE
Anexa A
Coduri Huffman
Prezint aici un cod Huffman asociat frecvent ¸ei literelor ˆın limba englez˘a
care l-am completat cu < EOF > divizˆand nodul lui Z:
Frecv. Codul Frecv. Codul
Litera % Huffman Litera % Huffman
A 6.22 1011 O 6.06 1000
B 1.32 010100 P 1.87 00000
C 3.11 10101 Q 0.10 0101011100
D 2.97 01011 R 5.87 0111
E 10.53 001 S 5.81 0110
F 1.68 110001 T 7.68 1101
G 1.65 110000 U 2.27 00010
H 3.63 11001 V 0.70 0101010
I 6.14 1001 W 1.13 000011
J 0.06 01010111011 X 0.25 010101111
K 0.31 01010110 Y 1.07 000010
L 3.07 10100 Z 0.06 01010111010110
M 2.48 00011 < EOF > 0.00 01010111010111
N 5.73 0100 .
39
40 ANEXA A. CODURI HUFFMAN
Anexa B
Construct ¸ia unei tabele de
parsare
Gramatica
Vom folosi ca exemplu de gramatic˘a aceea¸si gramatic˘a folosit˘a ¸si ˆın exem-
plul de criptare/decriptare, deoarece ˆın procesul de decriptare avem nevoie
¸sa pars˘am ¸sirul criptat. Gramatica este:
0 S

−→ S
1
$ 13 C −→ C
1
1 S
1
−→ S
1
; E 14 C −→ 0
2 S
1
−→ E 15 C
1
−→ 1
3 E −→ E + T 16 C
1
−→ 2
4 E −→ T 17 C
1
−→ 3
5 T −→ T ∗ F 18 C
1
−→ 4
6 T −→ F 19 C
1
−→ 5
7 F −→ (E) 20 C
1
−→ 6
8 F −→ N 21 C
1
−→ 7
9 N −→ C
1
N
0
22 C
1
−→ 8
10 N −→ 0 23 C
1
−→ 9
11 N
0
−→ N
0
C
12 N
0
−→ λ
Aceast˘a gramatic˘a este extensia gramaticii expresiilor aritmetice simple
cu numere naturale separate de ’;’. Mai jos, prezint pa¸sii de construie a
mult ¸imii configurat ¸iilor, apoi tabelele actiune ¸si goto.
41
42 ANEXA B. CONSTRUCT¸ IA UNEI TABELE DE PARSARE
I
0
C1 −→ .1 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .2 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .3 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .4 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .5 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .6 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .7 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .8 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .9 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
E −→ .E + T;$[; [+
E −→ .T ;$[; [+
F −→ .( E ) ;$[ ∗ [; [+
F −→ .N ;$[ ∗ [; [+
N −→ .0 ;$[ ∗ [; [+
N −→ .C1 N0 ;$[ ∗ [; [+
S1 −→ .E ;$[;
S1 −→ .S1 ; E;$[;
S −→ .S1 ;$
T −→ .F ;$[ ∗ [; [+
T −→ .T * F ;$[ ∗ [; [+
goto(I
0
, 0) = I
1
I
1
N −→ 0 .;∗[ +[; [$
goto(I
0
, 9) = I
2
I
2
C1 −→ 9 .;1[2[3[4[5[6[7[8[9[0[ ∗ [ +[; [$
goto(I
0
, 8) = I
3
I
3
C1 −→ 8 .;1[2[3[4[5[6[7[8[9[0[ ∗ [ +[; [$
goto(I
0
, 7) = I
4
I
4
C1 −→ 7 .;1[2[3[4[5[6[7[8[9[0[ ∗ [ +[; [$
goto(I
0
, 6) = I
5
I
5
C1 −→ 6 .;1[2[3[4[5[6[7[8[9[0[ ∗ [ +[; [$
goto(I
0
, 5) = I
6
I
6
C1 −→ 5 .;1[2[3[4[5[6[7[8[9[0[ ∗ [ +[; [$
goto(I
0
, 4) = I
7
I
7
C1 −→ 4 .;1[2[3[4[5[6[7[8[9[0[ ∗ [ +[; [$
goto(I
0
, 3) = I
8
I
8
C1 −→ 3 .;1[2[3[4[5[6[7[8[9[0[ ∗ [ +[; [$
goto(I
0
, 2) = I
9
I
9
C1 −→ 2 .;1[2[3[4[5[6[7[8[9[0[ ∗ [ +[; [$
goto(I
0
, 1) = I
10
I
10
C1 −→ 1 .;1[2[3[4[5[6[7[8[9[0[ ∗ [ +[; [$
goto(I
0
, C1) = I
11
I
11
N −→ C1 .N0;$[ ∗ [; [+
N0 −→ . ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
N0 −→ .N0 C;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
goto(I
0
, N) = I
12
I
12
F −→ N .;∗[ +[; [$
goto(I
0
, () = I
13
I
13
C1 −→ .1 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .2 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .3 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .4 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .5 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .6 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .7 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .8 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .9 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
E −→ .E + T;)[+
E −→ .T ;)[+
F −→ ( .E ) ;$[ ∗ [; [+
F −→ .( E ) ;)[ ∗ [+
F −→ .N ;)[ ∗ [+
N −→ .0 ;)[ ∗ [+
N −→ .C1 N0;)[ ∗ [+
T −→ .F ;)[ ∗ [+
T −→ .T * F ;)[ ∗ [+
goto(I
0
, F) = I
14
43
I
14
T −→ F .;∗[ +[; [$
goto(I
0
, T) = I
15
I
15
E −→ T . ;$[; [+
T −→ T .* F;$[ ∗ [; [+
goto(I
0
, E) = I
16
I
16
E −→ E .+ T;$[; [+
S1 −→ E . ;$[;
goto(I
0
, S1) = I
17
I
17
S −→ S1 . ;$
S1 −→ S1 .; E;$[;
goto(I
17
, ; ) = I
18
I
18
C1 −→ .1 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .2 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .3 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .4 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .5 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .6 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .7 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .8 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .9 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
E −→ .E + T;$[; [+
E −→ .T ;$[; [+
F −→ .( E ) ;$[ ∗ [; [+
F −→ .N ;$[ ∗ [; [+
N −→ .0 ;$[ ∗ [; [+
N −→ .C1 N0 ;$[ ∗ [; [+
S1 −→ S1 ; .E;$[;
T −→ .F ;$[ ∗ [; [+
T −→ .T * F ;$[ ∗ [; [+
goto(I
18
, 0) = I
1
goto(I
18
, 9) = I
2
goto(I
18
, 8) = I
3
goto(I
18
, 7) = I
4
goto(I
18
, 6) = I
5
goto(I
18
, 5) = I
6
goto(I
18
, 4) = I
7
goto(I
18
, 3) = I
8
goto(I
18
, 2) = I
9
goto(I
18
, 1) = I
10
goto(I
18
, C1) = I
11
goto(I
18
, N) = I
12
goto(I
18
, () = I
13
goto(I
18
, F) = I
14
goto(I
18
, T) = I
15
goto(I
18
, E) = I
19
I
19
E −→ E .+ T ;$[; [+
S1 −→ S1 ; E .;$[;
goto(I
19
, +) = I
20
I
20
C1 −→ .1 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .2 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .3 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .4 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .5 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .6 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .7 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .8 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .9 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
E −→ E + .T;$[; [+
F −→ .( E ) ;$[ ∗ [; [+
F −→ .N ;$[ ∗ [; [+
N −→ .0 ;$[ ∗ [; [+
N −→ .C1 N0;$[ ∗ [; [+
T −→ .F ;$[ ∗ [; [+
T −→ .T * F ;$[ ∗ [; [+
goto(I
20
, 0) = I
1
goto(I
20
, 9) = I
2
goto(I
20
, 8) = I
3
goto(I
20
, 7) = I
4
goto(I
20
, 6) = I
5
goto(I
20
, 5) = I
6
goto(I
20
, 4) = I
7
goto(I
20
, 3) = I
8
goto(I
20
, 2) = I
9
goto(I
20
, 1) = I
10
goto(I
20
, C1) = I
11
goto(I
20
, N) = I
12
goto(I
20
, () = I
13
goto(I
20
, F) = I
14
goto(I
20
, T) = I
21
I
21
E −→ E + T .;$[; [+
T −→ T .* F ;$[ ∗ [; [+
44 ANEXA B. CONSTRUCT¸ IA UNEI TABELE DE PARSARE
goto(I
21
, ∗) = I
22
I
22
C1 −→ .1 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .2 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .3 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .4 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .5 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .6 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .7 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .8 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .9 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
F −→ .( E ) ;$[ ∗ [; [+
F −→ .N ;$[ ∗ [; [+
N −→ .0 ;$[ ∗ [; [+
N −→ .C1 N0;$[ ∗ [; [+
T −→ T * .F ;$[ ∗ [; [+
goto(I
22
, 0) = I
1
goto(I
22
, 9) = I
2
goto(I
22
, 8) = I
3
goto(I
22
, 7) = I
4
goto(I
22
, 6) = I
5
goto(I
22
, 5) = I
6
goto(I
22
, 4) = I
7
goto(I
22
, 3) = I
8
goto(I
22
, 2) = I
9
goto(I
22
, 1) = I
10
goto(I
22
, C1) = I
11
goto(I
22
, N) = I
12
goto(I
22
, () = I
13
goto(I
22
, F) = I
23
I
23
T −→ T * F .;$[ ∗ [ +[;
goto(I
16
, +) = I
20
goto(I
15
, ∗) = I
22
goto(I
13
, E) = I
24
I
24
E −→ E .+ T;)[+
F −→ ( E .) ;$[ ∗ [; [+
goto(I
13
, 0) = I
25
I
25
N −→ 0 .;∗[ +[)
goto(I
13
, 9) = I
26
I
26
C1 −→ 9 .;1[2[3[4[5[6[7[8[9[0[ ∗ [ +[)
goto(I
13
, 8) = I
27
I
27
C1 −→ 8 .;1[2[3[4[5[6[7[8[9[0[ ∗ [ +[)
goto(I
13
, 7) = I
28
I
28
C1 −→ 7 .;1[2[3[4[5[6[7[8[9[0[ ∗ [ +[)
goto(I
13
, 6) = I
29
I
29
C1 −→ 6 .;1[2[3[4[5[6[7[8[9[0[ ∗ [ +[)
goto(I
13
, 5) = I
30
I
30
C1 −→ 5 .;1[2[3[4[5[6[7[8[9[0[ ∗ [ +[)
goto(I
13
, 4) = I
31
I
31
C1 −→ 4 .;1[2[3[4[5[6[7[8[9[0[ ∗ [ +[)
goto(I
13
, 3) = I
32
I
32
C1 −→ 3 .;1[2[3[4[5[6[7[8[9[0[ ∗ [ +[)
goto(I
13
, 2) = I
33
I
33
C1 −→ 2 .;1[2[3[4[5[6[7[8[9[0[ ∗ [ +[)
goto(I
13
, 1) = I
34
I
34
C1 −→ 1 .;1[2[3[4[5[6[7[8[9[0[ ∗ [ +[)
goto(I
13
, C1) = I
35
I
35
N −→ C1 .N0;)[ ∗ [+
N0 −→ . ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
N0 −→ .N0 C;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
goto(I
13
, N) = I
36
I
36
F −→ N .;∗[ +[)
goto(I
13
, () = I
37
45
I
37
C1 −→ .1 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .2 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .3 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .4 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .5 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .6 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .7 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .8 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .9 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
E −→ .E + T;)[+
E −→ .T ;)[+
F −→ ( .E ) ;)[ ∗ [+
F −→ .( E ) ;)[ ∗ [+
F −→ .N ;)[ ∗ [+
N −→ .0 ;)[ ∗ [+
N −→ .C1 N0;)[ ∗ [+
T −→ .F ;)[ ∗ [+
T −→ .T * F ;)[ ∗ [+
goto(I
13
, F) = I
38
I
38
T −→ F .;∗[ +[)
goto(I
13
, T) = I
39
I
39
E −→ T . ;)[+
T −→ T .* F;)[ ∗ [+
goto(I
39
, ∗) = I
40
I
40
C1 −→ .1 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .2 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .3 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .4 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .5 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .6 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .7 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .8 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .9 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
F −→ .( E ) ;)[ ∗ [+
F −→ .N ;)[ ∗ [+
N −→ .0 ;)[ ∗ [+
N −→ .C1 N0;)[ ∗ [+
T −→ T * .F ;)[ ∗ [+
goto(I
40
, 0) = I
25
goto(I
40
, 9) = I
26
goto(I
40
, 8) = I
27
goto(I
40
, 7) = I
28
goto(I
40
, 6) = I
29
goto(I
40
, 5) = I
30
goto(I
40
, 4) = I
31
goto(I
40
, 3) = I
32
goto(I
40
, 2) = I
33
goto(I
40
, 1) = I
34
goto(I
40
, C1) = I
35
goto(I
40
, N) = I
36
goto(I
40
, () = I
37
goto(I
40
, F) = I
41
I
41
T −→ T * F .;+[ ∗ [)
goto(I
37
, E) = I
42
I
42
E −→ E .+ T;)[+
F −→ ( E .) ;)[ ∗ [+
goto(I
37
, 0) = I
25
goto(I
37
, 9) = I
26
goto(I
37
, 8) = I
27
goto(I
37
, 7) = I
28
goto(I
37
, 6) = I
29
goto(I
37
, 5) = I
30
goto(I
37
, 4) = I
31
goto(I
37
, 3) = I
32
goto(I
37
, 2) = I
33
goto(I
37
, 1) = I
34
goto(I
37
, C1) = I
35
goto(I
37
, N) = I
36
goto(I
37
, () = I
37
goto(I
37
, F) = I
38
goto(I
37
, T) = I
39
g(42,))=43
I
43
F −→ ( E ) .;∗[ +[)
goto(I
42
, +) = I
44
46 ANEXA B. CONSTRUCT¸ IA UNEI TABELE DE PARSARE
I
44
C1 −→ .1 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .2 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .3 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .4 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .5 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .6 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .7 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .8 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .9 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
E −→ E + .T;)[+
F −→ .( E ) ;)[ ∗ [+
F −→ .N ;)[ ∗ [+
N −→ .0 ;)[ ∗ [+
N −→ .C1 N0;)[ ∗ [+
T −→ .F ;)[ ∗ [+
T −→ .T * F ;)[ ∗ [+
goto(I
44
, 0) = I
25
goto(I
44
, 9) = I
26
goto(I
44
, 8) = I
27
goto(I
44
, 7) = I
28
goto(I
44
, 6) = I
29
goto(I
44
, 5) = I
30
goto(I
44
, 4) = I
31
goto(I
44
, 3) = I
32
goto(I
44
, 2) = I
33
goto(I
44
, 1) = I
34
goto(I
44
, C1) = I
35
goto(I
44
, N) = I
36
goto(I
44
, () = I
37
goto(I
44
, F) = I
38
goto(I
44
, T) = I
45
I
45
E −→ E + T .;)[+
T −→ T .* F ;)[ ∗ [+
goto(I
45
, ∗) = I
40
goto(I
35
, N0) = I
46
I
46
C −→ .0 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C −→ .C1 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .1 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .2 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .3 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .4 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .5 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .6 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .7 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .8 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .9 ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
N −→ C1 N0 .;)[ ∗ [+
N0 −→ N0 .C ;)[ ∗ [ +[0[1[2[3[4[5[6[7[8[9
goto(I
46
, 0) = I
47
I
47
C −→ 0 .;∗[ +[0[9[8[7[6[5[4[3[2[1[)
goto(I
46
, 9) = I
26
goto(I
46
, 8) = I
27
goto(I
46
, 7) = I
28
goto(I
46
, 6) = I
29
goto(I
46
, 5) = I
30
goto(I
46
, 4) = I
31
goto(I
46
, 3) = I
32
goto(I
46
, 2) = I
33
goto(I
46
, 1) = I
34
goto(I
46
, C1) = I
48
I
48
C −→ C1 .;∗[ +[0[9[8[7[6[5[4[3[2[1[)
goto(I
46
, C) = I
49
I
49
N0 −→ N0 C .;∗[ +[0[9[8[7[6[5[4[3[2[1[)
g(24,))=50
I
50
F −→ ( E ) .;∗[ +[; [$
goto(I
24
, +) = I
44
goto(I
11
, N0) = I
51
47
I
51
C −→ .0 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C −→ .C1 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .1 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .2 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .3 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .4 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .5 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .6 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .7 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .8 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
C1 −→ .9 ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
N −→ C1 N0 .;$[ ∗ [; [+
N0 −→ N0 .C ;$[ ∗ [; [ +[0[1[2[3[4[5[6[7[8[9
goto(I
51
, 0) = I
52
I
52
C −→ 0 .;∗[ +[; [0[9[8[7[6[5[4[3[2[1[$
goto(I
51
, 9) = I
2
goto(I
51
, 8) = I
3
goto(I
51
, 7) = I
4
goto(I
51
, 6) = I
5
goto(I
51
, 5) = I
6
goto(I
51
, 4) = I
7
goto(I
51
, 3) = I
8
goto(I
51
, 2) = I
9
goto(I
51
, 1) = I
10
goto(I
51
, C1) = I
53
I
53
C −→ C1 .;∗[ +[; [0[9[8[7[6[5[4[3[2[1[$
goto(I
51
, C) = I
54
I
54
N0 −→ N0 C .;∗[ +[; [0[9[8[7[6[5[4[3[2[1[$
48 ANEXA B. CONSTRUCT¸ IA UNEI TABELE DE PARSARE
Tabela goto
( ) * ; + 0 1 2 3 4 5 6 7 8 9 C C1 E F N N0 S1 T
0 13 · · · · 1 10 9 8 7 6 5 4 3 2 · 11 16 14 12 · 17 15
1 · · · · · · · · · · · · · · · · · · · · · · ·
2 · · · · · · · · · · · · · · · · · · · · · · ·
3 · · · · · · · · · · · · · · · · · · · · · · ·
4 · · · · · · · · · · · · · · · · · · · · · · ·
5 · · · · · · · · · · · · · · · · · · · · · · ·
6 · · · · · · · · · · · · · · · · · · · · · · ·
7 · · · · · · · · · · · · · · · · · · · · · · ·
8 · · · · · · · · · · · · · · · · · · · · · · ·
9 · · · · · · · · · · · · · · · · · · · · · · ·
10 · · · · · · · · · · · · · · · · · · · · · · ·
11 · · · · · · · · · · · · · · · · · · · · 51 · ·
12 · · · · · · · · · · · · · · · · · · · · · · ·
13 37 · · · · 25 34 33 32 31 30 29 28 27 26 · 35 24 38 36 · · 39
14 · · · · · · · · · · · · · · · · · · · · · · ·
15 · · 22 · · · · · · · · · · · · · · · · · · · ·
16 · · · · 20 · · · · · · · · · · · · · · · · · ·
17 · · · 18 · · · · · · · · · · · · · · · · · · ·
18 13 · · · · 1 10 9 8 7 6 5 4 3 2 · 11 19 14 12 · · 15
19 · · · · 20 · · · · · · · · · · · · · · · · · ·
20 13 · · · · 1 10 9 8 7 6 5 4 3 2 · 11 · 14 12 · · 21
21 · · 22 · · · · · · · · · · · · · · · · · · · ·
22 13 · · · · 1 10 9 8 7 6 5 4 3 2 · 11 · 23 12 · · ·
23 · · · · · · · · · · · · · · · · · · · · · · ·
24 · 50 · · 44 · · · · · · · · · · · · · · · · · ·
25 · · · · · · · · · · · · · · · · · · · · · · ·
26 · · · · · · · · · · · · · · · · · · · · · · ·
27 · · · · · · · · · · · · · · · · · · · · · · ·
28 · · · · · · · · · · · · · · · · · · · · · · ·
29 · · · · · · · · · · · · · · · · · · · · · · ·
30 · · · · · · · · · · · · · · · · · · · · · · ·
31 · · · · · · · · · · · · · · · · · · · · · · ·
32 · · · · · · · · · · · · · · · · · · · · · · ·
33 · · · · · · · · · · · · · · · · · · · · · · ·
34 · · · · · · · · · · · · · · · · · · · · · · ·
35 · · · · · · · · · · · · · · · · · · · · 46 · ·
36 · · · · · · · · · · · · · · · · · · · · · · ·
37 37 · · · · 25 34 33 32 31 30 29 28 27 26 · 35 42 38 36 · · 39
38 · · · · · · · · · · · · · · · · · · · · · · ·
39 · · 40 · · · · · · · · · · · · · · · · · · · ·
40 37 · · · · 25 34 33 32 31 30 29 28 27 26 · 35 · 41 36 · · ·
41 · · · · · · · · · · · · · · · · · · · · · · ·
42 · 43 · · 44 · · · · · · · · · · · · · · · · · ·
43 · · · · · · · · · · · · · · · · · · · · · · ·
44 37 · · · · 25 34 33 32 31 30 29 28 27 26 · 35 · 38 36 · · 45
45 · · 40 · · · · · · · · · · · · · · · · · · · ·
46 · · · · · 47 34 33 32 31 30 29 28 27 26 49 48 · · · · · ·
47 · · · · · · · · · · · · · · · · · · · · · · ·
48 · · · · · · · · · · · · · · · · · · · · · · ·
49 · · · · · · · · · · · · · · · · · · · · · · ·
50 · · · · · · · · · · · · · · · · · · · · · · ·
50 · · · · · 52 10 9 8 7 6 2 4 3 2 54 53 · · · · · ·
51 · · · · · · · · · · · · · · · · · · · · · · ·
52 · · · · · · · · · · · · · · · · · · · · · · ·
53 · · · · · · · · · · · · · · · · · · · · · · ·
54 · · · · · · · · · · · · · · · · · · · · · · ·
Legenda
num˘ar i deplasare la starea i
eroare
49
Tabela actiune
$ ( ) * ; + 0 1 2 3 4 5 6 7 8 9
0 · d · · · · d d d d d d d d d d
1 10 · · 10 10 10 · · · · · · · · · ·
2 23 · · 23 23 23 23 23 23 23 23 23 23 23 23 23
3 22 · · 22 22 22 22 22 22 22 22 22 22 22 22 22
4 21 · · 21 21 21 21 21 21 21 21 21 21 21 21 21
5 20 · · 20 20 20 20 20 20 20 20 20 20 20 20 20
6 19 · · 19 19 19 19 19 19 19 19 19 19 19 19 19
7 18 · · 18 18 18 18 18 18 18 18 18 18 18 18 18
8 17 · · 17 17 17 17 17 17 17 17 17 17 17 17 17
9 16 · · 16 16 16 16 16 16 16 16 16 16 16 16 16
10 15 · · 15 15 15 15 15 15 15 15 15 15 15 15 15
11 12 · · 12 12 12 12 12 12 12 12 12 12 12 12 12
12 8 · · 8 8 8 · · · · · · · · · ·
13 · d · · · · d d d d d d d d d d
14 6 · · 6 6 6 · · · · · · · · · ·
15 4 · · d 4 4 · · · · · · · · · ·
16 2 · · · 2 d · · · · · · · · · ·
17 A · · · d · · · · · · · · · · ·
18 · d · · · · d d d d d d d d d d
19 1 · · · 1 d · · · · · · · · · ·
20 · d · · · · d d d d d d d d d d
21 3 · · d 3 3 · · · · · · · · · ·
22 · d · · · · d d d d d d d d d d
23 5 · · 5 5 5 · · · · · · · · · ·
24 · · d · · d · · · · · · · · · ·
25 · · 10 10 · 10 · · · · · · · · · ·
26 · · 23 23 · 23 23 23 23 23 23 23 23 23 23 23
27 · · 22 22 · 22 22 22 22 22 22 22 22 22 22 22
28 · · 21 21 · 21 21 21 21 21 21 21 21 21 21 21
29 · · 20 20 · 20 20 20 20 20 20 20 20 20 20 20
30 · · 19 19 · 19 19 19 19 19 19 19 19 19 19 19
31 · · 18 18 · 18 18 18 18 18 18 18 18 18 18 18
32 · · 17 17 · 17 17 17 17 17 17 17 17 17 17 17
33 · · 16 16 · 16 16 16 16 16 16 16 16 16 16 16
34 · · 15 15 · 15 15 15 15 15 15 15 15 15 15 15
35 · · 12 12 · 12 12 12 12 12 12 12 12 12 12 12
36 · · 8 8 · 8 · · · · · · · · · ·
37 · d · · · · d d d d d d d d d d
38 · · 6 6 · 6 · · · · · · · · · ·
39 · · 4 d · 4 · · · · · · · · · ·
40 · d · · · · d d d d d d d d d d
41 · · 5 5 · 5 · · · · · · · · · ·
42 · · d · · d · · · · · · · · · ·
43 · · 7 7 · 7 · · · · · · · · · ·
44 · d · · · · d d d d d d d d d d
45 · · 3 d · 3 · · · · · · · · · ·
46 · · 9 9 · 9 d d d d d d d d d d
47 · · 14 14 · 14 14 14 14 14 14 14 14 14 14 14
48 · · 13 13 · 13 13 13 13 13 13 13 13 13 13 13
49 · · 11 11 · 11 11 11 11 11 11 11 11 11 11 11
50 7 · · 7 7 7 · · · · · · · · · ·
51 9 · · 9 9 9 d d d d d d d d d d
52 14 · · 14 14 14 14 14 14 14 14 14 14 14 14 14
53 13 · · 13 13 13 13 13 13 13 13 13 13 13 13 13
54 11 · · 11 11 11 11 11 11 11 11 11 11 11 11 11
Legenda
num˘ar i reduce product ¸ia cu eticheta i
d deplasare
A acceptare
eroare
50 ANEXA B. CONSTRUCT¸ IA UNEI TABELE DE PARSARE
Anexa C
Exemplu de aplicare a
cript˘arii/decript˘arii
Cheia de criptare
Gramatica din component ¸a chei de criptare este B. Observ˘am c˘a aceast˘a
gramatic˘a respect ¸˘a condit ¸iiie extensiei unei gramatici din 3.2.
Iat˘a acum o posibil˘a alegere a lui H:
H
S
1
S
1
−→ S
1
; E λ
S
1
−→ E λ
H
E
E −→ E + T 1
E −→ T 0
H
T
T −→ T ∗ F 0
T −→ F 1
H
F
F −→ (E) 0
F −→ N 1
H
N
N −→ C
1
N
0
1
N −→ 0 0
H
N
0
N
0
−→ N
0
C 0
N
0
−→ λ 1
H
C
C −→ C
1
0
C −→ 0 1
H
C
1
C
1
−→ 1 011
C
1
−→ 2 000
C
1
−→ 3 101
C
1
−→ 4 0100
C
1
−→ 5 111
C
1
−→ 6 001
C
1
−→ 7 100
C
1
−→ 8 110
C
1
−→ 9 0101
Se observ˘a c˘a product ¸iilor S
1
−→ S
1
; E ¸si S
1
−→ E li se asociaz˘a codul
vid, precum am ar˘atat la procedeeul de extindere al sistemului.
ˆ
In rest,
la derivarea celorlalte variabile se poate ascunde un singur bit, cu except ¸ia
variabilei C
1
cu care se pot ascunde 3 sau 4 bit ¸i.
Textul clar
Vom considera un mesaj ca fiind un text ˆın limba englez˘a din care s-au
eliminat spat ¸iile ¸si semnele de punctuat ¸ie ¸si s-au transformat toate literele
51
52ANEXA C. EXEMPLU DE APLICARE A CRIPT
˘
ARII/DECRIPT
˘
ARII
litere mari. Acestui mesaj i se aplic˘a funct ¸ia de codificare Huffman bazat˘a
pe tabela din anexa A. Rezultatul obt ¸inut este textul clar.
Pentru acest exemplu vom considera textul Make love not War. Acesta
sufer˘a urm˘atoarele transform˘ari:
• eliminarea spat ¸iilor ¸si transformarea literelor ˆın litere mari
MAKELOV ENOTWAR
• aplicarea funct ¸iei de codificare Huffman (rezult˘a textul clar)
00011 1011 01010110 001 10100 1000 0101010 001
0100 1000 1101 000011 1011 0111
procesul de criptare
Dup˘a aplicarea procedurii cuvinte, mult ¸imea de product ¸ii P

va ar˘ata
cam a¸sa (se poate proba u¸sor urm˘arind pa¸sii algoritmului):
C
1
−→ 1[2[3[4[5[6[7[8[9
C −→ 0[1[2[3[4[5[6[7[8[9
N
0
−→ λ N −→ 0[1[2[3[4[5[6[7[8[9
F −→ 0[1[2[3[4[5[6[7[8[9
T −→ 0[1[2[3[4[5[6[7[8[9
E −→ 0[1[2[3[4[5[6[7[8[9
S
1
−→ 0[1[2[3[4[5[6[7[8[9
F −→ (0)[(1)[(2)[(3)[(4)[(5)[(6)[(7)[(8)[(9)
Le-am a¸sezat ˆın ordinea ˆın care apar ˆın P

pe durata execut ¸iei algoritmu-
lui.
Se adaug˘a la sf˘ar¸situl textului clar marcatorul de sfˆar¸sit de fi¸sier adic˘a
codul Huffman al lui < EOF > (01010111010111) Rezult˘a ¸sirul:
00011 1011 01010110 001 10100 1000 0101010 001
0100 1000 1101 000011 1011 0111 01010111010111
Voi ilustra printr-un tabel pa¸sii pe care ˆıi execut˘a algoritmul p˘ana se
ascunde tot textul clar, ar˘atˆand la fiecare pas ce derivare se folose¸ste ¸si ce
bit se ascunde.
53
criptat Product ¸ia Bit ¸ii
folosit˘a ascunsi
S
1
S
1
−→ S
1
; E λ
S
1
; E E −→ T 0
S
1
; T T −→ T ∗ F 0
S
1
; T ∗ F F −→ (E) 0
S
1
; T ∗ (E) E −→ (E + T) 1
S
1
; T ∗ (E + T) T −→ F 1
S
1
; T ∗ (E + F) F −→ N 1
S
1
; T ∗ (E + N) N −→ 0 0

Sign up to vote on this title
UsefulNot useful