Documente Academic
Documente Profesional
Documente Cultură
Clasificare:
generatori simplii
Generatorul liniar congruential
Generatori Ranrot
Generatorul Blum – Blum – Shub
generatori bazati pe LFSR
Generatorul Geffe
Generatori de tip “Stop-and-go”
Generatorul Stop-and-go alternativ
alte clase
Generatorul Mother-of-all
Generatorul Blum – Micali
Generatorul1/p
Generatorul Blum – Blum – Shub
Unul dintre cele mai des utilizate generatoare de numere pseudo-aleatoare,este
acest generator.
Generatorul Blum – Blum – Shub se bazeaza pe problema resturilor
patratice, al carei enunt este urmatorul:
Fie un intreg n = pq, unde p si q sunt numere prime necunoscute si fie:
Daca:
Generatorul Blum – Blum – Shub este considerat un generator sigur din punct
de vedere criptografic, in acest moment, fiind dealtfel considerat drept cel mai bun
generator de numere pseudo-aleatoare pentru protocoale de generare si distributie a
cheii.
Securitatea acestuia se bazeaza pe dificultate factorizarii lui n, unde n poate fi
facut public (oricine poate genera o secventa pseudo-aleatoare pe baza lui). Iar daca n
nu se descompune in factori, nimeni nu poate prezice iesirea.
Mai mult, fiind data o parte a secventei, nu exista nici o modalitate de a prezice
bitul anterior sau pe cel ulterior secventei.
Acest algoritm este folosit pentru generarea unei secvenţe de biţi
pseudoaleatoare, secvenţă folosită ca şi cheie de criptare de către algoritmul
AES(Algoritmul AES este un algoritm de criptare simetric, bloc. Aceasta înseamnă
că la criptare şi la decriptare se foloseşte aceeaşi cheie, şi că procesul de criptare se
desfăşoară pe blocuri de biţi.). Acest algoritm este destul de simplu de implementat,
dar este extrem de eficace pentru scopul acesta, de a genera o cheie de criptare
pseudoaleatoare. Anume, dacă se generează numere (secvenţe de biţi, până la urmă)
în intervalul [0..n-1], un observator nu poate prezice numărul care urmează a fi
generat cu o probabilitate mai mare de 1/n. Algoritmul funcţionează destul de simplu,
fiind prezentat în cele ce urmează. Iniţial, se generează două numere prime Blum, p şi
q. Numerele prime Blum sunt numere prime, pentru care restul împărţirii lor la 4 este
3. Pasul următor este alegerea unui număr, seed, din intervalul [1..p*q].
Se calculează
Exemplu
Fie p = 383, q = 503; deci n = 192649. Alegand x0 = 1013552 (mod n) = 20749,
generatorul BBS va produce ¸sirul pseudo-aleator 11001110000100111010.
class bbs{
ll p, q, M, seed, actual;
ll gcd(ll a, ll b){
if(b == 0) return a;
return gcd(b, fmod(a,b));
}
public:
bbs(ll p, ll q, ll s){
this->p = p;
this->q = q;
this->seed = s;
M = p*q;
actual = s;
}
ll getrandom(){
ll r = fmod(actual*actual,M);
actual = r;
return r;
}
ll getirandom(int i){
ll g = gcd(p, q);
ll lcm = p*q/g;
ll exp = 1;
for(int j = 1; j <= i; ++j) exp = fmod((exp+exp),lcm);
ll x0 = seed*seed;
ll r = x0;
return r;
}
}
int main(){
ll p = 11;
ll q = 19;
ll s = 3;
www.wikipedia.com