290 likes | 455 Views
Sicurezza II Prof. Dario Catalano. Strong Password Protocols. Introduzione. Problema: Alice vuole usare una workstation per autenticarsi in un server (Bob). Alice ha solo la sua pwd
E N D
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)