ROT13
Jeroen

Jeroen

SSL / TLS Cipher Suites…uitgelegd

Als je lang genoeg bezig bent met SSL/TLS certificaten en encryptie dan kom je vanzelf het woord “cipher” tegen. Los dat het een cool woord is, ciphers zijn een essentieel onderdeel van encryptie.

Wat zijn nou encryptie ciphers?

Ciphers zijn algoritmen, meer specifiek zijn ze een reeks stappen voor zowel het uitvoeren van encryptie (codering) als de bijbehorende decryptie (decoderen). Over de jaren heen zijn deze ciphers complexer geworden, maar het idee blijft hetzelfde. Zorgen dat berichten zodanig worden gecodeerd dat de beoogde partij het kan lezen en andere niet.

Als we specifiek spreken over SSL coderingen dan hebben we te maken met een tweetal algoritmes, symmetrisch en asymmetrisch.

  • Symmetrisch: Symmetrisch encryptie maakt gebruik van 1 enkele encryptie sleutel. Deze wordt gebruikt voor het versleutelen, maar ook voor het ontsleutelen van een bericht. Het algoritme van symmetrisch encryptie blijft altijd hetzelfde, maar bij elke andere dataset worden andere sleutels gebruikt. Tussen een browser en een server worden 2 sleutels uitgewisseld, maar deze sleutels kunnen hetzelfde, versleutelen en ontsleutelen. Nadat het SSL-certificaat is geverifieerd en de SSL-handshake is voltooid, wisselen de browser en server symmetrische “sessiesleutels” uit waarmee ze tijdens het bezoek veilig kunnen communiceren. Terwijl deze sessiesleutels in het spel zijn, maken ze gebruik van een symmetrisch cipher.
  • Asymmetrisch: met asymmetrische codering, hebt je het over verschillende sleutels met verschillende mogelijkheden. Er is een publieke sleutel en een privé sleutel. De ene sleutel versleutelt en andere ontsleuteld. Er zijn meerdere belangrijke zaken die onthouden moeten worden bij het gebruik van deze sleutels. Iets dat versleutelt is door de publieke sleutel kan alleen maar worden ontsleuteld door de bijpassende privé sleutel. Iets dat is versleuteld door de privé sleutel kan allen worden ontsleuteld door de bijpassende publieke sleutel. De privé sleutel moet altijd privé blijven en mag nooit gedeeld worden. De publieke sleutel kan vrij worden gedeeld en is beschikbaar voor het publiek.

Cryptografische protocollen

(Internet) Security is net een alfabetische soep -– SSL, TLS, ECC, SHA, en ga zo maar door. Voor de leek wordt het lastig bepalen wat je wanneer nou nodig hebt. Een veel gestelde vraag is…wat is het verschil tussen SSL en TLS?

TLS

SSL en TLS zijn beide cryptografische protocollen die verificatie en gegevensversleuteling verschaffen tussen servers, machines en applicaties die werken via een netwerk (bijvoorbeeld een cliënt die verbinding maakt met een webserver). SSL is de voorloper van TLS. In de loop der jaren zijn er nieuwe versies van de protocollen vrijgegeven om kwetsbaarheden aan te pakken. SSL is oorspronkelijk ontwikkeld door Netscape en kwam in 1995 voor het eerst op de markt met SSL 2.0 (1.0 werd nooit vrijgegeven voor het publiek). Versie 2.0 werd snel vervangen door SSL 3.0 in 1996 nadat een aantal kwetsbaarheden werden gevonden. Versies 2.0 en 3.0 worden soms geschreven als SSLv2 en SSLv3.

TLS werd in 1999 geïntroduceerd als een nieuwe versie van SSL en was gebaseerd op SSL 3.0

