Skip to main content
  1. Concetti/

Cryptography

·7 mins
Alessio Barnini
Author
Alessio Barnini
Table of Contents

Cosa fa
#

Trasforma dati leggibili (plaintext) in dati illeggibili (ciphertext) usando un algoritmo e una chiave. Solo chi ha la chiave giusta puo' riportare il ciphertext al plaintext originale.


TL;DR
#

Simmetrica  → stessa chiave cifra e decifra → veloce → problema: come condividi la chiave?
Asimmetrica → chiave pubblica cifra, chiave privata decifra → lenta → risolve la distribuzione
Ibrida      → asimmetrica per scambiare la chiave, simmetrica per i dati → usata ovunque

Terminologia base
#

  • Plaintext — il messaggio originale leggibile
  • Ciphertext — il messaggio cifrato, illeggibile senza chiave
  • Chiave — il valore segreto che controlla la cifratura
  • Algoritmo — il metodo pubblico per usare la chiave
  • Brute force — provare tutte le chiavi possibili finche' si trova quella giusta

Simmetrica
#

Una sola chiave — cifra e decifra. Come una cassaforte con un solo codice che tutti i partecipanti devono conoscere.

Vantaggi: molto veloce, efficiente per grandi quantita' di dati. Problema: come fai ad inviare la chiave all'altro in modo sicuro? Se la chiave viene intercettata durante la trasmissione, tutto crolla.

Esempio storico: Caesar Cipher — shift di N posizioni sull'alfabeto. ROT13 e' un Caesar Cipher con shift 13 — lo hai usato in Bandit 11 con tr.

Esempi moderni: AES (Advanced Encryption Standard).


Asimmetrica
#

Due chiavi matematicamente collegate:

  • Chiave pubblica — distribuibile a chiunque, cifra i dati
  • Chiave privata — solo tua, decifra i dati

Non e' possibile derivare la chiave privata dalla pubblica — il problema matematico sottostante richiederebbe migliaia di anni con i computer attuali.

sequenceDiagram
    participant A as Alice
    participant B as Bob

    B->>A: Manda chiave pubblica
    A->>B: Cifra messaggio con chiave pubblica di Bob
    B->>B: Decifra con la sua chiave privata
    note over B: Solo Bob puo' leggere

Lo conosci gia' da due contesti:

  • SSH — la tua chiave pubblica sta sul server, la privata sul tuo Mac
  • Bitcoin — l'indirizzo del wallet e' derivato dalla chiave pubblica

Sistema ibrido — come funziona HTTPS (TLS)
#

TLS (Transport Layer Security) e' il protocollo che cifra le connessioni HTTPS. Il cuore di TLS e' l'handshake — una negoziazione iniziale tra browser e server che stabilisce come comunicare in modo sicuro.

sequenceDiagram
    participant B as Browser
    participant S as Server

    B->>S: Client Hello — versioni TLS supportate, algoritmi
    S->>B: Server Hello — algoritmo scelto + certificato
    B->>B: Verifica certificato con root CA installate sul OS/browser
    note over B: Se CA non fidata → warning e blocco

    B->>S: Parametro pubblico DH (A = g^a)
    S->>B: Parametro pubblico DH (B = g^b)

    note over B: Calcola g^(ab) con il suo segreto privato a
    note over S: Calcola g^(ab) con il suo segreto privato b
    note over B,S: Entrambi hanno la stessa chiave simmetrica
    note over B,S: Nessuno ha mai mandato la chiave sulla rete

    B->>S: Dati cifrati con chiave simmetrica (AES)
    S->>B: Risposta cifrata con chiave simmetrica (AES)

versione semplificata
#

sequenceDiagram
    participant B as Browser
    participant S as Server

    B->>S: Ciao, voglio connettermi
    S->>B: Ecco il mio certificato con chiave pubblica
    B->>B: Verifico certificato con le CA che ho installate
    B->>S: Parametro pubblico mio (A)
    S->>B: Parametro pubblico mio (B)
    note over B,S: Entrambi calcolano la stessa chiave simmetrica
    note over B,S: Nessuno l'ha mai mandata sulla rete
    B->>S: Da qui tutto cifrato con AES
  1. Browser dice al server "voglio connettermi" e manda quali versioni TLS supporta
  2. Server risponde con il suo certificato — dentro c'è la sua chiave pubblica e la firma della CA
  3. Browser verifica il certificato — risale la catena fino a una Root CA che ha già installata. Se non la trova, blocca tutto
  4. Browser e server si scambiano parametri pubblici DH (Diffie-Hellman) — nessuno manda mai il segreto privato, ma matematicamente entrambi arrivano alla stessa chiave simmetrica. Le chiavi DH sono effimere (ECDHE — Elliptic Curve Diffie-Hellman Ephemeral) — generate fresh per questa sessione e scartate alla fine. La sessione successiva userà chiavi completamente diverse.
  5. Da questo momento tutta la comunicazione è cifrata con AES usando quella chiave simmetrica — veloce ed efficiente.
  6. Perfect Forward Secrecy — anche se domani qualcuno ruba la chiave privata del server, non può decifrare questa sessione perché le chiavi effimere sono già state cancellate.
