Puncte:2

Este nesigur să faci nonce folosind generatorul de numere aleatorii și algoritmul de hashing cu cheie secretă precum HMAC?

drapel ag

Construiesc un proiect pe microcontrolerul Arduino Mega și am nevoie de un generator nonce pentru schimbul provocări-răspuns. Dar nu am reușit să găsesc niște generatoare de șiruri alfanumerice. Apoi mi-a venit o idee să fac unul folosind Aleatoriu() funcție care generează int aleatoriu în limita pe care o dați și hash acel număr întreg cu HMAC folosind o altă cheie secretă (una care ar putea fi generată automat la pornire, deoarece nu trebuie să fie consecventă).

Această abordare mă face să nu fie mai puțin sigură într-un fel?

kelalaka avatar
drapel in
Folosiți asta decât SHA256? https://www.codeproject.com/Articles/5311070/A-True-Random-Number-Generator-in-Arduino-AVR-ATme
krystof18 avatar
drapel ag
Nu sunt sigur că înțeleg ce spui. Ar trebui să folosesc SHA256 pentru a calcula valoarea aleatoare? Folosesc HMAC pentru că voi folosi deja acea bibliotecă și trebuie să fac programul cât de mic pot.
kelalaka avatar
drapel in
HMAC trebuie utilizat cu o funcție hash care ar trebui să fie disponibilă pentru dvs. sau utilizați HMAC după cum doriți, deoarece este conceput pentru a fi un PRF.
krystof18 avatar
drapel ag
Ai dreptate, am SHA256 disponibil în aceeași bibliotecă. Care sunt avantajele utilizării SHA256 față de HMAC? Bănuiesc că va fi mai rapid să calculez nonce, nu?
kelalaka avatar
drapel in
Pentru dvs. HMAC a calculat SHA-256 dublu și nu aveți nevoie de un hash cu cheie (uneori numit Keyed MAC, dar de fapt HMAC este o tehnică pentru construirea de familii de funcții pseudoaleatoare (PRF)). SHA-256 ar trebui să fie suficient pentru nonces.
Manish Adhikari avatar
drapel us
În designul tău, partea cheie care determină securitatea ta va fi generatorul tău de numere aleatorii. Trebuie să fie un generator de numere aleatoare securizat atât pentru generarea cheilor. Int utilizat în continuare poate fi previzibil, dar nu trebuie să se repete pentru a preveni atacurile de reluare.
Puncte:2
drapel fr

Abordarea pe care o utilizați depinde de cerințele nonce. În cazul pe care îl descrieți, un protocol provocare-răspuns, cerințele nonce sunt de obicei că este unic și niciodată reutilizat. Cu toate acestea, există și alte situații în care nonce trebuie să fie și imprevizibilă, cum ar fi dacă utilizați modul CBC pentru criptare.

Puteți utiliza HMAC cu aceasta și pentru o funcție hash de folosit cu ea, aș recomanda SHA-256. Cu toate acestea, nu aș recomanda generarea valorii pentru HMAC folosind Aleatoriu pentru că asta s-ar putea să se repete și apoi s-ar întâmpla și nonce-ul tău. În general, nu vă puteți baza pe calitatea PRNG-urilor în standardul C și POSIX. Ați putea folosi în schimb un contor care crește monoton, care ar asigura că nu se repetă niciodată, dar ar trebui să aveți o modalitate de a persista contorul între utilizări.

krystof18 avatar
drapel ag
Problema cu contorul este că este posibil ca microcontrolerul să-și piardă puterea și contorul se va reseta.Dar aș putea folosi RTC extern cu baterie separată, care ar asigura nerepetarea cel puțin pentru câțiva ani. Este o idee rea?
Maarten Bodewes avatar
drapel in
Există, de asemenea, EEPROM inclusă, care este memorie persistentă. Problema cu aceasta este că va avea un număr limitat de scrieri. Cu toate acestea, poate este posibil să scrieți un contor secvențial pentru fiecare pornire și apoi să aveți un contor separat în memorie. Gândesc cu voce tare aici.
Puncte:2
drapel cn

Aleatoriu() este un gunoi. Vedeți câteva din surse Aici.

Cel mai bun mod de a genera non-uri este printr-un generator de numere aleatoare adevărate, cu excepția cazului în care doriți > 10.000 de non-uri pe secundă, ceea ce este puțin probabil într-o situație de microcontroler. Puteți face asta fără niciun hardware suplimentar folosind Arduino Entropie Library. Biblioteca utilizează fluctuația naturală dintre ceasul AVR și temporizatorul watchdog. Acesta este un domeniu bine cercetat al designului TRNG utilizat în mod obișnuit în oscilatoarele inelare. Sau rulați propria variantă (nu este atât de greu dacă revizuiți codul original).

Nu este foarte rapid, (64 biți/s), dar vă va oferi un nonce cu adevărat aleatoriu de 96 de biți în mai puțin de două secunde. În acest fel, nu trebuie să ține evidența non-urilor folosite. Și este dovada de repornire.

Maarten Bodewes avatar
drapel in
Odată ce ai 96 de biți, îi poți folosi pentru a genera un CSPRNG, care în general ar trebui să fie mult mai rapid. Paul va obiecta, probabil, că un TRNG este mai sigur, dar din motive practice cred că un CSPRNG bine însămânțat este, în general, calea de urmat.
Paul Uszak avatar
drapel cn
Paul știe că un cifru cu flux continuu nu este un nonce. Care era întrebarea.
Maarten Bodewes avatar
drapel in
Nimeni nu necesită totuși un *singure* nonce, așa că, deși acesta poate fi cazul, cred că cazul de utilizare este de a genera mai multe nonce, iar asta necesită un RNG dacă doriți să le aveți randomizate.

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.