Puncte:1

Când se utilizează PRNG și când se utilizează CSPRNG

drapel ng

Înțeleg că PRNG sunt generatoare de numere aleatorii care utilizează un algoritm determinist bazat pe o sămânță.

Înțeleg, de asemenea, că CSRNG sunt PRNG care sunt sigure din punct de vedere criptografic pentru a genera numere aleatorii.

Și prin siguranța criptografică, cred că asta înseamnă că, chiar dacă un atacator cunoaște algoritmul determinist și sămânța, nu ar putea prezice următorul număr aleatoriu. Înțeleg că acest lucru se datorează faptului că CSRNG folosește și unele stări interne.

Dacă există erori în cele de mai sus, voi aprecia o clarificare deoarece întrebările mele depind de exactitatea lor.

Deci întrebarea mea principală este, când aveți nevoie de un PRNG? și când trebuie să utilizați un CSPRNG?

Răspunsul meu inițial la asta a fost că CSPRNG ar trebui folosit la generarea cheilor, dar când am căutat „pentru ce se folosesc prng”, una dintre paginile pe care le-am găsit a fost acest care afirmă că:

În criptografie, PRNG-urile sunt folosite pentru a construi chei de sesiune și pentru a transmite cifruri

Ceea ce mă lasă puțin confuz, de ce ar trebui PRNG, care nu este puternic criptografic, să fie folosit pentru chei? M-aș aștepta să fie folosit în schimb CSPRNG.

Acest lucru mă face să realizez că poate nu înțeleg încă pe deplin PRNG-urile și CSPRNG-urile și cum sunt utilizate. De aici această întrebare: în criptografie, când se utilizează exact PRNG și când se utilizează CSPRNG?

