Wat is versleuteling en hoe werkt het?

Tegenwoordig wordt versleuteling zelfs voor de meest eenvoudigste apps gebruikt. Voor hackers is het niet moeilijk om online je gegevens te hacken. Daarom zijn versleuteling en andere soorten cryptografie de beste hulpmiddelen die er beschikbaar zijn om je gegevens te beschermen.

De meeste applicaties en programma’s maken gebruik van een bepaald soort versleuteling. De beste VPN’s gebruiken AES met 256-bits sleutels. Dit is een van de redenen waarom VPN’s de beste manier zijn om je online activiteiten te beveiligen.

Andere populaire apps, zoals WhatsApp en Gmail, gebruiken ook een bepaald soort versleuteling.

Maar hoewel we in ons dagelijks leven vaak cryptografie gebruiken, weten de meesten van ons niet hoe het werkt.

Om je te helpen om te begrijpen hoe cryptografie werkt, zullen we een praktisch voorbeeld bekijken.

Het probleem met open kanalen

Stel je een standaard online chatroom voor waar gebruikers via tekstberichten met elkaar kunnen communiceren. Op welke manier zouden we een beveiligde chatroom met versleutelde berichten kunnen ontwikkelen?

Het eerste wat we implementeren is een eenvoudig TCP-gebaseerd communicatiekanaal. Omdat er geen beveiliging is, kan elk bericht dat gebruikers verzenden mogelijk worden aangevallen.

Dus wanneer Els en Bob elkaar tekstberichten sturen, kunnen aanvallers er eenvoudig tussen komen om hun berichten te bekijken. Dit staat bekend als een man-in-the-middle-aanval. Hackers kunnen de berichten ook aanpassen en omleiden.

Dit is mogelijk omdat het standaard communicatiekanaal de berichten in leesbare tekst doorstuurt. Hetzelfde gebeurt bij alle HTTP-communicatie die via open wifi-netwerken wordt verzonden. Het is duidelijk dat we een beter systeem nodig hebben.

Symmetrische versleuteling

Symmetrische versleuteling maakt gebruik van een algoritme dat het oorspronkelijke leesbare bericht met behulp van een coderingssleutel in een versleuteld bericht omzet. Dezelfde sleutel wordt door de ontvanger gebruikt om de versleutelde tekst weer in leesbare tekst om te zetten. Nu gaan we dit ook binnen onze applicatie toepassen.

Wanneer Els een bericht naar Bob wil sturen, codeert ze het bericht met een symmetrische sleutel. Als Bob het bericht ontvangt, gebruikt hij dezelfde sleutel om het bericht te ontsleutelen. Zolang aanvallers deze sleutel niet hebben, kunnen ze geen toegang tot de versleutelde communicatie tussen de twee gebruikers krijgen en blijven de berichten vertrouwelijk.

Meestal wordt per sessie een symmetrische sleutel aangemaakt. Deze sleutel is ongeldig voor communicatie die op een later moment plaatsvindt. Dit noemen we een sessiesleutel.

Maar bij deze aanpak zijn er wel een aantal tekortkomingen:

  1. Schaalbaarheid: onze oplossing is niet schaalbaar. Als 1.000 gebruikers met elkaar willen communiceren, zou elke gebruiker 999 verschillende sleutels nodig hebben om een beveiligd communicatiekanaal te creëren.
  2. Sleutelverdeling: We zijn ervan uitgegaan dat beide partijen toegang tot de symmetrische sleutel hebben, maar hoe krijgen ze toegang tot deze sleutel? Als Els een symmetrische sleutel (sessiesleutel) aanmaakt en deze naar Bob stuurt, kan de aanvaller deze onderscheppen en de verdere communicatie ontsleutelen.

Dus wat is de volgende stap?

Asymmetrische versleuteling

Bij asymmetrische versleuteling worden er twee sleutels gebruikt: een privésleutel en een publieke sleutel. Wanneer de leesbare tekst met een openbare sleutel is gecodeerd, kan deze tekst alleen met de bijbehorende privésleutel worden ontgrendeld. Voor het omgekeerde proces geldt hetzelfde.

Dit helpt ons om het probleem met de twee symmetrische sleutels te omzeilen. Asymmetrische versleuteling is langzamer dan symmetrische versleuteling, daarom worden ze meestal tegelijkertijd gebruikt. Laten we bekijken hoe dat wordt gedaan:

Elke gebruiker heeft een publiek en een privé sleutelpaar. De publieke sleutel is voor iedereen beschikbaar en bij iedereen bekend, maar de privésleutel is vertrouwelijk en wordt door de eigenaar beschermd.

Wanneer Els een bericht naar Bob wil sturen, maakt ze eerst een symmetrische sessiesleutel aan. Vervolgens versleutelt ze het bericht met de openbare sleutel van Bob. Aangezien Bob de bijbehorende privésleutel bezit, is hij de enige die het bericht kan ontsleutelen en de sessiesleutel kan ophalen.

