Transport Layer Security

Secure Sockets Layer (SSL) și Transport Layer Security (TLS), succesorul său, sunt protocoale criptografice care permit comunicații sigure pe Internet. Între SSL 3.0 și TLS 1.0 există anumite diferențe, dar protocolul rămâne aproximativ același. Termenul "SSL" folosit aici se poate referi la ambele protocoale, excepție făcând cazurile specificate explicit în context. Utilizarea tehnologiei SSL oferă un grad mai mare de confidențialitate și de siguranță decât o conexiune web criptată. Aceasta reduce riscul ca informațiile să fie interceptate și utilizate incorect.

Descriere

modificare

SSL (Secure Sockets Layer) este un acronim care reprezintă un protocol web dezvoltat de compania Netscape pentru a transmite fără risc documente private prin Internet. Pentru a cripta datele, SSL utilizează un sistem criptografic cu două chei: una publică, cunoscută de oricine, și una privată, secretă, cunoscută numai de destinatarul mesajului. Majoritatea browserelor web suportă SSL, și multe situri web utilizează protocolul de utilizator pentru a transmite informații confidențiale, cum ar fi numerele de carduri de credit. Prin convenție, URL-ul care are nevoie de o conexiune SSL începe cu https: (în loc de http:).

Un alt protocol de transmitere a datelor în siguranță pe World Wide Web este Secure HTTP (S-HTTP). În timp ce SSL creează o conexiune securizată între un client și un server prin care poate fi trimisă în siguranță orice cantitate de date, S-HTTP este proiectat pentru a transmite mesaje individuale în siguranță. SSL și S-HTTP pot fi așadar percepute mai degrabă ca tehnologii complementare decât concurente. Ambele protocoale au fost aprobate ca standard de către Internet Engineering Task Force (IETF).

SSL asigură autentificarea endpoint-urilor și confidențialitatea comunicației prin Internet folosind criptografia. În utilizările uzuale, numai serverul este autentificat (identitatea sa este certificată), în timp ce clientul rămâne neautentificat; autentificarea mutuală presupune existența unui mecanism de distribuție a cheilor publice („PKI”) către clienți. Protocolul permite aplicațiilor de tip client-server să comunice securizat pentru a împiedica falsificarea autentificării prin metodele numite eavesdropping, tampering și message forgery.

SSL implică mai multe faze intermediare:

  • Verificarea mutuală de suportare a protocolului
  • Schimbarea cheilor prin intermediul criptării prin metoda cu chei publice și autentificare pe bază de certificate
  • Transmiterea de trafic criptat prin sistemul cheilor simetrice

În timpul primei faze a protocolului serverul și clientul negociază asupra algoritmului de criptare ce va fi folosit. Implementările curente permit următoarele posibilități:

Mecanismul de funcționare

modificare

Protocolul SSL permite schimbul de înregistrări; fiecare înregistrare poate fi, în mod opțional, compresată, criptată și împachetată cu un cod de autentificare al mesajului (engleză: message authentication code - MAC). Fiecare înregistrare are un câmp numit content_type care specifică care protocol superior este folosit.

Când conexiunea demarează, nivelul înregistrare încapsulează un alt protocol, de tip handshake protocol, pentru care câmpul content_type are valoarea 22.

Clientul trimite și primește mai multe structuri de handshake:

  • Trimite un mesaj ClientHello în care specifică lista de metode de criptare care sunt suportate, metodele de compresie și cea mai actuală versiune a protocolului cunoscută. De asemenea transmite o secvență aleatoare de biți care va fi folosită ulterior.
  • Primește mai apoi un ServerHello, în care serverul alege parametrii conexiunii din mulțimea de opțiuni oferită de client mai devreme.
  • Când parametrii conexiunii sunt cunoscuți, clientul și serverul schimbă certificatele (în funcție de algoritmul de codare pentru chei publice ales). Aceste certificate sunt în prezent de tip X.509, dar exista de asemenea un document care specifică utilizarea certificatelor bazate pe OpenPGP.
  • Serverul poate solicita un certificat clientului, astfel încât conexiunea să fie mutual autentificată.
  • Clientul și serverul negociază un secret comun numit "master secret", existând aici opțiunea folosirii rezultatului schimbului Diffie-Hellman, sau mai simplu prin criptarea secretului cu cheia privată și decriptarea acesteia cu cheia privata a partenerului. Toate datele legate de chei sunt derivate din acest "master secret" (și de valori generate aleator de către client sau de către server), care sunt schimbate atent prin funcția atent proiectată de "Funcții pseudoaleatore".

