0Pricing
Cryptology Academy · Lezione

WireGuard: VPN con ChaCha20 e Curve25519

Scopra il design crittografico essenziale di WireGuard, basato su ChaCha20-Poly1305, Curve25519 e BLAKE2.

WireGuard: VPN con ChaCha20 e Curve25519 è una lezione Cryptology Academy gratuita su CoddyKit. Questa è la lezione 2 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 Cryptology Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cryptology Academy include 4 lezioni in totale.

Filosofia progettuale di WireGuard

WireGuard è stato progettato ponendo la semplicità radicale come obiettivo principale. Il suo codebase conta circa 4.000 righe, rispetto alle 70.000 di OpenVPN e alle oltre 400.000 di strongSwan IPsec. Un numero inferiore di righe significa meno potenziali vulnerabilità e una superficie di auditing abbastanza ridotta da poter essere esaminata accuratamente da un singolo ingegnere. Questa semplicità è una scelta di sicurezza deliberata, non una limitazione delle funzionalità.

Primitive crittografiche fisse

A differenza di OpenVPN e IPsec, WireGuard non negozia gli algoritmi crittografici. Ogni connessione WireGuard usa lo stesso insieme fisso di primitive: Curve25519 per ECDH, ChaCha20-Poly1305 per la cifratura autenticata, BLAKE2s per l'hashing e SipHash-2-4 per la sicurezza delle tabelle hash. Questo elimina la negoziazione dei cifrari e rimuove un'intera classe di attacchi di downgrade.

Handshake del Noise Protocol Framework

WireGuard implementa il pattern di handshake Noise_IKpsk2 del Noise Protocol Framework. Questo framework offre un metodo rigoroso per costruire protocolli di scambio delle chiavi con proprietà di sicurezza dimostrabili. Il pattern IKpsk2 usa coppie di chiavi statiche ed effimere, con una chiave precondivisa opzionale per una maggiore resistenza agli attacchi quantistici, completando l'handshake in un solo viaggio di andata e ritorno.

Curve25519 per lo scambio di chiavi

Curve25519 è una curva ellittica progettata da Daniel Bernstein per offrire prestazioni elevate e sicurezza. WireGuard la usa per l'accordo di chiavi Elliptic Curve Diffie-Hellman (ECDH). Ogni peer dispone di una coppia di chiavi Curve25519 statica per l'identità a lungo termine; durante l'handshake vengono inoltre utilizzate coppie di chiavi effimere per garantire la segretezza in avanti. Le operazioni Curve25519 sono eseguite in tempo costante, contrastando gli attacchi temporali.

Cifratura dei dati con ChaCha20-Poly1305

WireGuard cifra tutti i pacchetti dati con ChaCha20-Poly1305, un algoritmo di cifratura autenticata. ChaCha20 è un cifrario a flusso estremamente veloce sui dispositivi privi di accelerazione hardware AES, come smartphone e dispositivi embedded. Poly1305 fornisce il tag di autenticazione. La costruzione AEAD combinata garantisce che qualsiasi manomissione del testo cifrato venga rilevata prima della decifratura.

BLAKE2s per l'hashing

BLAKE2s è una funzione hash crittografica ottimizzata per piattaforme a 32 bit e messaggi brevi. WireGuard la usa nelle fasi di derivazione delle chiavi dell'handshake e per il calcolo dell'identificatore di sessione. BLAKE2s è più veloce di SHA-256 sulla maggior parte delle piattaforme, offrendo al contempo una sicurezza equivalente. È stata progettata come successore di BLAKE, finalista del concorso SHA-3.

Coppie di chiavi statiche ed effimere

I peer WireGuard dispongono di una coppia di chiavi statica che funge da identità a lungo termine. Le chiavi pubbliche vengono scambiate fuori banda durante la configurazione e fungono da identificatori dei peer. Durante ogni handshake, entrambi i peer generano inoltre coppie di chiavi effimere. L'ECDH tra chiavi statiche ed effimere, combinato con l'ECDH tra coppie di chiavi effimere, garantisce sia l'autenticazione sia la segretezza in avanti.

