Transport Layer Security

De la Wikipedia, enciclopedia liberă

Salt la: Navigare, căutare

Secure Sockets Layer (SSL) şi Transport Layer Security (TLS), succesorul său, sunt protocoale criptografice care permit comunicaţii sigure pe Internet. Există anumite diferenţe între SSL 3.0 şi TLS 1.0, 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 prin detalierea contextului.

Cuprins

[modifică] Descriere

SSL asigură autentificarea endpoint-urilor şi confidenţialitatea comunicaţiei prin Internet folosind criptografia. În utilizările uzuale, numai server-ul este autentificat (identitatea sa este certificată) în timp ce clientul rămâne neautentificat; autentificarea mutuală presupune existenţa unei mecanism de distribuţie a cheie publică (PKI) către clienţi. Protocolul permite aplicaţiilor client/server să comunice securizat pentru a împiedica 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 autenficare pe baza de certificate
  • Trasmiterea de trafic criptat prin sistemul cheilor simetrice

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

[modifică] Mecanismul de funcţionare

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ă, niveul î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:

  • Trimte un mesaj ClientHello în care specifică lista de motode 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 cerificat 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:

  • Numeroarea 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 potejează şi în cazul în care pentru unul dintre aceste două algoritmuri se găseşte o vulnerabilite.

[modifică] Aplicaţii

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].

[modifică] Istoria şi dezvoltarea

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.

[modifică] Chei slabe mai vechi

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.

[modifică] Utilizări incorecte

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].

[modifică] Standarde

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

Alte RFC suplimenare 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.

[modifică] Implementări

Programatorii pot folosi librăriile 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ţi folosind. Protocoalele suportate sunt SSLv2 SSLv3 şi TLS v1.

[modifică] TLS 1.1

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 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.

[modifică] Vezi de asemenea

[modifică] Legături externe

[modifică] Referinţe

  • 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.

Unelte personale