0Pricing
Cloud & IT Cert Prep · Lezione

Scambio di chiavi e crittografia ibrida

Scopra come lo scambio di chiavi Diffie-Hellman e TLS combinino metodi simmetrici e asimmetrici per ottenere prestazioni e sicurezza.

Scambio di chiavi e crittografia ibrida è una lezione Cloud & IT Cert Prep gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Cloud & IT Cert Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cloud & IT Cert Prep include 4 lezioni in totale.

Il problema dello scambio delle chiavi

La crittografia simmetrica richiede che entrambe le parti condividano la stessa chiave segreta prima di poter comunicare in modo sicuro. Ma come si può condividere quella chiave in modo sicuro quando non si dispone già di un canale sicuro? Questo problema della distribuzione delle chiavi è stato considerato irrisolvibile fino al 1976, quando Whitfield Diffie e Martin Hellman pubblicarono un articolo rivoluzionario. La loro soluzione, lo scambio di chiavi Diffie-Hellman, consente a due parti di stabilire una chiave segreta condivisa su un canale non sicuro senza trasmettere mai la chiave stessa, anche sotto lo sguardo di eventuali intercettatori.

Concetto dello scambio di chiavi Diffie-Hellman

Diffie-Hellman (DH) usa un ingegnoso espediente matematico basato sul problema del logaritmo discreto. Le due parti concordano su due valori pubblici (un numero primo grande p e un generatore g). Ciascuna parte genera un numero casuale privato, calcola un valore pubblico a partire da esso e scambia i valori pubblici. Ciascuna parte può quindi calcolare lo stesso segreto condiviso usando il proprio numero privato e il valore pubblico dell'altra parte; un intercettatore che vede solo i valori pubblici, invece, non può calcolare il segreto condiviso senza risolvere il problema del logaritmo discreto, computazionalmente impraticabile per numeri grandi.

# Diffie-Hellman conceptual flow:
# 1. Agree on public parameters: prime p=23, generator g=5
# 2. Alice picks private a=6:  computes A = g^a mod p = 5^6 mod 23 = 8
# 3. Bob picks private b=15:   computes B = g^b mod p = 5^15 mod 23 = 19
# 4. Alice sends A=8 to Bob;   Bob sends B=19 to Alice
# 5. Alice: s = B^a mod p = 19^6 mod 23 = 2
# 6. Bob:   s = A^b mod p = 8^15 mod 23 = 2
# Shared secret = 2 (without either party transmitting it!)

ECDH: Elliptic Curve Diffie-Hellman

Elliptic Curve Diffie-Hellman (ECDH) è la variante moderna e più efficiente dello scambio di chiavi Diffie-Hellman. Usa la matematica delle curve ellittiche invece dell'elevamento a potenza modulare, ottenendo lo stesso livello di sicurezza con parametri molto più piccoli. Una chiave ECDH da 256 bit offre una sicurezza equivalente a quella di una chiave DH da 3072 bit. ECDHE (la «E» sta per Ephemeral) genera una nuova coppia di chiavi per ogni sessione, garantendo la perfetta segretezza in avanti. TLS 1.3 impone ECDHE per lo scambio delle chiavi, rendendolo il principale meccanismo di scambio delle chiavi nella sicurezza web moderna.

Perfetta segretezza in avanti (PFS)

La Perfect Forward Secrecy (PFS) garantisce che le chiavi di sessione non vengano compromesse nemmeno se la chiave privata a lungo termine del server viene rubata in un secondo momento. La PFS si ottiene usando coppie di chiavi effimere per lo scambio delle chiavi di ogni sessione: la chiave di sessione deriva da una coppia di chiavi temporanea che viene eliminata al termine della sessione. Senza PFS (usando lo scambio di chiavi RSA), un attaccante che registra oggi il traffico cifrato e in seguito ruba la chiave privata può decifrare retroattivamente tutto il traffico passato. Con la PFS, le sessioni passate rimangono sicure anche dopo la compromissione della chiave.

