L’hashing è un metodo crit­to­gra­fi­co che trasforma record di dati e caratteri di qualsiasi lunghezza in valori hash compatti fissi. Questo pro­ce­di­men­to offre così più sicurezza della crit­to­gra­fia: senza chiave i valori hash non possono essere ri­con­ver­ti­ti nei valori originali. L’hashing è par­ti­co­lar­men­te im­por­tan­te per l’am­mi­ni­stra­zio­ne e la sicurezza di database, dati utente, gestione delle password e au­ten­ti­ca­zio­ne degli accessi.

Cos’è l’hashing?

L’hashing è un im­por­tan­te strumento crit­to­gra­fi­co per con­ver­ti­re i dati in co­sid­det­ti “valori hash”. A questo scopo si utilizza una speciale funzione hash, prin­ci­pal­men­te sotto forma di algoritmo. Con l’hashing, record di dati come password, dati aziendali e degli utenti o dati in altre forme vengono “tagliati” e tra­sfor­ma­ti in una nuova forma breve, il valore hash. Dopo questo processo, i valori hash hanno sempre la stessa lunghezza e rap­pre­sen­ta­no i record di dati originali. Possono essere salvati in database in forma compatta e sicura in una tabella hash, ri­spar­mian­do risorse.

Il vantaggio è che senza chiave i valori hash non possono essere ri­con­ver­ti­ti nella forma originale, neanche se dovessero cadere nelle mani sbagliate, quindi i cy­ber­cri­mi­na­li non se ne fanno nulla. Spesso si con­fon­do­no hashing e crit­to­gra­fia. Siccome i valori hash non vengono crit­to­gra­fa­ti, ma con­ver­ti­ti in una sequenza di caratteri com­ple­ta­men­te nuova, non possono essere decifrati. Per ri­com­por­li occorrono la chiave, l’algoritmo uti­liz­za­to e i dati originali associati ai valori hash.

Come funziona l’hashing?

Il processo di hashing prevede tre com­po­nen­ti:

  • Funzione hash: di norma la funzione hash è un algoritmo crit­to­gra­fi­co che scompone com­ple­ta­men­te dati di diverse lunghezze, li risolve e li converte in sequenze di caratteri di lunghezza sempre uguale. I valori hash sono con­si­de­re­vol­men­te più corti e compatti dei valori originali.
  • Valore hash: i valori hash sono il risultato della funzione hash. A dif­fe­ren­za dei valori originali, pre­sen­ta­no sempre una lunghezza fissa di caratteri esa­de­ci­ma­li, che dipende dalla procedura uti­liz­za­ta.
  • Tabelle hash: i valori hash possono essere salvati in database come tabelle hash. Ri­chie­do­no molto meno spazio rispetto al sal­va­tag­gio dei record di dati originali. Con l’hashing i record di dati ricevono valori indice specifici che mostrano dove si trova il record, riducendo con­si­de­re­vol­men­te il tempo di ela­bo­ra­zio­ne e la potenza di calcolo nella ricerca delle in­for­ma­zio­ni.

Il fun­zio­na­men­to dell’hashing si basa su cinque proprietà ca­rat­te­ri­sti­che che ga­ran­ti­sco­no sicurezza e af­fi­da­bi­li­tà:

  • De­ter­mi­ni­smo: la funzione hash deve sempre generare un valore hash di lunghezza fissa a pre­scin­de­re dalla sequenza di caratteri di origine.
  • Im­pos­si­bi­li­tà di rilettura: l’hashing trasforma i valori originali in valori hash non “ri­leg­gi­bi­li”. Non deve essere possibile decifrare il valore hash nel senso classico del termine e ri­ge­ne­ra­re il testo di origine o la sequenza di caratteri originale.
  • Sicurezza an­ti­col­li­sio­ne: non può essere assegnato lo stesso valore hash a dati diversi. Se due valori originali ricevono lo stesso valore hash, si verifica una col­li­sio­ne. I valori hash, che sono unici e in­con­fon­di­bi­li, riducono i punti di attacco degli hacker, au­men­tan­do la sicurezza. Tuttavia, a seconda dell’ap­pli­ca­zio­ne, una col­li­sio­ne può anche essere voluta.
  • Con­ti­nui­tà o non con­ti­nui­tà: in linea di principio, i valori hash offrono una maggiore sicurezza se non sono continui, ossia se record di dati originali dif­fe­ren­ti ricevono valori hash i più diversi possibile. A loro volta, i valori hash continui sono de­si­de­ra­ti se l’hashing è uti­liz­za­to per gestire record e dati simili.
  • Velocità: l’hashing non soltanto aumenta la sicurezza, ma permette anche un accesso più rapido ai database.

Campi di ap­pli­ca­zio­ne dell’hashing

