<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Firme Digitali on My personal blog</title>
        <link>https://www.matteobianchi.eu/tags/firme-digitali/</link>
        <description>Recent content in Firme Digitali on My personal blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Tue, 22 Sep 2026 09:00:00 +0200</lastBuildDate><atom:link href="https://www.matteobianchi.eu/tags/firme-digitali/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Firme digitali: autenticità e non ripudio</title>
        <link>https://www.matteobianchi.eu/p/firme-digitali/</link>
        <pubDate>Tue, 22 Sep 2026 09:00:00 +0200</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/firme-digitali/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/firme-digitali/cover.png" alt="Featured image of post Firme digitali: autenticità e non ripudio" /&gt;&lt;h2 id=&#34;perché-conta&#34;&gt;Perché conta
&lt;/h2&gt;&lt;p&gt;Lo &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/scambio-chiavi-forward-secrecy/&#34; &gt;scambio di chiavi&lt;/a&gt; concorda un segreto ma
non autentica. L&amp;rsquo;&lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/hmac-autenticazione-messaggi/&#34; &gt;HMAC&lt;/a&gt; autentica, ma è
simmetrico: chi verifica può anche forgiare. La &lt;strong&gt;firma digitale&lt;/strong&gt; è l&amp;rsquo;autenticazione &lt;em&gt;asimmetrica&lt;/em&gt;:
si firma con la chiave privata, chiunque verifica con quella pubblica, e chi verifica &lt;strong&gt;non&lt;/strong&gt; può
creare firme. È il meccanismo dietro i certificati TLS, la &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/firma-artefatti-sigstore/&#34; &gt;firma del software&lt;/a&gt;,
i commit firmati, gli aggiornamenti verificati.&lt;/p&gt;
&lt;h2 id=&#34;tre-garanzie-in-una&#34;&gt;Tre garanzie in una
&lt;/h2&gt;&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart LR
    M[Messaggio] --&amp;gt; H[&amp;#34;H(messaggio)&amp;#34;]
    H --&amp;gt; S[Firma con&amp;lt;br/&amp;gt;chiave PRIVATA]
    S --&amp;gt; SIG[Firma]
    SIG --&amp;gt; V[Verifica con&amp;lt;br/&amp;gt;chiave PUBBLICA]
    M --&amp;gt; V
    V --&amp;gt; OK{Valida?}
    style S fill:#fde2e4,stroke:#e63946
&lt;/pre&gt;

&lt;p&gt;Una firma valida garantisce contemporaneamente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Autenticità&lt;/strong&gt;: viene da chi possiede la chiave privata corrispondente a quella pubblica.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integrità&lt;/strong&gt;: il messaggio non è stato alterato (la firma non combacerebbe più).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Non ripudio&lt;/strong&gt;: il firmatario non può negare di aver firmato — proprietà che l&amp;rsquo;HMAC &lt;em&gt;non&lt;/em&gt; ha,
perché lì anche il verificatore conosce la chiave e avrebbe potuto produrre il tag.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il non ripudio è ciò che distingue la firma dal MAC: con una firma, solo &lt;em&gt;una&lt;/em&gt; persona al mondo poteva
produrla.&lt;/p&gt;
&lt;h2 id=&#34;perché-si-firma-lhash&#34;&gt;Perché si firma l&amp;rsquo;hash
&lt;/h2&gt;&lt;p&gt;Non si firma mai il messaggio intero, ma il suo &lt;strong&gt;hash&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;firma = Sign(chiave_privata, H(messaggio))
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 1. efficienza: l&amp;#39;asimmetrica è lenta → firmi 32 byte di hash, non 2 GB di file
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 2. la sicurezza della firma eredita dalla resistenza alle collisioni dell&amp;#39;hash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;È anche il motivo per cui un hash rotto rovina la firma: se un attaccante trova due messaggi con lo
stesso hash (&lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/hashing-e-integrita/&#34; &gt;collisione&lt;/a&gt;), una firma valida per uno vale
anche per l&amp;rsquo;altro. Per questo le firme usano SHA-256 o più, mai SHA-1.&lt;/p&gt;
&lt;h2 id=&#34;ecdsa-eddsa-e-il-pericolo-del-nonce&#34;&gt;ECDSA, EdDSA e il pericolo del nonce
&lt;/h2&gt;&lt;p&gt;Gli algoritmi di firma su curve ellittiche:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ECDSA&lt;/strong&gt;: lo standard diffuso. Ha un punto delicato: richiede un valore casuale ($k$, un nonce) per
&lt;em&gt;ogni&lt;/em&gt; firma, e quel valore deve essere unico e imprevedibile.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EdDSA (Ed25519)&lt;/strong&gt;: progettato per eliminare proprio quel rischio. È deterministico (il nonce deriva
da chiave e messaggio), veloce, con chiavi corte. &lt;strong&gt;È la scelta preferibile oggi.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il pericolo del nonce in ECDSA non è teorico:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Nonce k riusato o prevedibile in ECDSA → la chiave PRIVATA si ricava dalle firme
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  (è successo davvero: console di gioco, wallet — chiavi estratte da firme con k debole)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ un motivo in più per preferire Ed25519, che rende il nonce deterministico e sicuro by design.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Riusare — o anche solo generare male — il nonce $k$ permette di calcolare la chiave privata partendo
dalle firme pubbliche. È accaduto a sistemi reali. EdDSA toglie l&amp;rsquo;arma dalle mani di chi implementa.&lt;/p&gt;
&lt;h2 id=&#34;firma-non-è-cifratura&#34;&gt;Firma non è cifratura
&lt;/h2&gt;&lt;p&gt;Un equivoco comune (&amp;ldquo;firmare = cifrare con la privata&amp;rdquo;). Concettualmente sono operazioni distinte, con
scopi opposti: la cifratura protegge la &lt;em&gt;riservatezza&lt;/em&gt; (nasconde), la firma protegge
&lt;em&gt;autenticità e integrità&lt;/em&gt; (non nasconde nulla, un messaggio firmato è in chiaro). Gli standard moderni
le trattano come primitive separate. Usa una libreria che offre &amp;ldquo;firma&amp;rdquo; e &amp;ldquo;verifica&amp;rdquo; esplicite, non
costruzioni fatte a mano.&lt;/p&gt;


&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Domanda:&lt;/strong&gt; il &#34;non ripudio&#34; vale davvero in pratica? Se qualcuno mi ruba la chiave privata, può firmare a mio nome — quindi come fa una firma a provare che sono stato io?&lt;/summary&gt;
&lt;p&gt;Hai colto la tensione esatta tra la proprietà &lt;em&gt;crittografica&lt;/em&gt; e la proprietà &lt;em&gt;legale/pratica&lt;/em&gt;
del non ripudio, e vale la pena separarle perché è lì che nascono i fraintendimenti. Dal punto di vista
crittografico, il non ripudio afferma una cosa precisa e vera: una firma valida poteva essere prodotta
&lt;em&gt;solo&lt;/em&gt; da chi possedeva la chiave privata, perché nessun altro — nemmeno chi verifica, a differenza
dell&#39;HMAC — è matematicamente in grado di generarla. Questo è forte e reale: la firma lega in modo
infalsificabile un messaggio a una specifica chiave privata. Ma, e qui sta il tuo punto, lega il messaggio
alla &lt;em&gt;chiave&lt;/em&gt;, non direttamente alla &lt;em&gt;persona&lt;/em&gt;; il ponte tra &#34;questa chiave&#34; e &#34;questa
persona&#34; non è crittografico, è organizzativo e dipende interamente dalla premessa che la chiave privata
sia rimasta sotto il controllo esclusivo del suo titolare. Se quella premessa cade — chiave rubata,
copiata, usata da un malware, custodita male — allora la firma prova ancora che &#34;la chiave ha firmato&#34;, ma
non più che &#34;la persona ha voluto firmare&#34;. Ecco perché il non ripudio nella pratica non è una proprietà
che la matematica ti regala da sola, è il risultato di un sistema attorno alla chiave: custodia in
hardware non esportabile (smartcard, HSM, Secure Enclave) così la chiave non lascia mai il dispositivo;
protezione d&#39;uso (PIN, biometria) così il possesso del dispositivo non basta; e soprattutto meccanismi di
&lt;em&gt;revoca&lt;/em&gt; e &lt;em&gt;timestamp&lt;/em&gt;. La revoca è decisiva: quando sospetti una compromissione, dichiari
la chiave revocata a una certa data, e da quel momento le firme non sono più accettate; i timestamp fidati
permettono di stabilire se una firma è stata prodotta &lt;em&gt;prima&lt;/em&gt; della revoca (valida) o dopo (da
rigettare). È la stessa logica della PKI che vedremo nel prossimo capitolo. Quindi la risposta onesta: la
firma fornisce un non ripudio crittografico robusto &lt;em&gt;condizionato&lt;/em&gt; alla sicurezza della chiave
privata, e trasformarlo in non ripudio affidabile nel mondo reale richiede di proteggere la chiave in modo
che &#34;possedere la chiave&#34; coincida davvero con &#34;essere la persona&#34;, più l&#39;infrastruttura di revoca per
gestire i casi in cui quella coincidenza si rompe. Non è un difetto della firma: è il confine tra ciò che
la crittografia può garantire (chi ha la chiave) e ciò che deve garantire il sistema (chi è la persona).&lt;/p&gt;
&lt;/details&gt;


&lt;h2 id=&#34;conclusione&#34;&gt;Conclusione
&lt;/h2&gt;&lt;p&gt;Le firme digitali danno autenticità, integrità e non ripudio: si firma l&amp;rsquo;hash con la chiave privata, si
verifica con la pubblica, e Ed25519 è preferibile a ECDSA perché elimina il rischio del nonce che ha
già svuotato chiavi reali. Ma resta il nodo sollevato dal capitolo sull&amp;rsquo;asimmetrica e qui sul non
ripudio: &lt;em&gt;di quale chiave pubblica mi fido, e perché?&lt;/em&gt; Legare una chiave a un&amp;rsquo;identità è il compito
della PKI, prossimo capitolo.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