# Check if a website uses Perfect Forward Secrecy
openssl s_client -connect google.com:443 2>/dev/null | grep 'Cipher'
# Cipher    : TLS_AES_256_GCM_SHA384 (TLS 1.3 - always has PFS)
# Or look for ECDHE in cipher name:
# Cipher : ECDHE-RSA-AES256-GCM-SHA384 (TLS 1.2 with PFS)
# DHE-RSA-AES256-GCM-SHA384 (DHE = also PFS)
# RSA-AES256-SHA (NO PFS - static RSA key exchange)

Crittografia ibrida: il meglio di entrambi i mondi

La crittografia ibrida combina la crittografia asimmetrica e simmetrica per ottenere sia i vantaggi nella gestione delle chiavi della crittografia asimmetrica, sia le prestazioni della crittografia simmetrica. Il processo consiste nel: (1) generare una chiave di sessione simmetrica casuale, (2) cifrare i dati principali con questa chiave simmetrica (operazione rapida), (3) cifrare la chiave simmetrica con la chiave pubblica del destinatario (per trasmettere la chiave in modo sicuro), (4) inviare sia i dati cifrati sia la chiave cifrata. Il destinatario decifra la chiave simmetrica con la propria chiave privata, quindi decifra i dati con la chiave simmetrica recuperata.

# Hybrid encryption example with OpenSSL
# 1. Generate a random AES-256 session key
openssl rand -out session.key 32

# 2. Encrypt the large file with the symmetric session key
openssl enc -aes-256-cbc -pbkdf2 -in largefile.tar -out largefile.enc -pass file:session.key

# 3. Encrypt the session key with recipient's RSA public key
openssl rsautl -encrypt -inkey recipient_public.pem -pubin -in session.key -out session.key.enc

# Send: largefile.enc + session.key.enc

Handshake TLS: la crittografia ibrida nella pratica

Il handshake TLS è l'implementazione reale più comune della crittografia ibrida. In TLS 1.3: (1) il client invia le suite di cifratura supportate e la condivisione della chiave (il valore pubblico ECDHE). (2) Il server risponde con la propria condivisione della chiave, il certificato (contenente la propria chiave pubblica) e una firma. (3) Entrambe le parti calcolano lo stesso segreto condiviso tramite ECDH. (4) Tutto il traffico successivo viene cifrato con una chiave simmetrica derivata dal segreto condiviso (AES-256-GCM). L'intero processo stabilisce un canale cifrato con un solo viaggio di andata e ritorno, senza trasmettere mai direttamente la chiave simmetrica.

# Observe the TLS 1.3 handshake
openssl s_client -connect example.com:443 -tls1_3
# You'll see:
# TLSv1.3, Handshake [length 0002], ServerHello
# Cipher    : TLS_AES_256_GCM_SHA384
# Session-ID: (no session ID in TLS 1.3, uses PSK)
# Verify return code: 0 (ok)

Meccanismi di incapsulamento delle chiavi (KEM)

La crittografia moderna usa i Meccanismi di incapsulamento delle chiavi (KEM) come approccio più formale e sicuro allo scambio di chiavi rispetto alla cifratura diretta di una chiave di sessione tramite crittografia asimmetrica. Un KEM consente a una parte di generare una chiave simmetrica e di "incapsularla" usando la chiave pubblica del destinatario, in modo che solo il destinatario possa decapsularla (recuperarla). Lo standard post-quantistico di NIST, CRYSTALS-Kyber, è un KEM basato su problemi reticolari anziché sulla fattorizzazione di interi o sulle curve ellittiche, rendendolo resistente agli attacchi dei computer quantistici.

Scambio di chiavi RSA a confronto con ECDHE

Fino a TLS 1.3, lo scambio di chiavi RSA era comune: il client generava un segreto pre-master, lo cifrava con la chiave pubblica RSA del server e lo inviava al server. Il problema è che questo meccanismo non offre segretezza in avanti. Se la chiave privata del server viene compromessa in seguito, tutte le sessioni passate cifrate in questo modo possono essere decifrate. TLS 1.3 elimina completamente lo scambio di chiavi RSA (consente solo ECDHE), proprio per garantire la segretezza in avanti in tutte le connessioni. Per questo disabilitare TLS 1.0 e 1.2 (che consentono ancora RSA statico) e imporre TLS 1.3 rappresenta un miglioramento della sicurezza.

Derivazione della chiave di sessione

