Newsgroup: it.comp.sicurezza.crittografia
Titolo: hashing delle pwd con sale: ho capito?

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Salve. Nuovamente sull'hashing delle pwd.
Stavolta, però, non è solo un esercizio: sto
progettando un'applicazione distribuita via web.
Se ho ben capito, la concatenazione con
una stringa "salt" è necessaria quando si
vuol limitare il pericolo di un attacco a
dizionario.
IPOTESI 1:
Se la pwd (8 simboli alfanumerici) è
generata in maniera secure-random dal
sistema, non sussistendo il pericolo
di un attacco a dizionario, il solo hashing
basterebbe, vero?
IPOTESI 2:
Se la pwd (minimo 8 simboli alfanumerici)
è scelta dall'utente, potendo essere ricavata
da vocaboli di un dizionario, sarebbe necessario
il concatenamento con un po' di "casino" (salt)
prima di effettuare l'hash, vero?
Nell'ipotesi 2, quanto dovrebbe essere lungo il salt?
Nelle ipotesi 1 e 2, in che misura può concretizzarsi
un attacco brute-force?
una password costituita da
8 simboli alfanumerici quanta entropia rappresenta:
2^(25+25+10) = 2^60 combinazioni possibili, vero?
(25 per le minuscole + 25 maiuscole + 10 cifre).
Quindi anche nell'ipotesi 1 è conveniente utilizzare
sale, vero?
Grazie,
GianpieroP
-----BEGIN PGP SIGNATURE-----
Version: PGP 8.0
iQA/AwUBQEzLiJ4sPKh9SaicEQK57QCg3ZaBVNKuTR5cuYYZnLc557lF4gYAoOer
ldhf1gVBZV5OXax5O6BvlneK
=XVRO
-----END PGP SIGNATURE-----

 ha scritto nel
messaggio news:a043c.579$_F....@tornado.fastwebnet.it...
| una password costituita da
| 8 simboli alfanumerici quanta entropia rappresenta:
| 2^(25+25+10) = 2^60 combinazioni possibili, vero?
| (25 per le minuscole + 25 maiuscole + 10 cifre).
Pardon, ho detto una sciocchezza!
(25+25+10)^8 = 60^8 = 2^log(60^8) = 2^8*log(60)
che è circa 2^47
GianpieroP
-----BEGIN PGP SIGNATURE-----
Version: PGP 8.0
iQA/AwUBQEzv1J4sPKh9SaicEQLxXgCfQwAqLcsA49Lpr9F0aP0C8YoEnWAAoNez
dlJLlTM0eCKI+1MUC2Bylzsc
=VK6T
-----END PGP SIGNATURE-----

 (25+25+10)^8 = 60^8
Quale lettera non ti sta simpatica? ;-)
- --
L a p o   L u c h i n i
l a p o @ l a p o . i t
w w w . l a p o . i t /
http://www.megatokyo.it
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (Cygwin)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iEYEARECAAYFAkBNEAAACgkQaJiCLMjyUvtz4wCg5011CRECs5d67OVEP9I4z0Y1
pvMAoMd4EuCgmKYBei9OsJsZrnobbaNr
=bf/6
-----END PGP SIGNATURE-----

 sale, vero?
Più che altro c'entra poco con il problema di cui parli...
- --
L a p o   L u c h i n i
l a p o @ l a p o . i t
w w w . l a p o . i t /
http://www.megatokyo.it
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (Cygwin)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iEYEARECAAYFAkBNI8sACgkQaJiCLMjyUvvd3QCg0+7ncJYf7elaKlZiTYkJ2JMf
yeEAmgIgBPcptvfwNLGJNJgFji9FrWGg
=THbW
-----END PGP SIGNATURE-----

 Quale lettera non ti sta simpatica? ;-)
:-)
E' l'inglese che non mi sta tanto simpatico ;-)
Ciao,
GianpieroP

 Piů che altro c'entra poco con il problema di cui parli...
