# Transport Layer Security

La Transport Layer Security ( TLS ; en català «seguretat de la capa de transport») i la seva antecessora Secure Sockets Layer ( SSL ; en català «capa de sòcol segur»), són protocols criptogràfics que proporcionen comunicacions segures per una xarxa, generalment Internet. SSL està ja obsoletitzat per la IETF perquè es considera insegur, cal usar sempre TLS.

## Descripció

SSL proporciona autenticació i privacitat de la informació entre extrems sobre Internet mitjançant l'ús de criptografia. Habitualment, només el servidor és autenticat (és a dir, es garanteix la seva identitat) mentre que el client es manté sense autenticar.
SSL implica una sèrie de fases bàsiques:
* Negociar entre les parts l'algorisme que s'usarà en la comunicació
* Intercanvi de claus públiques i autenticació basada en certificats digitals
* Xifrat del trànsit basat en xifrat simètric
Durant la primera fase, el client i el servidor negocien quins algorismes criptogràfics s'utilitzaran. Les implementacions actuals proporcionen les següents opcions:
* Per criptografia de clau pública: RSA, Diffie-Hellman, DSA (Digital Signature Algorithm) o Fortezza;
* Per xifrat simètric: RC2, RC4, IDEA (International Data Encryption Algorithm), DES (Data Encryption Standard), Triple DES i AES (Advanced Encryption Standard);
* Amb funcions hash: MD5 o de la família SHA.

## Funcionament

El protocol SSL intercanvia registres; opcionalment, cada registre pot ser comprimit, xifrat i empaquetat amb un codi d'autenticació del missatge (MAC). Cada registre té un camp de content_type que especifica el protocol de nivell superior que s'està usant.
Quan s'inicia la connexió, el nivell de registre encapsula un altre protocol, el protocol handshake , que té el content_type 22.
El client envia i rep diverses estructures handshake :
* Envia un missatge ClientHello especificant una llista de conjunt de xifrats, mètodes de compressió i la versió del protocol SSL més alta permesa. Aquest també envia bytes aleatoris que seran usats més tard (anomenats Challenge de Client o Repte ). A més pot incloure l'identificador de la sessió.
* Després, rep un registre ServerHello , en el qual el servidor tria els paràmetres de connexió a partir de les opcions ofertes amb anterioritat pel client.
* Quan els paràmetres de la connexió són coneguts, client i servidor intercanvien certificats (depenent de les claus públiques de xifrat seleccionades). Aquests certificats són actualment X.509, però hi ha també un esborrany especificant l'ús de certificats basats en OpenPGP.
* El servidor pot requerir un certificat al client, perquè la connexió sigui mútuament autenticada.
* Client i servidor negocien una clau secreta (simètrica) coneguda com a master secret, possiblement aprofitant el resultat d'un intercanvi Diffie-Hellman, o simplement xifrant una clau secreta amb una clau pública que és desxifrada amb la clau privada de cada un. Totes les dades de claus restants són derivats a partir d'aquest màster secret (i els valors aleatoris generats en el client i el servidor), que són passats a través una funció pseudoaleatoria curosament triada.
TLS/SSL posseeixen una varietat de mesures de seguretat:
* Numerar tots els registres i usant el nombre de seqüència al MAC.
* Usant un resum de missatge millorat amb una clau (de manera que només amb aquesta clau es pugui comprovar el MAC). Això s'especifica al RFC 2104).
* Protecció contra diversos atacs coneguts (incloent atacs man-in-the-middle), com els que impliquen un degradat del protocol a versions prèvies (per tant, menys segures), o conjunts de xifrats més febles.
* El missatge que finalitza el protocol handshake (Finished) envia un hash de totes les dades intercanviades i vists per ambdues parts.
* La funció pseudo aleatòria divideix les dades d'entrada en 2 meitats i les processa amb algoritmes hash diferents (MD5 i SHA), després realitza sobre ells una operació XOR. D'aquesta forma es protegeix a si mateix de l'eventualitat que algun d'aquests algorismes es revelin vulnerables en el futur.

## Aplicacions

SSL s'executa en una capa entre els protocols d'aplicació com http, SMTP, NNTP i sobre el protocol de transport TCP, que forma part de la família de protocols TCP/IP. Encara que pugui proporcionar seguretat a qualsevol protocol que usi connexions de confiança (tal com TCP), es fa servir en la majoria dels casos al costat de http per formar httpS. httpS és usat per assegurar pàgines World Wide Web per a aplicacions de comerç electrònic, utilitzant certificats de clau pública per verificar la identitat dels extrems.
Encara que un nombre creixent de productes clients i servidors poden proporcionar SSL de forma nativa, molts encara no ho permeten. En aquests casos, els nostres usuaris és fer servir una aplicació SSL independent com Stunnel per proporcionar xifrat. Això no obstant, l'Internet Engineering Task Force va recomanar el 1997 que els protocols d'aplicació oferissin una forma d'actualitzar a TLS a partir d'una connexió sense xifrat (plaintext), en comptes d'usar un port diferent per xifrar les comunicacions - això evitaria l'ús d'embolcalls (wrappers) com Stunnel.
SSL també pot ser usat per tunelizar una xarxa completa i crear una xarxa privada virtual (VPN), com en el cas de OpenVPN.