I vantaggi e il fun­zio­na­men­to dell’hashing risultano par­ti­co­lar­men­te chiari in diversi casi ap­pli­ca­ti­vi e settori d’impiego. I campi di ap­pli­ca­zio­ne tipici sono:

  • Ge­ne­ra­zio­ne di tabelle hash
  • Crit­to­gra­fia di dati im­por­tan­ti
  • Ricerca di duplicati
  • Checksum e firme digitali
  • Ricerca di dati simili
  • Sistemi di au­ten­ti­ca­zio­ne
  • Caching

Gestione dei database

L’hashing offre il vantaggio di per­met­te­re di salvare grandi quantità di dati in modo più compatto ed ef­fi­cien­te sotto forma di tabelle hash. A questo scopo, le sequenze di caratteri vengono riunite come valori hash sotto una posizione di indirizzo nel database, creando una tabella hash. Così si risparmia spazio, si aumenta la sicurezza dei database e si accelera la ricerca di de­ter­mi­na­te voci nella tabella hash. I valori e le tabelle hash ot­ti­miz­za­no l’or­ga­niz­za­zio­ne e la gestione delle in­fra­strut­tu­re di indici e dati.

In pratica: i database dei clienti com­pren­do­no ge­ne­ral­men­te in­for­ma­zio­ni im­por­tan­ti come nomi, dati di contatto o indirizzi dei clienti. Una normale ricerca di in­for­ma­zio­ni spe­ci­fi­che in un database ri­chie­de­reb­be molto tempo, perché si dovrebbe scan­sio­na­re l’intero database. Ma con l’hashing si possono creare blocchi di dati con una de­ter­mi­na­ta posizione di indirizzo nel database. Quando viene eseguita una ricerca, il computer salta quindi im­me­dia­ta­men­te alla posizione del relativo valore nella tabella hash.

Firme digitali e checksum

L’hashing riveste un ruolo im­por­tan­te anche come metodo di au­ten­ti­ca­zio­ne. Ad esempio, serve per generare firme digitali, le co­sid­det­te impronte digitali, per con­fer­ma­re l’integrità della co­mu­ni­ca­zio­ne tra mittente e de­sti­na­ta­rio. Anche per la creazione di un nuovo account utente è possibile collegare le password a un valore hash. Creando un nuovo account utente, una funzione hash genera un valore per la password se­le­zio­na­ta. A ogni accesso suc­ces­si­vo la password inserita viene con­fron­ta­ta con il valore hash re­gi­stra­to. Anche al momento del ri­pri­sti­no della password si genera un nuovo valore hash per la nuova password.

In pratica: le firme digitali per­met­to­no di ve­ri­fi­ca­re se messaggi, download o anche siti web sono sicuri. A questo scopo, i mittenti generano valori hash dai messaggi o ne for­ni­sco­no uno nel momento in cui viene scaricato un programma. A loro volta, uti­liz­zan­do la stessa funzione, anche i de­sti­na­ta­ri generano un valore hash, che viene con­fron­ta­to con il valore fornito, so­li­ta­men­te crit­to­gra­fa­to. Un esempio perfetto è la crit­to­gra­fia SSL/TLS nel web, con cui il server web invia al browser un cer­ti­fi­ca­to del server. Da questo l’hashing genera una chiave di sessione che viene ricevuta, decifrata e con­fer­ma­ta dal server. Dopo l’au­ten­ti­ca­zio­ne inizia il traffico di dati HTTPS. Anche l’SFTP funziona in modo analogo.

Password e altri dati sensibili

Per il sal­va­tag­gio di dati sensibili come password o dati di accesso o utente, l’hashing offre una sicurezza con­si­de­re­vol­men­te superiore. I dati non vengono re­gi­stra­ti nel database nella loro forma originale o sem­pli­ce­men­te crit­to­gra­fa­ti. I record di dati vengono scomposti in valori hash che, in caso di furto, da soli non producono nulla senza la chiave o i mezzi necessari. Durante l’in­se­ri­men­to della password il valore hash calcolato viene infatti con­fron­ta­to con il valore hash salvato. Talvolta l’hashing è uti­liz­za­to anche nel caching allo scopo di rendere il­leg­gi­bi­li alle persone non au­to­riz­za­te le in­for­ma­zio­ni salvate tem­po­ra­nea­men­te, come siti web visitati o dati di accesso e numeri.

In pratica: con l’hashing si aumenta la sicurezza anche del sal­va­tag­gio di svariati contenuti come testi o file audio e video. Le strutture binarie dei file vengono tradotte in valori hash compatti a cui fa ri­fe­ri­men­to il relativo blocco di dati. Siccome i valori hash sono collegati alla posizione nel database, non solo la ricerca è più veloce, ma senza le relative chiavi i dati risultano il­leg­gi­bi­li agli as­sa­li­to­ri e non sono ri­con­ver­ti­bi­li nella forma originale.

Quali vantaggi offre l’hashing?

