Secure Sockets Layer (SSL) è un protocollo progettato dalla Netscape Communications Corporation, autrice del famoso browser Netscape Navigator per realizzare comunicazioni cifrate su Internet. La versione 3.0, rilasciata nel 1996, è stata utilizzata come base di sviluppo per il protocollo Transport Layer Security (TLS). TLS è un protocollo standard IETF che è definito nella RFC 2246 (“The TLS Protocol Version 1.0”).
Questi protocolli utilizzano la crittografia per fornire sicurezza nelle comunicazioni su Internet e consentono alle applicazioni client/server di comunicare in modo tale da prevenire il ‘tampering’ (manomissione) dei dati, la falsificazione e l’intercettazione.
Scopo primario di SSL è fornire sistemi di crittografia per comunicazioni affidabili e riservate sul Web sfruttabili in applicazioni quali, ad esempio, posta elettronica e sistemi di autenticazione. Il protocollo SSL provvede alla sicurezza del collegamento garantendo:
Privatezza del collegamento: la crittografia è usata dopo un handshake iniziale per definire una chiave segreta. Per crittografare i dati è usata la crittografia simmetrica (DES, RC4, ecc.).
Autenticazione: l’identità nelle connessioni può essere autenticata usando la crittografia asimmetrica, ovvero a chiave pubblica (RSA, DSS, ecc). Così ogni client comunica in sicurezza con il corretto server, prevenendo ogni interposizione. È prevista la certificazione sia del server che del client.
Affidabilità: il livello di trasporto include un controllo dell’integrità del messaggio basato su un apposito MAC (Message Authentication Code) che utilizza funzioni hash sicure (SHA, MD5, ecc). In tal modo si verifica che i dati spediti tra client e server non siano stati alterati durante la trasmissione.
I protocolli di sicurezza risiedono sotto protocolli applicativi quali HTTP, SMTP e NNTP e sopra il protocollo di trasporto TCP. Sia SSL che TLS possono venire utilizzati per aggiungere sicurezza a qualsiasi protocollo che utilizza TCP, ma il loro utilizzo più comune avviene nel protocollo HTTPS. Il protocollo HTTPS viene utilizzato per aggiungere sicurezza alle pagine del World Wide Web in modo tale da rendere possibili applicazioni quali il commercio elettronico. Entrambi i protocolli utilizzano metodi di cifratura a chiave pubblica e utilizzano certificati a chiave pubblica per verificare l’identità delle parti coinvolte.
Come SSL (dal quale è derivato) anche TLS è un protocollo modulare che consente l’utilizzo di estensioni per garantire la compatibilità in avanti e all’indietro e la negoziazione tra le parti.
Sia TLS che SSL richiedono alcune fasi basilari:
Negoziazione tra le parti dell’algoritmo da utilizzare
Scambio di chiavi segrete tramite cifratura a chiave pubblica e identificazione tramite l’utilizzo di certificati
Cifratura del traffico tra le parti a chiave (segreta) simmetrica
Le prime implementazioni di SSL erano limitate a cifratura a chiave simmetrica di 40 bit a causa delle restrizioni imposte dal governo statunitense sull’esportazione di tecnologie crittografiche. La limitazione della dimensione delle chiavi a 40 bit è stata esplicitamente imposta per rendere la cifratura abbastanza debole da potere essere forzata (tramite l’uso di tecniche di ricerca brute force) dalle autorità giudiziarie che volessero decifrare il traffico criptato, ma sufficientemente resistente agli attacchi da parte di entità con minori disponibilità finanziarie. Dopo diversi anni di controversie pubbliche, cause, e l’ammissione da parte del governo americano di disponibilità sul mercato di prodotti per la cifratura ‘migliori’ (sia all’interno che al di fuori degli Stati Uniti), alcuni aspetti delle restrizioni sono stati modificati. Le implementazioni moderne utilizzano chiavi per la cifratura simmetrica a 128 (o più) bit.