Sunteți pe pagina 1din 15

Capitolul 3 - Generatoare de numere pseudo-aleatoare

3. Generatoare de numere pseudo-aleatoare

O primitivă criptografică fundamentală este generarea de numere pseudo-aleatoare,


folosite îndeosebi la construcţia de chei criptografice care să fie impredictibile pentru
adversar. De exemplu, o metodă comună de a construi un criptosistem este să operăm XOR
(funcţia SAU exclusiv) bit cu bit un şir aleator cu mesajul care trebuie criptat.
Un generator de numere pseudo-aleatoare (PseudoRandom Number Generator –
PRNG) este un algoritm care generează un şir de numere care sunt relativ independente între
ele şi care aproximează anumite proprietăţi ale numerelor aleatoare.
În statistică, un număr aleator este o valoare singulară a unei variabile aleatoare. Când
distribuţia nu este precizată se presupune distribuţia uniformă continuă pe intervalul [0, 1]. În
sens informal, definiţia este oarecum circulară în sensul că noţiunea de variabilă aleatoare se
bazează pe conceptul de aleatoritate. Un număr în sine nu poate fi aleator, decât relativ la felul
în care a fost generat. A genera un număr aleator înseamnă că toate numerele generate
înaintea sa au avut o probabilitate egală de apariţie. În particular, cunoaşterea numerelor deja
generate nu aduce nici o informaţie suplimentară asupra numărului care urmează să fie
generat, adică numerele aleatoare sunt statistic independente.
Numerele aleatoare veritabile se pot genera folosind generatoare hardware.
Deoarece orice PRNG rulând pe un computer determinist este un algoritm determinist,
şirul generat va avea anumite proprietăţi pe care un şir de numere aleatoare veritabile nu le
are. O asemenea proprietate este periodicitatea, garantată de faptul că generatorul foloseşte o
cantitate fixă de memorie, ceea ce va conduce ca după un număr suficient de mare de iteraţii,
algoritmul să revină într-o stare internă deja parcursă şi din acest moment el îşi va repeta
comportarea într-un ciclu infinit. O altă proprietate a unui PRNG este că el poate fi activat
dintr-un punct de start arbitrar – starea iniţială şi de fiecare dată va produce acelaşi şir de numere.
În practică, multe PRNG-uri prezintă caracteristici care le pot împiedica să treacă testele
statistice, cum ar fi:
- perioadă mai scurtă decât cea aşteptată, pentru anumite stări iniţiale;
- distribuţie dimensională slabă;
- valorile succesive pot să nu fie independente;
- anumiţi biţi sunt ”mai aleatori” decât alţii;
- lipsa uniformităţii.

44
Capitolul 3 - Generatoare de numere pseudo-aleatoare

Este posibilă o analiză eficientă a ieşirii unui PRNG în scopul recunoaşterii numerelor
care nu sunt aleatoare. Un PRNG care trece cu succes această analiză se numeşte criptografic
sigur (CSPRNG - Cryptographically Secure PseudoRandom Number Generator), în sensul că
are proprietăţi statistice bune şi rezistă în cazul unui atac, chiar dacă o parte din secretele sale
sunt cunoscute.

Cerinţe
Un CSPRNG trebuie să satisfacă testul ”next-bit”, care constă în faptul că, dându-se
primii k biţi ai unui şir aleator nu există un algoritm de timp polinomial care să prezică
următorul bit cu o probabilitate mai mare decât ½. S-a demonstrat că un generator care trece
acest test va trece cu succes şi toate celelalte teste statistice în timp polinomial de verificare a
caracterului aleator.
Un CSPRNG trebuie să reziste în cazul în care starea lui este cunoscută, în sensul că
trebuie să fie imposibil de reconstruit şirul anterior de numere aleatoare generate şi de
asemenea trebuie să fie extrem de dificil de dedus starea următoare a generatorului.
Există algoritmi CSPRNG, cum ar fi generatorul BBS (Blum Blum Shub), cu un grad
ridicat de securitate, dar cam lent. Un cifru bloc sigur poate fi convertit într-un CSPRNG prin
rularea în modul counter. Se alege o cheie arbitrară şi se criptează un bloc cu toate valorile 0,
apoi 1, 2..etc. Valoarea iniţială a counter-ului poate fi orice valoare arbitrară nenulă. Perioada
generatorului CSPRNG astfel construit va fi de 2n pentru cazul unui bloc de n biţi.
Din punct de vedere matematic generarea unui şir de numere pseudo-aleatoare este
echivalentă cu simularea unei variabile aleatoare discrete uniform repartizată.
O variabilă aleatoare discretă, X, cu valori în mulţimea {1, 2, …, n} este uniform
repartizată dacă P(X = i) = 1/n pentru 1 ≤ i ≤ n. Simularea unei astfel de variabile se bazează
pe utilizarea unei funcţii g : M k → M unde M este o submulţime a numerelor naturale care
pot fi reprezentate în calculator. Pentru a genera un şir de numere se stabilesc valorile iniţiale
x1, x2, ..., xk care formează sămânţa generatorului (seed) şi se foloseşte relaţia de recurenţă:

