Questa guida completa esplora concetti avanzati di crittografia, algoritmi e protocolli utilizzati nei moderni sistemi di comunicazione sicura. Ideale per sviluppatori e professionisti della sicurezza.
Algoritmi di Crittografia Simmetrica
AES (Advanced Encryption Standard)
Lo standard d'oro per la crittografia simmetrica, adottato dal governo degli Stati Uniti nel 2001.
Caratteristiche Principali
- Dimensioni chiave: 128, 192 o 256 bit
- Dimensione blocco: 128 bit
- Round: 10, 12 o 14 a seconda della dimensione della chiave
- Performance: Altamente ottimizzato, accelerazione hardware disponibile
Modalità Comuni
- GCM (Galois/Counter Mode): Crittografia autenticata, raccomandata per la maggior parte dei casi d'uso
- CBC (Cipher Block Chaining): Modalità tradizionale, richiede MAC separato
- CTR (Counter): Parallelizzabile, usato in alcuni protocolli
ChaCha20
Cifrario a flusso moderno progettato da Daniel J. Bernstein, sempre più popolare come alternativa ad AES.
Vantaggi
- Più veloce di AES su dispositivi senza accelerazione hardware
- Implementazione a tempo costante (resistente agli attacchi temporali)
- Design semplice, più facile da implementare in modo sicuro
- Usato con Poly1305 per crittografia autenticata
Crittografia Asimmetrica
RSA (Rivest-Shamir-Adleman)
Ampiamente utilizzato per lo scambio di chiavi e le firme digitali.
Considerazioni Chiave
- Dimensione minima chiave: 2048 bit (4096 bit raccomandati per sicurezza a lungo termine)
- Performance: Computazionalmente costoso rispetto alla crittografia simmetrica
- Schemi di padding: Usa OAEP per la crittografia, PSS per le firme
- Minaccia quantistica: Vulnerabile ai computer quantistici (algoritmo di Shor)
Elliptic Curve Cryptography (ECC)
Alternativa più efficiente a RSA con sicurezza equivalente a dimensioni di chiave più piccole.
Curve Popolari
- Curve25519: Progettata per lo scambio di chiavi ECDH, ampiamente adottata
- Ed25519: Per firme digitali, usata in SSH, GPG
- P-256 (secp256r1): Standard NIST, ampiamente supportato
- P-384, P-521: Livelli di sicurezza più elevati
Vantaggi Rispetto a RSA
- ECC a 256 bit ≈ sicurezza RSA a 3072 bit
- Calcolo più veloce
- Chiavi e firme più piccole
- Requisiti di banda e storage inferiori
Protocolli di Scambio Chiavi
Diffie-Hellman (DH)
Permette a due parti di stabilire un segreto condiviso su un canale non sicuro.
Varianti
- DH classico: Implementazione originale
- ECDH: Versione con curve ellittiche (più efficiente)
- X25519: ECDH moderno che usa Curve25519
Perfect Forward Secrecy (PFS)
Garantisce che le comunicazioni passate rimangano sicure anche se le chiavi a lungo termine vengono compromesse.
Implementazione
- Genera coppie di chiavi effimere per ogni sessione
- Distruggi le chiavi di sessione dopo l'uso
- Usato in TLS 1.3, Signal Protocol, ecc.
Funzioni Hash
Famiglia SHA-2
- SHA-256: Output a 256 bit, ampiamente usato
- SHA-384, SHA-512: Livelli di sicurezza più elevati
- Applicazioni: Firme digitali, validazione certificati, hashing password (con tecniche appropriate)
SHA-3 (Keccak)
- Costruzione diversa da SHA-2 (funzione spugna)
- Resistente agli attacchi di estensione della lunghezza
- Adatto per applicazioni che richiedono margini di sicurezza elevati
BLAKE2/BLAKE3
- Più veloce di SHA-2 e SHA-3
- Crittograficamente sicuro
- BLAKE3: Altamente parallelizzabile, eccellente per grandi quantità di dati
Key Derivation Functions (KDF)
PBKDF2 (Password-Based Key Derivation Function 2)
- Scopo: Derivare chiavi crittografiche dalle password
- Iterazioni: Minimo 100.000 (raccomandazione OWASP)
- Caso d'uso: Archiviazione password, derivazione chiavi
Argon2
Vincitore della Password Hashing Competition (2015), raccomandato per nuove applicazioni.
Varianti
- Argon2id: Ibrido (raccomandato per la maggior parte dei casi d'uso)
- Argon2i: Ottimizzato contro attacchi side-channel
- Argon2d: Massima resistenza agli attacchi GPU
scrypt
- Funzione memory-hard (resistente agli attacchi hardware)
- Usata da Litecoin, Tarsnap
- Buon equilibrio tra sicurezza e compatibilità
Message Authentication Codes (MAC)
HMAC (Hash-based MAC)
- Combina funzione hash con chiave segreta
- Fornisce autenticazione e integrità
- Comuni: HMAC-SHA256, HMAC-SHA512
Poly1305
- Autenticatore monouso
- Usato con ChaCha20 per crittografia autenticata
- Veloce e a tempo costante
Crittografia Autenticata
Perché È Importante
La sola crittografia non garantisce l'integrità. Un attaccante potrebbe modificare il testo cifrato senza essere rilevato. La crittografia autenticata risolve questo problema.
AEAD (Authenticated Encryption with Associated Data)
- AES-GCM: Il più ampiamente supportato
- ChaCha20-Poly1305: Migliore sui dispositivi mobili
- AES-CCM: Usato in alcuni protocolli wireless
Firme Digitali
Firme RSA
- Padding: Usa PSS (Probabilistic Signature Scheme)
- Funzione hash: SHA-256 o superiore
- Dimensione chiave: 2048 bit minimo
ECDSA (Elliptic Curve Digital Signature Algorithm)
- Firme più piccole rispetto a RSA
- Richiede generazione attenta del nonce (RNG debole = chiave compromessa)
- Variante deterministica (RFC 6979) raccomandata
Ed25519
- Deterministico (non richiede RNG)
- Generazione e verifica firma veloce
- Firme piccole (64 byte)
- Resistente agli attacchi side-channel
Protocolli Moderni
Signal Protocol
Protocollo di crittografia end-to-end all'avanguardia usato da Signal, WhatsApp, Facebook Messenger.
Caratteristiche Chiave
- Double Ratchet: Aggiorna continuamente le chiavi
- Perfect Forward Secrecy: I messaggi passati rimangono sicuri
- Post-Compromise Security: Si recupera dalla compromissione delle chiavi
- Asincrono: Funziona anche quando il destinatario è offline
TLS 1.3
Ultima versione del protocollo Transport Layer Security.
Miglioramenti
- Rimossi algoritmi deboli e cipher suite
- Fornisce sempre forward secrecy
- Handshake più veloce (1-RTT, opzione 0-RTT)
- Server Hello crittografato
Noise Protocol Framework
Framework di protocollo crittografico moderno per costruire sistemi di comunicazione sicuri.
Applicazioni
- WireGuard VPN
- Lightning Network
- Messaggistica I2P
Crittografia Post-Quantistica
La Minaccia
I computer quantistici possono violare RSA ed ECC usando l'algoritmo di Shor. Gli algoritmi simmetrici sono meno colpiti ma richiedono chiavi più grandi.
Candidati Post-Quantistici NIST
- Kyber: Incapsulamento chiavi basato su reticoli
- Dilithium: Firme digitali basate su reticoli
- SPHINCS+: Firme basate su hash
Strategia di Transizione
- Approccio ibrido: Combina algoritmi classici e post-quantistici
- Aumenta le dimensioni delle chiavi simmetriche a 256 bit
- Monitora il processo di standardizzazione NIST
- Pianifica l'agilità degli algoritmi
Best Practice di Implementazione
Non Inventare la Propria Crittografia
Usa librerie consolidate e revisionate dalla comunità:
- libsodium: Alto livello, facile da usare
- OpenSSL: Completo, ampiamente supportato
- BoringSSL: Fork di OpenSSL di Google
- Ring: Libreria crittografica Rust
Gestione delle Chiavi
- Usa moduli di sicurezza hardware (HSM) per chiavi critiche
- Implementa politiche di rotazione delle chiavi
- Non inserire mai chiavi hardcoded nel codice sorgente
- Usa la derivazione delle chiavi per scopi multipli
- Elimina in modo sicuro le chiavi dalla memoria dopo l'uso
Generazione Sicura di Numeri Casuali
- Usa RNG crittograficamente sicuro (CSPRNG)
- Non usare mai funzioni rand() standard
- RNG del sistema operativo: /dev/urandom (Linux), CryptGenRandom (Windows)
- Specifici del linguaggio: crypto.randomBytes (Node.js), modulo secrets (Python)
Prevenzione Attacchi Temporali
- Usa confronto a tempo costante per i segreti
- Evita ramificazioni basate su dati sensibili
- Fai attenzione agli attacchi cache timing
- Usa librerie progettate con resistenza agli attacchi temporali
Test e Validazione
Audit di Sicurezza
- Test di penetrazione regolari
- Revisioni del codice da parte di esperti di sicurezza
- Audit di sicurezza di terze parti
- Programmi bug bounty
Conformità
- FIPS 140-2/3: Standard del governo degli Stati Uniti
- Common Criteria: Certificazione di sicurezza internazionale
- PCI DSS: Requisiti dell'industria delle carte di pagamento
Risorse per Approfondire
Libri
- "Cryptography Engineering" di Ferguson, Schneier e Kohno
- "Serious Cryptography" di Jean-Philippe Aumasson
- "Applied Cryptography" di Bruce Schneier
Risorse Online
- Cryptopals Crypto Challenges
- Corsi di Crittografia di Stanford (Coursera)
- IACR ePrint Archive
- Crypto Stack Exchange