Sicurezza II Prof. Dario Catalano Strong Password Protocols.

Post on 01-May-2015

229 views 0 download

Transcript of Sicurezza II Prof. Dario Catalano Strong Password Protocols.

Sicurezza IIProf. Dario Catalano

Strong Password Protocols

Introduzione

Problema: Alice vuole usare una workstation per autenticarsi in un server (Bob). Alice ha solo la sua pwd La workstation non possiede nessuna

configurazione particolare (es. non ha accesso alla chiave privata di Alice).

Il software installato sulla workstation e’ affidabile.

Esistono vari modi in cui Alice puo’ usare la pwd per autenticarsi con Bob.

Vari approcci

La pwd di Alice e’ trasmessa in chiaro a Bob

Eseguire DH (anonimo) per stabilire un canale privato da utilizzare per trasmettere la pwd. Protegge contro “origliatori” ma non

contro chi impersona Bob.

Vari approcci (cont) Calcolare l’hash della pwd e utilizzarla

come chiave segreta in un protocollo challenge/response Rimane il problema dell’attacco del

dizionario. Utilizzare uno schema del tipo One Time

pwd (es. Lamport Hash) Utilizzare uno schema sicuro contro

dictionary attacks. Oggi discuteremo queste due ultime

soluzioni.

Lamport’s Hash

Lo schema permette a Bob di autenticare Alice. Ne’ un origliatore ne’ un avversario

che entra nel server di Bob potra’ impersonare Alice.

Alice ricorda solo la propria password.

Bob mantiene un database.

Il DB di Bob

Per ogni utente Bob mantiene le seguenti informazioni Username n, intero (che viene decrementato

ogni volta che l’utente viene autenticato)

Hashn(pwd)

Configurare i dati di Alice

Alice sceglie la propria pwd ed un intero (suff. grande) n.

Il software di registrazione calcola x1=hash(pwd)

Quindi calcola x2=hash(x1),…,xn=hash(xn-1).

Vengono inviati a Bob xn e n.

Autentica Alice inserisce username e pwd nella

workstation. La workstation invia l’username a Bob Bob risponde con n. La workstation calcola x=hashn-1(pwd) e

manda x a Bob. Bob calcola hash(x), se e’ uguale a xn

Alice puo’ entare. Bob rimpiazza n con n-1 nel database.

Autentica (cont) Quando n arriva ad 1 il sistema deve

essere re-inizializzato. Una nuova pwd deve essere scelta.

Questo e’ piuttosto complicato in un sistema come quello considerato qui.

In pratica, Alice sceglie una nuova pwd’, calcola hashn(pwd’), e trasmette hashn(pwd’) e n (in chiaro) a Bob.

Aggiungere un seme

Un valore casuale seed (seme) e’ scelto in fase di inizializzazione.

Valore univocamente legato ad Alice e memorizzato nel DB di Bob.

Il seme e’ concatenato alla pwd prima di calcolare l’hash.

hashn(pwd||seed)

Aggiungere un seme (cont)

Per calcolare la pwd, il software di registraz sceglie seed (a caso) calcola x1=hash(pwd||seed), …, xn=hash(xn-1||seed).

xn, n e seed sono inviati a Bob.

Vantaggi (nell’utilizzare seed) Alice puo’ utilizzare la stessa password

su tanti server (utilizzando ogni volta un seme diverso).

Alice non ha bisogno di cambiare la pwd quando un dato n arriva a zero. Basta cambiare il seme e ripetere

l’inizializzazione con il nuovo seme. Inoltre aggiungere un seme permette di

fronteggiare un avversario che calcola hashn per tutte le possibili pwd del dizionario.

Proprieta’ dello schema Accedere al server di Bob non

compromette la pwd di Alice. Rispetto ai sistemi a chiave pubblica e’

piu’ efficiente, ma ha altri svantaggi. Dictionary attack. E’ possibile autenticarsi un num limitato di

volte prima di dover reinizializzare il sistema.

Non si ha mutual authentication (Alice non puo’ essere sicura di parlare con Bob).

Small n attack Oscar impersona Bob e attende il

tentativo di log in di Alice Quando Alice effettua il log in, Oscar

invia un valore n’ piccolo (es. 20) Alice risponde con hashn’(pwd). Oscar potra’ impersonare Alice presso il

vero Bob (assumendo che il valore n memorizzato da Bob sia maggiore di n’)

Contromisure

La workstation potrebbe mostrare l’n ricevuto dall’umano (Alice)

