Newsgroup: it.comp.sicurezza.crittografia
Titolo: codice hash

Ciao, Non sono programmatore, ma  vorrei capire come funziona l'algoritmo 
md5 che crea i codici hash, in  particolare sarebbe possibile creare un file 
(qualsiasi) in maniera tale che abbia un determinato codice hash ?
Spero essere stato chiaro
 grazie, matteo. 

Matteo ha scritto:

Ciao, ti rispondo io che sono un programmatore amatoriale ma non un
crittoanalista :-)
Gli algoritmi di hashing sono funzioni matematiche che generano un
"riepilogo" a 128-256-512 ecc... bit partendo da un testo o file di
lunghezza qualunque. Dato che l'algoritmo è noto, teoricamente penso che
si possano predisporre i dati di partenza in modo tale che diano un
certo risultato. Diversamente è molto più difficile anche se l'MD5 non è
 sicuro perché è stato crittoanalizzato ed ha alcune debolezze. Meglio
usare altri algoritmi di hashing quali l'SHA-256 o SHA-512.
-- 
Ciao.
Leo.
Web: 
www.leonardomiliani.com
E-mail: 
leon...@leonardomiliani.com
Scegli software opensource - Choose opensource software

 Meglio usare altri algoritmi di hashing quali l'SHA-256 o SHA-512.
Concordo, ma direi che anche l'SHA-160 è ancora utilizzabile.
Cristiano 

Matteo ha scritto:

http://it.wikipedia.org/wiki/Hashing
-- 
Spesso l'uomo concentrandosi sui mezzi perde di vista lo scopo.
A. Schopenhauer

 Concordo, ma direi che anche l'SHA-160 č ancora utilizzabile.
Credo che sia proprio il pensiero di partenza errato,
ossia pensare alla "sicurezza" attaverso gli algoritmi
di hashing. Come giustamente avete detto, sono nati per fare un sunto 
dei dati?
E allora usiamoli per quello :)
Certo che poi fanno comodo anche per schiaffare le password dentro la 
base di dati,
senza lasciarle in chiaro ;-)
Naturalmente, quanto detto sopra č IMHO.
Ciao da un niubbo ;)
Shad
P.s. finalmente qualche post che non chiede consiglio solo sui 
software in circolazione :)

 (qualsiasi) in maniera tale che abbia un determinato codice hash ?
Una funzione hash prende come input un dato di ampiezza arbitraria (es
un file di n byte) e restituisce come output un dato di ampezza fissa.
Lo scopo primo è quello di avere un "riassunto" di ampiezza nota dei
dati in entrata, poi a seconda delle caratteristiche della funzione che
effettua questo "riassunto" il dato in uscita può essere usato per
scopi anche molto diversi.
Ad esempio, un hash crittograficamente forte deve possedere la
caratteristica di rendere computazionalmente non fattibile calcolare
due input che originino lo stesso codice hash, dove computazionalmente
non fattibile significa che la strada più breve è la forza bruta
(provare tutti i file e calcolarne l'hash fino ad ottenere il valore
desiderato).
In questo senso per evitare che sia possibile generare un file per
ottenere appositamente un dato codice hash, come nello scenario che
prospetti, basterebbe usare una funzione hash crittograficamente forte,
il problema è che spesso è necessario rivedere cosa sia
crittograficamente forte e cosa no, ad esempio l'MD5 era
originariamente concepito proprio per questo poi sono emerse diverse
vulnerabilità.
Per una trattazione più approfondita dell'algoritmo un buon punto di
partenza è:
http://en.wikipedia.org/wiki/Md5
L'MD5 oggi dovrebbe essere evitato dove serva un hash
crittograficamente sicuro, anche se per altri usi (es, generare
velocemente un digest univoco dell'input) è una ottima scelta perchè
molto più veloce di SHA1 e RIPEMD-160.
Eviterei anche lo SHA1 (almeno, in applicazioni nuove) per una serie di
vulnerabilità che stanno emergendo, forse RIPEMD-160, che come
velocità è abbastanza simile, dovrebbe garantire maggiore robustezza
ma purtroppo non ha avuto una mole di studi alle spalle come lo SHA1;
andando verso hash più lenti lo SHA256 dovrebbe essere un buon
compromesso tra prestazioni e sicurezza, mentre per una sicurezza
ancora maggiore (sacrificando ulteriormente le prestazioni) tra gli
hash a 512 bit sceglierei il Whirlpool, più innovativo come design, al
posto dello SHA512.

 desiderato).
A tal proposito farei una osservazione: è magari vero che una funzione 
di hashing non crittograficamente forte mi consente di creare un file di 
input la cui chiave hash è uguale ad una data, quello che mi sembra più 
difficile è creare un file di input *utile* la cui chiave hash è uguale 
ad una data.