TLS

TLS sta per Transport Layer Security TLS (Transport Layer Security) e' il protocollo che cifra le connessioni HTTPS. Il cuore di TLS e' l'handshake — una negoziazione iniziale tra browser e server che stabilisce come comunicare in modo sicuro.

CA

Certificate Authority — Autorità di Certificazione.

Perche' questo approccio ibrido:

Asimmetrica (certificati) → verifica l'identita' del server
DH key exchange           → deriva la chiave simmetrica senza trasmetterla
Simmetrica (AES)          → cifra i dati — veloce ed efficiente

Root certificates — da dove vengono:

Non li scarichi al momento della connessione — sono gia' preinstallati nel tuo OS e nel browser:

Mac     → Keychain Access → System Roots (~170 CA)
Windows → Certificate Manager
Chrome  → trust store proprio
Safari  → usa quello di macOS

La catena di fiducia:

Root CA (preinstallata nel tuo OS)
  └── Intermediate CA (firmata dalla Root)
        └── Certificato del sito (firmato dalla Intermediate)

Il browser risale la catena finche' non trova una Root CA che conosce. Se non la trova — warning.

Se una CA viene compromessa, Apple o Mozilla la rimuovono con un aggiornamento di sistema. E' successo con DigiNotar nel 2011 — rimossa da tutti i browser in pochi giorni.

Perfect Forward Secrecy — perche' le chiavi sono effimere:

La E in ECDHE sta per Ephemeral — per ogni sessione TLS vengono generate chiavi DH nuove e poi scartate:

Sessione 1: a1, b1 → chiave simmetrica 1 → scartata
Sessione 2: a2, b2 → chiave simmetrica 2 → scartata
Sessione 3: a3, b3 → chiave simmetrica 3 → scartata

Senza PFS: Un attaccante registra traffico cifrato oggi, ruba la chiave privata del server domani — decifra tutto il traffico passato.

Con PFS (ECDHE): Un attaccante registra traffico oggi, ruba la chiave privata domani — non puo' decifrare niente. Le chiavi effimere non esistono piu'.

Note

TLS 1.3 (2018) richiede obbligatoriamente ECDHE — Perfect Forward Secrecy non e' piu' opzionale. TLS 1.0 e 1.1 sono considerati obsoleti e disabilitati dai browser moderni.


Certificati e Certificate Authority
#

Il problema dell'asimmetrica: come sai che la chiave pubblica appartiene davvero al sito e non a un attaccante?

Un certificato e' un documento digitale che:

  • Contiene la chiave pubblica del sito
  • Dichiara a chi appartiene (example.com)
  • E' firmato da una Certificate Authority (CA) fidata

Il tuo browser ha una lista di CA fidate preinstallata. Quando un sito presenta un certificato:

Browser verifica:
  1. E' firmato da una CA fidata?
  2. Non e' scaduto?
  3. Il dominio corrisponde?

Tutto ok → lucchetto verde
Qualcosa non va → warning / blocco connessione

Nella pratica Blue Team
#

# Vedere il certificato di un sito
openssl s_client -connect google.com:443 </dev/null 2>/dev/null | openssl x509 -noout -text | grep -E "Subject|Issuer|Not After"

# Verificare scadenza certificato
echo | openssl s_client -connect dominio.com:443 2>/dev/null | openssl x509 -noout -dates

#Con una CA che non conosci puoi fare Ti mostra tutta la catena — dal certificato del sito fino alla Root CA. Da lì cerchi il nome della Root nel Keychain.
openssl s_client -connect corsobitcoin.com:443 -showcerts

Un certificato scaduto e' un alert immediato — o il sito e' abbandonato o qualcosa e' andato storto nella gestione.

Warning

Un certificato valido non significa che il sito e' sicuro — significa solo che la connessione e' cifrata. Un attaccante puo' avere un certificato valido per un sito di phishing.

curiosità
#

SSL è il predecessore di TLS.

SSL 1.0  → 1994, mai rilasciato (troppo insicuro)
SSL 2.0  → 1995, rilasciato, subito bucato
SSL 3.0  → 1996, usato per anni
TLS 1.0  → 1999, SSL rinominato e migliorato
TLS 1.1  → 2006
TLS 1.2  → 2008, ancora usato
TLS 1.3  → 2018, quello attuale

SSL è tecnicamente morto — deprecato nel 2015, vulnerabile ad attacchi come POODLE. Nessun sito moderno lo usa.

Ma il nome SSL è rimasto nel linguaggio comune perché per 20 anni tutti chiamavano quella cosa "SSL". Quando dici "certificato SSL" intendi TLS. Quando vedi openssl nel nome del tool — stesso motivo, il nome è rimasto.

Oggi SSL/TLS significa sempre e solo TLS — SSL è storia.


Collegato a
#

  • cia-triad — la crittografia protegge Confidentiality e Integrity
  • ssl-tls — implementazione pratica del sistema ibrido
  • ssh-protocol — usa asimmetrica per autenticazione
  • crypto — categoria

Related