Newsgroup: it.comp.www.php
Titolo: Memorizzazione dati sensibili

salve a tutti,
mi chiedevo quale fosse il modo migliore per memorizzare dati sensibili, 
crypt, md5, sha1?
quali usate e perché?
grazie a tutti

quali usate e perché?
Dipende da cosa ci devi fare.
Se devi "verificare che qualcuno sappia qualcosa" (cioe' a te non
interessa il qualcosa, ma solo sapere se lui lo sa) allora meglio
ricorrere a un hash come MD5 o SHA1.
In pratica memorizzi MD5(secret), per cui se anche uno ti fotte i
dati, non se ne fa nulla, perche' da MD5(secret) e' *impossibile*
risalire direttamente a "secret"... e risalirci indirettamente e'
un discreto bagno di sangue (brute force, rainbow attack, ...).
Se invece ti serve il qualcosa, devi usare una cifratura di altro
tipo - sia PHP che MySQL ce l'hanno - e decrittare il dato quando
ti serve.
Il problema quindi diventa come decrittare quel dato, e cioe' con
quale password. Se usi la password inviata dall'utente, oppure la
password "master" decifrata usando la password dell'utente (molto
meglio!), ti rimane il problema che ti devi fare inviare una pass
in chiaro.
D'altra parte, a questo punto uno dovrebbe SIA conoscere (almeno)
una delle password degli utenti, SIA avere accesso fisico al DB.
Se la tieni sul server, a quel punto serve poco la crittatura, in
quanto con l'accesso fisico, uno legge i dati esattamente come se
non fossero crittati.
Leonardo
-- 
 What do you make, so fair and bright;
 What do you build with sails for flight;
 What do you weave with wool so white?

 quali usate e perché?
Dipende molto da che dati sensibili vuoi memorizzare.
Ad esempio, se il dato deve poi essere decifrato, puoi escludere tutto
ciò che riguarda l'hashing (e quindi tutti e tre i metodi da te citati).
- --
Lorenzo Breda - Linux User #387700
Query 
keyserver.linux.it
 for GPG pub key ID: 0xF50D4C69
Fingerprint:
3618 E21C CA59 0EAC 2E00 F9BF 34A4 D6A0 F50D 4C69
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
iD8DBQFG0fCcNKTWoPUNTGkRAlhBAJ0dtMbXJwkbVfVt3KzwBD8PXLSU4QCgkYHw
0I2C2mrfKUPsmWgXfsAyYME=
=QIB7
-----END PGP SIGNATURE-----

 ciò che riguarda l'hashing (e quindi tutti e tre i metodi da te citati).
se un utente per esempio deve memorizzare il nome utente e la password 
mi conviene usare un hash per la pass?
e in quali altri casi lo escluderesti l'hashing?
queste domande valgono anche per leonardo,
grazie per l'interessamento

queste domande valgono anche per leonardo
T'ho scritto la risposta nell'altro post :-)
"Quando ti serve di recuperare tu (nel codice) le informazioni".
Per es., l'indirizzo dell'utente non lo puoi hashare, devi invece
crittarlo con AES o altro. Perche' dall'hash, non recuperi piu' i
dati originari.


 dati originari.
come implementare questi altri metodi di criptaggio in php?

Avatar wrote:

leggi il manuale..
puoi iniziare da 
http://php.net/mcrypt
 ..
-- 
www.iuz-lab.info
 - 
www.php-faq.org


wrote:



Uno qualsiasi dei metodi del modulo mcrypt (v. manuale); se ricordo bene
ti conviene AES, visto che c'e' appunto anche su MySQL, ma ora non ho la
possibilita' di controllare, sicche' non fidarti :-)


 possibilita' di controllare, sicche' non fidarti :-)
grazie, molto gentile

 un discreto bagno di sangue (brute force, rainbow attack, ...).
Mi spiace contraddirti Leonardo, ma ormai l'md5 è tutto purché sicuro :
(
Online trovi tantissimi database con le corrispondenze, e poiché
questi database sono pubblici vengono persino indicizzati.
Basta Google per risalire alla password in chiaro...

Mirko wrote:

se usato correttamente anche l'md5 e' ancora molto sicuro.. le rainbow table
si inchinano davanti ad una buon uso di detto sistema di hashing..
-- 
www.iuz-lab.info
 - 
www.php-faq.org





Mmm. Se la password viene 'salata', ti serve un bel po' di database.
Per esempio - invertimi "1ff917ef877feb7ef2abde5117ce7418". Anche se
sai che la password e' meno di 16 caratteri, e il salt e' "ij763"...
...c'e' sempre il social engineering... uno che mi conosce l'azzecca
alla prima :-)... ma se no, c'hai da camina' roccia!


 
salata??
potresti spiegarmi meglio?
grazie

potresti spiegarmi meglio?
In breve: anziche' usare la password, ci premetti un "salt", cioe' non ti
calcoli l'MD5 di "pippo" ma di "asdfdsa:pippo" (chiaramente anche asdfsda
e' un valore segreto che non dici a nessuno).
Nel database per ogni $pass c'e' l'MD5 di "asdfsda:$pass".
Immagina di essere l'"attaccante".
In teoria potresti generare tutte le password diciamo da 1 a 8 caratteri,
inserendole in una tabella indicizzata per MD5.
Una volta che sai che l'MD5 della password e' 12345, vai alla f(12345)-ma
posizione nella tabella e ci trovi scritto dentro "pippo"... e sai che la
password e' "pippo", salvo collisioni (che funzionerebbero lo stesso).
Ma se usi la 'salatura' delle password, nell'MD5 non c'e' "pippo" ma c'e'
invece "asdfsda:pippo", e QUESTA non e' una delle chiavi della tabella.
Tutte le password di otto caratteri le indicizzi in MD5 con vari trucchi,
e ti ci stanno in circa un terabyte di disco. E' fattibile.
Ma per attaccare una password salata ti servono tanti tera quante sono le
possibili salature. Con un 'salt' di due caratteri, di hard disk cosi' te
ne servono QUATTROMILA: era meglio se ti sognavi ghiande :-)
(poi le cose non sono _proprio_ cosi' semplici, ma si fa a capirsi).


 
grazie per la spiegazione, molto gentile