Cryptografie is voor de één gesneden koek maar voor andere iets vaags met sleutels. Wil je weten hoe het nu precies werkt met deze sleutels en de toepassingen, lees dan verder!

Cryptografie is een soort geheimschrift zodat de tekst/data onleesbaar wordt voor degene die niet beschikt over de code. Deze code noemen we het cryptografisch protocol. In een cryptografisch protocol wordt met behulp van een cryptografische methode aangegeven hoe bepaalde algoritmen dienen te worden gebruikt.

In dit eerste deel wil ik proberen wat duidelijkheid te scheppen in het gebruik van cryptografie. Cryptografie is een methode om data -opslag, -verwerking en -transport te beveiligen. Beveiligde communicatie gebruik je voor verschillende scenario’s.

Cryptografie scenario’s/methodes

Digitale data hebben diverse methodes om beveiligd te worden. Denk aan bijvoorbeeld rechten en opslag. Encryptie (ofwel codering of versleuteling) is een methode waarbij data gecodeerd wordt opgeslagen of verwerkt. Cryptografisch opgeslagen data zijn dus niet leesbaar voor iemand die niet beschikt over de juiste sleutels. Het decoderen van data wordt “decryptie” genoemd. Encryptie wordt vaak toegepast tijdens “data in transport” zoals b.v. het geval is bij veel internet-based/SaaS toepassingen. Encryptie kan ook toegepast worden op databestanden of het verwerken van data.

Cryptografie richt zich op vier verschillende scenario's:

  • Confidentiality/Vertrouwelijkheid:
    Vertrouwelijkheid zorgt ervoor dat alleen de beoogde ontvanger het bericht kan decoderen en de inhoud ervan kan lezen.
     
  • Non-repudiation/Onweerlegbaarheid:
    Betekent dat een persoon of een partij die verbonden is aan een contract of een communicatie, de authenticiteit van hun handtekening over hun document of het verzenden van een bericht niet kan ontkennen.
     
  • Integrity/Integriteit:
    Richt zich op het onderhouden zodat de informatie in de gegevens niet kan worden gewijzigd tijdens opslag, verwerking of verzending.
     
  • Authenticity/Authenciteit:
    Authenticiteit zorgt ervoor dat de afzender en ontvanger elkaars identiteit en de bestemming van het bericht kunnen verifiëren.

Encryptie/versleuteling

