MQV
Il protocollo di scambio chiave MQV prende il nome dai suoi ideatori (Menezes Qu Vanstone) ed è stato pubblicato nel 1998 [1]
Generazione delle chiavi
La generazione delle chiavi avviene esattamente come per l'algoritmo di ElGamal: dato un gruppo G di ordine q, un generatore g, Alice genera un numero casuale a (chiave privata) e calcola A=ga (chiave pubblica). Analogamente Bob genera b (chiave privata) e calcola B=gb (chiave pubblica).
Generazione del valore condiviso
Alice genera una coppia di chiavi effimere x e X=gx, e analogamente Bob genera una coppia y e Y=gy. Alice e Bob si scambiano le chiavi pubbliche, sia quelle personali che quelle effimere.
Sia Alice che Bob calcolano:
(1)Alice calcola:
(3)Bob calcola:
(4)I valori di SA e SB sono uguali:
Alice e Bob calcolano il valore generato da una funzione detta KDF (Key Derivation Function) che riceve in input il valore di SA e SB. Tale valore costituisce la chiave condivisa. KDF può ad esempio essere implementata attraverso una funzione di hash.
(6)HMQV
Nel 2005, Krawczyk propose una modifica al protocollo MQV in modo da aumentarne la sicurezza [2]. Secondo Krawczyk infatti, MQV era vulnerabile a diversi attacchi e non soddisfaceva completamente i requisiti formali di Canetti-Krawczyk, richiesti per i protocolli di scambio chiave. Menezes, che ha ideato assieme a Qu e Vanstone il protocollo MQV e Krawczyk hanno criticato aspramente le rispettive proposte [2] [3].
Nel protocollo HMQV si introduce uno scambio di tipo challenge-response, dove un destinatario invia al mittente un messaggio detto challenge. Il mittente genera una sorta di firma digitale sulla base del challenge chiamata response e la invia al destinatario, il quale la verifica. Krawczyk ha proposto uno scambio challenge-response chiamato XCR (eXponential Challenge Response), e due varianti chiamate HCR (Hashed Exponential Challenge Response) DCR (Dual Exponential Challenge Response).
XCR
Sia H' una funzione di hash che genera un codice lungo l = q/2 bit. Bob è colui che genera la firma ed Alice la verifica. Alice possiede una coppia di chiavi di tipo ElGamal (a, A = ga) e Bob una coppia (b, B = gb). Le due parti si sono scambiate le rispettive chiavi pubbliche.
Alice genera una coppia di chiavi effimera (x, X = gx) ed invia una challege costituita da un messaggio m e X. Bob genera una propria coppia di chiavi effimera (y, Y = gy) e risponde con la seguente coppia di valori
(7)in pratica, Bob calcola un codice di hash ottenuto dalla funzione di hash H' a cui viene fornito in input il valore di Y = gy e del messaggio m. Bob, dunque, Invia la propria chiave pubblica effimera Y ad Alice, assieme al valore seguente
(8)dove b è la chiave privata di Bob e y è la chiave privata effimera di Bob. Quando Alice ottiene la chiave pubblica effimera di Bob Y = gy e il valore (8), calcola a sua volta
(9)si può facilmente verificare che (8) e (9) sono uguali:
(10)HCR
Lo scambio challenge-response chiamato HCR (Hashed Exponential Challenge Response) è esattamente identico a quello XCR, tranne per l'applicazione di una funzione di Hash nella risposta di Bob e nella verifica di Alice. Al posto del valore (8) viene inviato
(11)e, analogamente, Alice calcola il codice Hash di (9) e lo confronta con quello di Bob.
Poiché, in base alla (10), i due valori calcolati sono uguali, allora saranno uguali anche i valori di hash.
DCR
Il meccanismo di doppia firma prevede l'invio da Alice a Bob della coppia (m1, X) e da parte di Bob ad Alice della coppia (m2, Y).
Alice procede a calcolare
mentre Bob calcola
(13)dove $d = H'(X, m_1)$, $e = H'(Y, m_2)$. I due valori calcolati sono uguali:
(14)Questo valore costituisce la chiave condivisa.
FHMQV
Nel 2009 Sarr, Elbaz–Vincent e Bajard hanno proposto una evoluzione del protocollo HMQV, introducendo gli scambi challenge-response chiamati FXCR (Full Exponential Challenge Response) e FDCR (Full Dual Exponential Challenge Response) [4].