Sicurezza II Prof. Dario Catalano Strong Password Protocols.
-
Upload
cajetan-mura -
Category
Documents
-
view
226 -
download
0
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)