xn = g (xn – 1, xn – 2, ..., xn – k), n > k

Deoarece M este o mulţime finită rezultă că şirul recurent xn este periodic.


Pentru ca generatorul astfel definit să fie acceptabil trebuie să îndeplinească cel puţin
două condiţii:

- Perioada sa să fie mare în raport cu numărul de valori generate.

45
Capitolul 3 - Generatoare de numere pseudo-aleatoare

- Valorile generate să nu fie secvenţial corelate: considerând subşiruri de câte p valori


succesiv generate ca reprezentând coordonate de puncte în spaţiul cu p dimensiuni,
aceste puncte trebuie să realizeze o ”umplere” a spaţiului p-dimensional. În cazul
prezenţei corelaţiei secvenţiale, aceste puncte se grupează într-un număr redus de
hiperplane.

Satisfacerea acestor condiţii poate fi asigurată printr-o bună alegere a funcţiei g.


Cele mai frecvent utilizate metode sunt cele congruenţiale, caracterizate printr-o recurenţă de
forma:

xn = f(xn – 1, xn – 2, ..., xn – k) mod m

unde f : M k → M este o funcţie, iar k şi m sunt valori care definesc generatorul.


Dintre metodele congruenţiale, cele mai utilizate sunt cele pentru care f este o funcţie
liniară:

xn = a1xn – 1 + a2xn – 2 + ... + akxn – k + c, mod m


cu a1, a2, ..., ak, c şi m valori întregi care caracterizează generatorul.

De regulă ai , c ∈ {0, 1, …, m - 1}, iar x1, x2, …, xk sunt valorile iniţiale. Valorile generate
sunt în mulţimea {0, 1, …, m - 1}, iar perioada poate fi cel mult m. Din acest motiv m se alege
cât mai mare, fiind de regulă cel mai mare întreg pozitiv care poate fi reprezentat în
calculator.

Mai dificilă este problema alegerii parametrilor ai şi c, pentru care nu există "reţete"
riguroase ci mai degrabă există valori particulare care au fost determinate în urma testelor de
eficienţă.
Cel mai adesea se utilizează generatori de ordinul 1, a căror formă este

xn + 1 = axn + c mod m.

Dacă c este nul, generatorul se numeşte congruenţial multiplicative, iar dacă c este
nenul este numit congruenţial mixt.

46
Capitolul 3 - Generatoare de numere pseudo-aleatoare

3.1 Generatoare liniar congruenţiale

Generatoarele congruenţiale liniare (LCG) sunt generatoare de şiruri pseudo-aleatoare


de forma:
Xn = (aXn-1 + b) mod m
unde Xn este elementul n al şirului, iar Xn-1 este elementul precedent.

Variabilele a, b şi modulul m sunt constante. Cheia sau sămânţa (seed) este valoarea lui
X0. O notaţie consacrată este LCG(m, a, b,X0) cu a, b, X0 în Zm.
Acest generator are o perioadă mai mică sau egală cu m. Dacă a, b şi m sunt alese
corespunzător (b să fie relativ prim cu m), atunci generatorul va fi un generator de perioadă
maximă (sau de lungime maximă), având perioada egală cu m. [Sib88]. Alegerea constantelor
care asigură perioada maximă este tratată în [PFT88]; aceste constante definesc generatoarele
liniar congruenţiale care trec cu succes testul spectral pentru numere aleatoare pentru
dimensiunile 2, 3, 4, 5 şi 6 [CMP67]. Leamer a propus generatorul LCG(108+1, 23, 0,
47594118) care are perioada de 5882352.
Avantajul generatoarelor congruenţiale liniare este viteza, deoarece necesită puţine
operaţiuni. Dezavantajul lor este că nu pot fi folosite pentru criptografie, deoarece sunt
predictibile. Atât ele, cât şi cele pătratice şi cubice – în general generatoarele congruenţiale
polinomiale au fost sparte [Ree77, Kra92].

3.2. Regiştri de deplasare cu feedback liniar1

Şirurile generate de regiştri de deplasare sunt folosite atât în criptografie cât şi în teoria
codurilor. Cifrurile şir bazate pe ele au fost primele implementate electronic în criptografia
militară.
Un registru de deplasare cu feedback liniar este compus din două părţi: un registru de
deplasare şi o funcţie de feedback. Registrul de deplasare este un şir de biţi. Lungimea
registrului se exprimă în biţi; dacă el conţine n biţi se numeşte registru de deplasare de n biţi.
Când trebuie generat un bit, toţi biţii din registru sunt deplasaţi spre dreapta. Ieşirea registrului
este bitul de pe poziţia cea mai din dreapta, care prin deplasare părăseşte registrul. Registrul
este completat cu un bit nou pe poziţia cea mai din stânga, acesta fiind calculat ca valoarea

