Algoritmul Blum- Micali este un algoritm sigur din punct de vedere criptografic pentru generarea de secvențe pseudo-aleatoare folosind Random seed . Ideile din spatele algoritmului au fost conturate de Bloom și Micali în 1984. Algoritmul a fost dezvoltat pe baza algoritmului generator Shamir propus de Adi Shamir cu un an mai devreme [1] . Algoritmul diferă de predecesorul său prin cerințe mai puternice pentru complexitatea calculării secvenței de ieșire. Spre deosebire de generatorul Shamir, rezultatul acestui algoritm este biți, nu numere.
Luați în considerare cea mai simplă idee de a construi un generator de numere pseudoaleatoare: ni se oferă o secvență aleatorie inițială (sămânță) și alegem un algoritm de criptare. În plus, la fiecare iterație, prin criptarea stării curente și alegând un set de biți din rezultat, putem obține o secvență de numere care pare destul de aleatorie.
Algoritmul Bloom-Micali folosește exact acest proces, folosind „hardcore bits” (hard-core bit, hard-core predicate ).
Venind cu algoritmul, Bloom și Micali au propus trei cerințe pentru secvența de ieșire:
O „bătaie hardcore” (predicat) B pentru o funcție f este o funcție astfel încât:
— Sămânță — lungimea argumentului funcției . Ea este lungimea . - conversie de la la , și - de la la {0,1} - bit complicat pentru . ; sunt biții din secvența finală generată. ; . -pseudo-aleatorie - o proprietate a secvenței pentru care se realizează - bit complex - o proprietate a funcției pentru care ,
unde este algoritmul găsit de criptoanalist în timp .
Să-l definim ca următorul proces: Luați o secvență aleatorie (sămânță). Dacă este un bit -complex, atunci este un generator de numere -pseudo-aleatoare.
- timpul de calcul al funcției .
Teorema se demonstrează prin contradicție; Se presupune că există un algoritm care vă permite să găsiți un element, cunoscând precedentul [2] .
Generatoarele bazate pe acest algoritm sunt utilizate atât în sistemele cu chei private, cât și în cele publice.
Doi parteneri, după ce au schimbat în siguranță o secvență inițială secretă, primesc o secvență aleatorie comună de lungime de multe ori mai mare decât secvența inițială.
În sistemele cu chei publice (criptare asimetrică)Goldwasser și Micali au arătat [3] că, presupunând că determinarea reziduurilor patratice modulo numere compuse este o sarcină dificilă din punct de vedere computațional, există o schemă de criptare cu următoarea proprietate:
„Un atacator, cunoscând algoritmul de criptare și având textul cifrat, nu poate obține orice informație despre textul original.”
Această proprietate este cunoscută și sub numele de principiul Kerckhoffs .
Să luăm atât de simplu și , că - 1024 de biți și . Funcția . Bitul complex este o funcție care returnează bitul cel mai puțin semnificativ. este astfel în ipoteza că nu există un algoritm pentru calcularea logaritmului discret de complexitate mai bun sau egal cu .
De asemenea, sa arătat [4] că generatorul rămâne asimptotic stabil dacă nu unul, dar sunt aleși mai mulți biți inferiori pentru secvența de ieșire. Dar este de remarcat faptul că generatorul într-o astfel de modificare nu va mai corespunde algoritmului Blume-Micali.
Să dăm câteva estimări numerice pentru BBS pentru două opțiuni de atac:
Să presupunem că este necesar să se genereze o secvență de lungime , astfel încât niciun algoritm să nu poată distinge această secvență de una cu adevărat aleatorie în timpul operațiunilor cu o probabilitate mai mare de 1/100. Calculul arată că pentru a genera o astfel de secvență, este nevoie de o grăunță de lungime a biților. În cazul în care este necesară compromiterea generatorului, de ex. găsiți o sămânță din secvența de ieșire pentru aceiași timpi cu aceeași precizie, atunci protecție împotriva unui astfel de atac va fi asigurată doar pentru biți [4] .
Fie un număr prim de 1024 de biți și . Să definim → ca .
Bit complicat
B(x) este astfel în ipoteza că nu există un algoritm pentru calcularea logaritmului discret cu o funcție de complexitate sau mai bună.
Puterea criptografică a generatoarelor de mai sus s-a bazat pe dificultatea de a găsi un logaritm discret. Generatorul Kalinske folosește ideea de curbe eliptice.
Fie un număr prim astfel încât . Se consideră o curbă în x ( câmp Galois ) de forma: . Punctele curbei , împreună cu punctul de la infinit , formează un grup de ordine ciclică . Să fie generatorul acestui grup.
Să introducem următoarea funcție: În
consecință, funcția utilizată în generator are forma:
Bit complex al generatorului:
Sămânța unui astfel de generator este un punct de pe curbă.
Se dovedește că problema distincției între o secvență aleatorie adevărată și o secvență generată după schema Bloom-Micali se poate reduce la problema inversării funcției [5] .
Implementările acestui algoritm, de regulă, se bazează pe complexitatea calculării funcțiilor inverse, de exemplu, pe complexitatea calculării logaritmului discret . Prin urmare, pentru a rupe acest algoritm, trebuie doar să puteți lua un logaritm discret într-un timp previzibil. Pe implementările de computer reale, pentru numere alese corect, aceasta este o operațiune foarte intensivă în resurse. Cu toate acestea, un algoritm similar pe un computer cuantic oferă un câștig de viteză la pătrat, ceea ce face ca piratarea unui astfel de generator să fie mult mai realistă. Atacul se bazează pe una dintre variantele algoritmilor cuantici - amplitude jump , o versiune mai generalizată a algoritmului lui Grover [6] .