Testul pentru următorul bit ( eng. next-bit test ) este un test care servește la testarea generatoarelor de numere pseudoaleatoare pentru puterea criptografică . Testul spune că nu ar trebui să existe un algoritm polinom care, având în vedere primii k biți ai unei secvențe aleatoare, poate prezice k + 1 biți cu probabilitate inegală cu ½.
În teoria criptografiei , o problemă separată este de a determina cât de aleatorie este o secvență de numere sau biți generată de un generator. De regulă, în acest scop sunt utilizate diverse teste statistice, cum ar fi testele DIEHARD sau testele NIST . Andrew Yao a demonstrat [1] în 1982 că un generator care trece „testul următorului bit” va trece orice alt test de aleatorie statistică care poate fi făcut în timp polinomial.
Un generator binar trece testul pentru următorul bit dacă: pentru orice și orice algoritm de timp polinomial probabilistic A: -> {0,1} (Algoritm care are ca date inițiale o secvență de biți de lungime și produce un bit la nivelul său). output), următoarea este inegalitatea adevărată:
unde este desemnarea unei funcții care descrește mai repede decât polinomul invers de gradul n .
Este de remarcat faptul că definiția unui test pentru următorul bit nu oferă niciun algoritm pentru efectuarea acestui test.
Secvența binară , primită de la sursa S, se consideră că a trecut testul extins pentru următorul bit dacă: pentru orice i și l: 1 < i, l < n și orice algoritm probabilistic în timp polinomial A: ->
Se dovedește că testul extins pentru următorul bit și testul pentru următorul bit sunt echivalente. [2]
Deși următorul test de biți este o metodă universală de verificare a independenței biților de ieșire ai unei secvențe, este potrivit doar pentru secvențele imparțiale, adică acelea în care probabilitatea de apariție a lui unu este echivalentă cu probabilitatea de apariție a lui zero. .
Dacă secvența de ieșire trebuie să aibă în mod evident o părtinire , adică , atunci acest test nu este potrivit.
Prin urmare, pentru a testa independența biților de ieșire ai unor astfel de secvențe, trebuie utilizate alte teste. În special, a fost propusă o extindere a testului la următorul bit - un test comparativ cu următorul bit [3] . Ideea testului este că inițial credem că distribuția secvenței de ieșire este descrisă de un model matematic, iar testul servește la verificarea conformității generatorului cu acest model.
Un generator binar trece testul de comparație al următorului bit S față de modelul M dacă: pentru orice i și orice algoritm probabilistic în timp polinomial (adică, un algoritm care are o secvență de biți de lungime i ca intrare și iese un bit), următoarele inegalitatea este valabilă:
unde este probabilitatea ca algoritmul să prezică următorul bit pentru generatorul de model.
Evident, având în vedere un model M care reprezintă o secvență cu adevărat aleatorie, obținem , adică un test clasic pentru următorul bit. Având în vedere modelul cu și , obținem cazul de testare dorit pentru o secvență dezechilibrată cu o părtinire dată .
Acest test profită de structura arborescentă , care este capabilă să stocheze toate informațiile despre subsecvențele din secvența generală.
Algoritmul pentru calcularea secvențelor de m-biți poate fi reprezentat ca un arbore binar cu muchii ponderate. În acest arbore, fiecare frunză la adâncimea l stochează informații despre de câte ori a fost întâlnită secvența dată de l-biți. Deoarece arborele este ponderat, fiecăreia dintre marginile sale i se atribuie raportul dintre cantitatea scrisă în foaia copil și cantitatea scrisă în părinte. Pentru o secvență aleatorie suficient de mare, se presupune că numerele corespunzătoare marginilor vor fi aproximativ egale cu 1/2.
Etapele algoritmului Sadeghian-MahaeryAm stabilit valoarea r ca probabilitatea ca generatorul ideal să genereze o secvență mai puțin aleatorie decât cea studiată. De obicei, r este ales în intervalul [0,001; 0,01]. Atunci, dacă valoarea P este mai mare decât r, atunci secvența studiată este considerată aleatorie și invers.
Testul Sadeghyan-Mohaeri nu oferă un criteriu clar și precis pentru determinarea aleatoriei unei secvențe. În schimb, creatorii algoritmului își asumă capacitatea de a trage unele concluzii despre comportamentul general al secvenței. Când algoritmul prezice cu succes (l+1) biți, se consideră că a apărut determinism local.
Scopul acestui test este de a determina abaterile în statisticile de apariție a biților următori pentru o secvență. Dacă există o astfel de abatere, testul încearcă să o folosească pentru a prezice următorul bit. O secvență este considerată non-aleatoare dacă conține prea multe subsecvențe al căror ultim bit este previzibil.
Testul practic arată rezultate mai rezonabile în comparație cu testul original Sadeghyan-Mokhaeri.
Etapele algoritmului PNBTrebuie remarcat faptul că nu există o teorie cunoscută [4] care să permită calcularea valorilor exacte ale μ și σ utilizate în ultimul pas al algoritmului. Prin urmare, aceste valori sunt calculate aproximativ.