1
Linear Feedback Shift Registers
47
Capitolul 3 - Generatoare de numere pseudo-aleatoare

unei funcţii de alţi biţi ai registrului (fig. 3.1). Perioada unui registru de deplasare este
lungimea şirului de biţi generat, înainte ca acest şir să se repete.
Cifrurile şir care folosesc regiştri de deplasare sunt uşor de implementat digital.
[Gol82].
Cel mai simplu astfel de generator este LFSR (Linear Feedback Shift Register). Funcţia
de feedback este operaţiunea XOR între anumiţi biţi ai registrului; lista acestor biţi se numeşte
secvenţă ”tap” sau configuraţie Fibonacci. LFSR este cel mai comun tip de registru de
deplasare folosit în criptografie, un motiv fiind şi faptul că datorită funcţiei de feedback
simplă, există o teorie matematică dezvoltată de analiză a securităţii bazată pe testarea calităţii
aleatoare a şirului generat.

bn bn-1 .... b4 b3 b2 b1

funcţia feedback

Fig. 3.1 Registru de deplasare cu feedback

Un generator LFSR de n biţi poate fi într-una din cele 2n - 1 stări posibile (se exclude
starea în care toţi biţii registrului sunt 0, deoarece aceasta va genera un şir infinit de zerouri) şi
teoretic va putea genera un şir 2n - 1 biţi pseudo-aleatori înainte de a se repeta. Pentru ca
LFSR-ul să treacă prin toate cele 2n - 1 stări posibile este necesară o anumită alegere a
secvenţei "tap". În acest caz generatorul este LFSR de perioadă maximă, iar şirul de biţi
generat se numeşte m-şir.
Pentru ca un LFSR să fie de perioadă maximă, polinomul format din secvenţa ”tap” şi
constanta 1 trebuie să fie o primitivă polinomială modulo 2, având gradul egal cu lungimea
registrului. O primitivă polinomială de grad n este un polinom ireductibil care divide x2n-1 +
1, dar nu divide pe xd + 1, pentru nici un d divizor al lui 2n– 1. [Gol82]. În general nu există o
cale simplă de a determina o primitivă polinomială modulo 2 de grad dat. Cel mai simplu mod
de a construi o primitivă polinomială de grad n modulo 2, este prin alegerea aleatoare a unui
polinom şi testarea condiţiei de primitivă. Operaţiunea de testare este complicată –
echivalentă din punct de vedere al efortului de calcul cu testarea primalităţii [LiN96].

48
Capitolul 3 - Generatoare de numere pseudo-aleatoare

Numărul de coeficienţi nenuli împart primitivele polinomiale în primitive cu puţini coeficienţi


(sparse), care conduc la generatoare rapide şi primitive dense cu mulţi coeficienţi, care sunt de
preferat pentru aplicaţiile criptografice [GoM84, Rab81]. Generarea primitivelor polinomiale
dense modulo 2 nu este o operaţiune simplă: în general pentru a găsi o primitivă polinomială
de grad k trebuie cunoscută factorizarea lui 2k – 1.
Principala slăbiciune a unui LFSR derivă din faptul că o stare internă este formată din
următorii n biţi generaţi, ceea ce, chiar dacă schema de feedback este necunoscută, face ca
aceasta să poată fi determinată din doar 2n biţi generaţi, folosind algoritmul Berlekamp-
Massey. [MeT79]. De asemenea, numerele aleatoare mari formate secvenţial din biţii şirului
generat sunt puternic corelate şi pentru anumite aplicaţii nu prezintă calităţi aleatoare bune.
Implementarea software a unui LFSR este lentă, chiar dacă este realizată în limbaj de
asamblare. O soluţie este rularea în paralel a 16 sau 32 de LFSR având aceeaşi polinom de
feedback. Este posibil de asemenea să se modifice schema de feedback, astfel încât fiecare bit
din secvenţa ”tap” este operat XOR cu ieşirea generatorului şi înlocuit, iar bitul generat
devine noul bit de pe poziţia cea mai din stânga a registrului. Această modificare se numeşte o
configuraţie Galois şi oferă o bună implementare dacă hardware-ul permite operare paralelă.

3.3. Registrul de deplasare cu feedback2

Familia de generatoare de numere pseudo-aleatoare numită registru de deplasare cu


feedback (Feedbak Shift Register – FSR) a fost propusă de Tausworthe [Tau65] în forma sa
generală:

bn = cq – 1 bn – 1 ⊕ cq – 2 bn – 2 ⊕ cq – 3 bn – 3 ⊕ ..... ⊕ c0 bn – q

unde ci şi bi sunt variabile binare cu valori 0 sau 1.


