<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Forward Secrecy on My personal blog</title>
        <link>https://www.matteobianchi.eu/tags/forward-secrecy/</link>
        <description>Recent content in Forward Secrecy on My personal blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Tue, 15 Sep 2026 09:00:00 +0200</lastBuildDate><atom:link href="https://www.matteobianchi.eu/tags/forward-secrecy/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Scambio di chiavi e forward secrecy</title>
        <link>https://www.matteobianchi.eu/p/scambio-chiavi-forward-secrecy/</link>
        <pubDate>Tue, 15 Sep 2026 09:00:00 +0200</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/scambio-chiavi-forward-secrecy/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/scambio-chiavi-forward-secrecy/cover.png" alt="Featured image of post Scambio di chiavi e forward secrecy" /&gt;&lt;h2 id=&#34;perché-conta&#34;&gt;Perché conta
&lt;/h2&gt;&lt;p&gt;La &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/crittografia-asimmetrica/&#34; &gt;crittografia asimmetrica&lt;/a&gt; può consegnare una
chiave di sessione cifrandola con la chiave pubblica del destinatario. Funziona, ma ha un difetto
grave: se un giorno la chiave privata trapela, un attaccante che aveva &lt;em&gt;registrato&lt;/em&gt; tutto il traffico
passato può ora decifrarlo &lt;em&gt;tutto&lt;/em&gt;, retroattivamente. Lo scambio di chiavi &lt;strong&gt;Diffie-Hellman&lt;/strong&gt; offre un
modo migliore di concordare un segreto — e, nella sua forma effimera, elimina proprio questo rischio.&lt;/p&gt;
&lt;h2 id=&#34;diffie-hellman-un-segreto-che-non-viaggia-mai&#34;&gt;Diffie-Hellman: un segreto che non viaggia mai
&lt;/h2&gt;&lt;p&gt;L&amp;rsquo;idea è contro-intuitiva: due parti concordano un segreto condiviso &lt;em&gt;parlando su un canale pubblico&lt;/em&gt;,
senza mai trasmettere il segreto. La metafora dei colori:&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart TD
    A[Alice: colore&amp;lt;br/&amp;gt;segreto a] --&amp;gt;|mescola con base&amp;lt;br/&amp;gt;pubblica| AM[Invia A = mix]
    B[Bob: colore&amp;lt;br/&amp;gt;segreto b] --&amp;gt;|mescola con base&amp;lt;br/&amp;gt;pubblica| BM[Invia B = mix]
    AM --&amp;gt; S[Alice calcola:&amp;lt;br/&amp;gt;B mescolato con a]
    BM --&amp;gt; S2[Bob calcola:&amp;lt;br/&amp;gt;A mescolato con b]
    S --&amp;gt; SEG[Stesso segreto condiviso]
    S2 --&amp;gt; SEG
    style SEG fill:#fde2e4,stroke:#e63946
&lt;/pre&gt;

&lt;p&gt;Ciascuno combina il proprio segreto con il valore pubblico ricevuto dall&amp;rsquo;altro e arriva allo &lt;em&gt;stesso&lt;/em&gt;
risultato. Un osservatore vede i valori pubblici scambiati ma non riesce a ricostruire il segreto: è
il problema del logaritmo discreto a proteggerlo. In forma matematica, con base $g$ e modulo primo
$p$:&lt;/p&gt;
&lt;p&gt;$$ (g^a \bmod p)^b \equiv (g^b \bmod p)^a \equiv g^{ab} \bmod p $$&lt;/p&gt;
&lt;p&gt;Alice e Bob calcolano lo stesso $g^{ab}$; l&amp;rsquo;osservatore ha solo $g^a$ e $g^b$ e non può derivarlo. La
versione su curve ellittiche, &lt;strong&gt;ECDH&lt;/strong&gt; (con Curve25519), fa lo stesso con chiavi corte e veloci ed è
quella usata oggi.&lt;/p&gt;
&lt;h2 id=&#34;il-vero-premio-forward-secrecy&#34;&gt;Il vero premio: forward secrecy
&lt;/h2&gt;&lt;p&gt;Qui sta il salto. Se le chiavi $a$ e $b$ sono &lt;strong&gt;effimere&lt;/strong&gt; — generate nuove per ogni sessione e
buttate subito dopo — si ottiene la &lt;strong&gt;forward secrecy&lt;/strong&gt; (o perfect forward secrecy):&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;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&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;Chiave di consegna statica (RSA): registro il traffico oggi, rubo la chiave fra 2 anni → decifro TUTTO
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Diffie-Hellman EFFIMERO (ECDHE):  ogni sessione ha un segreto nuovo, già distrutto
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  → rubare la chiave di oggi NON decifra le sessioni passate: i loro segreti non esistono più
&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;La forward secrecy spezza il legame tra la compromissione futura e le conversazioni passate. È il
motivo per cui il &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/tls-deep-dive/&#34; &gt;TLS&lt;/a&gt; moderno (1.3) usa &lt;em&gt;solo&lt;/em&gt; scambi
effimeri (ECDHE): registrare traffico cifrato oggi nella speranza di decifrarlo domani —
l&amp;rsquo;attacco &amp;ldquo;harvest now, decrypt later&amp;rdquo; — diventa inutile contro le chiavi già distrutte.&lt;/p&gt;
&lt;h2 id=&#34;dh-autentica-no--e-serve-saperlo&#34;&gt;DH autentica? No — e serve saperlo
&lt;/h2&gt;&lt;p&gt;Diffie-Hellman concorda un segreto, ma &lt;strong&gt;non autentica&lt;/strong&gt; chi c&amp;rsquo;è dall&amp;rsquo;altra parte. Da solo è
vulnerabile al man-in-the-middle: un attaccante nel mezzo fa uno scambio DH con ciascuna parte e le
collega. Per questo DH va &lt;em&gt;combinato&lt;/em&gt; con l&amp;rsquo;autenticazione — le &lt;a class=&#34;link&#34; href=&#34;https://www.matteobianchi.eu/p/firme-digitali/&#34; &gt;firme digitali&lt;/a&gt;
del prossimo capitolo, che in TLS provano l&amp;rsquo;identità del server mentre ECDHE stabilisce il segreto.
Scambio di chiavi e autenticazione sono due compiti distinti, e servono entrambi.&lt;/p&gt;


