Puncte:1

Cum să garantați corect autentificarea, confidențialitatea și rezistența la reluare pentru mai multe mesaje folosind o cheie pre-partajată?

drapel ws

Am un dispozitiv care trebuie să comunice cu o altă gazdă și să schimbe mesaje cu lungime fixă. Tot traficul ar trebui să fie criptat și autentificat și ar trebui să fie rezistent la atacurile de reluare. Din păcate, să te bazezi pe TLS nu este o opțiune, așa că trebuie să implementez un protocol personalizat. Am controlul asupra ambelor dispozitive, astfel încât să pot genera și distribui în siguranță o cheie partajată $k$.

M-am gândit să folosesc AEAD cu block cypher pentru a face sarcini grele, de exemplu AES în modul GCM. Problema cu care mă confrunt este aceea de a preveni atacurile de reluare și mi-a venit următoarea idee. Să sunăm dispozitivele $A$ și $B$ și luați în considerare comunicarea de la $A$ la $B$ numai.

  • $A$ generează un șir aleator $a$ si il trimite catre $B$.
  • $B$ generează un șir aleator $b$ si il trimite catre $A$.
  • Ambii $A$ și $B$ calcula $h=H(k \Vert a \Vert b)$ pentru unele funcții hash criptografice $H$, si foloseste $h$ ca prim vector de inițializare pentru schema AEAD.

Oricând $A$ trebuie să trimită un mesaj $m$ la $B$, criptează $m$ pentru a obține textul cifrat corespunzător $c$, calculează eticheta de autentificare $t$, și trimite $c \Vert t$ la $A$ (mesajele au o lungime fixă, deci lungimea de $c \Vert t$ este constantă). Atunci $A$ incremente $h$ și reinițializează schema AEAD cu noul IV $h$.

Procesul de decriptare este similar: $B$ primeste $c \Vert t$, decriptează $c$ în $m$, autentifică mesajul folosind eticheta $t$, crește $h$, și reinițializează schema AEAD cu noua valoare a $h$.

Comunicare de la $B$ la $A$ este complet simetric, cu excepția faptului că IV-urile inițiale sunt $H(k \Vert b \Vert a)$.

Există vreun defect evident în ideea de mai sus? Reinventez eu roata? Dacă da, care ar fi soluția de bază pentru a rezolva această problemă?

kelalaka avatar
drapel in
Căutați puțin [replay attack countermeasure](https://crypto.stackexchange.com/search?q=replay+attack+countermeasure) și vedeți [sfârșitul răspunsului](https://crypto.stackexchange.com/a/ 41327/18298)
Steven avatar
drapel ws
Sunt conștient că atacurile de reluare pot fi evitate prin adăugarea de marcaje temporale sau contoare. Cu toate acestea, dispozitivul $A$ nu păstrează nicio stare între reporniri (este un dispozitiv încorporat) și nu are ceas intern (nu vreau să mă bazez pe sincronizarea orei pe internet, deoarece aceasta s-ar baza pe o conexiune la internet funcțională).
kelalaka avatar
drapel in
Atunci ai nevoie de semnături...
Steven avatar
drapel ws
Ați putea, vă rog, să detaliați cum ar ajuta semnăturile împotriva atacurilor de reluare? Chiar dacă un mesaj este semnat, aș putea doar să-i verific autenticitatea, dar nu dacă a fost reluat. În plus, schema AEAD pe care o propun ar trebui să ofere deja autenticitate. Este ceva în neregulă cu schema pe care o propun? Mi se pare că $h$ ar trebui să fie garantat a fi un secret aleatoriu „pe sesiune” împărțit între $A$ și $B$. Există o problemă cu utilizarea $h$ pentru a inițializa IV-urile și cu incrementarea IV-ului după fiecare mesaj?
SAI Peregrinus avatar
drapel si
De ce șiruri? De ce nu valori binare cu lungime fixă? De ce să folosiți un hash H în loc de un hash cu cheie corect sau MAC?
Steven avatar
drapel ws
@SAIPeregrinus. Valorile binare cu lungime fixă ​​sunt perfecte. De fapt, asta am avut în minte chiar dacă am scris șiruri. De asemenea, am căutat coduri hash cu cheie și pare să servească în mod logic același scop ca $H$, așa că în descrierea mea de mai sus $H(k \Vert a \Vert b)$ ar putea fi înlocuit cu $HMAC(k,a \ Vert b)$. Mulțumiri.
Puncte:1
drapel it

Acesta este, cred, cel mai important punct al tău (din comentarii):

Sunt conștient că atacurile de reluare pot fi evitate prin adăugarea de marcaje temporale sau contoare. Cu toate acestea, dispozitivul A nu păstrează nicio stare între reporniri (este un dispozitiv încorporat) și nu are ceas intern (nu vreau să mă bazez pe sincronizarea orei pe internet, deoarece aceasta s-ar baza pe o conexiune la internet funcțională).

Apoi, pe sesiune, utilizați un contor. Între sesiuni, utilizați Diffie-Hellman schimbul de chei prin criptarea simetrică a cheii partajate. Acest lucru vă va oferi, de asemenea secretul direct. Nu văd prea multe beneficii pentru mecanismul propus de tine în privința asta.

Pentru a fi complet: înțelesul secretului de transmitere este că, chiar dacă cheia partajată este compromisă în viitor, comunicările trecute nu pot fi decriptate. Aceasta nu este o proprietate oferită de mecanismul dvs. actual.

Steven avatar
drapel ws
Mulțumesc. Vreau doar să mă asigur că am înțeles corect schema ta propusă. Sugerați să efectuez un schimb de chei Diffie-Hellman în timp ce folosesc schema AEAD cu cheia mea pre-partajată pentru a garanta autentificarea (am nevoie de criptare aici?). Aici schema AEAD ar trebui să folosească niște IV codificate. Cu toate acestea, cheia DH negociată $k$ va fi secretă și diferită pentru fiecare sesiune.Apoi pot folosi $k$ ca cheie de sesiune pentru o altă schemă AEAD pentru a schimba mesajele reale. După cum am înțeles, fiecare mesaj are nevoie de un IV diferit. În acest caz, pot folosi doar un contor care începe de la $0$?
Steven avatar
drapel ws
De asemenea, se pare că toată prima parte a protocolului efectuează [un schimb de chei autentificate prin parolă](https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange#Password-authenticated_key_agreement). Dacă acesta este cazul, putem folosi ideea schițată pe Wikipedia? Și anume, $A$ și $B$ au deja un secret pre-partajat $s$; ei calculează o cheie de sesiune $k$ folosind schimbul de chei DH. Apoi $A$ trimite $hash(s \Vert 0 \Vert k)$ la $B$ , pe care $B$ îl verifică pentru a autentifica $A$. Simetric $B$ trimite $hash(s \Vert 1 \Vert k)$ la $A$. Comunicarea continuă folosind $k$ ca cheie de sesiune.

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.