Funzione crittografica di hash

Da Wikipedia, l'enciclopedia libera.

Una funzione crittografica di hash trasforma dei dati di lunghezza arbitraria (un messaggio) in una stringa di dimensione fissa chiamata valore di hash, impronta del messaggio o somma di controllo, ma spesso anche con il termine inglese message digest.

La funzione crittografica di hash ideale deve avere tre proprietà fondamentali:

  1. deve essere estremamente semplice calcolare un hash da qualunque tipo di dato;
  2. deve essere estremamente difficile o quasi impossibile risalire al testo che ha portato ad un dato hash;
  3. deve essere estremamente improbabile che due messaggi differenti, anche se simili, abbiano lo stesso hash.

Oltre a queste tre proprietà fondamentali c'è da aggiungere il cosiddetto "effetto valanga", ossia la minima modifica del messaggio deve portare ad un'alterazione radicale dell'impronta del messaggio.

Funzioni con queste proprietà sono utilizzate come funzioni di hash in diversi campi, anche al di fuori di quello prettamente crittografico. Le applicazioni pratiche includono infatti i controlli sull'integrità dei dati mediante somme di controllo, le firme digitali semplici, l'autenticazione e varie applicazioni nella sicurezza informatica. Un hash può anche agire come una rappresentazione concisa del messaggio o del documento da cui è stato calcolato, permettendo un facile indicizzamento di file dati unici o duplicati.

In diversi standard ed applicazioni le due funzioni crittografiche di hash più utilizzate sono MD5 ed SHA-1.

Nel 2005 sono stati individuati problemi di sicurezza relativi ad entrambi gli standard citati, in particolare si ritiene possibile che questi siano affetti da criticità matematiche tanto da rendere necessaria la ricerca di nuovi e più robusti schemi di hashing. Nel 2007 il National Institute of Standards and Technology ha indetto un concorso per la definizione della funzione di hash che avrebbe preso il nome SHA-3 e sarebbe stata soggetta allo standard FIPS[1]

Panoramica[modifica | modifica sorgente]

Anche piccole modifiche ai dati di ingresso causano una notevole cambiamento dell'uscita: si tratta del cosiddetto effetto valanga.

Un Hash è una funzione che prende in ingresso una stringa di lunghezza arbitraria producendo in uscita una nuova stringa di lunghezza predefinita che rappresenta una sorta di "impronta digitale" dei dati contenuti nella stringa di ingresso. La funzione di Hash è a senso unico: conoscendo l'hash deve essere difficile trovare il messaggio originale mentre possedendo il messaggio originale è possibile stabilire il suo hash univoco. Una funzione crittografica di hash deve approssimare una funzione random restando deterministica ed efficiente dal punto di vista computazionale. In altre parole deve assicurare che ciascun output abbia sostanzialmente la stessa probabilità di essere associato ad un input e restituire sempre lo stesso output a fronte dello stesso input.

Una funzione crittografica di hash è considerata insicura se è computazionalmente fattibile:

  • calcolare un messaggio che produca un hash dato oppure
  • trovare una "collisione" ovvero due messaggi diversi che producono il medesimo hash.

Un attaccante che fosse in grado di eseguire una delle due operazioni citate, potrebbe ad esempio sostituire un messaggio autorizzato con un altro senza che si possa provare la contraffazione.

Una funzione crittografica di hash di qualità dovrebbe rendere difficile calcolare anche solo due messaggi con hash sostanzialmente simili oltre che garantire una ottima non-correlazione tra hash e messaggio: nessuna informazione del messaggio dovrebbe essere desunta dal suo hash. Ad un eventuale attaccante resta solo l'informazione relativa all'associazione tra messaggio ed hash: esso può riconoscere che il messaggio è stato di nuovo usato vedendo una seconda volta lo stesso hash.

Note[modifica | modifica sorgente]

  1. ^ NIST.gov - Computer Security Division - Computer Security Resource Center