&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Domanda:&lt;/strong&gt; se la forward secrecy è così importante, perché è esistito a lungo (e in parte esiste ancora) il modello con chiave statica senza di essa? Dov&#39;è il compromesso?&lt;/summary&gt;
&lt;p&gt;Il modello a chiave statica non è sopravvissuto per stupidità, ma per una serie di compromessi concreti
che all&#39;epoca pesavano e in parte pesano ancora — ed è utile capirli per vedere perché il vento è
definitivamente cambiato. Primo, il costo computazionale: generare una nuova coppia di chiavi effimere a
&lt;em&gt;ogni&lt;/em&gt; handshake costa CPU, e quando i server erano meno potenti e il traffico HTTPS cresceva, la
tentazione di riusare una chiave statica (nessuna generazione per sessione, possibilità di cifrare la
chiave di sessione con RSA una volta) era un risparmio reale. Con l&#39;accelerazione hardware e con ECDHE su
Curve25519 — velocissimo — questo costo oggi è trascurabile, e l&#39;argomento è caduto. Secondo, e meno
ovvio, la &lt;em&gt;visibilità&lt;/em&gt;: in molte reti aziendali e data center si erano costruiti strumenti di
sicurezza e debugging che decifravano passivamente il traffico TLS possedendo la chiave privata del
server — ispezione, IDS, troubleshooting. La forward secrecy rompe deliberatamente questa capacità:
proprio perché nessuna chiave statica decifra le sessioni, quegli strumenti passivi smettono di
funzionare, e questo ha generato resistenza da parte di chi ci faceva affidamento. La risposta corretta è
stata spostare quelle funzioni a un modello diverso (terminazione TLS esplicita su un proxy che partecipa
all&#39;handshake, non intercettazione passiva), ma la transizione ha avuto attrito. Terzo, la complessità
dello stato: le chiavi effimere vanno generate con buona entropia e gestite correttamente per sessione, e
un&#39;implementazione sciatta può introdurre bug. Detto tutto questo, il compromesso oggi è nettamente a
favore della forward secrecy, e non per moda: la minaccia &#34;harvest now, decrypt later&#34; è diventata
concreta — avversari con risorse registrano oggi traffico cifrato scommettendo di poterlo decifrare
domani, per furto di chiave o per i computer quantistici futuri. Contro questa minaccia la chiave statica
è un disastro (un furto futuro apre tutto il passato), mentre l&#39;effimero la neutralizza alla radice. Per
questo TLS 1.3 ha &lt;em&gt;eliminato&lt;/em&gt; gli scambi senza forward secrecy, non li ha solo sconsigliati: il
piccolo costo residuo non giustifica più l&#39;enorme rischio retroattivo. Il compromesso esisteva, ma gli
sviluppi — hardware veloce, curve efficienti, minacce di lungo periodo — l&#39;hanno risolto in un&#39;unica
direzione.&lt;/p&gt;
&lt;/details&gt;


&lt;h2 id=&#34;conclusione&#34;&gt;Conclusione
&lt;/h2&gt;&lt;p&gt;Diffie-Hellman fa concordare un segreto su un canale pubblico senza mai trasmetterlo, ed ECDHE
(effimero, su Curve25519) aggiunge la forward secrecy: compromettere una chiave futura non apre le
sessioni passate. Ma DH non autentica: va combinato con un meccanismo che provi &lt;em&gt;chi&lt;/em&gt; c&amp;rsquo;è dall&amp;rsquo;altra
parte — firmando con la chiave privata ciò che chiunque può verificare con quella pubblica. Sono le
firme digitali, prossimo capitolo.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
