{"id":10,"date":"2026-06-10T09:13:35","date_gmt":"2026-06-10T09:13:35","guid":{"rendered":"https:\/\/shattered.io\/it\/2026\/06\/10\/firme-digitali\/"},"modified":"2026-06-10T09:13:35","modified_gmt":"2026-06-10T09:13:35","slug":"firme-digitali","status":"publish","type":"post","link":"https:\/\/shattered.io\/it\/cryptography\/firme-digitali\/","title":{"rendered":"Firme digitali: come funzionano e perch\u00e9 le collisioni le minacciano"},"content":{"rendered":"<h2 id=\"che-cose-una-firma-digitale\">Che cos&#8217;\u00e8 una firma digitale<\/h2>\n<p>Una firma digitale \u00e8 un meccanismo crittografico che permette di verificare due cose su un messaggio: che provenga davvero da chi dichiara di averlo inviato (autenticit\u00e0) e che non sia stato alterato dopo la firma (integrit\u00e0). A differenza di una firma autografa, che riproduce sempre lo stesso segno, una firma digitale dipende dal contenuto specifico del messaggio ed \u00e8 quindi diversa per ogni documento.<\/p>\n<p>Il funzionamento riposa sulla combinazione di due strumenti: una funzione hash crittografica e una coppia di chiavi asimmetriche. Capire come questi due elementi lavorano insieme \u00e8 essenziale per comprendere sia la solidit\u00e0 delle firme digitali sia la loro vulnerabilit\u00e0 di fronte a una collisione come quella dimostrata da SHAttered.<\/p>\n<h2 id=\"chiavi-asimmetriche-privata-e-pubblica\">Chiavi asimmetriche: privata e pubblica<\/h2>\n<p>La crittografia asimmetrica si basa su una coppia di chiavi matematicamente collegate: una chiave privata, che il titolare custodisce gelosamente e non condivide con nessuno, e una chiave pubblica, che pu\u00f2 essere distribuita liberamente. Ci\u00f2 che viene elaborato con la chiave privata pu\u00f2 essere verificato con la corrispondente chiave pubblica, e viceversa, ma conoscere la chiave pubblica non permette di ricavare quella privata.<\/p>\n<p>Questa asimmetria \u00e8 il cuore del sistema. Solo chi possiede la chiave privata pu\u00f2 produrre una firma valida, mentre chiunque disponga della chiave pubblica pu\u00f2 controllarla. In questo modo la firma diventa una prova verificabile da tutti ma generabile da uno solo, ovvero il legittimo titolare.<\/p>\n<p>Da questa propriet\u00e0 discende anche il cosiddetto non ripudio. Poich\u00e9 soltanto il titolare pu\u00f2 aver prodotto una firma valida con la propria chiave privata, non pu\u00f2 in seguito negare in modo credibile di averla apposta, a condizione che la chiave privata sia rimasta riservata. La custodia della chiave privata diventa quindi un punto critico dell&#8217;intero sistema: se viene rubata o esposta, un attaccante pu\u00f2 firmare a nome della vittima, e tutte le garanzie crollano. Per questo le chiavi private vengono spesso conservate in dispositivi protetti o moduli hardware dedicati.<\/p>\n<h2 id=\"il-ruolo-della-funzione-hash\">Il ruolo della funzione hash<\/h2>\n<p>Si potrebbe pensare che la firma venga applicata direttamente all&#8217;intero messaggio, ma nella pratica non \u00e8 cos\u00ec. I documenti possono essere molto grandi, e operare con le chiavi asimmetriche su grandi quantit\u00e0 di dati sarebbe lento e poco pratico. La soluzione \u00e8 introdurre una funzione hash crittografica.<\/p>\n<p>Prima di firmare, il messaggio viene passato attraverso una funzione hash, che lo riduce a un digest di lunghezza fissa, un&#8217;impronta compatta che rappresenta il contenuto. La firma viene poi applicata a questo digest, non al messaggio intero. Il digest funge da rappresentante univoco del documento: grazie all&#8217;effetto valanga, qualsiasi modifica del messaggio, anche di un solo carattere, produce un&#8217;impronta completamente diversa.<\/p>\n<p>Questo passaggio \u00e8 elegante ed efficiente, ma ha una conseguenza decisiva. La sicurezza dell&#8217;intera firma dipende dalla qualit\u00e0 della funzione hash. Se diventa possibile trovare due messaggi diversi con lo stesso digest, la firma non distingue pi\u00f9 i due contenuti, perch\u00e9 matematicamente ne vede solo l&#8217;impronta condivisa.<\/p>\n<h2 id=\"come-si-firma-un-messaggio\">Come si firma un messaggio<\/h2>\n<p>Il processo di firma pu\u00f2 essere descritto in pochi passaggi chiari.<\/p>\n<p>Per prima cosa, il mittente calcola il digest del messaggio applicando una funzione hash crittografica, per esempio SHA-256. Ottiene cos\u00ec un&#8217;impronta di lunghezza fissa che rappresenta il contenuto in modo univoco.<\/p>\n<p>In secondo luogo, il mittente elabora questo digest con la propria chiave privata. Il risultato \u00e8 la firma digitale, un valore legato indissolubilmente sia al contenuto del messaggio (tramite il digest) sia all&#8217;identit\u00e0 del firmatario (tramite la chiave privata). La firma viene poi allegata o trasmessa insieme al messaggio.<\/p>\n<p>Poich\u00e9 solo il titolare possiede la chiave privata, solo lui pu\u00f2 produrre quella firma per quel particolare digest. Chiunque tenti di falsificarla senza la chiave privata si scontra con un problema computazionalmente irrealizzabile.<\/p>\n<h2 id=\"come-si-verifica-una-firma\">Come si verifica una firma<\/h2>\n<p>La verifica \u00e8 l&#8217;operazione speculare e pu\u00f2 essere eseguita da chiunque disponga della chiave pubblica del firmatario.<\/p>\n<p>Il destinatario calcola in modo indipendente il digest del messaggio ricevuto, usando la stessa funzione hash impiegata in fase di firma. Parallelamente, applica la chiave pubblica del mittente alla firma ricevuta, ricavandone il digest che era stato firmato.<\/p>\n<p>A questo punto confronta i due valori. Se il digest calcolato dal messaggio coincide con quello estratto dalla firma tramite la chiave pubblica, la verifica ha successo: il messaggio proviene dal titolare della chiave privata corrispondente e non \u00e8 stato alterato. Se i due valori differiscono, qualcosa non torna: o il messaggio \u00e8 stato modificato dopo la firma, o la firma non \u00e8 autentica. In entrambi i casi la firma viene rifiutata.<\/p>\n<h2 id=\"perche-una-collisione-minaccia-le-firme\">Perch\u00e9 una collisione minaccia le firme<\/h2>\n<p>\u00c8 qui che la vicenda di SHAttered diventa rilevante. Poich\u00e9 la firma opera sul digest e non sul messaggio intero, due documenti con la stessa impronta condividono di fatto la stessa firma. Una firma valida per il primo \u00e8 automaticamente valida anche per il secondo, perch\u00e9 la verifica confronta soltanto i digest, che coincidono.<\/p>\n<p>Si immagini il seguente scenario. Un attaccante prepara due documenti con lo stesso digest, sfruttando una collisione: uno innocuo e uno malevolo. Fa firmare il documento innocuo a una vittima, che non sospetta nulla perch\u00e9 il contenuto sembra legittimo. Poi presenta il documento malevolo accompagnato dalla stessa firma. Dal punto di vista matematico la firma \u00e8 perfettamente valida anche per il secondo documento, perch\u00e9 entrambi producono la stessa impronta. La garanzia di autenticit\u00e0 crolla.<\/p>\n<p>Questo \u00e8 esattamente il pericolo che SHAttered ha reso concreto per SHA-1. Nel 2017 i ricercatori del CWI Amsterdam e di Google dimostrarono la prima collisione pratica producendo due file PDF diversi con la stessa impronta SHA-1. Da quel momento, qualsiasi schema di firma ancora basato su SHA-1 doveva essere considerato vulnerabile, perch\u00e9 la premessa su cui poggiava (l&#8217;impossibilit\u00e0 pratica di trovare collisioni) era venuta meno. La risposta naturale fu migrare verso funzioni hash resistenti alle collisioni, come quelle della famiglia SHA-2.<\/p>\n<h2 id=\"certificati-e-firma-del-codice\">Certificati e firma del codice<\/h2>\n<p>Le firme digitali non sono un concetto astratto: sostengono strumenti quotidiani.<\/p>\n<p>I certificati digitali, che autenticano i siti web nelle connessioni HTTPS, sono essenzialmente dichiarazioni firmate da un&#8217;autorit\u00e0 di certificazione. Il certificato lega un&#8217;identit\u00e0 a una chiave pubblica, e la firma dell&#8217;autorit\u00e0 ne garantisce l&#8217;autenticit\u00e0. Anche in questo caso la firma opera su un digest, motivo per cui i certificati basati su SHA-1 sono stati progressivamente abbandonati a favore di SHA-256 dopo la dimostrazione delle collisioni.<\/p>\n<p>La firma del codice protegge il software distribuito. Quando uno sviluppatore firma un eseguibile, gli utenti possono verificare che il file provenga davvero da lui e non sia stato manomesso. Una collisione nella funzione hash sottostante aprirebbe la porta a un attacco in cui un file malevolo viene fatto passare per uno legittimo, condividendo la stessa firma di un eseguibile innocuo. \u00c8 una delle ragioni per cui la solidit\u00e0 della funzione hash \u00e8 considerata parte integrante della sicurezza della firma.<\/p>\n<h2 id=\"una-catena-solida-solo-quanto-il-suo-anello-piu-debole\">Una catena solida solo quanto il suo anello pi\u00f9 debole<\/h2>\n<p>Le firme digitali offrono autenticit\u00e0 e integrit\u00e0 combinando chiavi asimmetriche e funzioni hash. Il sistema \u00e8 solido, ma poggia su un presupposto: che la funzione hash impiegata sia resistente alle collisioni. Quando questo presupposto cade, come \u00e8 accaduto a SHA-1 con SHAttered, l&#8217;intera garanzia vacilla. Per questo la scelta di una funzione hash sicura e aggiornata non \u00e8 un dettaglio tecnico marginale, ma una condizione necessaria perch\u00e9 una firma digitale mantenga davvero la sua promessa.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Che cos&#8217;\u00e8 una firma digitale Una firma digitale \u00e8 un meccanismo crittografico che permette di verificare due cose su un messaggio: che provenga davvero da chi dichiara di averlo inviato\u2026<\/p>\n","protected":false},"author":2,"featured_media":25,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-10","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\/10","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=10"}],"version-history":[{"count":0,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/posts\/10\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/media\/25"}],"wp:attachment":[{"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/media?parent=10"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/categories?post=10"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/tags?post=10"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}