Am aflat recent despre schimbul McCallum-Relyea, care permite o metodă de păstrare a cheii fără a transmite efectiv cheia.
A fost dezvoltat la RedHat și este folosit de tang și capulă utilități (și descrise în continuare Aici) pentru a permite decriptarea automată, în special pentru o partiție rădăcină criptată pentru mașinile Linux. Deci, o mașină client ar putea porni și decripta discul doar dacă se află într-o rețea în care poate accesa mașina server.
Nu am găsit nicio analiză a acestui protocol, așa că mă întrebam ce nivel de securitate oferă în comparație cu o metodă mai convențională, cum ar fi serverul care stochează cheia și o transmite pe un canal TLS și, de asemenea, dacă există defecte în schimb care ar putea fi exploatat.
Schimbul este o versiune modificată/extinsă a ECDH care funcționează după cum urmează:
Partea server generează mai întâi o pereche de chei EC de lungă durată cu cheie privată $s$ și cheie publică $S = [s]G$.
Clientul, dorind să protejeze un mesaj $M$, generează cheia privată $c$ și cheie publică $C = [c]G$. Clientul solicită apoi o cheie de la server printr-un canal de text simplu. Serverul răspunde cu $S$ semnat cu $s$. Utilizatorul din partea clientului validează cheia serverului printr-o metodă în afara benzii și înregistrează hash-ul cheii serverului. Clientul efectuează apoi jumătate dintr-un schimb ECDH pentru a ceda $K = [c]S = [cs]G$. $K$ este apoi folosit (direct sau indirect) pentru a cripta $M$ printr-un cifru simetric, după care clientul renunță $K$ și $c$ și păstrează numai $C$. În acest moment, clientul nu poate decripta $M$ fara server.
Când clientul dorește să decripteze $M$, creează o pereche de taste efemeră $e$ și $E = [e]G$, apoi calculează $X = C + E$ si trimite $X$ la server. Serverul efectuează apoi jumătate dintr-un schimb ECDH cu $X$ și $s$ a genera $Y = [s]X$ si transmite $Y$ înapoi la client, folosind $S$ pentru a semna mesajul.
După ce a primit $Y$ de pe server și validând semnătura serverului, clientul efectuează apoi o altă jumătate ECDH cu $S$ și $e$ a calcula $Z = [e]S$. Clientul calculează apoi:
Y - Z = sX - eS
= s(C + E) - eS
= sC + sE - eS
= scG + seG - esG
= scG
= K
A recupera $K$ și decriptează $M$.