Se Alice ricorda il valore (approssimativo) di n le conseguenze dell’attacco possono essere contenute.

Human and paper environment

Ambienti dove la workstation non calcola l’hash, es: Alice si collega da un terminale

“dumb” La workstation non ha il software che

implementa lo schema. La workstation non e’ fidata (Alice

non vuole rivelare la propria pwd).

Human and paper environment (cont) Quando l’info (n,hashn(pwd)) e’

installata nel server, tutti i valori hashi(pwd), i<n, sono calcolati.

Tali valori sono convertiti in formato “digitabile”, stampati e dati ad Alice.

Quando Alice fa il log in, inserisce la stringa all’inizio della pagina, e la cancella da foglio.

Human and paper environment (cont) Tale approccio non e’ soggetto allo

small n attack. Considerato che una funzione hash

restituisce un output di (almeno) 160 bit e assumendo di avere un alfabeto di (almeno) 64 caratteri, la stringa da inserire sarebbe (circa) 32 caratteri!

Ci si potrebbe pero’ limitare alla meta’

Strong Pwd Protocols

Anche se Oscar origlia non puo’ effettuare un dictionary attack.

L’on line pwd guessing rimane possibile Non vi e’ modo di evitarlo. Ma non e’ un attacco troppo

pericoloso.

Bellovin Merritt (EKE)

EKE: Encrypted key exchange Alice e Bob condividono un segreto

W (hash della pwd di Alice) Idea di base: Alice e Bob

effettuano uno scambio Diffie-Hellman “cifrando” i valori DH con W.

EKE

Alice e Bob condividono W=hash(pwd)Alice Bob

“Alice”, Enc(W;ga mod p)

Enc(W;gb mod p, C1)K=gab K=gab

Enc(K; C1,C2)

Enc(K; C2)

Considerazioni La ragione (intuitiva) per cui il

protocollo e’ sicuro contro origliatori e’ che il valore ga (e gb) non ha nessuna forma facilmente identificabile.

Chi impersona Alice o Bob puo’ verificare la correttezza di una (singola) pwd on line. Ma questo sarebbe, appunto, un attacco

on line.

Dettagli sottili

In realta’ e’ piuttosto complicato realizzare protocolli di questo tipo.

Esiste un’enorme quantita’ di dettagli che, se trascurati, potrebbero rendere possibile un dictionary attack.

Guardiamo un esempio concreto.

Esempio (EKE)

Supponiamo che p sia poco piu’ grande di una potenza di 2 (es 2k-

1<p<2k). Enc e’ un cifrario che ha come

spazio dei msg le stringhe di lunghezza (al piu’) 2k.

ga mod p e’ sempre piu’ piccolo di p ga mod p < 2k.

L’attacco Provo tutte le pwd. Per ognuna di esse provo a decifrare, se

cio’ che ottengo e’ > di p allora la pwd e’ sbagliata.

Se p e’ poco piu’ grande di una potenza di 2k-1 , ho una probabilita’ significativa che una pwd sbagliata dia luogo ad un fenomeno del genere.

Provando su un numero suff. di conversazioni posso arrivare abbastanza facilmente alla password effettivamente utilizzata.

Evitare l’attacco Per evitare questo attacco e’ opportuno

considerare un p che e’ POCO PIU’ PICCOLO di una potenza di due.

Questo accorgimento rende bassa la probabilita’ che una pwd sbagliata decifri un valore chiaramente scoretto.

Esistono molti altri attacchi (anche molto meno banali) che possono essere fatti su schemi di questo tipo.

Costruire protocolli strong sicuri e’ estremamente complicato.

Protocolli ulteriormente rinforzati

Se qualcuno conoscesse W, potrebbe impersonare Alice.

Vorremmo un protocollo, che permetta di evitare tale problema. In altri termini, anche entrare nel DB di Bob non

aiuta a spacciarsi per Alice. La versione rinforzata di EKE e’ un po’

troppo complicata per questo corso. Vediamo, quindi, un altro protocollo.

SRP (Secure Remote Password) Bob memorizza gW mod p. W e’ ottenuto dalla pwd di Alice

tramite una funz. nota. Dunque Bob non conosce W

esplicitamente. Il protocollo prevede che Bob

scelga (ad ogni esecuzione) un valore casuale u (di 32 bit)

SRP

Alice e Bob condividono W=hash(pwd)Alice Bob

“Alice”, ga mod p

(gW +gb) mod p, u, C1

K=gb(a+uW) K=gb(a+uW)

Enc(K; C1), C2

Enc(K; C2)