Funzioni hash con PHP

Daniele Frongia e Raffaello Martinelli

Clicca qui per scaricare la versione beta del documento

Un funzione hash è una funzione non invertibile che trasforma un testo di lunghezza arbitraria o un file in una stringa di lunghezza fissa. Algoritmi come MD5, RIPEMD-160, SHA-512, GOST vengono utilizzati per realizzare firme digitali, rendere sicure transazioni bancarie, proteggere database, eseguire investigazioni giudiziarie, controllare la qualità della trasmissione di video e per numerosi altri scopi. Il primo obiettivo di questo lavoro è stato effettuare una panoramica delle funzioni hash, dalle proprietà matematiche agli scenari applicativi, con particolare attenzione alla resistenza alle collisioni. Il secondo obiettivo è stato mettere in pratica le funzioni con un linguaggio di programmazione, PHP, confrontare gli algoritmi in termini di performance e suggerire alcune indicazioni per aumentare il livello di sicurezza dei sistemi web based.

Questo documento va considerato come un contributo open che necessita di ulteriori approfondimenti e del coinvolgimento di altri esperti: per questo motivo verrà pubblicato su WikiBooks e sarà quindi possibile modificarlo e migliorarlo.

23 Responses to “Funzioni hash con PHP”

  1. Anonymous says:

    COMPLIMENTI E GRAZIE

    hash(nome cognome):
    9E0DD300D8D08A3F8AB2C21B3F1F95983F301220

  2. Mauro S. says:

    Mi/vi appunto qualche modifica che poi farò su WikiBooks

    —> Ins numero figure
    —> Spiegare meglio costruzione MD
    —> Uniformare linguaggio primo e secondo capitolo
    —> Approfondire derivazione chiave
    —> Confronto con JAVA?
    —> MANCA bibliografia

    Ad ogni modo complimenti, è una bomba!

  3. DB says:

    la versione beta del paper? a ridicoli! bella l’immagine della saline. che saline sono?

  4. Daniele Frongia says:

    diego, sono le saline di trapani

  5. Anonymous says:

    Non sono riuscita a identificare il messaggio nascosto nell’immagine..help!

  6. Stefano Lori says:

    L’ho cominciato a legge…Ve confesso ‘na cosa…se leggevo un
    libro in cirillico era più comprensibile! Ma che lingua è?

  7. Anonymous says:

    Grazie,cercavo delle spiegazioni che ho trovato a pag.41.
    Era tanto che volevo approfondimenti sulla mia lavatrice wirpool

  8. Giovanni says:

    Interessante il duplice approccio per dimostrare la non invertibilità delle funzioni di hashing: quello strettamente matematico e quello afferente la ricerca operativa – principio dei cassetti. Interessante inoltre l’applicazione per così dire giuridica di CF, che non conoscevo.

  9. 32F2038505A177E736EECEEBAD977A31C1F993317260F707C8067B110A991255 says:

    Hash (gost) of selected text:
    5C3424547BD25A63B6C62DA597164CD2F58F823CC0CF86F26CBB4D4884A1B7E4

  10. Anonymous says:

    Refuso: Prof Umberto Cerruti e non CerrEti

  11. Roberto Scaccia says:

    Ciao Daniele,

    Ti segnalo il mio post con un po’ di codice per i salted hash in PHP.

    salted Hash in PHP

  12. RT says:

    Ho conosciuto l’Ingegner Martinelli [lello] più di dieci anni fa..era un bravo ragazzo, onesto e pulito..una bella persona. Ora me lo ritrovo a scriver testi incompresibili [vi ricordate la supercazzola?], anzi direi astratti. Se fosse un quadro, sarebbe Klee. Insomma la qualità è rimasta la stessa..bravo LELLO !

  13. Daniele Frongia says:

    (ho cancellato il mio botta e risposta con diego su richiesta di quest’ultimo)

  14. FrancoDeSantis says:

    -
    So bene che questo non è un forum ma..posso chiedere una mano? Avrei la necessità di realizzare un sistema in cui la tabella dei PIN sia SICURA al 100% per un ristretto numero di utenti. Ho letto -anche se un pò di corsa- il documento.pdf allegato e mi sembra ci siano diverse strade, ad esempio le catene hash; grazie e scusate l’ab-uso del vostro blog. F.D.S.
    -

  15. FG says:

    Non che non voglia leggere le cinquanta pagine di Martinelli e Franci ma, in soldoni, per il login.php devo smettere di usare MD-5 e considerare invece RIPEMD?

  16. Anonymous says:

    @FrancoDeSantis:

    prego versare euro 10.000 per consulenza sullo sviluppo applicativo a:

    gruppo.tuscolana@istat.it
    IBAN KM34I4355jlh2453639E
    Banca Centrale Isole Cayman

    Thanks!

  17. Daniele Frongia says:

    @FrancoDeSantis:

    In attesa del bonifico :-) ti dico che se necessiti una funzione hash del tutto esente dalle collisioni l’unica via è quella delle “funzioni hash perfette”, di cui parlo a pg.11, anche se in realtà vengono utilizzate per altri scopi (a questo proposito è interessante anche il “cuckoo hashing”). Se ti accontenti di un valore molto prossimo al 100% puoi sempre utilizzare una concatenazione di due o più funzioni. In ogni caso dipende dal contesto (ad esempio l’applicativo che gestisce questa tabella), se vuoi info più specifiche puoi contattarmi via email (l’email del blog).

  18. Daniele Frongia says:

    [comunicazione di servizio: al momento slideshare, il servizio che ospita il nostro documento, fa le bizze e ci sono problemi di formattazione]

  19. Daniele Frongia says:

    “Nuove” funzioni hash da tenere sott’occhio:

    Cilk++ e MD6, record mondiale di prestazioni

  20. Anonymous says:

    ECRYPT, progetto europeo per la crittografia e il watermarking del futuro
    http://programmazione.it/index.php?entity=eitem&idItem=40794

  21. Anonymous says:

    Ciao Daniele, buon anno!
    Vai a vedere questo esperimento che hanno fatto…bello, ma davvero
    preoccupante!
    http://www.win.tue.nl/hashclash/rogue-ca/
    A.M.

  22. Anonymous says:

    I crittografi si preparano alla minaccia del computer quantistico

    (e anche le hash…)

    http://programmazione.it/index.php?entity=eitem&idItem=41118

  23. Daniele says:

    Interessanti anche le nuove applicazioni hashtag su Twitter http://www.mysocialweb.it/2009/04/23/piccola-guida-agli-hashtag-di-twitter/