Newsgroup: it.comp.aiuto
Titolo: che cosa e' un MD5 cryptographic hash?

la domanda e' tutta nel subject
perfavore rispondete (anche) all'indirizzo 
r.sab...@linknet.it
perche' non leggo spesso questo newsgroup, grazie
Riccardo
--
Riccardo Sabbatini 
r.sab...@linknet.it
 
http://www.csr.unibo.it/~sabba
------------------------------------------------------------------------
da "Seminario sulla gioventu'" di Aldo Busi pag. 86
".. scrivo per non soccombere, ecco tutto, non e' il caso di parlare di
lettere. [..] Scrivi, mi dico, alla fine troverai un destinatario. O il
mittente."
------------------------------------------------------------------------

...


la domanda e' tutta nel subject
MD5 e' un algoritmo per ottenere da un qualsiasi messaggio (sequenza di bit) un
'condensato' (cryptographic hash) di lunghezza fissa che rappresenta il
messaggio stesso.
Insomma, svolge lo stesso ruolo del CRC (Ciclic Redundancy Check), solo che, a
quanto pare, e' *moolto* piu' difficile trovare due messaggi diversi che
producano lo stesso hash MD5.
Per questa sua proprieta', MD5 viene usato di solito per proteggere da
alterazioni (involontarie) il contenuto di un messaggio.
Se al messaggio trasmesso si allega il suo hash MD5, il destinatario e' in
grado di controllare che il messaggio gli sia giunto integro calcolando lo hash
MD5 del messaggio ricevuto e confrontandolo con lo hash che gli e' stato
inviato.
Per proteggere un msg da alterazioni volontarie da parte di terzi e' necessario
prendere qualche altra precauzione, dato che chi altera il messaggio potrebbe
facilmente ricalcolare lo hash MD5 e sostituirlo all'originale.
La precauzione consiste nel crittografare (algoritmo RSA) lo hash mediante una
chiave privata di cui il destinatario possiede la corrispondente chiave
pubblica; questo procedimento si chiama 'firma digitale' (vedi PGP).
Ma allora perche' non crittografare direttamente l'intero messaggio, anziche'
il suo 'condensato' MD5?  Perche' l'algoritmo RSA e' particolarmente lento e
crittografare un intero messaggio richiede molto piu' tempo che crittografare
il suo hash MD5, che e' molto piu' breve.
Tanto per fare un esempio pratico, ho firmato questo messaggio (fino al
prossimo punto) mediante la funzione 'firma in chiaro' di PGP.
-----BEGIN PGP SIGNATURE-----
Version: 2.6.3ia
Charset: cp850
iQCVAwUBMvt43zOn6RGWp5BhAQEFbQQAsgk8ToK5YyESkIiYh2HzOLKCC0ro+EGV
ejfSvgif41CLiZpkFmgyevtZ04uo1woiKcdTOAPPJvymXXyUP1/2yXNrsqkigexR
gH3/CK6m+rW0PJCeksqarVUn6+TirBHE8wTUy/jZXSLRYcD6VNaUk/yn2Qn8bNHB
v6XbDEEM2JM=
=simx
-----END PGP SIGNATURE-----
Il blocco di bit (rappresentati con una codifica che usa solo caratteri ASCII)
che vedi qui sopra, compreso fra "BEGIN PGP SIGNATURE" e "END PGP SIGNATURE",
non e' altro che lo hash MD5 del messaggio compreso fra "BEGIN PGP SIGNED
MESSAGE" e "BEGIN PGP SIGNATURE", crittografato tramite algoritmo RSA
applicando la mia chiave privata.
Lo schema logico del procedimento e' questo:
messaggio --[MD5]--> hash --[RSA con chiave privata]--> signature
Il destinatario, se possiede la mia chiave pubblica e ha la certezza che essa
sia effettivamente mia, puo' verificare l'integrita' e la autenticita' del
messaggio in questo modo:
signature --[RSA con chiave pubblica]--> hash
messaggio --[MD5]--> hash2
hash2 == hash ?
se la risposta alla ultima domanda e' positiva allora egli ha la certezza che
il messaggio e' non e' stato alterato, inoltre ha la certezza che proviene da
me in quanto e' riuscito a decrittare la signature mediante la mia chiave
pubblica.
---------------------------------------------------------- -= MarCo =-
PGP public key:
finger 
marco....@mail.bearnet.it
http://www.pgp.net/cgi-bin/pks-extract-key.pl?op=get&search=0x96A79061
Fingerprint: 9F E5 80 61 F6 9F 05 2D  EA 53 6F 2D 82 8B C7 C2
----------------------------------------------------------------------