Ius mentis Homepage | Categorieën | Lijst A-Z | Willekeurig artikel | Herpubliceren? | Over deze site | Blog | Contact
 

Beveiligde Internet-verbindingen

Wie op Internet iets wil bestellen bij een elektronische winkel, zal op een gegeven moment zijn persoonlijke adresgegevens en credit card nummer naar de Website van de winkelier moeten sturen. Een groot probleem hierbij is dat de verbindingen die worden gebruikt om deze gegevens bij de ontvanger te krijgen, niet veilig zijn.

De simpele reden hiervoor is dat het TCP/IP protocol geen enkele vorm van geheimhouding kent. De te versturen data wordt in stukjes opgedeeld en als pakketje naar de andere kant gestuurd, alwaar de stukjes weer in elkaar worden gezet. Elk pakketje wordt door een aantal computers ontvangen en doorgegeven. Dit betekent dat elke computer die de pakketjes doorgeeft, de inhoud ervan kan lezen.

Bij gebruik van een Ethernet-netwerk is het zelfs mogelijk om het verkeer van en naar andere computers op hetzelfde netwerk te bekijken. Met behulp van dit soort "sniffen" zijn bijvoorbeeld wachtwoorden zo te achterhalen. Ook World-Wide Web verkeer kan op deze manier onderschept en gelezen worden.

Inhoudsopgave

Versleutelde verbinding

Wie er zeker van wil zijn dat zijn gevoelige gegevens niet onderschept worden, moet gebruik maken van versleuteling. Er zijn hiervoor een aantal protocollen ontwikkeld, waarvan Secure Socket Layer (SSL) en Secure HTTP (S-HTTP) de bekendste twee zijn. Deze twee worden vooral gebruikt voor WWW-verkeer. Andere protocollen, zoals Secure Shell (SSH), zijn vooral in gebruik voor telnet-sessies.

Protocollen als SSL en S-HTTP maken gebruik van cryptografie om een beveiligde verbinding tot stand te brengen. De zender versleutelt de pakketjes voordat ze verstuurd worden, en de ontvanger ontcijfert deze dan weer na ontvangst. Wie nu tussen de verbinding afluistert, krijgt alleen nog de versleutelde pakketjes te zien, en zonder de bijbehorende sleutel is hieruit de oorspronkelijke informatie niet terug te krijgen.

Sleutelgrootte

Een sleutel voor een encryptie-algoritme is een groot getal, over het algemeen uitgedrukt in een aantal bits. Voor een sleutelgrootte van 40 bits zijn er 2 tot de macht 40, ofwel 1100 miljard, mogelijke sleutels.

De sterkte van een algoritme wordt meestal gerelateerd aan de grootte van de sleutels. Voor publieke-sleutelalgoritmen als RSA is 1024 bits voldoende, voor een geheime-sleutelalgoritme zoals IDEA is 128 bits al genoeg. Een aantal algoritmen heeft de mogelijkheid om verschillende sleutelgrootten te gebruiken. Het geheime-sleutelalgoritme RC4 kan bijvoorbeeld zowel 40 bits als 128 bits sleutels gebruiken.

Publiek en geheim

Een encryptie-algoritme kan gebruik maken van publieke of van geheime sleutels. Bij een geheime-sleutelsysteem spreken beide partijen een gezamenlijke sleutel af, die ze geheim houden voor alle anderen. Encryptie en decryptie gebeurt met dezelfde sleutel. Een publieke-sleutelsysteem gebruikt twee sleutels. De ene is publiekelijk beschikbaar en kan alleen worden gebruikt voor encryptie. De andere wordt door de ontvanger geheim gehouden en kan alleen worden gebruikt voor decryptie. Het is nu mogelijk om de publieke sleutel naar anderen te sturen zonder zorgen over onderschepping er van. De ontvanger is de enige die het bericht met zijn geheime sleutel kan ontcijferen.

Het grootste nadeel van publieke-sleutelsystemen is dat ze veel trager zijn en veel grotere sleutels nodig hebben dan geheime-sleutelsystemen. Om deze reden worden publieke-sleutelsystemen meestal alleen gebruikt om een geheime sleutel uit te wisselen over een onveilig kanaal. De zender verzint een willekeurig getal, versleutelt dit met de publieke sleutel van de ontvanger en stuurt het resultaat naar hem toe. De ontvanger kan met zijn geheime sleutel het getal achterhalen. Dit getal wordt nu gebruikt als geheime sleutel voor de rest van de sessie. Deze sleutel heet dan ook de "sessie-sleutel".

Secure Socket Layer

Het SSL protocol is erg flexibel. Er kunnen diverse encryptie-algoritmen worden gebruikt, en ook is er een mogelijkheid voor authenticatie, zodat een bezoeker de identiteit van de eigenaar van de Website kan verifieren. Alhoewel het voornamelijk wordt gebruikt voor verbindingen met Webservers, kan het in principe voor elke soort verbinding gebruikt worden.

Een SSL verbinding wordt gestart wanneer de client een verzoek stuurt naar de server. Hierin staan onder andere de algoritmen die de client ondersteunt. De server stuurt vervolgens een bevestiging terug met daarin het algoritme dat gebruikt gaat worden. Ook stuurt de server dan haar certificaat waarmee haar identiteit bekend is. Dit certificaat bevat onder andere de publieke sleutel van de server. De client kan deze dan gebruiken om een sessie-sleutel mee uit te wisselen.

S-HTTP

