{"id":11,"date":"2026-06-10T09:13:39","date_gmt":"2026-06-10T09:13:39","guid":{"rendered":"https:\/\/shattered.io\/it\/2026\/06\/10\/funzioni-hash\/"},"modified":"2026-06-10T09:13:39","modified_gmt":"2026-06-10T09:13:39","slug":"funzioni-hash","status":"publish","type":"post","link":"https:\/\/shattered.io\/it\/cryptography\/funzioni-hash\/","title":{"rendered":"Funzioni hash crittografiche: propriet\u00e0, differenze e usi"},"content":{"rendered":"<h2 id=\"che-cosa-fa-una-funzione-hash-crittografica\">Che cosa fa una funzione hash crittografica<\/h2>\n<p>Una funzione hash crittografica \u00e8 un algoritmo che prende un input di lunghezza qualsiasi e produce un output di lunghezza fissa, chiamato digest o impronta. L&#8217;input pu\u00f2 essere una breve password, un documento di testo o un file di molti gigabyte: il risultato avr\u00e0 sempre la stessa dimensione, determinata dall&#8217;algoritmo. SHA-256, per esempio, restituisce sempre 256 bit, indipendentemente da quanto sia grande il dato di partenza.<\/p>\n<p>Questa compressione in un&#8217;impronta compatta \u00e8 ci\u00f2 che rende le funzioni hash cos\u00ec utili. Invece di confrontare o trasmettere interi file, si lavora con le loro impronte, molto pi\u00f9 maneggevoli, sfruttando il fatto che a contenuti diversi corrispondono impronte diverse. Tutto, per\u00f2, dipende da un insieme di propriet\u00e0 ben precise che distinguono una funzione hash crittografica da un semplice meccanismo di compressione.<\/p>\n<h2 id=\"le-proprieta-fondamentali\">Le propriet\u00e0 fondamentali<\/h2>\n<p>Non basta che un algoritmo produca un&#8217;impronta di lunghezza fissa per essere considerato crittografico. Servono alcune garanzie precise, ed \u00e8 la loro combinazione a rendere la funzione adatta agli usi di sicurezza.<\/p>\n<h3 id=\"deterministico\">Deterministico<\/h3>\n<p>La funzione deve essere deterministica: lo stesso input produce sempre la stessa impronta, su qualunque macchina e in qualunque momento. Senza questa propriet\u00e0 non sarebbe possibile verificare nulla, perch\u00e9 due calcoli sullo stesso dato potrebbero dare risultati diversi.<\/p>\n<h3 id=\"veloce-da-calcolare\">Veloce da calcolare<\/h3>\n<p>Una buona funzione hash deve essere efficiente: calcolare il digest di un dato deve richiedere poco tempo, anche per file di grandi dimensioni. Questo permette di usarla su larga scala, per esempio per verificare l&#8217;integrit\u00e0 di migliaia di file o per alimentare protocolli che la invocano continuamente. La velocit\u00e0 in avanti, per\u00f2, non deve mai facilitare l&#8217;inversione della funzione, che resta deliberatamente impraticabile.<\/p>\n<h3 id=\"resistenza-alla-preimmagine\">Resistenza alla preimmagine<\/h3>\n<p>La resistenza alla preimmagine significa che, dato un digest, deve essere praticamente impossibile trovare un input che lo produca. La funzione \u00e8 a senso unico: facile da calcolare in avanti, irrealizzabile da invertire. Questa propriet\u00e0 \u00e8 ci\u00f2 che consente di pubblicare o conservare un&#8217;impronta senza rivelare il dato originale.<\/p>\n<h3 id=\"resistenza-alla-seconda-preimmagine\">Resistenza alla seconda preimmagine<\/h3>\n<p>La resistenza alla seconda preimmagine riguarda il caso in cui si parta da un input noto. Dato un messaggio, deve essere irrealizzabile trovarne un secondo, diverso, che produca la stessa impronta. \u00c8 la garanzia che, fissato un documento, nessuno possa costruire un altro documento con lo stesso digest per sostituirlo di nascosto.<\/p>\n<h3 id=\"resistenza-alle-collisioni\">Resistenza alle collisioni<\/h3>\n<p>La resistenza alle collisioni \u00e8 una garanzia pi\u00f9 forte: deve essere irrealizzabile trovare due input qualsiasi, scelti liberamente, che condividano lo stesso digest. La differenza rispetto alla seconda preimmagine \u00e8 sottile ma cruciale: qui l&#8217;attaccante non parte da un messaggio dato, ma pu\u00f2 scegliere entrambi. \u00c8 esattamente questa propriet\u00e0 che SHA-1 ha perso quando, nel 2017, il progetto SHAttered ne dimostr\u00f2 la prima collisione pratica producendo due file PDF diversi con la stessa impronta SHA-1.<\/p>\n<h3 id=\"effetto-valanga\">Effetto valanga<\/h3>\n<p>L&#8217;effetto valanga descrive la sensibilit\u00e0 della funzione all&#8217;input. Modificare anche un solo bit del dato di partenza cambia il digest in modo radicale e imprevedibile, alterando in media circa met\u00e0 dei bit in uscita. Due input quasi identici producono impronte completamente diverse, senza alcuna somiglianza riconoscibile. \u00c8 questa propriet\u00e0 che rende le funzioni hash strumenti efficaci per rilevare qualsiasi manomissione, anche minima.<\/p>\n<h2 id=\"in-che-cosa-si-differenziano-dagli-hash-non-crittografici\">In che cosa si differenziano dagli hash non crittografici<\/h2>\n<p>Esistono molte funzioni hash che non sono crittografiche, e confonderle con quelle di sicurezza \u00e8 un errore frequente. Gli hash non crittografici, come i checksum usati per rilevare errori di trasmissione o le funzioni che distribuiscono le chiavi nelle tabelle hash dei programmi, sono progettati per essere veloci e per distribuire bene i valori, ma non offrono alcuna garanzia contro un avversario intelligente.<\/p>\n<p>La differenza chiave sta proprio qui. Un checksum serve a individuare un errore accidentale, come un bit alterato da un disturbo di rete, ma non resiste a chi voglia deliberatamente costruire due input con lo stesso valore. Una funzione hash crittografica, invece, \u00e8 pensata per opporsi a un attaccante che dispone di tempo e risorse e che cerca attivamente collisioni o preimmagini. Per questo gli hash non crittografici, pur utili e veloci, non vanno mai usati per password, firme o controlli di sicurezza, mentre solo funzioni come quelle della famiglia SHA-2 offrono le garanzie necessarie.<\/p>\n<p>Un modo pratico di cogliere la differenza \u00e8 chiedersi contro che cosa l&#8217;algoritmo deve difendersi. Un hash non crittografico assume un ambiente benevolo: gli input non sono scelti da un avversario, e l&#8217;obiettivo \u00e8 solo distribuire bene i valori o segnalare guasti casuali. Un hash crittografico assume invece un ambiente ostile, in cui qualcuno studia attivamente l&#8217;algoritmo per piegarlo ai propri scopi. Questa differenza di modello di minaccia, e non la semplice velocit\u00e0 o lunghezza dell&#8217;output, \u00e8 ci\u00f2 che separa le due categorie. La stessa lezione emerge dalla storia di SHA-1: l&#8217;algoritmo continuava a comportarsi benissimo come distributore di valori, ma aveva smesso di reggere contro un avversario determinato, ed \u00e8 proprio per questo secondo criterio che \u00e8 stato giudicato inadeguato.<\/p>\n<h2 id=\"usi-comuni-delle-funzioni-hash-crittografiche\">Usi comuni delle funzioni hash crittografiche<\/h2>\n<p>Le applicazioni sono numerose e toccano gran parte dell&#8217;infrastruttura digitale quotidiana.<\/p>\n<h3 id=\"conservazione-delle-password-con-salt\">Conservazione delle password con salt<\/h3>\n<p>I sistemi ben progettati non memorizzano le password in chiaro, ma il loro digest. Al momento del login si calcola l&#8217;impronta della password inserita e la si confronta con quella salvata. Grazie alla resistenza alla preimmagine, anche chi rubasse il database non potrebbe risalire facilmente alle password originali. A questo si aggiunge il salt, un valore casuale unico per ciascun utente che viene combinato con la password prima dell&#8217;hashing: in questo modo due utenti con la stessa password ottengono impronte diverse e gli attacchi basati su tabelle precalcolate diventano inefficaci. Per le password si usano in genere funzioni deliberatamente lente, proprio per ostacolare i tentativi a tappeto.<\/p>\n<h3 id=\"controlli-di-integrita\">Controlli di integrit\u00e0<\/h3>\n<p>Pubblicare il digest di un file consente a chiunque di verificarne l&#8217;integrit\u00e0 dopo il download o il trasferimento. Se l&#8217;impronta calcolata coincide con quella ufficiale, il contenuto non \u00e8 stato alterato; se differisce, qualcosa \u00e8 cambiato. \u00c8 uno degli usi pi\u00f9 semplici e diffusi, applicato a immagini di sistemi operativi, pacchetti software e backup.<\/p>\n<h3 id=\"firme-digitali\">Firme digitali<\/h3>\n<p>Le firme digitali non vengono applicate all&#8217;intero messaggio, che potrebbe essere voluminoso, ma al suo digest. La funzione hash riduce il documento a un&#8217;impronta compatta su cui opera la firma. Questo lega in modo indissolubile la sicurezza della firma alla solidit\u00e0 della funzione hash: se quest&#8217;ultima ammette collisioni, una firma valida per un documento pu\u00f2 valere anche per un altro, come ha mostrato lo scenario aperto da SHAttered.<\/p>\n<h3 id=\"blockchain\">Blockchain<\/h3>\n<p>Nelle blockchain ogni blocco contiene il digest del blocco precedente, formando una catena. Modificare un dato passato richiederebbe di ricalcolare tutte le impronte successive, operazione resa proibitiva dal costo computazionale. \u00c8 l&#8217;hashing a conferire al registro la sua caratteristica di sostanziale immutabilit\u00e0, e funzioni come SHA-256 sono al centro di questi sistemi.<\/p>\n<h2 id=\"una-primitiva-piccola-ma-decisiva\">Una primitiva piccola ma decisiva<\/h2>\n<p>Le funzioni hash crittografiche sono tra i mattoni pi\u00f9 discreti della sicurezza informatica, eppure sostengono password, firme, certificati e registri distribuiti. La loro affidabilit\u00e0 dipende interamente dalle propriet\u00e0 descritte, e la vicenda di SHA-1 dimostra che cosa accade quando una di esse, la resistenza alle collisioni, viene meno. Scegliere funzioni solide e aggiornate, come quelle della famiglia SHA-2, \u00e8 la condizione per costruire sistemi degni di fiducia.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Che cosa fa una funzione hash crittografica Una funzione hash crittografica \u00e8 un algoritmo che prende un input di lunghezza qualsiasi e produce un output di lunghezza fissa, chiamato digest\u2026<\/p>\n","protected":false},"author":2,"featured_media":24,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-11","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cryptography"],"_links":{"self":[{"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/posts\/11","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/comments?post=11"}],"version-history":[{"count":0,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/posts\/11\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/media\/24"}],"wp:attachment":[{"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/media?parent=11"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/categories?post=11"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/tags?post=11"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}