Newsgroup: it.comp.www.php
Titolo: Ricerca con chiave MD5

Salve,
ho la necessità di eseguire una query che mi consenta di ricercare un 
determinato record in base all'ID. Fin quì nulla di strano:
SELECT * FROM tabella WHERE record_id = valore
Il problema si pone nel momento in cui il valore che passo alla query, per 
ragioni di sicurezza (indipendenti dalla query) è l'hash di un id. Come 
posso eseguire tale ricerca?
Grazie & Saluti. 


valore = md5(valore);


 SELECT * FROM tabella WHERE record_id = valore
Ciao,
credo di non essere riuscito a spiegarmi bene, lo dubitavo. Praticamente io 
dispongo gią dell'hash di "valore". Il problema č confrontarlo con 
record_id, visto che questo valore č un int(6). Teoricamente dovre 
confrontare l'hash di "valore" con l'hash della field "record_id" di ogni 
record.
Ma come? :D
Grazie & Saluti. 

 record.
Innanzitutto chi e` il pazzo che ha deciso di fare l'md5 dell'indice del
DB e per quale motivo?
Poi, puoi provare con
select * from tabella where md5(id)=valorehashato;
Pero` ti perdi tutte le prestazioni del DB, perche` fai una ricerca
lineare.
Al limite, per alleviare, puoi creare un indice sull'md5 degli id:
create index tab_md5idx on tabella(md5(id));
O qualcosa del genere...
Bye.
 


google con questi valori:
c4ca4238a0b923820dcc509a6f75849b
c81e728d9d4c2f636f067f89cc14862c
eccbc87e4b5ce2fe28308fd9f2a7baf3
a87ff679a2f3e71d9181a67b7542122c
e4da3b7fbbce2345d7772b0674a318d5
1679091c5a880faf6fb5e6087eb1b2dc
8f14e45fceea167a5a36dedd4bea2543

 record.
Brute Force attack con md5{int(6)}, mi sa che in 10 minuti si provano tutti
(sono 20MB di dati).
Se lo dovete fare 'seriamente' ci vuole un po' di piu' come sforzo (e mi pare
il punto sbagliato per applicare la sicurezza).
cmq. a priori bisogna controllare se non ci sono collisioni tra tutti
md5(record_id) ;-)
JM2C

 
Grazie a tutti. Spiego imeditamente il perchè dell'md5. Ho creato un 
sistema di login dove è necessaria la registrazione (altrimenti che 
sistema di login è!?!?! :D). A fine registrazione viene inviata una mail 
  contenente un link ad una pagina di attivazione. Tale link contiene 
due parametri: l'id dell'untente registrato e un codice di attivazione. 
Per "mascherare" tali dati ho pensato di inviarne l'hash via mail. 
All'interno del database entrambe le fields sono in formato int. Ieri 
sera non l'ho scritto perchè ero leggermente assonato ma sono riuscito a 
risolvere con la soluzione di Alessandro Pellizzari:
select * from tabella where md5(id)=valorehashato;
A quanto dice non è performante ma, come ben sapete, un'attivazione è 
"per sempre". Non provedo 100 attivazioni in contemporanea, quindi 
potrei permettermi di appesantire un attimo il database. Sbaglio qualche 
cosa nel mio ragionamento?
P.S.: sono sempre hh, solo che per le news sono passato a Thunderboird, 
di cosenguenza ho anche deciso di cambiare nome.
Grazie & Saluti.

 cosa nel mio ragionamento?
L'unica cosa che rischi e` una collisione di hash, ma con id a 6 cifre e
md5 non dovresti avere grossi problemi.
Bye.

Alessandro Pellizzari wrote:

Inviando l'hash di un id prograssivo, di conseguenza diverso per ogni 
utente obbligatoriamente, non dovrei avere problema di collisioni, o 
sbaglio?

 ha scritto:

Di solito no, ma sarebbe meglio creare un identificativo al volo per l'utente
crea un nuovo campo nel db CodAttivazione (con Index Unique) [ancora meglio
una tabella aposta con id+codAttivazione+qualche flag]
Crea un hash sensato:
$hk=sha1($id.array_sum(split(" ",microtime())));
ancora meglio sarebbe un hash creato da ssl ed un mhash:
http://php.dopoil.com/tutorial/tutor.php?opensslRand
 e
http://php.dopoil.com/tutor.php?opensslRand
$hk=hmac(HMAC_MD5,$id,getRand (16));
poi dopo con $hk:
"UPDATE bla SET CodAttivazione='$hk' WHERE id=$idNuovoUtonto"
nel script di attivazione:
http://tuodom/confermaAttivazione.php?codAtt=$hk
fai la query per prendere il tuo utente target con
... WHERE CodAttivazione='$codAtt'
ed infine cancelli o marchi come attivato il CodAttivazione
Spero di essermi spiegato...

 
http://php.dopoil.com/tutorial/tutor.php?opensslRand
 e
Scusate, link sbagliati:
http://php.dopoil.com/tutor.php?opensslRand
http://php.dopoil.com/tutor.php?hmacCalculation