OK! Sei stato chiarissimo: per dizionario, in questo caso,
si intende un dizionario contenente tutte le combinazioni
possibili di simboli alfanumerici e di lunghezza arbitraria
fino alla lunghezza massima consentita.
Il mio dizionario, quindi, č costituito da
quel 2^47 "voci" se tutte le pwd fossero
di lunghezza fissata a 8 simboli. E quindi
computazionalmente (e in termini di efficienza
spaziale) fattibile.
Affinchč non sia fattibile dovrei allungare le pwd,
ma per evitare di costringere i miei utenti a ricordare
pwd troppo lunghe, ecco che nasce la congettura del
sale.
Quante volte dovrei ripetere il concatenamento del
sale per scoraggiare un attacco brute-force, ma nello
stesso tempo non scoraggiare i miei utenti quando
si loggano :-) ?
Grazie,
GianpieroP

 si loggano :-) ?
Un singolo hash di un valore di 8 byte richiede un tempo bassissimo, ma
se ogni hash "richiedesse" 1 secondo, il dizionario avrebbe già un costo
molto più alto da costruire.
Se poi c'è anche il sale la cosa diventa totalmente infattibile.
In "Applied Cryptography", capitolo 22.2.1, Schneier & Ferguson
consigliano, nel caso i segreti siano immagazzinati nella memoria umana,
di "salare e stirare" così:
p è la password (lunghezza variabile)
s è il sale (256 bit, realmente random)
x è un valore temporaneo di 256 bit
r è il numero di round
K è la chiave vera e propria da usare
h() è la funzione di hash
x := 0
ripeti r volte: x := h(x || p || s)
K := x
Gli autori consigliano inoltre di utilizzare 256 bit di sale e una
funzione hash con una sicurezza di amleno 128 bit (quindi SHA-256).
r deve essere grande abbastanza affinché il calcolo impieghi 200-1000ms
a piena CPU.
Lapo
- --
L a p o   L u c h i n i
l a p o @ l a p o . i t
w w w . l a p o . i t /
http://www.megatokyo.it
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (Cygwin)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iEYEARECAAYFAkBNlMYACgkQaJiCLMjyUvt0wACgvaZ9WWg4YWJ6V3XvP3Za1wFo
2SUAoJX+UFmmwBv2tKWTFwe/Twmgq8cn
=Pt7c
-----END PGP SIGNATURE-----

 alla volta che non caricandole dall'hard disk.
A questo punto due sono le cose:
1. Non sei stato chiaro tu
2. Non sono stato chiaro io
Io dicevo:
Mi costruisco un dizionario (facciamo una tabella
di database) che associa a ciascuna pwd possibile
il suo valore hash.
Quando riesco a penetrare nel database del server,
ricavo l'hash e tramite questo recupero il record 
corrispondente per ottenere la pwd che l'aveva 
generato. Ovviamente come chiave primaria del mio
dizionario scelgo l'hash (per evitare di ottenere
duplicati e per ottenere un indicizzazione per la
ricerca efficiente log2(N)).
Ovviamente potrei anche soltanto creare un indice
di unicità sul campo hash e otterrei la stessa
cosa.
Ecco: questo è ciò che riassumevo nel mio ultimo
post (non quello ancora precedente perchè avevo
sbagliato il significato) con il termine dizionario.
Se non è così allora significa, aimè, che vale
l'ipotesi 2 (citata sopra).
In attesa di riscontro,
ti saluto e ti ringrazio per
lo scambio di informazioni (che
purtroppo ancora una volta è 
monodirezionale: da te verso me).
Ciao,
GianpieroP
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ricerca efficiente log2(N)).
OK, allora avevi già detto giusto, avevo capito male io 0=)
(quello che citi è corretto)
- --
L a p o   L u c h i n i
l a p o @ l a p o . i t
w w w . l a p o . i t /
http://www.megatokyo.it
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (Cygwin)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iEYEARECAAYFAkBN2UgACgkQaJiCLMjyUvsYBQCaA2W2Gn68TdPo8F4l6BfareMB
oMMAn1c+dmE9IfxoMEaayQ6ibq90S7N0
=D7PB
-----END PGP SIGNATURE-----