<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>AEAD on My personal blog</title>
        <link>https://www.matteobianchi.eu/tags/aead/</link>
        <description>Recent content in AEAD on My personal blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Tue, 11 Aug 2026 09:00:00 +0200</lastBuildDate><atom:link href="https://www.matteobianchi.eu/tags/aead/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Cifratura simmetrica e AEAD</title>
        <link>https://www.matteobianchi.eu/p/cifratura-simmetrica-e-aead/</link>
        <pubDate>Tue, 11 Aug 2026 09:00:00 +0200</pubDate>
        
        <guid>https://www.matteobianchi.eu/p/cifratura-simmetrica-e-aead/</guid>
        <description>&lt;img src="https://www.matteobianchi.eu/p/cifratura-simmetrica-e-aead/cover.png" alt="Featured image of post Cifratura simmetrica e AEAD" /&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-applicata-la-serie/&#34; &gt;serie&lt;/a&gt; parte dal mattone più usato: la
&lt;strong&gt;cifratura simmetrica&lt;/strong&gt;, dove la stessa chiave cifra e decifra. È veloce e protegge quasi tutti i
dati a riposo e in transito. Ma &amp;ldquo;uso AES&amp;rdquo; è una frase incompleta e spesso pericolosa: AES è un
&lt;em&gt;cifrario a blocchi&lt;/em&gt;, e come lo si applica — la &lt;strong&gt;modalità operativa&lt;/strong&gt; — decide se il sistema è sicuro
o completamente rotto.&lt;/p&gt;
&lt;h2 id=&#34;il-problema-delle-modalità-ecb&#34;&gt;Il problema delle modalità: ECB
&lt;/h2&gt;&lt;p&gt;AES cifra blocchi da 16 byte. Un messaggio è più lungo: come si incatenano i blocchi? La modalità più
ingenua, &lt;strong&gt;ECB&lt;/strong&gt;, cifra ogni blocco in modo indipendente. Risultato disastroso: blocchi di testo in
chiaro identici producono blocchi cifrati identici.&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;span class=&#34;lnt&#34;&gt;4
&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;Testo in chiaro con pattern ripetuti (es. un&amp;#39;immagine, dati strutturati)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ECB  → gli stessi blocchi → gli stessi cifrati → il pattern TRASPARE
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  (il famoso &amp;#34;pinguino ECB&amp;#34;: cifri l&amp;#39;immagine e la vedi ancora)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ ECB non nasconde la struttura. NON usare MAI ECB.
&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 lezione generale: la riservatezza non dipende solo dal cifrario, ma da come lo usi. Serve che testi
identici producano cifrati &lt;em&gt;diversi&lt;/em&gt; — ottenuto introducendo un valore variabile per ogni cifratura.&lt;/p&gt;
&lt;h2 id=&#34;nonce-e-iv-il-valore-che-cambia-tutto&#34;&gt;Nonce e IV: il valore che cambia tutto
&lt;/h2&gt;&lt;p&gt;Le modalità sicure usano un &lt;strong&gt;nonce&lt;/strong&gt; (o IV, initialization vector): un valore che rende ogni
cifratura unica anche con la stessa chiave e lo stesso testo. La regola ferrea:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Un nonce non si riusa &lt;strong&gt;mai&lt;/strong&gt; con la stessa chiave.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Riusare un nonce rompe la sicurezza in modi gravi e specifici per modalità — in GCM, come vedremo, è
catastrofico. Il nonce non è segreto (viaggia in chiaro col messaggio), ma deve essere &lt;em&gt;unico&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&#34;aead-cifrare-e-autenticare-insieme&#34;&gt;AEAD: cifrare e autenticare insieme
&lt;/h2&gt;&lt;p&gt;Ecco l&amp;rsquo;errore storico più comune: cifrare &lt;em&gt;senza&lt;/em&gt; autenticare. Un cifrato non autenticato può essere
&lt;strong&gt;modificato&lt;/strong&gt; da un attaccante senza che te ne accorga — ribaltare bit, troncare, riordinare. La
riservatezza non implica l&amp;rsquo;integrità. La soluzione moderna è &lt;strong&gt;AEAD&lt;/strong&gt; (Authenticated Encryption with
Associated Data): cifra &lt;em&gt;e&lt;/em&gt; autentica in un&amp;rsquo;unica operazione.&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
  flowchart LR
    PT[Testo in chiaro] --&amp;gt; E[AEAD&amp;lt;br/&amp;gt;es. AES-GCM]
    K[Chiave] --&amp;gt; E
    N[Nonce unico] --&amp;gt; E
    AD[&amp;#34;Associated data&amp;lt;br/&amp;gt;(header, in chiaro&amp;lt;br/&amp;gt;ma autenticato)&amp;#34;] --&amp;gt; E
    E --&amp;gt; CT[Cifrato]
    E --&amp;gt; TAG[Tag di autenticazione]
    style E fill:#fde2e4,stroke:#e63946
&lt;/pre&gt;

&lt;p&gt;Il &lt;strong&gt;tag&lt;/strong&gt; garantisce che il cifrato (e gli &lt;em&gt;associated data&lt;/em&gt;, dati che viaggiano in chiaro ma vanno
protetti da manomissione, come un header) non siano stati alterati. In decifratura, se il tag non
combacia, l&amp;rsquo;operazione &lt;em&gt;fallisce&lt;/em&gt; invece di restituire dati manomessi. Cifratura e integrità in un
colpo solo, senza doverle combinare a mano (dove si sbaglia).&lt;/p&gt;
&lt;h2 id=&#34;la-risposta-giusta-oggi&#34;&gt;La risposta giusta oggi
&lt;/h2&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;hl&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&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;Devo cifrare dei dati simmetricamente. Cosa uso?
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  AES-GCM                → se hai accelerazione hardware AES (quasi tutti i server/CPU moderni)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ChaCha20-Poly1305      → se non ce l&amp;#39;hai (mobile, embedded): veloce in software, nessun timing leak
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  entrambi sono AEAD: cifratura + autenticazione. Nonce unico per ogni messaggio.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;→ NON: ECB (rotto), CBC senza MAC (manipolabile), roll-your-own.
&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;GCM e ChaCha20-Poly1305 sono le due scelte di default. Entrambe AEAD, entrambe standard, entrambe con
lo stesso vincolo non negoziabile: &lt;strong&gt;nonce unico&lt;/strong&gt;.&lt;/p&gt;


&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Domanda:&lt;/strong&gt; perché riusare un nonce in AES-GCM è &#34;catastrofico&#34; e non solo una debolezza minore come in altre modalità?&lt;/summary&gt;
&lt;p&gt;Perché in GCM il riuso del nonce non degrada la sicurezza gradualmente, la demolisce su due fronti in
una volta sola. Primo, la riservatezza, ed è il meccanismo comune a tutte le cifrature a flusso: GCM
genera un keystream a partire da chiave e nonce, e cifra facendo lo XOR del testo con quel keystream. Se
usi lo stesso nonce con la stessa chiave per due messaggi, generi lo &lt;em&gt;stesso&lt;/em&gt; keystream per
entrambi; facendo lo XOR dei due cifrati il keystream si cancella e ottieni lo XOR dei due testi in
chiaro, da cui, con un po&#39; di analisi, si recuperano i messaggi. Fin qui è il classico disastro del
&#34;two-time pad&#34;, condiviso con CTR e con ogni cifrario a flusso. Ma GCM aggiunge un secondo crollo, suo
specifico e più grave: l&#39;&lt;em&gt;autenticazione&lt;/em&gt;. Il tag di GCM è calcolato con una funzione (GHASH) che
usa una chiave di autenticazione derivata, e due tag prodotti sotto lo stesso nonce danno all&#39;attaccante
abbastanza informazioni per recuperare quella chiave di autenticazione segreta. Una volta che ce l&#39;ha,
non può più solo leggere: può &lt;em&gt;forgiare&lt;/em&gt; tag validi per messaggi arbitrari di sua scelta, cioè
l&#39;intera garanzia di integrità di GCM svanisce, non per i due messaggi incriminati ma in generale per
quella chiave. È la differenza che rende il riuso del nonce in GCM una categoria a sé: in CBC un IV
prevedibile o riusato indebolisce la riservatezza in modi fastidiosi ma circoscritti; in GCM perdi
riservatezza &lt;em&gt;e&lt;/em&gt; la capacità di autenticare, e quest&#39;ultima in modo che compromette la chiave di
autenticazione per sempre. Ecco perché il vincolo &#34;nonce unico&#34; in GCM non è una buona pratica tra le
tante, è la condizione senza la quale la modalità non ha alcuna proprietà di sicurezza. Nei sistemi dove
garantire l&#39;unicità è difficile (molte istanze che cifrano in parallelo senza coordinarsi, rischio di
riavvii che azzerano un contatore) la pratica è generare il nonce in modo casuale con un margine ampio, o
usare varianti pensate apposta per resistere al riuso come AES-GCM-SIV, che degrada in modo molto più
clemente se l&#39;unicità viene a mancare.&lt;/p&gt;
&lt;/details&gt;


&lt;h2 id=&#34;conclusione&#34;&gt;Conclusione
&lt;/h2&gt;&lt;p&gt;La cifratura simmetrica protegge la riservatezza, ma la modalità operativa decide tutto: ECB è rotto,
cifrare senza autenticare è manipolabile, e la risposta moderna è AEAD (AES-GCM o
ChaCha20-Poly1305), con nonce unico come vincolo sacro. AEAD ci ha già dato un assaggio di
&lt;em&gt;integrità&lt;/em&gt; tramite il tag. Ma l&amp;rsquo;integrità ha un mattone proprio, più fondamentale e usato ovunque,
anche fuori dalla cifratura: le funzioni di hash, prossimo capitolo.&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