Generatorul foloseşte doar ultimii q biţi ai şirului, fiind un şir autoregresiv de ordin q.
Un şir autoregresiv poate avea o perioadă maximă de 2q – 1.
Dacă se notează cu D un operator de întârziere (delay operator) cum ar fi Db(n) =
b(n+1) ecuaţia anterioară se poate scrie:

Dq b(i – q) =cq – 1 Dq - 1 b(i – q) + cq – 2 Dq -2 b(i – q) + cq – 3 Dq -3 b(i – q) +…+ c0 D0 b(i – q) mod 2


adică:
Dq - cq – 1 Dq - 1 - cq – 2 Dq -2 - cq – 3 Dq -3 - …- c0 D0 = 0 mod 2

2
Feedback Shift Register
49
Capitolul 3 - Generatoare de numere pseudo-aleatoare

Cum în aritmetica modulo 2 scăderea se poate înlocui cu adunarea şi folosind notaţia


tradiţională x în loc de D pentru variabilă, obţinem polinomul caracteristic:

xq + cq – 1 xq - 1 + cq – 2 xq -2 + cq – 3 xq -3 + … + c0

Perioada unui FSR depinde de acest polinom caracteristic astfel: perioada este cel mai
mic întreg pozitiv n pentru care xn + 1 este divizibil cu polinomul caracteristic. Perioada
maximă posibilă pentru un polinom de grad q este 2q – 1 şi un polinom care realizează
această perioada maximă este o primitivă polinomială.

3.4. Registrul de deplasare cu feedback generalizat3

Registrul de deplasare cu feedback generalizat (Generalized Feedback Shift Register -


GFSR) reprezintă o rafinare a generatorului FSR, în încercarea de a îmbunătăţi rezultatele
obţinute în urma rulării testelor statistice [LeP73] şi se bazează pe teoria primitivelor
trinomiale de forma xp + xq + 1. GFSR poate fi exprimat prin ecuaţia de recurenţă liniară:

xi = xi – p ⊕ xi – q

unde fiecare xi este un vector de dimensiune w cu componente 0 sau 1. Perioada maximă


posibilă de 2p – 1 a acestui generator se obţine atunci când primitiva trinomială xp + xq + 1
divide xn – 1, unde n = 2p – 1 pentru cea mai mică valoare a lui n. Perioada maximă se poate
obţine dacă n este un număr prim Mersenne.
Un număr de forma Mn = 2n – 1 unde n este un întreg se numeşte număr Mersenne.
Când Mn este un număr prim, el se numeşte număr prim Mersenne. Aceste numere prezintă
proprietăţi interesante [Cal94]:

Teoremă
Dacă 2n – 1 este număr prim, atunci n este de asemenea prim.

3
Generalized Feedback Shift Register
50
Capitolul 3 - Generatoare de numere pseudo-aleatoare

Testul Lucas-Lehmer
Pentru p număr prim impar numărul Mersenne 2p – 1 este prim dacă şi numai dacă 2p –
1 divide S(p – 1), unde S(n + 1) = S(n)2 – 2 şi S(1) = 4.

Generatorul GFSR este rapid: în procesul de generare al unui nou număr sunt necesare
doar trei locaţii de memorie şi o operaţiune XOR. Perioada GFSR este oricât de lungă şi
independentă de mărimea cuvântului procesorului.

3.4.1. Twisted GFSR


Generatorul Twisted GFSR a fost propus de Matsumoto şi Kurita [MaK92] pentru a
rezolva următoarele probleme ale generatorului GFSR:

- selectarea valorilor iniţiale (seeds) era critică din punct de vedere al influenţei asupra
calităţilor aleatoare ale şirului generat, iar o bună iniţializare necesita prea mult timp;
- fiecare bit din şirul generat de GFSR poate fi privit ca un q-şir bazat pe trinomul xp +
xq + 1, care se ştie că are un randament scăzut;
- perioada unui şir GFSR 2p – 1 este mai mică decât limita superioară teoretic posibilă;
- algoritmul necesită n cuvinte de memorie de lucru, dacă un număr mare de generatori
sunt implementaţi simultan.

TGFSR diferă de GFSR doar prin faptul că se bazează pe recurenţa liniară:

xk + n = xk + m ⊕ xk A, k = 0, 1, …

unde A este o matrice w x w cu elemente 0 şi 1 şi xk este un vector linie peste GF(2) –


corp finit Galois cu 2 elemente. Cu o alegere corespunzătoare a lui n, m şi A, generatorul
TGFSR îşi atinge perioada maximă de 2nw – 1 adică trece prin toate stările posibile, mai puţin
starea zero.

3.4.2 Mersenne Twister


Mersenne Twister - MT este o variantă îmbunătăţită a algoritmului TGFSR, care are o
perioadă de 219937 – 1 şi este echidistribuită în spaţiul cu 623 de dimensiuni [MaN98].
Proprietatea de k-echidistribuţie [RTE73] este o condiţie necesară pentru calitatea unui
şir de numere pseudo-aleatoare.

