title: Protocollo Station-to-Station
text: # Protocollo Station-to-Station
  
  Il protocollo Station-to-Station (STS) è un protocollo crittografico per lo scambio di chiavi con autenticazione (authenticated key exchange, AKE). È una variante dello scambio di chiavi Diffie-Hellman, il quale è debole contro un attacco del tipo man-in-the-middle, dove un terzo utente si interpone nella conversazione e finge di essere il rispettivo interlocutore con entrambi i soggetti. Ideato da Whitfield Diffie, Paul C. van Oorschot e Michael J. Wiener, il protocollo venne originariamente presentato al 1987 International Switching Symposium (ISS87) e successivamente pubblicato in Diffie et. al nel 1992. Questo metodo fornisce autenticazione tramite l'uso di firma digitale e certificati digitali.
  
  ## Descrizione
  
  La seguente descrizione prevede l'operazione di esponenziazione alla base dello scambio di chiavi, come da scambio Diffie-Hellman originale. Tuttavia, il metodo può essere modificato per funzionare, ad esempio, con crittografia a crittografia ellittica.
  
  ### Parametri iniziali
  
  * Entrambe le parti devono avere una coppia di chiavi crittografiche (pubblica e privata) per potersi autenticare.
  * Bisogna inoltre generare i parametri necessari a stabilire la chiave comune: un gruppo ciclico $p$ e un generatore $g$ per tale gruppo. Questi parametri possono essere pubblici. Per una maggiore sicurezza, ciascuna parte può stabilire i suoi parametri.
  
  ### Protocollo base
  
  Segue la versione base del protocollo. Se un passo non può essere completato, il protocollo viene interrotto. Tutte le operazioni di esponenziazione appartengono al gruppo $p$.
  
  * Alice genera un numero casuale $x$ e calcola e invia $g^{x}$ a Bob.
  * Bob genera un numero casuale $y$ e calcola $g^{y}$.
  * Bob calcola la chiave segreta $K=(g^{x})^{y}$.
  * Bob concatena le due potenze $(g^{y},g^{x})$ (l'ordine è importante), le firma con la sua chiave privata $B$, e cifra il tutto con la chiave segreta $K$. Invia il testo cifrato assieme alla potenza $g^{y}$ ad Alice.
  * Alice calcola la chiave segreta $K=(g^{y})^{x}$.
  * Alice decifra la parte restante del messaggio di Bob ed effettua la verifica tramite la chiave pubblica di Bob.
  * Alice concatena le due potenze $(g^{x},g^{y})$ (l'ordine è importante), le firma con la sua chiave privata $A$, e cifra il tutto con la chiave segreta $K$. Invia il testo cifrato a Bob.
  * Bob decifra il messaggio di Alice ed effettua la verifica tramite la chiave pubblica di Alice.
  
  Ora Alice e Bob sono mutuamente autenticati e posseggono una chiave segreta. Tale segreto, $K$, può essere usato per successive comunicazioni.
  
  Questa versione del protocollo può essere formalizzata come segue:
  
  * Alice → Bob : $g^{x}$
  * Alice ← Bob : $g^{y},E_{K}(S_{B}(g^{y},g^{x}))$
  * Alice → Bob : $E_{K}(S_{A}(g^{x},g^{y}))$
  