Hash

Versione del 25 giu 2017 alle 16:39 di Spoon (discussione | contributi) (Creazione pagine)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Genericamente, una funzione hash (hash function) è una funzione che mappa un dato di dimensione arbitraria e restituisce un dato di dimensione fissata. L'output di questa funzione è il valore hash (hash value) o codice hash (hash code) dell'input; a volte viene detto anche digest o hash (creando di fatto un'ambiguità).

Una buona funzione hash ha le seguenti proprietà:

  • il codice hash è di piccolissima dimensione;
  • a partire dal dato, è computazionalmente facile calcolare il codice hash;
  • è estremamente improbabile che due input diversi restituiscano codici hash uguali;
  • è estremamente difficile (soprattutto a livello algoritmico-computazionale) costruire un dato che abbia un determinato codice hash.

Una funzione hash è infatti spesso usata per confrontare dati di grande dimensione e distinguere quando essi siano o meno lo stesso dato (per esempio, perchè si vuole verificare l'affidabilità di un dato che si è ricevuto da terzi). Grazie alle prime due proprietà, si può facilmente calcolare il codice hash del dato in proprio possesso e confrontarlo con un codice hash fornitoci insieme al dato stesso: se i due codici hash risultano uguali, il dato fornitoci è ciò che ci aspettavamo. Infatti, grazie alle ultime due proprietà può essere esclusa quasi completamente la possibilità che ci siano state manomissioni.

Si noti che anche se il grado di certezza dato dal confronto tra due codici hash non è totale, per scopi pratici questo è più che sufficiente nella stragrande maggioranza dei casi.

Le funzioni hash più comuni, e che troviamo anche su Debian, sono MD5 e SHA.