Secure Sockets Layer
| Internet- en netwerkprotocollen | |
|---|---|
| Toepassingslaag | DNS FTP Gopher HTTP HTTPS IMAP IRC NNTP POP3 RTP SIP SMTP SNMP SSH TLS/SSL Telnet UUCP XMPP |
| Transportlaag | DCCP SCTP TCP UDP |
| Netwerklaag | ARP ICMP IGMP IPv4 IPv6 RARP |
| Datalinklaag | ATM Ethernet FDDI PPP Token Ring Wifi |
| volgens het TCP/IP-model | |
Secure Sockets Layer (SSL) en diens opvolger Transport Layer Security (TLS), zijn encryptie-protocollen die communicatie op het internet beveiligen.
Inhoud |
[bewerken] Doelstellingen
Het doel van de TLS protocollen is tweeledig.
- Ten eerste wordt de gevonden server door middel van een certificaat dat berust op asymmetrische cryptografie, of meer specifiek een public key, geauthenticeerd zodat de gebruiker zeker kan zijn dat de gevonden server ook inderdaad is wat hij zegt te zijn.
- Ten tweede wordt de communicatie tussen beide partijen versleuteld door gebruik te maken van symmetrische cryptografie in de vorm van een block-cipher zodat deze voor kwaadwillenden niet te volgen is. De sleutel voor deze fase wisselt en wordt door middel van een Diffie-Helman key exchange[1] afgesproken.
De reden voor het gebruik van twee afzonderlijke cryptografische methoden, symmetrisch vs. asymmetrisch, is dat de laatste relatief erg tijdrovend is en zich dus niet leent voor het uitwisselen van grote bestanden, maar grotere veiligheid biedt omdat de sleutel voor het vercijferen niet gelijk is aan die voor het ontcijferen.
In alledaags (onveilig) gebruik wordt alleen de authenticiteit van de server gecontroleerd, terwijl de client geheel onbekend blijft. Door het gebruik van PKI is het ook mogelijk om clients te authenticeren. De protocollen kunnen ook gebruikt worden om client/server-applicaties te beveiligen tegen bijvoorbeeld afluisteren.
[bewerken] Toepassing
TLS wordt voornamelijk gebruikt in situaties waarin het nodig is te verifiëren of men inderdaad verbonden is met de gewenste server. Met name in bancaire toepassingen (internet-bankieren) of communicatie met de overheid is dit van groot belang, aangezien vaak financiële belangen in het spel zijn, of persoonlijke of anderszins vertrouwelijke informatie wordt uitgewisseld.
Deze veiligheid berust in veel gevallen op een Public Key Infrastructure (meestal X.509) die door een certification authority (CA) wordt ondersteund. In het recente verleden is echter gebleken dat verschillende bedrijven die zich als CA opwierpen minder betrouwbaar waren dan noodzakelijk, wat het vertrouwen in deze aanpak heeft ondermijnd. Met name het debacle rond DigiNotar heeft hierbij in Nederland een grote rol gespeeld, maar ook gevallen van rogue-CA's zijn bekend en hebben internationaal opzien gebaard.[2].
[bewerken] Geschiedenis en ontwikkeling
De eerste aanzet werd gegeven door de Secure Network Programming API die de gebruikelijke netwerk API's (met name Berkeley Sockets) nauwkeurig imiteerde om zo de ontwikkeling van veilige netwerksoftware gemakkelijk te maken.
[bewerken] SSL
SSL (secure socket layer) werd ontwikkeld door Netscape Communications Corporation op basis van het Kerberos beveiligings protocol. De eerste versie SSL-1.0 is nooit publiek uitgebracht, maar in 1995 kwam versie 2.0 op de markt. Deze versie bleek al snel cryptografische zwakheden te vertonen en werd in 1996 gevolgd door versie 3.0.
[bewerken] TLS 1.0 (SSL 3.1)
In 1999 werd RFC-2246 gepubliceerd, waarin TLS 1.0 werd beschreven. De verschillen met SSL-3.0 zijn, aldus de auteurs van de RFC, niet dramatisch, maar genoeg om interoperabiliteit tussen de twee te verhinderen. TLS 1.0 bevat een zogenaamd fallback-mechanisme waarmee een verbinding met SSL-3.0 kan worden gemaakt.
Deze versie, hoewel het de meest gebruikte is, vertoont de nodige zwakheden. Zo zij de cryptografische hashes RC4[3] en MD5[4] onveilig gebleken.
In 2011 is deze versie door Thai Duong en Juliano Rizzo gekraakt en kan de communicatie tussen twee partijen op een netwerk worden ontsleuteld, waarmee deze versie als encryptiestandaard, en daarmee als veilig protocol, definitief onbruikbaar is geworden[5].
[bewerken] TLS 1.1 (SSL 3.2)
In april 2006 werd de opvolger van TLS-1.0 gepubliceerd. Deze versie is een doorontwikkeling van versie 1.0, en biedt verschillende verbeteringen.
- Bescherming tegen Cipher Block Chaining aanvallen.
- Een expliciete initialisatie vector voor de blokvercijfering
- Betere afhandling van padding errors
- Voortijdig afgebroken sessies kunnen hervat worden
- Ondersteunt IANA parameter registratie
Hoewel deze versie een betere veiligheid biedt (de aanval van Duong en Rizzo werkt niet), wordt deze versie nog nauwelijks gebruikt[5].
[bewerken] TLS 1.2 (SSL 3.3)
In RFC's 5246 en 6176 worden nogmaals verbeteringen aangebracht, ditmaal met name in de gebruikte cryptografische hashes, die onveilig waren gebleken[3] [4] en zijn vervangen door SHA-256. Ook ondersteunt deze versie modernere encryptie methoden uit de Advanced Encryption Standard. RFC-6176 verbiedt tevens het terugvallen op de (onveilige) SSL-2.0 versies van het protocol.
[bewerken] Werking
Omdat SSL/TLS geïmplementeerd zijn als OSI-transport-layer (vandaar de naam) is het gebruik ervan grotendeels transparant voor het applicatie-protocol. Dat betekent in de praktijk dat het noch voor de http-server, noch voor de browser veel verschil maakt of TLS gebruikt wordt of niet, het applicatie-protocol (HTTP in dit geval, maar hetzelfde geldt voor andere protocollen) is hetzelfde.
Zowel TLS als SSL maakt gebruik van een aantal verschillende stadia:
- Peer negotiation for algorithm support
- In deze fase worden gebruikte versleutelings mechanismen afgesproken en worden ondersteunde versies van het protocol vergeleken. Als incompatibiliteit wordt geconstateerd, wordt de verbinding verbroken.
- Public-key encryption-based key exchange and certificate-based authentication
- In deze fase worden gebruikte certificaten vergeleken en wordt, middels het Diffie-Hellman mechanisme de (willekeurige) sleutel voor de blokvercijfering afgesproken.
- Symmetric cipher-based traffic encryption
- De gegevensuitwisseling vindt plaats gebaseerd op de overeengekomen versleutelings-methode en de afgesproken sleutel.
[bewerken] Beschrijving
TLS is gebaseerd op Secure Socket Layer (SSL). Een voordeel van TLS is dat het onafhankelijk is van het application protocol. Het protocol loopt boven transport protocollen (TCP/IP) en onder application protocollen zoals HTTP of IMAP. Wanneer er gecommuniceerd wordt tussen server en gebruiker, zorgt TLS ervoor dat de data niet kan worden afgeluisterd of vervalst. Door middel van cryptografie en authenticatie levert TLS een beveiligde verbinding met het internet. Meestal wordt alleen de authenticiteit van de server gecontroleerd, terwijl de client onbekend blijft. Door het gebruik van PKI is het ook mogelijk om clients te authenticeren.
Transport Layer Security voorziet de volgende veiligheden voor de TCP/IP verbindingen:
- Authenticatie: een applicatie toestaan om de identiteit van een andere applicatie waarmee deze communiceert te verifiëren.
- Privacy: gegevens die tussen applicaties worden overgebracht, kunnen niet worden misbruikt of bekeken.
- Integriteit: applicaties detecteren wanneer gegevens zijn gewijzigd tijdens de transmissie.
[bewerken] Werking
TLS is samengesteld uit 2 interne lagen:
- Onderste laag: Record Protocol wordt gebruikt om alle gegevens van de bovenste laag over te brengen (Gegevens van applicatie laag en bovenste laag van TLS).
- Bovenste laag: Bestaat uit 3 verschillende sub-protocollen: Handshake Protocol, Change Cipher Protocol en Alert Protocol. Zij zorgen voor het tot stand brengen en het beheer van veilige verbindingen tussen client/server applicaties.
[bewerken] TLS Protocol
TLS-protocol gebruikt certificaten om de uitgewisselde gegevens te authenticeren en het verzekeren van de privacy. Elk certificaat bevat een publieke sleutel. De eigenaar van het certificaat bezit een privésleutel die geassocieerd is met de publieke sleutel in het certificaat. Omdat de kosten hoog zijn voor cryptografie gebaseerd op de publieke sleutel, gebruikt TLS Protocol een Session key. Deze wordt gebaseerd op de publieke sleutel en een willekeurig getal. Dit willekeurige getal wordt uitgewisseld in het eerste bericht van het protocol (Client hallo en Server hallo). In de vervolgcommunicatie wordt vervolgens de goedkopere, afgeleide Session key gebruikt.
[bewerken] TLS Record Protocol
Record Protocol is verantwoordelijk voor de fragmentatie en groeperen van gegevens die uit de bovenste lagen verzonden worden. De gegevens worden eerst gefragmenteerd en gecomprimeerd. Daarna zal een Message Authenticating Code (MAC) toegevoegd worden. Ten slotte wordt er nog een TLS record header geplaatst voor het ontvangen en herkennen van de gegevens.
[bewerken] TLS Handshake Protocol
Handshake Protocol maakt het mogelijk om vertrouwelijke informatie tussen client/server applicaties te versturen zodanig dat als een derde partij de informatie mocht onderscheppen deze niet leesbaar zal zijn.
[bewerken] TLS Change Cipher Protocol
Change Cipher Protocol is een zeer eenvoudig protocol. Het wordt gebruikt om onderbrekingen te verhinderen bij het opzetten van TLS sessie.
[bewerken] TLS Alert Protocol
Alert Protocol verstuurt alarm bij verbindingen tussen client/server applicaties. Er zijn 2 verschillende niveaus: Waarschuwing en fataal. Wanneer een fataal alarm wordt gesignaleerd, wordt de verbinding verbroken.
[bewerken] Geschiedenis
SSL werd in 1994 door Netscape ontwikkeld als een protocol dat blijvende en veilige transacties toeliet. In 1997 werd een Open Source versie van Netscape gecreëerd, die nu OpenSSL is. En in 1999 werd het bestaande protocol door een versie uitgebreid die nu als Transport Layer Security (TLS) bekend staat. Door overeenkomst, wordt de term "SSL" gebruikt zelfs wanneer technisch het protocol TLS wordt gebruikt.
[bewerken] Standaarden
De eerste definitie van TLS verscheen in RFC 2246: "The TLS Protocol Version 1.0". De huidige goedgekeurde versie is 1,1, wat in RFC 4346 wordt gespecificeerd: "The Transport Layer Security (TLS) Protocol Version 1.1".
- RFC 2712: "Addition of Kerberos Cipher Suites to Transport Layer Security (TLS)".
- RFC 2817: "Upgrading to TLS Within HTTP/1.1".
- RFC 2818: "HTTP Over TLS".
- RFC 3268: "AES Ciphersuites for TLS".
[bewerken] Externe links
- (en) SSL/TLS presentaties
- (en) The IETF TLS Workgroup
Bronnen, noten en/of referenties
|
| Internetprotocollen volgens het TCP/IP-model | ||||||||
|---|---|---|---|---|---|---|---|---|
|