kelalaka avatar
drapel in
[Care este diferența dintre CSPRNG și PRNG?](https://crypto.stackexchange.com/questions/12436/what-is-the-difference-between-csprng-and-prng), [https://crypto. stackexchange.com/questions/60405/why-are-prng-in-programming-languages-not-cryptographically-secure-by-default/60407#60407](https://crypto.stackexchange.com/q/60405/18298 ), Ar trebui să vă uitați și la site-ul nostru. Acestea sunt câteva exemple.
Finlay Weber avatar
drapel ng
într-unul dintre linkuri, întrebarea spune că „Folosim PRNG pentru generarea cheilor” este adevărat? Sunt PRNG folosite pentru generarea cheilor? sau CSPRNG este folosit?
Finlay Weber avatar
drapel ng
M-am uitat la ambele link-uri și nu sunt sigur că răspund la întrebarea mea principală: în criptografie, când se utilizează exact PRNG și când se utilizează CSPRNG?
kelalaka avatar
drapel in
Întrebarea ta principală este lipsa contextului. Răspunsul simplu folosește CSPRNG ori de câte ori este disponibil? Deci, ce sistemele dvs. nu reușesc să aibă CSPRNG și ce aveți în sistemul dvs., astfel încât sistemul dvs. țintă să fie securizat împotriva atacurilor x,y,z. În afară de întrebarea ta este largă, nu? Răspunsul lui Thomas acoperă deja vagile tale;
kelalaka avatar
drapel in
„O astfel de pseudoaleatorie poate fi sigură criptografic sau nu. Este sigur din punct de vedere criptografic dacă nimeni nu poate distinge în mod fiabil rezultatul de adevărata aleatorie, chiar dacă algoritmul PRNG este perfect cunoscut (dar nu și starea sa internă). Un PRNG non-criptografic sigur ar păcăli testele statistice de bază, dar poate fi distins de adevărata aleatorie de către un atacator inteligent.`
Maarten Bodewes avatar
drapel in
Nu sunt acoperite de celelalte răspunsuri: „Și prin siguranța criptografică, cred că acest lucru înseamnă că, chiar dacă un atacator cunoaște algoritmul determinist și sămânța, nu ar putea prezice următorul număr aleatoriu. Înțeleg că acest lucru se datorează faptului că CSRNG folosește și unele stări interne.” Acest lucru este incorect, un PRNG este un algoritm și, prin urmare, determinist. Dacă știți sau puteți ghici semințele (și când sunt amestecate în stare), atunci ați putea să calculați starea interioară și toată ieșirea. Cu alte cuvinte: semințele sunt sursa de entropie a PRNG.
Puncte:2
drapel cr

În primul rând, câteva definiții:

  • Un PRNG este un generator de numere pseudoaleatoare. Poate fi unul foarte slab, sau unul cu proprietăți matematice foarte puternice. Nu contează pentru această definiție.
  • Un CSPRNG este a PRNG securizat criptografic. Este un PRNG, cu unele cerințe puternice.

În dumneavoastră legătură, autorul scrie despre CSPRNG-uri, dar numindu-le PRNG-uri. Elementul „criptografic sigur” este implicat de această cerință:

Șirurile de biți generate ar trebui să „arate aleatoriu” unui adversar.

Într-adevăr, CSPRNG sunt necesare atunci când ieșirea PRNG trebuie să fie imposibil de distins de aleatorietatea perfect uniformă (aceasta implică că ieșirea este imprevizibilă). Acest lucru este cerut de unii algoritmi criptografici.

Majoritatea CSPRNG furnizate de sistemele de operare își vor actualiza starea internă de la intrare aleatorie, astfel încât, chiar dacă semințele sau starea interioară se scurg la un moment dat, se va corecta automat la o stare securizată. Dar aceasta nu este o cerință pentru un CSPRNG. Unele CSPRNG furnizate de bibliotecile criptografice nu își actualizează starea automat, în timp ce altele fac.

CSPRNG poate fi folosit întotdeauna în loc de PRNG atunci când nu este nevoie să se poată genera aceeași ieșire de două ori. De exemplu, când se generează niveluri de jocuri video dintr-o sămânță sau când fuzzing, este important să puteți reproduce rezultatul. În acest caz, ar trebui utilizat un PRNG sau un CSPRNG care nu își actualizează automat starea interioară din alte surse decât sămânța sa inițială. Ar putea fi folosit și un cifru de flux, dar un simplu PRNG ar putea fi mai mult decât destul și altele eficient, in functie de cerinte.

Pentru a răspunde direct la întrebările dvs.: trebuie să utilizați un CSPRNG atunci când este specificat de algoritmul criptografic (ceea ce este adesea cazul). Și trebuie să utilizați un PRNG sau un CSPRNG care nu își actualizează automat starea interioară atunci când este necesară reproducerea ieșirii sale. Pentru celelalte cazuri, de cele mai multe ori ce fel de RNG utilizați nu contează.

De asemenea, dacă aveți nevoie într-un fel de o ieșire reproductibilă care nu poate fi distinsă de aleatorietatea perfect uniformă, atunci aveți nevoie de o stream cipher, nu un PRNG.

A. Hersean avatar
drapel cr
@fgrieu Nu este exact ceea ce am scris. Cu toate acestea, mi-am modificat răspunsul pentru a fi mai clar. Despre TRNG-uri, în răspunsul meu, nu disting PRNG-urile de însămânțarea lor, ci de actualizarea (sau lipsa acesteia) a stării lor interioare după ce sunt însămânțate, așa cum face OpenSSL sau /dev/urandom pe Linux. Deoarece există o ambiguitate în ceea ce privește sensul „adevărat” în TRNG (în funcție de cine vorbește), nu folosesc niciodată acest termen.
fgrieu avatar
drapel ng
Nu aș numi /dev/urandom un CSPRNG sau un PRNG.Pentru mine, un PRNG este determinist (care este implicat de Pseudo), iar un CSPRNG devine imprevizibil numai atunci când este combinat cu o sursă de entropie adecvată, făcându-l un CSRNG, care înseamnă Cryptographically Secure (Adevărat, de obicei lăsat implicit mai degrabă decât declarat) Număr aleatoriu Generator. Nu toate CSRNG-urile includ un CSPRNG: este obișnuit să se facă un Cryptographically Secure True RNG dintr-o semințe bună, cu un test online bun și un PRNG nesigur criptografic, de ex. un LFSR de bază cu o oarecare decimare.
A. Hersean avatar
drapel cr
@fgrieu Dacă am înțeles bine definiția ta, un twister Mersenne (MT19937) seminat din /dev/urandom devine un CSRNG. Dar rezultatul acestui RNG poate fi prezis din observarea a 624 de iterații. Pentru mine (și Wikipedia), acesta nu poate fi CS și intră în conflict cu cerința dvs. de imprevizibilitate declarată pentru CSRNG. Din moment ce ești mai experimentat decât mine, simt că îmi lipsește ceva. M-ai putea lumina?
A. Hersean avatar
drapel cr
@fgrieu Considerați că MT19937 seeded secret este un CSRNG imprevizibil cu condiția ca cel mult 64x624 de biți să fie generați? În timp ce condiții similare sunt implicate pentru fiecare RNG a cărui stare interioară depinde doar de o sămânță, cred că aici este abuziv să numim MT19937 un CSRNG. Notă secundară: personal, folosesc „pseudo” atunci când biții sunt generați de un algoritm, așa că nu fac distincția între CSPRNG și CSRNG. Aș rezerva lipsa „pseudo” (sau folosirea „adevărat”) pentru RNG hardware perfect imaginar și prefer HRNG pentru generatoarele hardware reale (părtinitoare).
fgrieu avatar
drapel ng
Folosirea „pseudo” ori de câte ori este implicat un algoritm nu este nevăzută și aș fi de acord să numim /dev/urandom un Pseudo-TRNG sau să afirm că _folosește_ un (CS)PRNG; dar nu că ar fi un (CS)PRNG, care are o definiție precisă în cripto-ul modern. Într-adevăr, MT19937 nu este sigur din punct de vedere criptografic atunci când este utilizat așa cum descrieți și, prin urmare, nu este un CSRNG atunci când este utilizat singur. Declarația mea era despre LFSR-uri (de exemplu, în modul [scrambler](https://en.wikipedia.org/wiki/Scrambler#Additive_(synchronous)_scramblers)) alimentate cu o sursă de entropie și, cel mai important, cu decimare (lăsând mult mai puțină producție). decât intrare).
Puncte:1
drapel cn

De fapt, este destul de simplu.

P. Generatoarele de numere aleatorii produc numere aleatorii (vezi mai jos). Uneori, tot ceea ce se așteaptă este ca numerele să nu se distingă din punct de vedere computațional de căutarea aleatorie (PRNG). Dacă poți prezice următorul număr algoritmic, nu contează. De exemplu, Monte Carlo experimente. The Mersenne Twister este destul de bun și probabil cel mai folosit PRNG din lume (este în interiorul Python), dar complet previzibil după observarea a ~624 de ieșiri. Prin urmare, inutil pentru a ascunde secrete.

C. Un CSPRNG este un PRNG actualizat în sensul că nu puteți prezice următorul număr. Se numește următorul test de bit, adică nu poți prezice următorul bit de ieșire indiferent de observațiile pe care le faci (neștiind starea internă ascunsă). Asa de:-

$$ P(x_{i} = 1) = \frac{1}{2} + \epsilon $$

unde este (de obicei) prejudecățile de la egale $< 2^{-64}$. Dacă apoi faceți presupuneri despre prima parte a unui text cifrat, nu vă va ajuta cu următoarea parte și veți ajunge nicăieri. Care este ceea ce vrem să ascundem secrete. Un exemplu este Salsa20 ca parte a unui cifru de flux.

În criptografie, PRNG-urile sunt folosite pentru a construi chei de sesiune și pentru a transmite cifruri

Este doar o discuție neglijentă. Pe toate le numesc RNG, cu excepția cazului în care este necesară o definiție mai restrânsă.


  1. Nuanță: un PRNG poate genera numere cu tot felul de ciudat distribuții utile pentru știință și chestii alea. În criptografie, generăm distribuții uniforme pentru a ne masca mesajele.

  2. Aruncă o privire la https://en.m.wikipedia.org/wiki/List_of_random_number_generators.

  3. De asemenea, rețineți existența TRNG-uri, care sunt un amestec dintre cele de mai sus și hardware.

SAI Peregrinus avatar
drapel si
Mă opun (ca de obicei) apelării HWRNG-urilor TRNG. Nu există nimic mai „adevărat” despre ele decât orice CSPRNG. Aceasta este o obiecție metafizică: legile fizicii sunt în concordanță cu un univers în întregime determinist, așa că nu există niciun motiv să presupunem că există o sursă de entropie ascunsă care permite nondeterminism total în loc de haos doar matematic, ceea ce duce la imposibilitatea de a prezice evenimente viitoare. Nu este chiar o diferență practică, dar numirea lor TRNG poate oferi oamenilor idei greșite despre cum funcționează entropia.
Paul Uszak avatar
drapel cn
@SAIPeregrinus O, dragă, m-ai scos ;-) Momeală înghițită și digerată. Te-ai spalat azi? Nu o critică personală, ci știință. Apa se învârte și înconjoară prin gaura dopului. În dinamica fluidelor se numește flux turbulent (nelaminar). În timp ce merge în sensul acelor de ceasornic (în nord), o face cu o anumită aleatorie, nu crezi? Valurile, curbele etc. Un model imprevizibil? Totuși, în stă în chiuvetă. Bar cu instalații sanitare proaste, nu inundă podul ușii alăturate. Acest lucru demonstrează că micro-ul nedeterminat și macro-ul previzibil pot coexista fără ca Universul să explodeze.
Paul Uszak avatar
drapel cn
Consultați [pagina] mea (http://www.reallyreallyrandom.com/zener/why-its-random/) pentru o explicație mai tehnică a nedeterminarii cuantice și de ce TRNG-urile există într-adevăr. De asemenea, luați în considerare că CSPRNG-urile sunt în întregime deterministe, predicabile de cineva, de producție finită și au complexitate Kolmogorov ~zero. Astfel, prin încărcări, CSPRNGs $\ne$ TRNGs. Și apoi sunt chestiile de unică folosință. Sau nici acestea nu exista..?
Paul Uszak avatar
drapel cn
Dar nu înțeleg ultima ta propoziție de _"entropie"_.
SAI Peregrinus avatar
drapel si
Crezi că mecanica cuantică este nedeterministă. Nu: să presupunem că non-determinismul nu este necesar pentru ca matematica să funcționeze. Deci fac distincția între procesele „adevărate” aleatorii și cele care sunt pur și simplu haotice. Nu există nicio modalitate de a face diferența față de rezultat, așa că este o întrebare metafizică. La fel cum este imposibil să rulezi efectiv „testul următorului bit” în universul fizic.
SAI Peregrinus avatar
drapel si
Entropia informațiilor se referă la volumul pe care un anumit set de stări ale unui sistem îl ocupă în spațiul de stări al tuturor stărilor posibile ale acelui sistem și probabilitatea ca o cale dată prin spațiul de stări să intre în acel volum. Adesea se confundă cu „aleatorie” sau „non-determinism” (concepte diferite). Insistarea asupra existenței aleatoriei „adevărate” tinde să provoace confuzie, în special atunci când se folosește entropia pentru a descrie sisteme aparent aleatorii.
Paul Uszak avatar
drapel cn
@SAIPeregrinus Heisenberg, Born, Bohr și colegul lor Schrödinger nu ar fi de acord cu tine.
SAI Peregrinus avatar
drapel si
Și Bohm, Everett și alții ar sublinia formulări care sunt deterministe. Mă îndoiesc că Heisenberg, Born sau Bohr ar insista în mod eronat că interpretarea de la Copenhaga pe care o preferă este singura interpretare validă sau că matematica necesită nondeterminism. Nu ar fi de acord cu privire la care presupuneri sunt mai simple, nu cu privire la ceea ce sunt presupuneri.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.