Routing tramite chiavi crittografiche

WireGuard implementa il routing tramite chiavi crittografiche: nella configurazione, ogni peer specifica gli indirizzi IP (allowed IPs) raggiungibili attraverso quel peer. Quando un pacchetto in uscita corrisponde agli allowed IPs di un peer, viene cifrato per quel peer. I pacchetti in ingresso vengono decifrati e il loro IP di origine deve corrispondere agli allowed IPs della chiave utilizzata; in caso contrario, vengono scartati. Le chiavi definiscono la tabella di routing.

Gestione delle connessioni basata sui timer

WireGuard non ha il concetto di connessione persistente. Se non è in corso alcun traffico, non vengono inviati pacchetti e la VPN scompare di fatto dalla rete. Gli handshake vengono avviati su richiesta quando è necessario inviare traffico. Un'impostazione PersistentKeepalive configurabile invia periodicamente pacchetti vuoti per mantenere le mappature NAT dei dispositivi che si trovano dietro router NAT.

WireGuard nel kernel Linux

WireGuard è stato integrato nel kernel Linux principale nella versione 5.6, rilasciata a marzo 2020. L'esecuzione nello spazio del kernel offre a WireGuard accesso diretto allo stack di rete del kernel e all'hardware crittografico, con un throughput superiore rispetto alle implementazioni VPN nello spazio utente. Sulle altre piattaforme (Windows, macOS, iOS, Android), WireGuard viene eseguito nello spazio utente tramite un'implementazione multipiattaforma.

Confronto delle prestazioni di WireGuard

I benchmark mostrano costantemente che WireGuard supera OpenVPN di 3-4 volte in termini di throughput. IPsec con accelerazione hardware AES-NI è competitivo con WireGuard sui sistemi dotati di hardware AES. Sui dispositivi ARM privi di AES-NI, ChaCha20 di WireGuard supera nettamente le alternative basate su AES. Un utilizzo inferiore della CPU comporta inoltre una maggiore durata della batteria sui dispositivi mobili.

Primitive crittografiche di WireGuard

Quale algoritmo utilizza WireGuard per cifrare i pacchetti dati?

Riepilogo di WireGuard

Riepilogo di WireGuard: circa 4.000 righe di codice per una superficie di attacco minima, primitive fisse (nessuna negoziazione), handshake Noise IKpsk2 con Curve25519, ChaCha20-Poly1305 per i dati, BLAKE2s per l'hashing, routing tramite chiavi crittografiche che associa gli intervalli IP alle chiavi pubbliche, chiavi effimere che garantiscono la segretezza in avanti, integrazione nel kernel per le massime prestazioni e un modello di connessione senza stato con handshake su richiesta.

Domande Frequenti

La lezione «WireGuard: VPN con ChaCha20 e Curve25519» è gratuita?

Sì — il testo completo di «WireGuard: VPN con ChaCha20 e Curve25519» è 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 Cryptology Academy, passa a CoddyKit PRO. Il corso Cryptology Academy include 4 lezioni in totale.

Cosa imparerò in «WireGuard: VPN con ChaCha20 e Curve25519»?

Scopra il design crittografico essenziale di WireGuard, basato su ChaCha20-Poly1305, Curve25519 e BLAKE2. Eserciti Cryptology Academy 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 Cryptology Academy?

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

Quanto tempo richiede la lezione «WireGuard: VPN con ChaCha20 e Curve25519»?

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 Cryptology Academy?

Sì. Ogni lezione Cryptology Academy 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. IPsec: protocolli IKEv2, ESP e AH
  2. WireGuard: VPN con ChaCha20 e Curve25519
  3. OpenVPN: architettura VPN basata su TLS
  4. Confronto tra protocolli VPN: sicurezza e prestazioni
← Torna a Cryptology Academy