Il segreto condiviso prodotto da uno scambio Diffie-Hellman non viene usato direttamente come chiave di cifratura. Viene invece fornito a una funzione di derivazione delle chiavi (KDF) per produrre le chiavi di cifratura effettive e i vettori di inizializzazione. TLS 1.3 usa HKDF (funzione di derivazione delle chiavi basata su HMAC) per derivare chiavi separate per la cifratura in ciascuna direzione. Le KDF aggiungono un costo computazionale (rendendo più difficili gli attacchi a forza bruta), espandono segreti brevi nel numero di byte necessario per le chiavi e garantiscono che le chiavi derivate abbiano buone proprietà statistiche per essere usate come chiavi simmetriche.

Crittografia delle email con PGP: l'ibrido nella posta elettronica

Pretty Good Privacy (PGP) e il suo equivalente open source OpenPGP usano la crittografia ibrida per le email. Quando Alice invia un'email cifrata a Bob, PGP genera una chiave di sessione simmetrica casuale, cifra il corpo dell'email con essa (AES), cifra la chiave di sessione con la chiave pubblica RSA o ECC di Bob e invia entrambi insieme. Per le email firmate, PGP calcola l'hash del messaggio e firma l'hash con la chiave privata di Alice, garantendo il non ripudio. Il modello di rete di fiducia di PGP (in cui gli utenti firmano le chiavi degli altri) è un'alternativa alla PKI basata sulle autorità di certificazione.

# Encrypt and sign an email file with GPG (OpenPGP)
# Encrypt to Bob using his public key, sign with Alice's private key
gpg --encrypt --sign --recipient bob@example.com --armor message.txt

# Decrypt (Bob uses his private key)
gpg --decrypt message.txt.asc

# List available keys
gpg --list-keys
gpg --list-secret-keys

Rischio di attacco man-in-the-middle nello scambio di chiavi

Lo scambio di chiavi Diffie-Hellman è sicuro contro gli intercettatori passivi, ma è vulnerabile agli attacchi man-in-the-middle (MITM) attivi se le parti non si autenticano reciprocamente. Un attaccante può intercettare il valore pubblico di Alice, sostituirlo con il proprio e stabilire sessioni DH separate con Alice e Bob, facendo credere a ciascuno dei due di comunicare con l'altro. Per questo TLS combina lo scambio di chiavi DH con l'autenticazione tramite certificato: il certificato del server (firmato da una CA attendibile) dimostra l'identità del server e impedisce la sostituzione della chiave pubblica durante l'handshake.

Verifica rapida

Verifichi la propria comprensione dei concetti di CompTIA Security+ (SY0-701) trattati in questa lezione.

Riepilogo della lezione

In questa lezione ha imparato che: Diffie-Hellman risolve il problema dello scambio di chiavi permettendo alle parti di derivare un segreto condiviso su un canale non sicuro; ECDHE (effimero) offre la segretezza perfetta in avanti; la crittografia ibrida combina lo scambio asimmetrico delle chiavi con la cifratura simmetrica dei dati principali per una maggiore efficienza; e TLS 1.3 impone ECDHE per tutte le connessioni. Nel prossimo argomento esamineremo le autorità di certificazione e le catene di fiducia.

Domande Frequenti

La lezione «Scambio di chiavi e crittografia ibrida» è gratuita?

Sì — il testo completo di «Scambio di chiavi e crittografia ibrida» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Cloud & IT Cert Prep, passa a CoddyKit PRO. Il corso Cloud & IT Cert Prep include 4 lezioni in totale.

Cosa imparerò in «Scambio di chiavi e crittografia ibrida»?

Scopra come lo scambio di chiavi Diffie-Hellman e TLS combinino metodi simmetrici e asimmetrici per ottenere prestazioni e sicurezza. Eserciti Cloud & IT Cert Prep con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Cloud & IT Cert Prep?

Non è richiesta alcuna esperienza precedente. Cloud & IT Cert Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Scambio di chiavi e crittografia ibrida»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Cloud & IT Cert Prep?

Sì. Ogni lezione Cloud & IT Cert Prep include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Algoritmi di crittografia simmetrica
  2. Crittografia asimmetrica e coppie di chiavi
  3. Hashing e integrità dei dati
  4. Scambio di chiavi e crittografia ibrida
← Torna a Cloud & IT Cert Prep