51
Capitolul 3 - Generatoare de numere pseudo-aleatoare

Pentru un întreg pozitiv k, un şir X = x0, x1, x2, … se numeşte k-echidistribuit dacă orice
vector nenul (a0, a1, . . . , ak-1) (există 2kw - 1 asemenea vectori) apare cu aceeaşi probabilitate
ca un vector (xl, xl+1, . . . , xl+k-1) în şirul X pentru l = 0, 1, 2, …
Există multe generatoare, teoretic de foarte bună calitate, dar puţine sunt practic
utilizabile. Situaţia pare a se datora lipsei unei definiţii pertinente pentru noţiunea de "calitate
aleatoare bună"4 aplicată la generatoarele de numere pseudo-aleatoare. Printre multele măsuri
de aleatoritate cunoscute, testele bazate pe uniformitatea în spaţiul cu multe dimensiuni, cum
ar fi testul spectral şi testul de k-distribuţie sunt considerate a fi cele mai puternice.
Definiţie
Un şir pseudo-aleator xi de vectori formaţi din w biţi, cu perioada P şi care satisface
următoarea condiţie se numeşte k-distribuit cu o rezoluţie de v biţi.
Condiţie
Fie truncv (x) vectorul format din primii v biţi ai lui x şi fie subşirul de k vectori binari
trunchiaţi de v biţi fiecare:
(truncv (xi), truncv (xi + 1),…, truncv (xi + k - 1)) (0 ≤ i < P)
Fiecare din cele 2kv posibile subşiruri apar de acelaşi număr de ori în şirul
pseudo-aleator xi pe parcursul perioadei P, excepţie făcând subşirul nul (cu toţi biţii zero),
care are o apariţie mai puţin.
Notaţie
Pentru fiecare v = 1, 2, …, w , se notează k(v) numărul maxim astfel încât şirul
pseudo-aleator xi să fie k-distribuit cu o rezoluţie de v biţi.
Are loc inegalitatea 2k(v)v – 1 ≤ P, deoarece cel mult P vectori xi diferiţi pot apare în
cadrul unei perioade, iar numărul posibil de forme de biţi în cei mai semnificativi v biţi (care
este 2v) ai celor k(v) cuvinte consecutive este 2k(v)v – 1 (s-a ţinut cont de cazul nul).
Semnificaţia geometrică este următoarea: se împarte fiecare întreg xi la 2w
normalizându-l la un număr real pseudo-aleator xi în intervalul [0, 1]. Subşirurile de k numere
(xi, xi + 1, …, xi + k - 1) (i = 0, 1, …, P – 1), se pot reprezenta ca şi P puncte în cubul unitate cu k
dimensiuni (adunarea din expresia indicilor este modulo P). Împărţind în părţi egale fiecare
din cele k laturi ale cubului în 2v părţi egale, se realizează o partiţionare a cubului în 2kv cuburi
congruente. Şirul este k-distribuit cu o rezoluţie de v biţi dacă fiecare din cele 2kv cuburi
conţine acelaşi număr de puncte (mai puţin cubul din origine care conţine cu un punct mai
puţin). În consecinţă, o valoare mai mare a lui v(k) pentru orice k asigură o echidistribuţie cu o
rezoluţie de v biţi într-un spaţiu cu mai multe dimensiuni. Prin testul de k-distribuţie se

4
good randomness
52
Capitolul 3 - Generatoare de numere pseudo-aleatoare

înţelege obţinerea valorile k(v). Acest test se aplică generatoarelor bazate pe recursivitate
liniară peste corpul Galois GF(2).
Interpretarea criptografică a k-distribuţiei presupune că şirul este este k-distribuit cu o
rezoluţie de v biţi, iar toţi biţii valorii iniţiale sunt aleşi aleator. În aceste ipoteze, cunoaşterea
celor mai semnificativi v biţi ai primilor j vectori nu permite nici o afirmaţie despre cei mai
semnificativi v biţi ai următorului vector, dacă j < k, deoarece orice configuraţie de biţi apare
cu aceeaşi probabilitate în primii v biţi ai următorului vector, conform definiţiei k-distribuţiei.
Astfel, dacă sistemul este sensibil doar la istoria a k sau mai puţini vectori generaţi cu o
rezoluţie de v biţi, sistemul este teoretic sigur.
MT generează un şir de vectori de cuvinte, care sunt considerate a fi întregi
pseudo-aleatori uniform distribuiţi în intervalul 0 şi 2w – 1. Împărţind fiecare număr la 2w – 1
se obţine câte un vector normalizat, adică un număr real între 0 şi 1.
Algoritmul se bazează pe următoarea recurenţă liniară:

xk + n = xk + m ⊕ (xku / xjk + 1)A, k = 0, 1, …