Vanaf dat moment kan die sessiesleutel worden gebruikt om berichten tussen de twee gesprekspartners te versleutelen en te ontsleutelen. Hiermee wordt het probleem van de distributie van de sleutel opgelost zonder dat dit invloed op de snelheid heeft. Dit komt omdat de langzamere asymmetrische versleuteling alleen voor de eerste handshake wordt gebruikt.

We hebben ook het probleem van de schaalbaarheid opgelost omdat iedere gesprekspartner slechts één publiek en een privé sleutelpaar nodig heeft om met elkaar te kunnen communiceren.

Op dit moment is het systeem aanzienlijk verbeterd, maar het is nog steeds niet volledig beveiligd. We hebben nog steeds problemen met:

  1. Authenticatie: We gebruiken de publieke sleutel van Bob als beginpunt, maar hoe hebben we die sleutel gekregen? De publieke sleutel die we als eerste hebben ontvangen, kan van Bob zijn maar de sleutel kan ook afkomstig zijn van een aanvaller of van iemand die zich als Bob voordoet. Dus hoewel we veilig communiceren, vindt deze communicatie met de verkeerde persoon plaats.
  2. Gegevensintegriteit: het bericht kan tijdens de overdracht van de gegevens worden gewijzigd. We willen zeker weten dat er niet met de gegevens is geknoeid.

Certificaten en digitale handtekeningen

Voor authenticatie is een vertrouwd systeem nodig. Een certificaatautoriteit (CA) zorgt ervoor dat een openbare sleutel aan een specifieke persoon toebehoort. Iedere systeemgebruiker registreert een digitaal certificaat bij de certificaatautoriteit (CA). Dit certificaat bevat de identiteitsgegevens van de eigenaar en een publieke sleutel.

Dus wanneer Els met Bob wil communiceren, kan ze bij de CA controleren of de publieke sleutel die ze heeft ontvangen inderdaad bij Bob hoort. Dit is ook de manier waarop HTTPS op internet werkt. Eén basiscertificaat is gekoppeld aan verschillende andere certificaten met digitale handtekeningen (dit wordt hieronder beschreven).

Dus hoe weten we dat het ontvangen certificaat van de basis certificaatautoriteit en niet van de aanvaller afkomstig is? Meestal zijn de basiscertificaten van een vertrouwde CA in de code van de browser vastgelegd, waardoor we een vertrouwde basis hebben.

Het probleem van gegevensintegriteit kan met behulp van digitale handtekeningen worden opgelost (niet te verwarren met digitale certificaten).

Wanneer Els een bericht naar Bob wil sturen, maakt ze eerst een sessiesleutel aan en versleutelt ze deze met de publieke sleutel van Bob. Laten we dit datapakket DEEL1 noemen. Vervolgens creëert ze een bericht-hash met behulp van een van de vele beschikbare hash-algoritmen (MD5/SHA256). Een bericht-hash is een eenrichtingsconversie van een byte met een variabele lengte naar een byte met een vaste lengte.

Je kunt het oorspronkelijke bericht niet van de hash-waarde ontvangen en het is statistisch onwaarschijnlijk dat twee berichten dezelfde hash-waarde hebben.

Als de hash is aangemaakt, codeert Els deze met haar persoonlijke sleutel. Dit wordt een digitale handtekening genoemd omdat het kan worden gebruikt om te controleren of het bericht afkomstig is van Els en niet is gemanipuleerd.

De digitale handtekening en het originele bericht worden vervolgens met de sessiesleutel gecodeerd. Laten we dit een DEEL2 noemen. Dit is wat we nu hebben:

DEEL1 = BOBS_PUBLIEKE_SLEUTEL -> (SESSIESLEUTEL)

DEEL2 = SESSIESLEUTEL -> (BERICHT + DIGITALE_HANDTEKENING)

Els stuurt zowel DEEL1 als DEEL2 naar Bob. Omdat hij de eigenaar van de privésleutel is, kan alleen Bob DEEL1 ontsleutelen en toegang tot de SESSIESLEUTEL krijgen.

Vervolgens gebruikt hij deze sessiesleutel om DEEL2 te ontsleutelen en het bericht en de digitale handtekening op te halen. Vervolgens gebruikt hij de publieke sleutel van Els om de digitale handtekening te versleutelen en de bericht-hash op te halen. Bob berekent de BERICHT-hash en vergelijkt deze met die uit de eerdere stap.

Als de beide hashes overeenkomen, betekent dit dat de gegevensintegriteit is behouden en er niet mee is geknoeid.

Zoals je ziet hebben we nu een volledig veilig ecosysteem gebouwd.

Met behulp van certificaten en digitale handtekeningen kunnen we een versleuteld authenticatiesysteem maken dat snel, veilig, vertrouwelijk en schaalbaar is.

Nu je weet hoe versleuteling werkt, kun je onze favoriete VPN’s bekijken zodat je versleuteling in actie kunt zien.

Was dit nuttig? Deel het!
Deel op Facebook
0
Tweet dit
0
Deel als u denkt dat Google niet genoeg over u weet
0