## Història i desenvolupament

Desenvolupat per Netscape, SSL versió 3.0 es va publicar el 1996, que més tard va servir com a base per a desenvolupar TLS versió 1.0, un estàndard protocol IETF definit per primera vegada en el RFC 2246. Visa, MasterCard, American Express i moltes de les principals institucions financeres han aprovat SSL per al comerç sobre Internet.
SSL opera d'una manera modular: els seus autors el van dissenyar extensible, amb suport per compatibilitat cap endavant i cap enrere, i negociació entre les parts (peer-to-peer).

### Primeres claus febles

Algunes primeres implementacions de SSL podien usar claus simètriques amb un màxim de només 40-bit a causa de les restriccions del govern dels Estats Units sobre l'exportació de tecnologia criptogràfica. Aquest govern va imposar una clau de 40-bit prou petita per a ser "trencada" per un atac de força bruta per les agències de seguretat nacional que desitgessin llegir el tràfic xifrat, alhora que representaven un obstacle per a atacants amb menys mitjans. Una limitació similar es va aplicar a Lotus Notes en versions per a l'exportació. Després de diversos anys de controvèrsia pública, una sèrie de plets, i el reconeixement del govern dels Estats Units de canvis en la disponibilitat en el mercat de 'millors' productes criptogràfics produïts fora del país, les autoritats van relaxar alguns aspectes de les restriccions d'exportació. La limitació de claus de 40-bit en la seva majoria ha desaparegut. Les implementacions modernes usen claus de 128-bit (o més) per claus de xifrat simètriques.

## Estàndards

La primera definició de TLS va aparèixer en el RFC 2246: "The TLS Protocol Version 1.0" (El protocol TLS versió 1.0).
Altres RFC posteriors van estendre TLS:
* RFC 2712: "Addition of Kerberos Cipher Suites to Transport Layer Security (TLS)". Les famílies de xifrats de 40-bit definides en aquest memo apareixen només per a propòsits de documentació del fet que aquestes famílies de codis de xifrat han estat ja assignades.
* RFC 2817: "Upgrading to TLS Within http://1.1 Arxivat 2022-02-02 a Wayback Machine.", explica com utilitzar el mecanisme d'actualització en http://1.1 Arxivat 2022-02-02 a Wayback Machine. per a iniciar TLS sobre una connexió TCP existent. Això permet al tràfic http insegur i segur compartir el mateix port conegut (en aquest cas, http://en el 80 en comptes de https://en el 443).
* RFC 2818: "http Over TLS", diferència tràfic segur de tràfic insegur mitjançant l'ús d'un 'port de servidor' diferent.
* RFC 3268: "AES Ciphersuites for TLS". Afegeix la família de xifrat AES als xifrats simètrics prèviament existents.
* RFC 3546: "Transport Layer Security (TLS) Extensions", afegeix un mecanisme per negociar extensions de protocols durant la inicialització de sessió i defineix algunes extensions.
* RFC 4279: "Pre-Shared Key Ciphersuites for Transport Layer Security (TLS)", afegeix tres conjunts de noves famílies de xifrats perquè el protocol TLS permeti l'autenticació basada en claus prèviament compartides.

## TLS 1.1

TLS 1.1 clarifica algunes ambigüitats i afegeix cert nombre de recomanacions. TLS 1.1 és molt similar a TLS 1.0. La principal raó d'aquesta nova versió és un format modificat per a xifrat RSA anterior a l'ús de 'master secret', que és part del missatge d'intercanvi de claus del client (si es fa servir RSA), per utilitzar PKCS #1 versió 2.1, en detriment de PKCS #1 versió 1.5 en TLS 1.0. La raó d'aquest canvi és per protegir-se contra atacs descoberts per Daniel Bleichenbacher que podien llançar-se contra servidors TLS 1.0, usant PKCS #1 versió 1.5, que podrien fallar de diferents formes depenent de si el format desxifrat fos correcte o no. Aquest també inclou recomanacions per evitar atacs remots programats. TLS 1.1 està actualment implementat en el navegador Opera i en GnuTLS.
TLS 1.2 és la darrera versió aprovada i, de fet, l'única que es considera realment segura actualment.
TLS 1.3 és encara un esborrany, s'hi està treballant.

## Referències

* ↑ «Secure Sockets Layer (SSL)», 10-05-2016. [Consulta: 11 maig 2016].

## Bibliografia

* David Wagner and Bruce Schneier, Analysis of the SSL 3.0 Protocol, The second USENIX Workshop on Electronic Commerce Proceedings, USENIX Press, novembre 1996, pp29–40.

## Vegeu també

* Datagram Transport Layer Security
* OpenSSL: una implementació de codi obert (i molt estesa)
* X.509

## Enllaços externs

* RFC 4346 The TLS Protocol, versió 1.1 (abril de 2006) (anglès)
* RFC 2246 - The TLS Protocol, versió 1.0 (1999) (anglès)
* Centre d'informació de SSL (anglès)