Encryptie is een methode om informatie onleesbaar (gecodeerd) te maken, zodat alleen goedgekeurde sleutelhouders de gegevens kunnen begrijpen. Encryptie past gegevens zo aan zodat het willekeurig lijkt. Encryptie vereist het gebruik van encryptiesleutels: een set wiskundige regels en waarden die zowel de zender als de ontvanger kennen. We maken hierbij onderscheid tussen verschillende toepassingen.

  • Asymmetrische sleutels:
    Asymmetrische versleuteling is de meest voorkomende manier bij o.a. websites. Bij deze manier van coderen wordt er gebruik gemaakt van een publieke sleutel (public key) en een privé sleutel (secret key). De secret key is alleen in het bezit van de eigenaar van de sleutels. De externe partij heeft/ontvangt de public key. Deze techniek zien we vaak bij certificaten (SSL/TLS) en VPN. Deze methode kan voor verschillende doeleinden worden gebruikt, zoals:

    Gebruik bij vertrouwelijkheid: Deze verzender codeert het bericht met de public key van de ontvanger. Het bericht kan alleen gedecodeerd worden met de private key van de ontvanger (het bericht is niet te decoderen met de public key). Hierdoor wordt gegarandeerd dat met de juiste partij een beveiligde vertrouwde verbinding wordt opgezet en/of de data kan inzien.

    Gebruik bij aantoonbaarheid: De verzender is als enige in het bezit van de private key en codeert het bericht hiermee. Het bericht is te openen met de public key van de verzender. Doordat de private key alleen in het bezit is van de verzender toont de zender aan dat er contact is met de juiste houder van het certificaat/document.
  • Symmetrische sleutels:
    Bij symmetrische versleuteling wordt gebruik gemaakt van een gelijk paar private sleutels. Beide partijen gebruiken dezelfde sleutel om de data te coderen en te decoderen. Symmetrische versleuteling zien we bij 1-op-1 communicatie en data (‘data at rest’) en is de makkelijkste manier van versleutelen.

    Voorwaarde is dat beide partijen de sleutels veilig bewaren. Wanneer een ander deze sleutel in handen krijgt, heeft beveiliging geen nut meer. Nadeel van deze versleuteling is dat bij gebruik van meerdere unieke verbindingen het aantal sleutels fors toeneemt. Wanneer elk individu van een groep van 10 verschillende personen met ieder ander lid van de groep wil communiceren met behulp van een sleutel-combinatie, dan zijn er conform de formule y=x*(x-1)/2, waarbij x het aantal deelnemers is en y het aantal benodigde sleutels. Je hebt dan dus 10*9/2 = 45 sleutels nodig. Zodra er drie of meer partijen in het geding zijn en steeds dezelfde sleutels gebruikt worden, kan men niet meer vaststellen wie de verzender geweest is van het bericht. Andere partijen hebben immers dezelfde verzendsleutel (die identiek is). Voor dergelijk gebruikt is asymmetrische cryptografie meer geschikt. Het voordeel van symmetrische versleuteling is dat deze manier van versleutelen veel sneller is en daarom vaak wordt toegepast op grote hoeveelheden data.
     
  • Digitale handtekening:
    Bij digitale handtekeningen wordt naast de asymmetrische versleuteling een hash gebruikt om de integriteit van de data te controleren (zodat deze onweerlegbaar is). Als aan het begin van het proces een hash gemaakt wordt en aan het einde van het proces wordt wederom een hash gemaakt dan kunnen deze hashes met elkaar worden vergeleken. Is de hash hetzelfde dan is de integriteit van deze data intact. Van de tekst wordt een hash berekend die vervolgens asymmetrisch wordt versleuteld met de privé sleutel. Met de publieke sleutel kan de ontvanger verifiëren dat
    a) het bericht afkomstig is van de zender
    b) controleren dat het bericht ongewijzigd is verzonden door de hash te vergelijken met een eigen hash.
    Gebruik: Integriteit van data, e-mail/gegevens, software-updates.
     
  • SSL/TLS:
    Wanneer we HTTPS gebruiken om met bijvoorbeeld een webserver te communiceren, gebruiken we asymmetrische- en symmetrische codering (hybride cryptografie). Voor de asymmetrische versleuteling hebben we een openbare sleutel en een privésleutel nodig. Omdat asymmetrische versleuteling veel trager is dan symmetrische, zal de communicatie na de sleuteluitwisseling symmetrisch verder gaan (zie afbeelding). De authenticiteit van de openbare sleutel is onbekend en dat is waar SSL/TLS-certificaten om de hoek komen.

    Een SSL/TLS-certificaat is een certificaat dat is ondertekend door een vertrouwde CA (Root CA), dit gecentraliseerde vertrouwensmodel noemen we de public key infrastructure (PKI). De CA gebruikt hun persoonlijke sleutel om het certificaat te ondertekenen, waaronder aan wie het certificaat is verleend, de validatieperiode en de openbare sleutel. Aangezien de openbare sleutel aan het certificaat is gekoppeld, bewijst deze de legitimiteit van de openbare sleutel, zodat deze kan worden gebruikt voor verdere veilige communicatie tussen de webserver en de client.
    Opbouw van beveiligde verbinding over SSL/TLS
  • VPN:
    Een virtueel privénetwerk (VPN) leidt je internetverkeer door een VPN-tunnel: een versleutelde verbinding tussen twee partijen. De VPN-tunnel versleutelt niet alleen de gegevens, maar verbergt ook je IP-adres en je locatie. Een VPN maakt gebruik van asymmetrische versleuteling om een symmetrische sleutel uit te wisselen voor de sessie. Het VPN-protocol is het raamwerk van gegevensoverdracht en -codering dat door de VPN-provider wordt gebruikt. De meeste VPN's bieden toegang tot verschillende protocollen, waaronder PPTP, L2TP/IPsec en OpenVPN.
     
  • Hashing:
    Hashes hebben weinig met encryptie te maken maar ze gaan wel vaak samen. Dit omdat ze vaak gebruikt worden in beveiligingssystemen. De hash-functie of ook wel ’digest’ genoemd, berekent van plaintekst data een unieke code (de hash). Hash-functies zijn onomkeerbare, eenrichtingsfuncties die de gegevens beschermen ten koste van het niet kunnen herstellen van het oorspronkelijke bericht. Hashing is een manier om een bepaalde string om te zetten in een string met een vaste lengte. Een goed hashing-algoritme produceert unieke outputs voor elke gegeven input. Een hash kan worden gebruikt voor het hashen van gegevens (zoals wachtwoorden), controleren van de integriteit en in certificaten. Hashing, asymmetrische- en symmetrische sleutels worden in deel 2 verder toegelicht.

Ben Willemsen