Een ander protocol, dat specifiek werd ontwikkeld voor gebruik op het WWW, is Secure HTTP (S-HTTP). SSL is meer algemeen, het kan in principe voor alle soorten verkeer gebruikt worden. S-HTTP werkt alleen met Webservers.

Ook bij S-HTTP wordt gebruik gemaakt van publieke-sleutelsystemen als RSA en Diffie-Hellmann om geheime sleutels uit te wisselen. Dit is echter niet verplicht; de client en de server kunnen ook een eerder afgesproken geheime sleutel gebruiken.

S-HTTP werkt ongeveer hetzelfde als SSL, wanneer er sprake is van communicatie met een Webserver. De client stuurt een verzoek naar de server, met daarin of een sessie-sleutel, versleuteld met de publieke sleutel van de server, of een aanwijzing over welke geheime sleutel gebruikt moet worden. Daarna kan de client pagina's ophalen door versleutelde verzoeken op te sturen. Deze pagina's worden dan ook weer versleuteld teruggestuurd.

Het voornaamste verschil tussen SSL en S-HTTP is dat bij SSL een veilige verbinding tot stand wordt gebracht, waarover dan pagina's worden opgehaald, en bij S-HTTP zijn de verzoeken en de antwoorden elk afzonderlijk versleuteld.

Waarom twee versies

Netscape en Internet Explorer zijn verkrijgbaar in twee versies, de "binnenlandse" en de "internationale" versie. Het verschil tussen beide versies is dat de binnenlandse versie sleutels van 128 bits gebruikt voor de versleuteling via SSL en de internationale versie 40 bits.

De reden voor dit verschil is politiek. Beide browsers worden gemaakt door Amerikaanse bedrijven. De Amerikaanse wet reguleert de export van programma's die berichten kunnen versleutelen. Een eis voor een exportvergunning is dat de inhoud van de berichten te achterhalen moet zijn. Dit wordt meestal bereikt door de gebruikte geheime sleutel slechts 40 bits lang te maken.

Deze lengte zou praktisch onbreekbaar moeten zijn voor iedereen behalve zeer rijke overheidsinstellingen, zoals de Amerikaanse NSA. Hierdoor zou de internationale versie veilig genoeg zijn voor normaal gebruik, en zou de NSA in staat zijn om in geval van nood de inhoud van een bericht te achterhalen.

De praktijk bleek echter anders. Een Franse student slaagde er in augustus 1995 in om een 40-bits sleutel te achterhalen door acht dagen lang 120 UNIX computers te laten zoeken. Meer recentelijk zijn er een aantal competities geweest om 40-bits RC4 te kraken, deze bleken in staat om nog sneller de sleutels te achterhalen.

Hiermee is wel aangetoond dat 40 bits niet voldoende zijn om een bericht te beveiligen. Helaas is het voor niet-Amerikanen niet toegestaan om de 128-bits versie te downloaden vanaf een officiele download site. Er zijn wel enkele sites met illegaal geexporteerde versies van deze browsers. Ook is er een legale mogelijkheid om een internationale versie van Netscape aan te passen zodat deze ook 128-bits versleuteling kan gebruiken.

Een beveiligde WWW-sessie in de praktijk

Stel, een gebruiker komt bij een Website waar hij een artikel wil bestellen, of zijn adresgegevens moet invullen om een folder of aanbieding toegestuurd te krijgen. Om te zorgen dat deze gegevens niet in handen van derden vallen, zal het formulier waar hij dit in moet vullen via een beveiligde verbinding moeten worden verstuurd. Dit wordt bewerkstelligd in zes stappen.

STAP 1

De gebruiker vult het formulier in en drukt op "Verzenden." De browser ziet in de HTML-broncode dat het formulier via een beveiligde verbinding moet worden verstuurd. Hij meldt bij de server dat hij in staat is om met SSL zo'n verbinding op te zetten.

STAP 2

De server reageert door zijn publieke sleutel en een certificaat met zijn identiteit op te sturen. Hiermee kan de browser verifieren dat de publieke sleutel echt is en behoort bij de echte server.

STAP 3

De browser verzint nu een willekeurig getal, de zogeheten sessiesleutel. Hij versleutelt dit getal nu met de publieke sleutel van de server en stuurt het resultaat naar de server.

STAP 4

De server ontvangt het versleutelde bericht en gebruikt zijn eigen geheime sleutel om de sessiesleutel te voorschijn te halen. Als dit gelukt is, stuurt de server een bevestiging naar de browser.

STAP 5

De browser versleutelt alle informatie uit het formulier met de sessiesleutel en stuurt het resultaat naar de server.

STAP 6

De server gebruikt de sessiesleutel om de informatie te ontsleutelen en kan nu de informatie zoals gebruikelijk verwerken.

Stappen 5 en 6 kunnen nu zo vaak worden herhaald als nodig is om veilig gegevens uit te wisselen. Bij een volgend bezoek aan de site worden stappen 3 en 4 herhaald om weer een andere sessiesleutel af te spreken.

Gerelateerde artikelen

Gespecialiseerd advies nodig?

Heeft u na het lezen van dit artikel nog vragen, of zit u met een juridisch probleem waar u advies over wilt? Neem dan contact op met ICT-jurist Arnoud Engelfriet, auteur van dit artikel.

© Arnoud Engelfriet. Dit werk mag vrij worden verspreid en gepubliceerd zoals bepaald in de licentievoorwaarden.

Laatste wijziging:
6 november 2018