unde xu reprezintă cei mai semnificativi w – r biţi ai lui x, xj reprezintă cei mai puţin
semnificativ j biţi ai lui x, iar simbolul / indică operaţiunea de concatenare.
MT poate fi privit ca o altă generalizare a generatoarelor FSR: astfel, dacă se alege r =
0, relaţia de recurenţă caracterizează un generator TGFSR, iar dacă în plus matricea A este
matricea identitate, se obţine recurenţa de definiţie a unui generator GFSR.
Algoritmul MT este în esenţă o iterare a unei transformări liniare pe un spaţiu vectorial.
Spaţiul vectorial este mulţimea vectorilor de dimensiune w cu elemente 0 şi 1, cu r biţi
eliminaţi din partea dreaptă a primului vector. Acest spaţiu vectorial se numeşte matrice nxw-r
sau matrice incompletă. Tranziţia de stare este dată de transformarea liniară B, care elimină
primul vector din matrice, elimină r biţi din partea dreaptă a noului prim vector şi
completează matricea cu ultimul vector obţinut prin relaţia de recurenţă anterioară. MT îşi
atinge perioada maximă 2p –1 = 2nw – r – 1 dacă şi numai dacă funcţia ϕB(t) este primitivă
(ϕB(t) este caracteristica polinomială a matricii B). Vectorul de stare trece prin fiecare
configuraţie de biţi din matricea incompletă o singură dată într-o perioadă, cu excepţia stării
zero. În consecinţă, şirul {xn} este distribuit (n – 1). Pentru a asigura această comportare a
generatorului MT se alege p astfel încât 2p – 1 să fie număr prim, adică un număr prim
Mersenne. Alegând p = nw – r, se va testa primalitatea lui 2nw – r – 1 cu testul Lucas-Lehmer,
de unde vor rezulta valorile necesare construcţiei unui generator MT.

53
Capitolul 3 - Generatoare de numere pseudo-aleatoare

3.5. Feedback cu regiştri de deplasare cu transport

Un generator de feedback cu regiştri de deplasare cu transport (Feedback with Carry


Shift Registers) FCSR este similar cu un generator LFSR. Ei au în comun registrul de
deplasare şi funcţia de feedback; diferenţa este ca FCSR foloseşte şi un registru de transport.
În loc să se opereze XOR biţii din secvenţa de ”tap”, biţii se sumează şi se adună cu
conţinutul registrului de transport. Rezultatul modulo 2 reprezintă noul bit, adică valoarea de
pe poziţia cea mai din stânga a registrului de deplasare. Acelaşi rezultat se divide cu 2 şi
devine noul conţinut al registrului de transport.

Registrul de deplasare
Sumă Bitul
mod 2 generat
bn bn-1 .... b4 b3 b2 b1

Sumator

Sumă / 2

Fig. 3.2. Feedback cu regiştri de deplasare cu transport

În figura 3.5 se observă că registrul de transport nu este un bit singular; el este un


număr. Lungimea în biţi a registrului de transport trebuie să fie cel puţin egală cu log2t, unde t
este numărul de biţi din secvenţa de ”tap”. Perioada maximă pentru un FCSR nu este 2n-1, ci
q -1, unde q este întregul de conectare, care defineşte secvenţa de ”tap” şi este un număr
prim de forma:

q = 2q1 + 22q2 + 24q4 + … + 2nqn – 1

şi pentru care 2 trebuie să fie o rădăcină primitivă.


Nu toate stările iniţiale conduc la perioada maximă. Sunt posibile mai multe situaţii
pentru o stare iniţială dată:
- starea iniţială face parte din perioada maximă;
- starea iniţială conduce la perioada maximă după un număr de valori tranziente iniţial;
54
Capitolul 3 - Generatoare de numere pseudo-aleatoare

- starea iniţială conduce la un şir format doar din 1 sau doar din 0, după un număr de
valori tranziente iniţial.

Deşi există o formulă matematică pentru a determina ce se întâmplă cu o stare iniţială


dată, este mai simplu să fie testată, prin rularea FCSR-ului un număr de log2t + log2m + 1
paşi, unde m este memoria iniţială iar t este numărul de "taps". Dacă FCSR-ul conduce la un
şir de zero sau unu de n biţi, starea iniţială trebuie rejectată. Cum starea iniţială a unui FCSR
corespunde unei chei a cifrului şir înseamnă că un generator bazat pe un FCSR va avea o
mulţime de chei slabe.

3.5.1. Regiştri de deplasare cu feedback nonliniar


Dacă într-un LFSR sau FCSR se foloseşte o funcţie de feedback mai complicată se
obţine un registru de deplasare cu feedback nonliniar. Problema care apare este inexistenţa
unei teorii matematice care să sprijine analiza lor şi în practică se poate întâmpla ca:

- şirul de ieşire să conţină semnificativ mai mulţi biţi cu valoarea 1 decât cei cu valoarea
0;
- perioada maximă să fie mult mai mică decât cea aşteptată;
- perioada generatorului să depindă de alegerea valorii iniţiale;
- şirul de ieşire are iniţial aspect aleator, dar ajunge să cicleze pe o singură valoare.