TLS/SSL au o varietate de măsuri de securitate:

  • Numerotarea tuturor înregistrărilor cu numere de secvență în MAC-uri.
  • Folosirea unui mecanism de sumarizare a mesajului extins prin folosirea unei chei (ca numai dacă se cunoaște cheia să poți verifica MAC. Acest lucru este specificat în RFC 2104).
  • Protecție împotriva unor tipuri cunoscute de atacuri (incluzând atacuri de tip "man in the middle"), precum cele de tip forțare la folosirea a unor versiuni mai vechi (și mai puțin sigure) ale protocolului, sau versiuni mai puțin sigure ale algoritmilor de codare.
  • Mesajul care încheie handshake ("Finished") care trimite un hash all tuturor datelor schimbate între cele două părți.
  • Funcțiile pseudoaleatore împart datele în două jumătăți și le procesează cu doi algoritmi diferiți de hash (MD5 și SHA), și apoi face un XOR între ele. În acest fel se protejează și în cazul în care pentru unul dintre aceste două algoritmuri se găsește o vulnerabilite.

Aplicații

modificare

SSL rulează la un nivel care este inferior protocoalelor aplicație precum HTTP, SMTP și NNTP, dar care este superior protocoalelor de transport precum TCP sau UDP, care sunt componente ale suitei de protocale internet TCP/IP. Deși SSL poate adăuga securitate pentru orice protocol care folosește conexiuni statefull (precum TCP-ul), el este cel mai adesea folosit împreună cu HTTP, formând astfel HTTPS. HTTPS este utilizat pentru a securiza paginile web pentru aplicații gen comerț electronic. HTTPS folosește cerficatele cu chei publice pentru a verifica identitatea utilizatorilor finali.

Deși din ce în ce mai multe produse oferă suport nativ pentru SSL, sunt multe care încă nu au acest protocol. În astfel de cazuri, utilizatorii pot folosi produse separate precum Stunnel, care să asigure criptarea. Totuși, Internet Engineering Task Force a recomandat în 1997 ca aplicațiile să ofere posibilitatea includerii TLS-ului, decât să folosească un port separat pentru comunicații criptate - limitând astfel folosirea produselor adiționale precum Stunnel.

