title: Encrypted Key Exchange
text: # Encrypted Key Exchange
  
  Encrypted Key Exchange (anche detta EKE) è una famiglia di metodi di interazione tra due o più partecipanti per l'autenticazione e la condivisione di una chiave crittografica di sessione. Basati sulla conoscenza condivisa di una comune password, sono stati descritti da Steven M. Bellovin e Michael Merritt. Alcune varianti di EKE presenti nella pubblicazione originale hanno mostrato diverse debolezze, ma altre sue varianti, migliorate e potenziate, hanno reso EKE il primo metodo efficace per ricavare una chiave di sessione condivisa e l'autenticazione mutua mediante una password condivisa.
  
  ## Requisiti
  
  Un protocollo EKE per essere considerato sicuro deve poter garantire la robustezza nei confronti di diversi attacchi:
  
  * anche se le due parti condividono una password debole il protocollo deve essere forte rispetto attacchi off-line (dizionario, forza bruta) sui pacchetti scambiati;
  * il protocollo deve essere robusto nei confronti dei replay attack.
  
  ## DH-EKE
  
  Una delle versioni presenti nella pubblicazione originale ed effettivamente sicura è basata sul metodo di scambio di chiavi Diffie-Hellman. Si riporta di seguito il protocollo. Si supponga che $A$ sia il client, $S$ sia il server e $w$ sia $H(password)$ con $H$ funzione crittografica di hash.
  
      $A\rightarrow S:w[g^{a}mod(p)]$
  
  con $w[g^{a}mod(p)]$ indichiamo la cifratura con un algoritmo a chiave simmetrica di $g^{a}mod(p)$ con la chiave $w$
  
      $S\rightarrow A:K(n_{1}),w[g^{b}mod(p)]$
  
  $S$ calcola K come $k=g^{ab}mod(p)$ e sceglie un nonce $n_{1}$
  
      $A\rightarrow S:K(n_{1},n_{2})$
  
  $A$ può decifrare il challenge $K(n_{1})$ selezionare un nuovo nonce $n_{2}$. In questo modo invia un challenge al server e nel contempo mostra di conoscere $K$ autenticandosi come $A$ verso il server
  
      $S\rightarrow A:K(n_{2})$
  
  il server risponde al challenge autenticandosi verso $A$. Di qui in poi i due attori del protocollo sono autenticati e dispongono di una chiave di sessione. Si noti che un attacco brute force sui messaggi cifrati con $w$ sono inattuabili poiché un attaccante non può verificare (se non per tentativi on-line) che la decifratura è andata a buon fine. La quantità $g^{a}mod(p)$ è infatti casuale. Lo stesso motivo (la scelta di quantità $a$ e $b$ casuali mette al sicuro il protocollo nei confronti di reply-attack).
  
  ### Vulnerabilità di DH-EKE
  
  DH-EKE è vulnerabile ad un attacco di discovery sul database del server. Se infatti un malintenzionato riuscisse a rubare l'hash $w$ potrebbe inscenare un protocollo di autenticazione sia camuffandosi da server, che da client.
  
  ## Augmented-EKE
  
  Per eliminare la vulnerabilità precedente si fa in modo che il server conservi non la password, ma una quantità derivata da una funzione one-way applicata sulla stessa. In questo modo un attaccante anche rubando le informazioni presenti sul server non può utilizzarle per rimpiazzare il client.
  
  