Wat is versleuteling en hoe werkt het?
Tegenwoordig wordt versleuteling zelfs voor de eenvoudigste apps gebruikt. Het is enorm eenvoudig om je online gegevens te hacken en versleuteling en andere soorten cryptografie zijn de beste hulpmiddelen om je informatie te beschermen.
De meeste toepassingen en programma's maken van een bepaalde soort versleuteling gebruik. De beste VPN's gebruiken AES met 256-bits sleutels en 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, maken ook van een bepaalde soort versleuteling gebruik.
Maar hoewel we cryptografie in ons dagelijks leven gebruiken, weten de meeste mensen niet hoe het werkt.
Om je te helpen om te begrijpen hoe cryptografie werkt, gaan we een praktisch voorbeeld bekijken.
Het probleem met open kanalen
Stel je een standaard online chatroom voor waar gebruikers via berichten met elkaar kunnen communiceren. Hoe zouden we dan een beveiligde chatroom met versleutelde berichten kunnen bouwen?
Om te beginnen moeten we een eenvoudig TCP-gebaseerd communicatiekanaal implementeren. Omdat er geen beveiliging is, is elk bericht dat gebruikers verzenden kwetsbaar voor aanvallen.
Dus wanneer Alice en Bob elkaar berichten sturen, kunnen aanvallers hier eenvoudig tussen komen en de berichten bekijken. Dit staat bekend als een Man in the Middle-aanval. Hackers kunnen de berichten ook wijzigen en via een andere weg versturen.
Dit is mogelijk omdat het standaard communicatiekanaal de berichten in leesbare tekst verzendt. Dit werkt op dezelfde manier als alle HTTP-communicatie die via openbare wifi-netwerken plaatsvindt. 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 naar een versleuteld bericht converteert. Dezelfde sleutel wordt door de ontvanger gebruikt om de ciphertext weer in leesbare tekst om te zetten. Laten we dit op onze applicatie toepassen.
Wanneer Alice een bericht naar Bob wil sturen, versleutelt ze het bericht met een symmetrische sleutel. Wanneer Bob het bericht ontvangt, gebruikt hij dezelfde sleutel om het bericht te ontsleutelen. Zonder deze sleutel hebben aanvallers geen toegang tot de versleutelde communicatie tussen de twee gebruikers waardoor hun gesprek vertrouwelijk blijft.
Meestal wordt er iedere sessie een symmetrische sleutel aangemaakt en deze is niet voor latere communicatie geldig. We noemen dit een sessiesleutel.
Maar deze manier kent een aantal tekortkomingen:
- Schaalbaarheid: Onze oplossing is niet schaalbaar. Als 1.000 gebruikers met elkaar willen communiceren, zouden alle gebruikers 999 verschillende sleutels nodig hebben om een beveiligd kanaal te creëren.
- Sleutelverdeling: We zijn ervan uitgegaan dat beide partijen toegang tot de symmetrische sleutel hebben. Maar hoe hebben ze deze sleutel in de eerste plaats gekregen? Als Alice een symmetrische sleutel (sessiesleutel) aanmaakt en deze naar Bob stuurt, kan de aanvaller deze onderscheppen en eventuele verdere communicatie ontsleutelen.
Dus wat is de volgende stap?
Asymmetrische versleuteling
Asymmetrische versleuteling maakt gebruik van twee sleutels: een privésleutel en een publieke sleutel. Wanneer de leesbare tekst met een publieke sleutel is versleuteld, kan dit alleen met de bijbehorende privésleutel worden ontsleuteld. Voor het omgekeerde proces geldt hetzelfde.
Hierdoor kunnen we het probleem van de twee symmetrische sleutels oplossen. Asymmetrische versleuteling is langzamer dan symmetrische versleuteling. Daarom worden ze meestal tegelijk gebruikt. Laten we kijken hoe dat wordt gedaan:
Elke gebruiker heeft een publieke en een privésleutel. De publieke sleutel is voor iedereen beschikbaar en voor iedereen bekend, maar de privésleutel is vertrouwelijk en wordt door de eigenaar beschermd.
Als Alice een bericht naar Bob wil sturen, maakt ze eerst een symmetrische sessiesleutel aan. Vervolgens versleutelt ze het bericht met de publieke sleutel van Bob. Omdat Bob de bijbehorende privésleutel heeft, kan alleen hij het bericht ontsleutelen en de sessiesleutel ophalen.
Vanaf dat moment kan die sessiesleutel worden gebruikt om de berichten tussen deze twee personen te versleutelen en te ontsleutelen. Hiermee wordt het probleem van de sleutelverdeling opgelost zonder dat dit ten koste van de snelheid gaat. De langzamere asymmetrische versleuteling wordt namelijk alleen voor de eerste "handshake" gebruikt.
We hebben ook het probleem van de schaalbaarheid opgelost omdat iedereen slechts één paar publieke sleutels en één paar privésleutels nodig heeft om met elkaar te kunnen communiceren.
Het systeem is nu aanzienlijk verbeterd, maar het is nog steeds niet volledig beveiligd. We hebben nog steeds problemen met:
- Authenticatie: We gebruiken de publieke sleutel van Bob als uitgangspunt, maar hoe hebben we die sleutel gekregen? De publieke sleutel die we als eerste hebben ontvangen, kan van Bob afkomstig zijn. Maar deze kan ook afkomstig zijn van een aanvaller die de sleutel heeft nagemaakt. Dus hoewel we veilig communiceren, is het met de verkeerde persoon.
- Gegevensintegriteit: het bericht kan tijdens de overdracht van gegevens worden gewijzigd. We moeten er zeker van zijn dat er niet met de gegevens is geknoeid.
Certificaten en digitale handtekeningen
Voor authenticatie is een vertrouwd systeem vereist. Een vertrouwde certificaatautoriteit (CA) zorgt ervoor dat een publieke sleutel van een specifiek persoon is. Alle gebruikers van het systeem registreren een digitaal certificaat bij de certificaatautoriteit (CA). Dit bevat informatie over de identiteit van de eigenaar en een publieke sleutel.
Dus als Alice met Bob wil communiceren, kan ze bij de CA nagaan of de publieke sleutel die ze heeft inderdaad bij Bob hoort. Dit werkt op dezelfde manier HTTPS voor internet werkt. Eén basiscertificaat is aan verschillende subcertificaten met digitale handtekeningen (zoals hieronder beschreven) gekoppeld.
Maar hoe kunnen we weten dat het ontvangen certificaat van de certificaatautoriteit en niet van de aanvaller afkomstig is? In de meeste gevallen zijn de basiscertificaten van een vertrouwde CA versleuteld en in de browser geïmplementeerd. Hierdoor weten we dat we dit certificaat te vertrouwen is.
Het probleem van gegevensintegriteit kan met behulp van digitale handtekeningen (niet te verwarren met digitale certificaten) worden opgelost.
Als Alice een bericht naar Bob wil sturen, maakt ze eerst een sessiesleutel aan en versleutelt ze deze door de publieke sleutel van Bob te gebruiken. Laten we dit datapakket DEEL1 noemen. Vervolgens maakt ze met behulp van een van de vele beschikbare hash-algoritmen (MD5/SHA256) een bericht-hash aan. Een bericht-hash is een conversie in één richting van een byte met een variabele lengte naar een byte met een vaste lengte.
Je kunt het oorspronkelijke bericht niet met behulp van de hash-waarde verkrijgen en het is statistisch onwaarschijnlijk dat twee berichten dezelfde hash-waarde hebben.
Nadat Alice de hash heeft aangemaakt, versleutelt ze deze met haar persoonlijke sleutel. Dit wordt een digitale handtekening genoemd, omdat het kan worden gebruikt om te controleren of het bericht van Alice afkomstig is en dus niet is gemanipuleerd.
De digitale handtekening en het originele bericht worden vervolgens met de sessiesleutel versleuteld. Laten we dit DEEL2 noemen. Dit is wat we nu hebben:
DEEL1 = BOBS_PUBLIEKE_SLEUTEL -> (SESSIE_SLEUTEL)
DEEL2 = SESSIE_SLEUTEL -> (BERICHT + DIGITALE_HANDTEKENING)
Alice stuurt zowel DEEL1 als DEEL2 naar Bob. Omdat hij eigenaar van de privésleutel is, kan alleen Bob DEEL 1 ontsleutelen en toegang tot de SESSIE_SLEUTEL krijgen.
Vervolgens gebruikt hij deze sessiesleutel om DEEL2 te ontsleutelen en het bericht en de digitale handtekening op te halen. Daarna gebruikt hij de publieke sleutel van Alice om de digitale handtekening te ontsleutelen en de bericht-hash op te halen. Bob berekent de BERICHT-hash en vergelijkt deze met de hash van de eerdere stap.
Als beide hashes overeenkomen, betekent dit dat de gegevensintegriteit is behouden en er niet met de gegevens is geknoeid.
Zoals je kunt zien hebben we nu een volledig veilig systeem gecreëerd.
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 om dit in de praktijk te ervaren.
Voel je vrij om een reactie te geven over hoe dit artikel kan worden verbeterd. Jouw feedback is waardevol!