Există însă şi un avantaj, care constă în faptul că dificultatea de a analiza teoretic


neliniaritatea generatorului se transferă şi în planul criptanalizei, existând puţine metode de
atac a cifrurilor şir bazate pe acest tip de generatori.

3.6. Teste statistice

Aspectul aleator
Generatoarele de numere pseudo-aleatoare care sunt folosite în aplicaţii criptografice, în
special la generarea cheilor, trebuie să satisfacă anumite condiţii de calitate a aleatorităţii
biţilor generaţi. În particular, ieşirea lor trebuie să fie impredictibilă în absenţa oricărei
informaţii privind datele de intrare. Gradul de aleator al şirului generat poate fi evidenţiat prin
teste statistice, care au scopul de determina dacă un generator este calificat pentru a fi folosit
în scopuri criptografice. Totuşi, nici un set de astfel de teste nu oferă garanţia absolută că un
anume generator este potrivit unei aplicaţii criptografice particulare, adică testele statistice nu
pot înlocui criptanaliza.
55
Capitolul 3 - Generatoare de numere pseudo-aleatoare

NIST5 a dezvoltat un set de teste statistice pentru aleatoritate, care au ca scop


determinarea abaterilor unui şir binar de la calitatea de a fi aleator. Interpretarea acestor
abateri trebuie însă să ia în considerare ca posibile cauze atât faptul că generatorul prezintă
defecte de proiectare, cât şi faptul că şirul binar testat prezintă anomalii, ceea ce este
explicabil prin aspectul aleator al datelor generate.
Numerele pseudo-aleatoare sunt necesare în majoritatea aplicaţiilor criptografice; în
general, cheile care sunt folosite se obţin folosind generatoare de numere pseudo-aleatoare.
Multe protocoale criptografice necesită intrări aleatoare de exemplu în generarea semnăturilor
digitale sau în procesul de autentificare.
Un şir de biţi aleatori poate fi interpretat ca rezultatul aruncărilor unei monede având
feţele marcate cu "0" şi "1", în care fiecare aruncare va produce un zero sau un unu cu aceeaşi
probabilitate, ½. Mai mult, aruncările monedei sunt independente una faţă de alta: rezultatul
unei aruncări nu trebuie să influenţeze în nici un fel o viitoare aruncare. Un astfel de
mecanism este un generator perfect de numere aleatoare, care se foloseşte ca termen de
comparaţie în evaluarea generatoarelor reale de numere pseudo-aleatoare.

Impredictibilitatea
Numerele generate de un PRNG trebuie să fie impredictibile, adică în cazul în care
valorile iniţiale nu sunt cunoscute, următorul număr generat să nu poată fi anticipat, indiferent
de câte numere anterioare se cunosc. Această proprietate se numeşte impredictibilitate
înainte. Este necesar de asemenea ca aflarea valorilor iniţiale să fie imposibilă, oricâte valori
generate se cunosc, ceea ce înseamnă impredictibilitate înapoi. Nu trebuie să fie evidentă
nici o corelaţie între valorile iniţiale şi oricare din valorile generate din acestea; fiecare
element din şirul generat trebuie să apară ca fiind ieşirea unui eveniment aleator independent cu
probabilitatea ½.
Pentru a asigura impredictibilitatea înainte, o grijă specială trebuie acordată obţinerii
valorilor iniţiale. Valorile produse de un PRNG sunt complet predictibile dacă se cunosc
valorile iniţiale şi algoritmul de generare. Cum în multe cazuri algoritmul este public, valorile
iniţiale trebuie păstrate secret şi alese astfel încât să nu poată fi deduse din şirul pe care îl
generează. Şi aceste valori iniţiale trebuie să fie de asemenea impredictibile.

5 National Institute of Standards and Technology

56
Capitolul 3 - Generatoare de numere pseudo-aleatoare

