Vorrei sapere cosa è e come funziona il protocollo SSL? Che cosa si intende con OpenSSL?

Il termine SSL sta per “Secure Socket Layer” ed indica un sistema per
la protezione crittografica delle comunicazioni attraverso una rete.

Il protocollo è stato originariamente sviluppato da Netscape e
successivamente è stato adottato come uno standard per Internet
ed ha assunto il nome di TLS (Transport Layer Security).

Nella figura viene mostrata l’architettura del protocollo SSL.
Esso è composto di due livelli: il livello “record” sottostante
ed il livello di controllo. Vedremo adesso un po’ più in dettaglio
le funzioni di ciascun livello.

Notiamo intanto che il livello “record”, oltre che essere utilizzato
dalle componenti di SSL al livello di controllo, si frappone fra le
applicazioni (nella figura rappresentate dal blocchetto marcato
HTTP) ed il protocollo TCP/IP. Questo significa che un’applicazione che
voglia utilizzare un collegamento sicuro, dovrà essere modificata
in modo da accedere ai servizi di SSL anziché a quelli standard
del protocollo TCP.

Quando un’applicazione (cliente) chiede di aprire una connessione SSL verso un
server
si attiva il servizio che utilizza i protocolli di handshake e di scambio
delle chiavi di cifratura.
Lo scopo di questa fase è quello di utilizzare un
sistema crittografico asimmetrico(1) per svolgere due funzioni:

  1. Effettuare l’autenticazione reciproca del cliente e del server.
  2. Scambiare fra cliente e server
    le chiavi di cifratura da utilizzare nel corso della connessione. Le
    chiavi
    sono due per il cliente e due per il server. Una di esse serve per la
    cifratura dei dati e l’altra per il codice di autenticazione (MAC)

Al termine di questa fase inizia la vera e propria connessione durante la
quale il messaggio (ovvero i dati inviati da cliente a server e viceversa)
viene trattato come segue:

  1. Il messaggio viene suddiviso in blocchi di lunghezza prefissata.
  2. Ciascun blocco viene compresso con un algoritmo di compressione.
  3. A ciascun blocco viene aggiunto il codice MAC che serve a garantire
    l’autenticità dei dati.
  4. Il blocco complessivo (dati compressi+MAC) viene cifrato utilizzando un
    algoritmo simmetrico(2) e l’opportuna chiave.
  5. In testa al blocco cifrato viene posto lo “header” SSL.
  6. Il blocco viene inviato al corrispondente Utilizzando il protocollo TCP/IP.

Il corrispondente alla ricezione del blocco dovrà efettuare le operazioni contrarie, ovvero:

  1. Eliminare lo header SSL.
  2. Decifrare il messaggio utilizzando la chiave opportuna.
  3. Verificare che il codice MAC sia quello del corrispondente.
  4. Eliminare il codice MAC
  5. Decomprimere il blocco risultante.
  6. Riunire i frammenti del messaggio.

OpenSSL

OpenSSL è il nome dato ad una implementazione del protocollo SSL
“open source” ovvero disponibile a tutti in forma sorgente. Essa costituisce la
base di tutte le implementazioni di SSL per i sistemi operativi
non proprietari (Linux, FreeBSD, ecc.)


Per ulteriori approfondimenti possono essere interessanti i seguenti siti:


http://www.faqs.org/faqs/computer-security/ssl-talk-faq/
.
La FAQ del gruppo di discussione su SSL


http://home.netscape.com/eng/ssl3/index.html
.
La definizione del protocollo SSL 3.0


http://www.ietf.org/internet-drafts/
.
La raccolta dei documenti del IETF (Internet Engineering Task Force)
contenente una ventina di documenti relativi a TSL.


http://www.openssl.org/
.
La “sede” del progetto OpenSSL.

Argomenti correlati a questo sono stati trattati in passato sul nostro sito.
In particolare:


http://www.vialattea.net/esperti/php/risposta.php?numero=590
.
Una introduzione ai protocolli TCP/IP.


http://www.vialattea.net/esperti/php/risposta.php?num=2276
.
Una breve nota sui più comuni metodi di programmazione di applicazioni di rete.

Per una inquadratura generale e non tecnica dei metodi crittografici
consiglio il bel libro di Simon Singh: “Codici e Segreti“; Rizzoli.


Nota 1


Gli algoritmi di cifratura asimmetrica, detti anche “a chiave pubblica”,
sono algoritmi per i quali occorrono due chiavi diverse,
una per la cifratura e l’altra per la decifratura del messaggio.
Le due chiavi sono fra loro strettamente connesse in quanto i messaggi
cifrati tramite la prima possono essere decifrati solo conoscendo
la seconda, e viceversa.

Nell’uso normale una delle due chiavi deve essere tenuta segreta (la
chiameremo SEGR) ed una viene pubblicata in elenchi disponibili a tutti
(la chiameremo PUBB). Quando il soggetto A vuole mandare un messaggio
riservato al soggetto B, utilizza la chiave pubblica di B per cifrare il
messaggio. L’algoritmo garantisce che solo la chiave SEGR di B può
essere usata per decifrare il messaggio. Il grande vantaggio di tali
metodi consiste nel fatto che, poichè la chiave SEGR non è
necessaria per cifrare il messaggio, non è mai necessario
trasmetterla al corrispondente, evitando quindi il rischio che venga
intercettata.

Questo metodo può anche essere usato per autenticare il mittente
di un messaggio. Infatti se il soggetto B cifra un messaggio usando la

propria chiave SEGR, chiunque può verificare l’autenticità
del messaggio cifrato in quanto solo la chiave pubblica corrispondente
è in grado di decifrare il messaggio, ovvero è garantito
che solo il possessore della chiave SEGR corrispondente può aver
generato quel particolare messaggio cifrato. Anche in questo caso non
c’è alcuna necessità di trasmettere la chiave SEGR.

Nota 2


Gli algoritmi di cifratura simmetrici sono quelli in cui cifratura e
decifratura vengono effettuate con la stessa chiave. Questi algoritmi
richiedono che due corrispondenti che vogliono scambiarsi messaggi in modo
sicuro abbiano avuto modo di comunicarsi la chiave di cifratura senza che
questa sia stata intercettata. Il vantaggio di tali algoritmi rispetto a quelli
asimmetrici consiste nell’essere assai più “leggeri” dal punto
di vista delle operazioni necessarie per cifratura e decifratura.
Per questo motivo la maggior parte dei sistemi di trasmissione sicura
prevede l’uso di algoritmi simmetrici, utilizzando però chiavi
casuali generate sul momento e scambiate fra i due corrispondenti
utilizzando un metodo asimmetrico.