Newsgroup: it.comp.sicurezza.crittografia
Titolo: carte di credito

Salve a tutti,
per vari motivi ho bisogno di effettuare il riconoscimento di un utente
tramite il numero della sua carta di credito. Per questioni di sicurezza ho
pensato di registrare nel DB solo lo SHA-1 del numero. Ora pero' mi e'
venuto un dubbio e volevo chiedere un vostro parere... (lo so gia' che i
dubbi e' meglio farseli venire prima!)
Un numero di carta di credito e' composto da 16 cifre e la prima di queste
e' sicuramente 4 per le Visa e 5 per le Mastercard. Se la carta e' Visa il
numero sara' quindi in questa forma: 4XXX-XXXX-XXXX-XXXX. Qualora il mio DB
subisse un attacco e una terza persona venisse in possesso degli hash e'
possibile secondo voi riuscire a risalre ai numeri delle carte di credito?
Pensando ad un procedimento con la forza bruta mi viene in mente qualcosa
del genere... ditemi se sbaglio....
Le cifre da individuare sono 15. Ogni cifra puo' essere un numero compreso
tra 0 e 9. Le possibili combinazioni sono quindi 10^15. Esprimendo questa
potenza in base 2 si ha 10^15 ~= 2^50 (per eccesso). Da cio' che leggo in
giro questo numero di tentativi non e' poi cosi' eccessivo. Devo quindi
supporre che sia facile o quantomeno non difficile risalire ai numeri?
Inoltre (cosa che non ho calcolato) la seconda cifra del numero della carta
e' anche lei piu' facilmente individuabile in quanto (sempre per le Visa) e'
compresa tra 2 e 7 e non tra 0 e 9 come tutte le altre. Quindi il numero di
tentativi scende.....
Fatemi sapere,
Grazie.

 scende.....
Anche supponendo di poter provare 10^6 numeri al secondo (e mi sembrano
tanti) il tempo per attaccare tutti i numeri del DB mi sembra veramente
enorme.
Comunque, in questi casi, quando cioè i tentativi di forza bruta
richiederebbero un tempo non astronomico, conviene hashare molte migliaia di
volte il numero da proteggere in modo che l'hash del numero da proteggere
richieda qualche secondo (un tempo di attesa trascurabile). L'attacco di
forza bruta, però, richiederà un tempo immenso perché ogni singolo tentativo
durerà qualche secondo invece di qualche micro o milli secondo.
Cristiano

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Cristiano wrote:
| Comunque, in questi casi, quando cioè i tentativi di forza bruta
| richiederebbero un tempo non astronomico, conviene hashare molte
migliaia di
| volte il numero da proteggere in modo che l'hash del numero da proteggere
| richieda qualche secondo (un tempo di attesa trascurabile).
Usando, magari, anche un "sale" casuale (da includere in chiaro), in
modo da evitare anche che tali hash possano essere precalcolati (attacco
dizionario).
In pratica invece di H(numero) ti conviene immagazzinare:
salt | n | Hn(salt, numero)
Hn(salt, numero) = Hash(salt | Hn-1(numero))
dove 'n' è un numero tale che Hnn() impieghi "qualche secondo" su CPU
odierne.
(ovviamente tra 5 anni 'n' sarà più grande dell'n usato oggi, ma
"qualche secondo" ti lascia comunque un bel margine prima che diventi
"velocemente attaccabile" passeranno insomma parecchi anni)
- --
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.2 (Cygwin)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iEYEARECAAYFAj/uKXoACgkQaJiCLMjyUvvFKACg50j0xEebThvk2lfyx1RBLe40
K+EAoM/FlTMdWf/jV7bSBQOY83hYGIY8
=G8kk
-----END PGP SIGNATURE-----