Testarea
Diverse teste statistice se pot aplica unui şir cu scopul de a compara şi evalua natura sa
aleatoare. Proprietăţile unui şir aleator se pot caracteriza şi descrie în termeni probabilistici.
Există un număr infinit de posibile teste statistice, fiecare prezumând prezenţa sau absenţa
unui “pattern” care, dacă este detectat ar indica faptul că şirul nu este aleator. În concluzie,
nici o baterie de teste nu este completă, iar rezultatele testelor statistice trebuie interpretate cu
precauţie, pentru a evita concluzii incorecte.
Un test statistic testează o ipoteză nulă specifică (H0), şi anume faptul că şirul testat
este aleator. Asociată cu ipoteza nulă este ipoteza alternativă Ha care presupune că şirul nu
este aleator. Pentru fiecare test, acceptarea sau respingerea ipotezei nule va conduce la
concluzia că generatorul produce sau nu valori aleatoare. Acceptarea sau respingerea ipotezei
nule trebuie să se bazeze pe alegerea şi folosirea unei statistici relevante de aleatoritate. În
ipoteza de aleatoritate, o astfel de statistică are o distribuţie a valorilor posibile. O distribuţie
teoretică de referinţă a acestei statistici în cazul ipotezei nule se determină prin metode
matematice şi pe baza ei se stabileşte o valoare critică. În timpul testului se calculează o
valoare de test a statisticii pe baza datelor, care se compară cu valoarea critică. Dacă valoarea
de test este mai mare decât valoarea critică, ipoteza nulă de aleatoritate este respinsă, altfel
ipoteza nulă este acceptată.
Testarea ipotezelor statistice este o procedură de generare a deciziei cu două posibile
rezultate: fie acceptarea ipotezei H0 (datele sunt aleatoare) fie acceptarea ipotezei Ha (datele
nu sunt aleatoare). Erorile posibile sunt de tip I – datele sunt aleatoare. dar ipoteza H0 este
respinsă, sau de tip II - datele nu sunt aleatoare, dar ipoteza H0 este acceptată.
Probabilitatea unei erori de tip I se numeşte nivel de semnificaţie al testului; ea se poate
fixa înainte de efectuarea testului şi se notează cu α. Pentru un test dat, α este probabilitatea
ca datele sa fie aleatoare, iar testul să indice că nu sunt aleatoare. Valoarea comună a pragului
α în criptografie este de aproximativ 0.01.
Probabilitatea unei erori de tip II se notează cu β. Pentru un test dat, β este
probabilitatea ca datele să nu fie aleatoare, iar testul să indice că sunt aleatoare. Spre
deosebire de α, β nu este o valoare pre-fixată, ci poate lua diferite valori corespunzătoare
diferitelor moduri în care un şir poate să nu fie aleator, iar calculul său este dificil. Unul din
scopurile principale ale unui test statistic este să minimizeze probablitatea unei erori de tip II.
Probabilităţile α şi β sunt dependente între ele, cât şi faţă de n – lungimea şirului testat, astfel
încât dacă două din aceste valori sunt date, a treia se poate determina automat. În practică se
stabileşte mărimea n a eşantionului de date şi nivelul de semnificaţie α. Se alege apoi o
57
Capitolul 3 - Generatoare de numere pseudo-aleatoare

valoare critică pentru o statistică astfel încât să se obţină cea mai mică valoare posibilă pentru
probabilitatea β.
Fiecare test se bazează pe o valoare calculată a statisticii de test, care este o funcţie de
datele testate. Dacă această valoare se notează S şi valoarea critică t, atunci :
α = probabilitatea erorii de tip I = P(S > t || H0 este adevărată) = P(respingere H0 | H0
este adevărată)
β = probabilitatea erorii de tip II = P(S ≤ t || H0 este falsă) = P(acceptare H0 | H0 este
falsă)
Statistica de test este folosită pentru a calcula o valoare p care exprimă gradul de
contrazicere a ipotezei nule. Pentru aceste teste, fiecare valoare p este probabilitatea ca un
generator perfect de numere aleatoare să producă un şir mai puţin aleator decât şirul testat.
Dacă o valoare p este egală cu 1, atunci şirul apare ca fiind perfect aleator. O valoare p
nulă indică un şir complet nealeator. Pentru teste se alege un nivel de semnificaţie α.; dacă
valoare p ≥ α., atunci ipoteza nulă este acceptată, deci şirul apare ca fiind aleator. Dacă
valoare p < α., atunci ipoteza nulă este respinsă, iar şirul apare ca fiind nealeator. Parametrul
α.indică probabilitatea unei erori de tip I. În mod normal α se alege în intervalul [0.001,
0.01]. O valoare α = 0.001 indică posibilitatea ca un şir din 1000 de şiruri să fie respinsă de
testul de aleatoritate. Pentru o valoare p ≥ 0.001 un şir va fi considerat aleator cu un prag de
încredere de 99.9%.

Consideraţii privind aspectul aleator, impredictibilitatea şi testarea


Se fac următoarele presupuneri privind şirurile binare aleatore care se testează:
1. Uniformitatea: în orice moment al generării şirului de biţi, probabilitatea de apariţie a unui
zero sau unu este aceeaşi adică are valoarea ½. Numărul aşteptat de biţi zero (respectiv
unu) este n/2, unde n este lungimea şirului în biţi.
2. Scalabilitatea: orice test aplicabil unui şir se aplică de asemenea oricărui subşir extras
aleator. Dacă un şir este aleator, orice subşir al său este de asemenea aleator. Deci orice
astfel de subşir ar trebui să treacă cu succes orice test de aleatoritate.
3. Consistenţa: comportarea unui generator trebuie să fie consistentă relativ la valorile iniţiale
(seeds). Generatorul trebuie testat pentru diferite valori iniţiale.

58

S-ar putea să vă placă și