SSL poate fi folosit de asemenea pentru tunelare creând astfel o nouă retea privată (VPN, precum [OpenVPN].

Istoria și dezvoltarea

modificare

Dezvoltat de către Netscape, versiunea SSL 3.0 a fost lansată în 1996, care mai apoi a devenit baza dezvoltării versinii 1.0 a TLS, un protocol standard IETF definit pentru prima dată în RFC 2246. Visa, MasterCard, American Express și alte câteva insitituții financiare au susținut utilizarea SSL pentru comerțul prin Internet.

SSL este conceput modular: autorii săi l-au proiectat pentru a fi extins și pentru a suporta compatibilitatea înainte și înapoi, precum și cu negociere între enpoint-urile aflate în conversație.

Chei slabe mai vechi

modificare

Câteva implementări inițiale ale SSL puteau folosi o cheie cu o lungime maximă a cheiei simetice de 40 de biți datorată restricției guvernului american de export a tehnologiei criptografice. Guvernul american a impus în mod explicit o cheie maxima de 40 de biți care putea fi spartă prin brute-force de către agențiile care impunere a legilor care doreau să intercepteze traficul criptat și care totuși împiedicau atacatorii cu motive mai puțin întemeiate. O limitare asemanătoare a fost impusă și pentru Lotus Notes în versiunile pentru export. După ani de controverse publice, o serie de procese și eventuala recunoaștere a guvernului pentru cererea pieței de produse criptografice mai performante produse în afara Statelor Unite, autoritățile americane au relaxat legislația pentru restricțiile de export. Limitarea lungimii cheii la 40 de biți a dispărut în acest fel. Impementările moderne folosesc o lungime a cheii de 128 de biți (sau chiar mai mare de atât) pentru algoritmurile de criptare cu chei simetrice.

Utilizări incorecte

modificare

Anumite pagini web au fost criticate pentru folosirea incorectă a SSL și prin urmare a tuturor beneficiilor care decurg din comunicațiile securizate[1]. Astfel de utilizări incorecte includ:

  • Securizarea numai a paginilor care presupun completarea de formulare, dar nesecurizarea paginii de autentificare a utilizatorilor[2]
  • Afișarea de pagini securizate împreună cu conținut nesecurizat [3]

Aceste scăpări se regăsesc în multe pagini cu carater comercial, precum cea a Bank of America și Washington Mutual [4].

Standarde

modificare

Prima definire a TLS-ului a apărut în RFC 2246: "The TLS Protocol Version 1.0". Versiunea aprobată în mod curent este 1.1, care este specificată de RFC 4346: "The Transport Layer Security (TLS) Protocol Version 1.1".

Alte RFC suplimentare care extind TLS-ul sunt:

  • RFC 2712: "Addition of Kerberos Cipher Suites to Transport Layer Security (TLS)". The 40-bit ciphersuites defined in this memo appear only for the purpose of documenting the fact that those ciphersuite codes have already been assigned.
  • RFC 2817: "Upgrading to TLS Within HTTP/1.1", explains how to use the Upgrade mechanism in HTTP/1.1 to initiate Transport Layer Security (TLS) over an existing TCP connection. This allows unsecured and secured HTTP traffic to share the same well known port (in this case, http: at 80 rather than https: at 443).
  • RFC 2818: "HTTP Over TLS", distinguishes secured traffic from insecure traffic by the use of a different 'server port'.
  • RFC 3268: "AES Ciphersuites for TLS". Adds Advanced Encryption Standard (AES) ciphersuites to the previously existing symmetric ciphers.
  • RFC 3546: "Transport Layer Security (TLS) Extensions", adds a mechanism for negotiating protocol extensions during session initialisation and defines some extensions.
  • RFC 4279: "Pre-Shared Key Ciphersuites for Transport Layer Security (TLS)", adds three sets of new ciphersuites for the TLS protocol to support authentication based on pre-shared keys.
  • RFC 4347: "Datagram Transport Layer Security" specifies a TLS variant that works over datagram protocols (such as UDP).
  • RFC 4366: "Transport Layer Security (TLS) Extensions" describes both a set of specific extensions, and a generic extension mechanism.

Implementări

modificare

Programatorii pot folosi bibliotecile OpenSSL, NSS sau GnuTLS pentru funcționalitățile SSL / TLS. Programatorii care utilizează Delphi pot folosi o librărie numită Indy, care are metode de conectare a componentelor cu o întrerupere SSL folosind librăriile OpenSSL. Acest lucru permite dezvoltarea de aplicații. Protocoalele suportate sunt SSLv2 SSLv3 și TLS v1.

După cum s-a spus si mai înainte, TLS 1.1 este versiunea curenta aprobată a protocolului TLS. TLS 1.1 clarifică anumite ambiguități și adaugă un număr de recomandări. TLS 1.1 este foarte similar cu TLS 1.0. Motivul principal pentru care s-a moficat numărul care descrie versiunea de protocol este modificarea formatului pentru secretul pre-master RSA, care face parte din mesajul de schimbare a cheii clientului (dacă se folosește RSA), pentru a se folosi PKCS#1 v 2.1, spre deosebire de PKCS#1 v 1.5 din TLS 1.0. Acest lucru s-a făcut pentru a fi protejate contra atacului descoperit de Daniel Bleichenbacher care se poate lansa asupra serverelor TLS 1.0, care folosesc PKCS#1 v 1.5, care pot să ajungă nefuncționale dacă formatul decriptat este corect sau nu. Include de asemenea și recomandări pentru a evita atacuri de sincronizare de la depărtare. O listă completă a diferențelor dintre TLS 1.0 și TLS 1.1 se găsește în RFC 4346 (Secțiunea 1.1).

TLS 1.1 este suportat în momentul de față de Opera și GnuTLS.

Vezi și

modificare

Legături externe

modificare

Referințe

modificare
  • David Wagner and Bruce Schneier, Analysis of the SSL 3.0 Protocol, The Second USENIX Workshop on Electronic Commerce Proceedings, USENIX Press, November 1996, pp29–40.

Acest articol a fost bazat original pe informații de la Dicționarul Online Gratuit de Calculatoare.