Puncte:2

Beneficiile hashingului unei anumite semințe într-un PRNG

drapel il

Această întrebare este legată de această întrebare (stackoverflow) unde am întrebat despre un detaliu specific de implementare a generatorului de numere aleatoare Python (Mersenne Twister). Aici, am un accent ușor diferit. Simțiți-vă liber să închideți, dar nu am putut găsi o întrebare similară care să răspundă exact la întrebarea mea

  • Într-un PRNG, care ar fi beneficiul hashingului unei anumite semințe (furnizat de utilizator)?
  • Ar exista beneficii suplimentare dacă s-ar aplica sare?

De exemplu, în cazul Pythons, acestea fac ambele, unde sarea folosită este sămânța însăși.

EDITAȚI | ×: Sunt întrebat despre un caz de utilizare la care îmi este greu să răspund? Studierea implementării mai multor PRNG în mai multe limbi populare, pare să-și facă întotdeauna hash / sare / modifică semințele furnizate de utilizatorii lor. Vezi de exemplu https://github.com/python/cpython/blob/a57ec7a4feaf24f470a9d1e5b1b3f2cb1b062af7/Lib/random.py#L157

Deoarece majoritatea limbilor par să facă acest lucru, mă întreb de ce ei hash semințele utilizatorilor în loc să le parseze pur și simplu în PRNG

AleksanderCH avatar
drapel nl
Răspunde asta la întrebarea ta? [Proprietăți PRNG/Hashes?](https://crypto.stackexchange.com/questions/277/properties-of-prng-hashes)
drapel il
@AleksanderCH Din păcate nu, întrebarea se întreabă despre beneficiul _always_ hashing semințele. (Ceea ce l-aș putea vedea dacă țineți în timp sau altceva) Aici vă întreb ce beneficii ar avea atunci când setăm sămânța manual.
kodlu avatar
drapel sa
care este cazul unei astfel de practici? trebuie să dai mai multe detalii în întrebare
SAI Peregrinus avatar
drapel si
Un PRNG ar trebui să scoată aceeași secvență pentru o anumită sămânță. Un CSPRNG nu ar trebui, dacă are nevoie de o sămânță controlată de utilizator, ar trebui să o amestece cu alte surse de entropie înainte de utilizare. Python-ul pe care l-ați conectat este PRNG obișnuit, este doar hashing intrarea pentru a vă asigura că are numărul potrivit de octeți pentru următoarele operațiuni.
Paul Uszak avatar
drapel cn
@SAIPeregrinus Re. _"Un CSPRNG nu ar trebui să"_. Esti sigur? Există vreo șansă să combinați un CSPRNG cu un TRNG? ChaCha, SecureRandom și toate RNG-urile bazate pe cifru bloc sunt considerate CSPRNG. Cu toate acestea, toate sunt deterministe.
SAI Peregrinus avatar
drapel si
ChaCha este un cifr de flux, nu un CSPRNG. CSPRNG-urile sunt deterministe, prin definiție (acesta este P). De asemenea, nu se bazează doar pe o intrare de utilizator pentru entropie în orice implementare practică (SecureRandom nu, getrandom() nu, CryptGenRandom nu, etc). CSPRNG-urile *ar trebui* să preia entropia de intrare de la un HWRNG dacă este disponibil și de la alte surse hardware când nu.Puteți construi un CSPRNG dintr-un cifr de flux, dar un cifr de flux nu este neapărat un CSPRNG.
Puncte:1
drapel fr

Când semănăm orice fel de PRNG, este posibil să avem date neuniforme în entropia sa. De exemplu, poate singura noastră sursă de aleatorietate criptografic sigură este un set de UUID aleatoriu sub formă de șir. Cu toate acestea, în majoritatea implementărilor PRNG, dorim ca aleatoria noastră să fie uniformă și de dimensiune fixă. Pentru a obține asta, avem nevoie de un fel de a distila intrarea în dimensiunea corespunzătoare, iar o funcție hash este o modalitate ușoară de a face asta.

Când avem un PRNG non-criptografic, intrarea furnizată de utilizator poate fi adesea de orice dimensiune și este adesea util să îi permitem utilizatorului să furnizeze o sămânță arbitrară. De exemplu, unele jocuri video vă permit să adăugați PRNG-ul lor cu text arbitrar pentru a reda același joc, iar asta ar trebui să fie distilat într-o intrare adecvată, pentru care o funcție hash este potrivită. Sarea în acest caz nu ar fi la fel de utilă, deoarece scopul este de a produce un rezultat determinist.

Când folosim un CSPRNG, algoritmul pe care îl folosim este determinist, dar dorim să-l însămânțăm cu intrări de entropie suficientă pentru a ne asigura că rezultatul său este de neghicit. Adică, scopul nostru este ieșirea nedeterministă. Unele modele aleg să forțeze intrările să fie de entropie uniformă, dar majoritatea modelelor folosesc un fel de funcție de derivare, cum ar fi cea folosită de CTR_DRBG, pentru a permite intrări neuniforme. Uneori, acești algoritmi se bazează pe o funcție hash, iar uneori nu sunt. De exemplu, CTR_DRBG folosește o funcție de derivare bazată pe cifr-bloc pentru a face întregul algoritm implementabil doar cu o implementare AES. HMAC_DRBG folosește HMAC în acest rol, care se bazează pe hash.

Design-urile DRBG permit utilizarea unui șir de sare sau de personalizare și este adesea recomandat. O sare fixă ​​sau non-aleatorie nu va îmbunătăți securitatea dacă există o entropie insuficientă, deoarece presupunem că sarea este publică, dar există contexte în care poate fi utilă, cum ar fi dacă mai multe DRBG-uri trebuie să fie însămânțate din aceleași intrări de entropie.

Există unele cazuri în care folosim un design CSPRNG pentru o ieșire deterministă care nu se poate distinge de aleatoriu, iar sarea este utilă acolo. De exemplu, în RFC 6979, care descrie DSA și ECDSA deterministe, folosim un HMAC_DRBG pentru a crea valoarea aleatorie $ k $. Cheia privată este intrarea noastră de entropie, iar hash-ul mesajului este sarea, iar ambele sunt necesare pentru securitate.

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.