Documente Academic
Documente Profesional
Documente Cultură
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ţă:
45
Capitolul 3 - Generatoare de numere pseudo-aleatoare
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
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].
Ş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
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
bn = cq – 1 bn – 1 ⊕ cq – 2 bn – 2 ⊕ cq – 3 bn – 3 ⊕ ..... ⊕ c0 bn – q
2
Feedback Shift Register
49
Capitolul 3 - Generatoare de numere pseudo-aleatoare
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ă.
xi = xi – p ⊕ xi – q
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.
- 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.
xk + n = xk + m ⊕ xk A, k = 0, 1, …
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ă:
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
Registrul de deplasare
Sumă Bitul
mod 2 generat
bn bn-1 .... b4 b3 b2 b1
Sumator
Sumă / 2
- starea iniţială conduce la un şir format doar din 1 sau doar din 0, după un număr de
valori tranziente iniţial.
- ş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.
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
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.
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%.
58