Puncte:0

Aleatorie și autentificare pe ieșiri cu valoare scurtă (48 de biți)

drapel cn

Vreau să implementez un client care generează valori aleatoare pe 48 de biți și să le trimit ca mesaje difuzate. Presupunem, de asemenea, că există un receptor legitim care primește acele valori (deci, există un fel de pre-autentificare care a avut loc deja, dar nu are importanță aici. De asemenea, putem presupune că clientul/receptorul împărtășește o cheie comună $K$). Deoarece acestea sunt mesaje difuzate, înseamnă, de asemenea, că oricine poate intercepta acele valori. Aș dori ca aceste valori să aibă două proprietăți:

  1. Este dificil pentru un atacator să ghicească următoarea valoare aleatorie din secvență
  2. Receptorul ar trebui să poată verifica dacă aceste valori provin într-adevăr de la clientul specific

Mă gândeam la o schemă simplă care face următoarele:

Client

  1. $t$ = AES-CTR($K$, nonce||counter, random_plaintext)â

  2. $r = t â K$ (păstrați ultimii 48 de biți)

  3. Difuzare $t, r$

Folosesc AES-CTR pentru a genera un șir temporar cu aspect aleatoriu $t$ și apoi XOR-l cu cheia încă o dată pentru a genera valoarea mea aleatoare.Apoi păstrez ultimii 48 de biți și îi transmit pe amândoi $t$ și $r$. Atunci receptorul poate pur și simplu:

Receptor

  1. $r' = t â K$ (păstrați ultimii 48 de biți)
  2. Verifica $r' == r$

Dacă verificarea reușește atunci el autentifică clientul pentru că numai el cunoaște aceeași cheie $K$. De asemenea, valoarea fiind o ieșire a AES-CTR ar trebui să fie destul de aleatorie, ceea ce înseamnă că este foarte dificil pentru cineva să ghicească următorul.

Această schemă îndeplinește cerințele mele? Trunchierea ultimilor 48 de biți prezintă un risc de securitate?

Paul Uszak avatar
drapel cn
1) De ce să nu folosiți protocoale standard pentru autentificare, de ex. RSA, HMAC? 2) Cum supraviețuiește (K, nonce||counter, random_plaintext) repornirilor? 3) Este o chestie TRNG/urandom exclusă? 4) Probabil că un atacator va ciocni numerele dvs. în decurs de $2^{24}$ încercări. Conteaza? 5) De ce doar 48 de biți?
Puncte:0
drapel tr

Această schemă îndeplinește cerințele mele? Trunchierea ultimilor 48 de biți prezintă un risc de securitate?

Schema este ruptă de un adversar pasiv care primește o singură pereche $(t,r)$. Observați că ultimii 48 de biți ai cheii pot fi recuperați ca $K[:48] = t \oplus r$. Prin urmare, atacatorul poate trimite acum arbitrar $(t^*, r^*)$ valori pe care receptorul le va accepta. Reamintind că verificatorul face următoarele

$r' = t' \oplus K$ (păstrați doar ultimii 48 de biți); verifica $r = r'$

Vedem că nu este necesară cunoașterea restului cheii.

În plus, valorile de 48 de biți oferă o protecție scăzută împotriva coliziunilor, dar asta poate fi bine pentru aplicația dvs....

Reluare: un atac mai simplu este reluarea perechii $(r, t)$. Descrierea nu spune cum verifică receptorul pentru acest lucru.

Soluție potențială: Din descrierea inițială, se pare că receptorul este destul de limitat din punct de vedere computațional și pot calcula doar xors sunt cei mai mulți și nu AES-CTR, de exemplu. Ceea ce ar fi ciudat cu următoarele

Deci, există un fel de pre-autentificare care a avut loc deja, dar nu are importanță aici

Oricum, o posibilă soluție este utilizarea a două funcții pseudo-aleatoare dacă receptorul poate face mai mult decât xors. (Mă îndoiesc că este sigur...). Inițial, extindeți $K$ în $K_1, K_2, K_3$ de lungime adecvată.

Expeditorul face următoarele

  1. $r =$ AES-CTR$(K_1, contor)$ (păstrați ultimii 48 de biți)
  2. trimite $contor, r, \tau = HMAC(K_2, contor,r)$

Receptorul face următoarele

  1. La primire $r, \tau$, verifica $\tau$
  2. Contorul de cecuri a crescut
  3. Rederive $r$.

Cateva observatii:

  • Difuzarea aici nici măcar nu este necesară dacă expeditorul și receptorul sunt cineva care împărtășește un ceas.
  • Alternativa are câteva probleme când vine vorba de robustețe în cazul unei reporniri, așa cum a subliniat într-un comentariu al lui Paul.
Jimakos avatar
drapel cn
Lasă-mă să clarific. Ambele puncte finale au capacități suficiente pentru a efectua operațiuni diffie-hellman pentru a deriva această cheie comună $K$.De asemenea, ambele pot suporta AES-CTR și AEC-CCMP pentru criptare autentificată. Cei 48 de biți sunt o cerință a protocolului, așa că trebuie să trăim cu asta. Nu știu dacă TRNG este posibil în aceste dispozitive, așa că vreau să rămân la RNG-uri securizate criptografic.
Jimakos avatar
drapel cn
O alta solutie la care ma uitam este aceasta: Generați: m=AES-CTR(randValue, K)â Calculați::â r, T = AES-CCMP(K, m)â Trimite:: r, Tâ . Ar fi mai sigur? Totuși, la sfârșit, r trebuie să fie de 48 de biți.
Jimakos avatar
drapel cn
O altă explicație pe care aș putea să o datorez este că (a) difuzarea este prin proiectare din protocol (b) cele două puncte finale au un fel de valoare a contorului de sincronizare care este comună ambelor capete
Marc Ilunga avatar
drapel tr
@Jimakos, tx pentru informațiile adăugate. Aș spune, dacă ambele puncte finale pot face calcule similare, atunci este mai ușor să utilizați un PRF dovedit pentru a deriva aleatorietatea pe baza unor valori unice, cum ar fi un marcaj de timp unic. Și difuzați un far sau un marcaj de timp (aceasta în mod autentic) dacă este impus de protocol
Marc Ilunga avatar
drapel tr
A doua propunere nu am analizat-o în profunzime, dar pare mai complexă decât este necesar. Reutilizarea $K$ pare ciudată, dar poate fi complet în regulă aici. Dacă valorile trimise ar trebui să fie $(r,T)$. Apoi ar putea fi folosit pentru nonce unic și o etichetă de autentificare pentru $r$. După cum sa discutat: aceasta oferă funcționalitate, cu toate acestea, poate doriți să luați în considerare și robustețea

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.