TLS is ontworpen om bovenop een transport protocol zoals TCP (Transport Layer Protocol te werken. TLS kan ook applicatie protocollen zoals RDP inpakken. Er bestaan 4 TLS specificaties, 1.0, 1.1, 1.2 en 1.3

  • TLS 1.0 is ontworpen in 1999 en was een upgrade voor SSL 3.0. Deze twee hebben zoveel verschillen dat ze niet samen werken.
  • TLS 1.1 is ontworpen in 2006 en heeft een paar kleine security verbeteringen.
  • TLS 1.2 is ontworpen in 2008 en heeft betere hash algoritmes zoals SHA-256 en geavanceerde mogelijkheden zoals Elliptical Curve Cryptografie (ECC).
  • TLS 1.3 is ontworpen in 2018 en lost security problemen op die in TLS 1.2 aanwezig zijn. TLS 1.2 is kwetsbaar geworden voor man in the middle-aanvallen (MitM), waarbij een malafide partij pakketjes die worden verzonden tussen cliënt en server opvangt, uitleest of bewerkt, en weer doorstuurt. Ook aanvallen als Logjam, FREAK, POODLE, SLOTH en DROWN zijn mogelijk door de ondersteuning van legacy-versleuteling.

TLS zelf is samengesteld uit twee lagen: TLS Record Protocol en de TLS Handshake Protocol.

  • TLS Record Protocol is verantwoordelijk voor het opdelen en het opnieuw samenvoegen van berichten in handelbare data blokken, comprimeren en decomprimeren van data blokken, toepassen van Message Authentication Code en encrypten en decrypten van berichten.
  • TLS Handshake is verantwoordelijk voor de onderhandeling welke cipher suite er wordt gebruikt, authenticatie van de server en optioneel de cliënt en de sleutel uitwisseling.

SSL

SSL is de voorloper van TLS en werkt vrijwel hetzelfde. Het grote verschil zit hem in de plaats waar de encryptie gebeurd. TLS encrypt het protocol, waar SSL de port encrypt. Bijvoorbeeld port 443 voor HTTPS.

SSL heeft 3 varianten: 1.0, 2.0, 3.0

  • SSL 1.0 is gemaakt door Netscape, maar heeft nooit het licht gezien door beveiligingsproblemen.
  • SSL 2.0 was ook heel snel vervangen, het heeft meerdere kwetsbaarheden. SSL 2.0 werd in 2011 verboden door RFC 6176.
  • In 2014 werd ontdekt dat deze kwetsbaar was voor de POODLE attack en werd verboden in 2015 bij RFC 7568

Wat is nou een Cipher Suite??

Een cipher suite is een combinatie van algoritmes die worden gebruikt voor de onderhandeling van security instellingen tijdens een SSL/TLS handshake (handdruk). Nadat de cliënt en server “Hello” berichten hebben uitgewisseld stuurt de cliënt een lijst met geprioriteerde, ondersteunde cipher suites. De server reageert dan terug met de cipher suite die is gekozen uit die lijst.

Simpel toch??

Cipher suites zijn een combinatie van diverse algoritmes. De algoritmes die deze combinatie maken zijn als volgt.

  • Key Exchange Algoritmes (RSA ,DHE, ECDH, ECDHE)
  • Authentication Algoritmes (RSA, DSA, ECDSA)
  • Bulk Encryption Algoritmes ook wel Block/stream ciphers (AES, 3DES, DES, RC4, Camellia). AES256 of hoger wordt als veilig beschouwd
  • Message Authentication Code algoritmes (SHA, MD5). SHA256 of hoger wordt als veilig beschouwd.

Een cipher suite bestaat uit 1 key exchange, 1 authentication, 1 bulk encryption, en 1 Message Authentication Code.

En typisch voorbeeld van een complete cipher suite is:

 

Laten we deze even uit elkaar halen:

  • TLS is het gebruikte protocol
  • ECDHE is de key exchange. Deze wordt gebruikt tijdens de handshake via Ephemeral Elliptic Curve Diffie Hellman (ECDHE)
  • ECDSA is het authenticatie algoritme. Elliptic Curve Digital Signature Algorithm.
  • AES_256_GCM is het bulk encryptie algoritme. Er wordt gebruik gemaakt van 256 bits AES werkzaam in GCM, Galois/Counter Mode.
  • SHA384 is het Message Authentication Code algoritmes. Ook wel het Hashing algoritme.

Wat is Forward Secrecy (FS) of Perfect Forward Secrecy (PFS)?

Perfect Forward Secrecy is een protocol dat, bij een gecompromitteerd sleutel, ervoor zorgt dat de voorgaande sleutels niet herleid kunnen worden. Hierdoor zijn de voorgaande berichten niet te ontsleutelen. Een hacker zou bijvoorbeeld een sleutel in handen kunnen krijgen, of een rechtbank eist dat een sleutel wordt afgestaan. Je zult begrijpen dat dit protocol aan te bevelen is. ECDHE en DHE geven Perfect Forward Secrecy.

Wordt forward secrecy gebruikt, dan gebruiken client en server hun eigen sleutels niet direct voor bulkversleuteling. In plaats daarvan wordt een tweede sleutel afgesproken, een tijdelijke (ephemeral) sleutel, die alleen voor die sessie geldt. Naderhand worden alle gebruikte waarden verwijderd. Uit de geheime sleutel van het certificaat valt de gebruikte tijdelijke sleutel niet af te leiden.

Overwegingen en aanbevelingen

Om de juiste Cipher suite te kiezen is een behoorlijke uitdaging, er zijn meerdere overwegingen om de juiste keuze te maken. Zoals de capaciteit van je server, encryptie en decryptie prestaties, cryptografische lengtes, type hashes. Welke kenmerken wil je gebruiken, Forward Secrecy, voorkomen van replay attacks. In sommige gevallen ben je verplicht, vanwege overheidsregels, om een sterkere encryptie te gebruiken.

Mijn aanbeveling zou zijn:

 

Mijn voorkeur zou liggen bij TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384.

  • GCM, encryptie en integriteit. (CBC doet alleen encryptie)
  • ECDHE, perfect Forward Secrecy
  • AES_256, een sterke encryptie
  • SHA384, een sterkte hashing algoritme

Deel deze post op:

Share on facebook
Share on google
Share on twitter
Share on linkedin
Share on pinterest

Blog Archief

Selecteer een maand

Zoek in het archief

Stel een vraag