Protocollo Woo-Lam

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

Il protocollo Woo-Lam rappresenta un protocollo di comunicazione progettato per permettere comunicazioni cifrate su reti non sicure. Questo fu dovuto a Thomas Woo e Simon S. Lam nella metà degli anni ottanta.

Il protocollo si basa su due concetti:

  • Uso della crittografia simmetrica, quindi di un'unica chiave per la fase di codifica e decodifica;
  • Uso del TTP (Trusted Third Party), ossia un organo fidato che contiene tutte le chiavi degli utenti che vogliono effettuare le comunicazioni.

Il protocollo a chiave segreta[modifica | modifica wikitesto]

Scenario[modifica | modifica wikitesto]

  • Alice () e Bob () sono due entità di rete che devono comunicare in modo sicuro utilizzando un collegamento di rete non sicuro.
  • è un server fidato, ovvero che gode della fiducia di entrambe le parti.
  • è una chiave simmetrica nota esclusivamente ad A e TTP.
  • è una chiave simmetrica nota esclusivamente a B e TTP.
  • e sono nonce crittografici, ovvero numeri casuali da usare una volta sola.

Si suppone che sia A a cominciare la comunicazione.

Descrizione[modifica | modifica wikitesto]

L'obiettivo del protocollo è quello di far autenticare un utente da un utente . I passi su cui si basa il protocollo sono:

Alice manda un messaggio a Bob dicendogli Sono Alice.

Bob manda ad Alice la relativa nonce creata appositamente.

Alice manda a Bob la stessa nonce appena ricevuta criptandola con la sua chiave.

Bob, una volta ricevuto il messaggio precedente, fa richiesta al TTP, inviandogli informazioni aggiuntive riguardo all'attuale comunicazione con Alice. Il tutto cifrato con la chiave di Bob.

Il TTP, che conosce sia la chiave di Alice che di Bob, decodifica tramite la chiave di Bob il messaggio che ha ricevuto da Bob stesso. Di tale messaggio, sfruttando la chiave di Alice, decodifica la nonce che verrà poi rispedita a Bob crittografata con la chiave di Bob.

Vulnerabilità[modifica | modifica wikitesto]

Il protocollo è suscettibile ad attacchi. In questo caso, vediamo come può avvenire un attacco.

C, che finge di essere A, manda il messaggio a B dicendo di essere A.

C questa volta dice la verità, inviando correttamente il messaggio secondo protocollo.

B risponde ad A (C lo intercetta) indicando la nonce cifrata con la propria chiave.

B risponde a C indicando la nonce cifrata con la propria chiave.

Dopo questi due passi, abbiamo che:

  • all'utente A è associata la nonce ;
  • all'utente C è associata la nonce .

Secondo protocollo, C (che impersona A) dovrebbe mandare a B la stessa nonce cifrata con la chiave di A, ma per creare confusione, cifra in modo errato con la chiave di C.

Secondo protocollo, C dovrebbe mandare a B la stessa nonce cifrata con la chiave di C, ma per creare confusione, utilizza erroneamente la nonce .

In questi due passaggi, ci sono due violazioni al sistema:

  • C (che impersona A) invia la nonce esatta cifrando con una chiave errata;
  • C invia la nonce sbagliata cifrando con una chiave giusta.

B invia al TTP ciò che ha ricevuto da A (ossia da C).

B invia al TTP ciò che ha ricevuto da C.

Quando il TTP riceve questo messaggio da B lo decodifica, in quanto possiede tutte le chiavi. Quando apre il messaggio, il TTP si rende conto che il mittente è A, quindi apre ciò con la chiave di A. Ma dato che era codificato con la chiave di C, quello che si otterrà alla fine è un numero sballato, perciò una nonce non giusta, chiamata .

Quando il TTP riceve questo messaggio da B, lo decodifica, lo apre esattamente in quanto mittente e chiave di codifica sono esatti, e ritorna la nonce .

Conclusioni[modifica | modifica wikitesto]

B, quando riceve dal TTP le due nonce capisce che:

  • la nonce è sballata, perciò la scarta;
  • la nonce è giusta, e quindi l'associa all'utente A (che in realtà è C).

Quindi, ogni messaggio successivo tra C e B risulta valido, solamente che B crede di comunicare con A, ma ciò non è vero.

Possibile soluzione[modifica | modifica wikitesto]

La possibile soluzione al problema consiste nel far sì che il TTP, dopo aver decodificato un messaggio, lo inoltri nuovamente al richiedente specificando esplicitamente la corrispondenza tra nonce e l'utente per cui era stata creata tale nonce. In pratica equivale a sostituire il passo:

con

Così facendo ogni messaggio restituito dal TTP sarà univocamente associato ad un utente. Ciò pertanto permette la gestione di più comunicazioni parallele evitando di creare confusione nei messaggi di ritorno e quindi evitando il sopracitato attacco.

Voci correlate[modifica | modifica wikitesto]