I vantaggi dell’hashing in breve:

  • I dati sensibili sono salvati e gestiti in modo sicuro e compatto.
  • I record di dati con­ver­ti­ti in valori hash non possono essere de­co­di­fi­ca­ti o riportati nella forma originale fa­cil­men­te.
  • L’accesso ai database è più veloce, in quanto i valori hash sono associati a posizioni nel database.
  • Senza le relative tec­no­lo­gie o le in­for­ma­zio­ni sulla funzione hash, i valori hash rubati sono inu­ti­liz­za­bi­li per gli hacker.
  • L’hashing permette di au­ten­ti­ca­re o firmare in modo af­fi­da­bi­le lo scambio sicuro di dati, messaggi o software.

Hashing e bloc­k­chain

L’hashing e le relative funzioni sono una com­po­nen­te es­sen­zia­le della bloc­k­chain. Per l’au­ten­ti­ca­zio­ne di tran­sa­zio­ni con crip­to­va­lu­te, come i bitcoin, vengono generati hash durante il mining. Il bitcoin lavora ad esempio con l’algoritmo hash SHA-256, che converte sequenze di caratteri di qualsiasi lunghezza in una sequenza fissa (hash) di 64 caratteri. L’hashing legittima, autentica e documenta le tran­sa­zio­ni in crip­to­va­lu­ta ufficiali e le registra nella bloc­k­chain, as­si­cu­ran­do così un elevato grado di sicurezza.

Nella bloc­k­chain l’hashing svolge tre funzioni prin­ci­pa­li:

  • Mining: la potenza di mining di una rete di crip­to­va­lu­te è chiamata anche “hash rate”. Indica quanti minatori sono attivi. I minatori generano hash ri­sol­ven­do problemi ma­te­ma­ti­ci. Se un hash è valido, viene con­va­li­da­to un blocco di tran­sa­zio­ni. Più l’hash rate è alto, maggiore è il numero di monete o token che viene generato. Il mining di crip­to­va­lu­te si basa quindi su algoritmi hash riferiti alle tran­sa­zio­ni.
  • Bloc­k­chain: le tran­sa­zio­ni re­gi­stra­te con­va­li­da­te vengono do­cu­men­ta­te in modo se­quen­zia­le sotto forma di blocchi. Sono aggiunte alla bloc­k­chain nel corso del mining. Ciascun blocco viene collegato con quello pre­ce­den­te e ne riceve il valore hash. Si esclude così che si presenti un blocco non valido o dannoso.
  • Ge­ne­ra­zio­ne delle chiavi: l’hashing è uti­liz­za­to anche per la tra­smis­sio­ne delle crip­to­va­lu­te. Viene eseguita un’au­ten­ti­ca­zio­ne tramite chiavi pubbliche o private.

L’hashing è sicuro?

In linea di principio, le esperte e gli esperti di sicurezza dei dati con­si­glia­no di ricorrere all’hashing per salvare database e dati sensibili con la maggiore sicurezza possibile. L’hashing è da preferire alla crit­to­gra­fia classica, in quanto i valori hash non con­ten­go­no in­for­ma­zio­ni sui record di dati originali e non possono essere de­co­di­fi­ca­ti. Anche gli attacchi di forza bruta, con cui si provano com­bi­na­zio­ni di stringhe di caratteri fino a trovare una cor­ri­spon­den­za, ri­chie­do­no un numero astro­no­mi­co di tentativi.

Tuttavia, esistono criminali che con­fron­ta­no le liste dei valori hash rubati con le tabelle ar­co­ba­le­no. Si tratta di liste di valori hash rubati e dei relativi dati di accesso. Se un valore hash del database cor­ri­spon­de a un valore della lista ar­co­ba­le­no e alla relativa password, si verifica una falla di sicurezza. Per questo motivo, anche con l’hashing si consiglia di cambiare re­go­lar­men­te le password, di eseguire ag­gior­na­men­ti periodici e di usare algoritmi nuovi o ag­gior­na­ti. La Internet En­gi­nee­ring Taskforce (IETF) nel 2021 ha con­si­glia­to gli algoritmi hash seguenti:

  • Argon2
  • Bcrpt
  • Scrypt
  • PBKDF2

Un’altra pos­si­bi­li­tà per rendere l’hashing ancora più sicuro è rap­pre­sen­ta­ta dai processi crit­to­gra­fi­ci, come salt e pepper. Con salt, ciascuna password tradotta in valori hash riceve una sequenza di caratteri ag­giun­ti­va generata ca­sual­men­te. I salt con una lunghezza con­si­glia­ta di 16 caratteri rendono gli attacchi di forza bruta pressoché im­pos­si­bi­li, offrendo quindi una sicurezza ancora maggiore. Se si aggiunge anche un codice di 32 caratteri chiamato “pepper” a tutte le password, dif­fi­cil­men­te i valori hash con salt rubati possono essere forzati.

Vai al menu prin­ci­pa­le