Digitale certificaten
In veel van onze huidige communicatie maken we gebruik van moderne cryptografie, vaak dagelijks en vaak zonder erbij stil te staan. De meeste protocollen die we op het internet gebruiken stellen eerst op basis van asymmetrische cryptografie een encryptie-algoritme en een sleutel vast om vervolgens op basis van symmetrische cryptografie verder te communiceren.
Het internet is onbetrouwbaar
Het internet is een onbetrouwbaar netwerk. Hiermee bedoelen we dat er veel factoren zijn die we niet zelf in de hand hebben en er veel ongewenste dingen met ons dataverkeer kunnen gebeuren. Zo hebben we bij phising kunnen zien dat we niet honderd procent zeker kunnen weten dat we communiceren met de website waarmee we denken te communiceren, en ook weten we niet of ons verkeer door derden wordt afgeluisterd.
De oplossing: Digitale certificaten
Het werken met digitale certificaten biedt een oplossing voor meerdere problemen van het onbetrouwbare internet. Maar niet alleen op het internet worden digitale certificaten gebruikt, ook voor gevoelige interne communicatie op een netwerk kunnen we gebruikmaken van digitale certificaten.
Distributie publieke sleutel
Digitale certificaten bevatten in de eerste plaats iemands publieke sleutel. Wanneer we een publieke en private sleutel hebben, moeten we alleen nog de manier bepalen waarop we onze publieke sleutel aan de buitenwereld kenbaar kunnen maken. Dit doen we in de vorm van een digitaal certificaat. Door een digitaal certificaat op bijvoorbeeld de website te publiceren, kan de hele wereld over onze publieke sleutel beschikken en op basis van deze sleutel berichten versleutelen die vervolgens alleen voor de houder van de private sleutel leesbaar zijn.
Eenmaal in het bezit van de publieke sleutel, kan men een versleutelde verbinding opzetten. Op deze manier kan men zich ervan verzekeren dat wat men over het internet verstuurt door niemand anders te lezen is.
Het verspreiden van deze publieke sleutel/digitale certificaten kan op drie manier:
- zelf invoeren,
- door gebruik te maken van een Web of trust,
- door gebruik te maken van een publieke sleutel server, oftewel Certificate Authority.
In de eerste variant voeg je zelf de publieke sleutels toe van de mensen met wie je een beveiligde verbinding wilt opzetten. Het voordeel van deze variant is dat je controle hebt over wie je wel en niet toevoegt en over de juistheid van de gegevens. Dit kan echter zeer veel werk zijn. Wanneer je met veel mensen mailt, moet je van al deze mensen de publieke sleutels blijven bijhouden.
Trusted Third Party
Een andere mogelijkheid die het gebruik van digitale certificaten biedt, is dat digitale certificaten ondertekend kunnen worden door een Trusted Third Party. Een Trusted Third Party is een externe partij die iedereen vertrouwt. Het ondertekenen van een certificaat door een Trusted Third Party kan de identiteit van de houder van het certificaat bewijzen. Een voorbeeld is een rijbewijs dat ondertekend is door de gemeente waar een bestuurder woonachtig is. Voor een politieagent is de gemeente een instelling die hij vertrouwt, de Trusted Third Party, en omdat de gemeente dit certificaat ondertekend heeft wordt de identiteit van de houder als valide beschouwd. Hetzelfde concept is van toepassing op digitale certificaten.
Er zijn verschillende manieren om te werken met een Trusted Third Party, namelijk Web of trust en Public Key Infrastructure. Het grootste verschil tussen deze twee manieren is hoe ze de identiteit van een certificaathouder bepalen. Je zult zien dat de Public Key Infrastructure aanpak geavanceerder is. Blijkbaar wordt deze gebruikt wanneer er hogere eisen worden gesteld aan het vertrouwen dat de Trusted Third Party biedt. Beide manieren worden in de aankomende paragrafen behandeld.
Web of trust
De eerste, maar minder gebruikte, manier om met certificaten te werken is met behulp van een zogenaamd Web of trust. Deze manier om certificaten te distribueren en te vertrouwen is een uitbreiding op de eerdergenoemde manier waarbij je handmatig aangeeft wie je vertrouwt en handmatig de certificaten toevoegt. In het kort is een Web of trust een soort van mond-tot-mondreclame. Met andere woorden, wanneer Alice en Bob beiden aan mij vertellen dat Claire te vertrouwen is, dan moet ik dat wel geloven. Bij een Web of trust kan je een certificaat door meerdere mensen laten ondertekenen. Wanneer jij één van de mensen op het certificaat herkent en vertrouwt, kan je besluiten het certificaat te vertrouwen, in dat geval is die persoon de Trusted Third Party. Een Web of trust is dus letterlijk een netwerk van vertrouwen.
PGP
PGP staat voor Pretty Good Privacy en is een programma dat het mogelijk maakt om door middel van digitale certificaten:
- asymmetrische versleuteling te realiseren,
- de identiteit van de certificaathouder vast te stellen met behulp van de digitale handtekening.
Net als het Web of trust principe, is PGP een uitvinding van Philip Zimmerman die het programma in 1991 schreef. Dit gaf gebruikers de mogelijkheid om versleutelde data uit te wisselen. De eerste versie van PGP maakte nog gebruik van een symmetrische sleutel, huidige versies maken zoals gezegd gebruik van asymmetrische sleutels. De huidige PGP-versie is eigendom van een commercieel bedrijf (PGP Corporation) dat een aantal commerciële producten verkoopt voor het versleutelen van data.
Tijdens de vercommercialisering van PGP, is er een open source variant beschikbaar gebleven onder de naam OpenPGP. Dit algoritme kan gratis aangepast worden. Ook mag je zelf software schrijven dat gebruikmaakt van het OpenPGP-protocol. Om het OpenPGP-protocol te kunnen gebruiken, kan je onder andere gebruikmaken van GnuPG. GnuPG, vaak afgekort naar GPG, behoort tot de meest gebruikte software die OpenPGP toepast voor encryptie en het aanmaken van private en publieke sleutels.
PGP-certificaat
Het soort certificaat dat we in dit artikel zullen behandelen is het PGP-certificaat. Het PGP-certificaat wordt vaak gebruikt voor e-mail versleuteling of voor het ondertekenen van e-mails. Dit certificaat kan, in tegenstelling tot het X.509-certificaat, gezien worden als een publieke sleutel met een aantal eigenschappen. Hiermee bedoelen we dat bij het PGP-certificaat de publieke sleutel het belangrijkste item is op het certificaat. Een PGP-certificaat kan met een aantal velden gevuld worden en de belangrijkste velden op een PGP-certificaat zijn:
- PGP-versie,
- digitale handtekening van de eigenaar,
- geldigheidsduur van het certificaat,
- publieke sleutel van de eigenaar,
- algoritme van de publieke sleutel,
- naam van de eigenaar (websitenaam, servernaam, persoonsnaam, enzovoort),
- voorkeur algoritme van de publieke sleutel.
Key signing
Zoals eerder besproken kan bij een Web of trust iedereen de Trusted Third Party zijn. Dit gebeurt op basis van het ondertekenen van elkaars certificaat. Dit proces heet key signing of in gewoon Nederlands 'sleutel ondertekenen'. Een certificaat wordt ondertekend door een berekening uit te voeren op de private sleutel van de sleutelpaar eigenaar.
Wanneer je iemands PGP-certificaat toevoegt aan je eigen sleuteldatabase kun je besluiten iemands sleutel te ondertekenen. Het ondertekenen kan op een aantal niveaus:
- I don't know - Standaardinstelling. Autoriseer niemand.
- I do NOT trust - Geen vertrouwen. Autoriseer niemand.
- I trust marginally - Vertrouw de persoon, autoriseer niemand.
- I trust fully - Vertrouw de persoon, autoriseer zijn directe contacten.
- I trust ultimately - Vertrouw alles, is alleen bedoeld voor jezelf.
Het is dus bij een Web of trust mogelijk om per contactpersoon te selecteren of je die persoon gewoon of heel goed vertrouwt. Als je aangeeft dat je een persoon heel goed vertrouwt, dan vertrouw je automatisch ook zijn directe contactpersonen. Zo hoef je niet zelf alle mensen toe te voegen die hij al heeft toegevoegd en andersom. Je kunt per contactpersoon aangeven in welke mate je deze persoon vertrouwt.
Het ondertekenen van sleutels gebeurt in een Web of trust ook wel op zogenaamde key signing parties. Op deze parties neemt iedereen een identiteitsbewijs en zijn digitale certificaat mee. Hier controleert men elkaars identiteit in het echt om vervolgens digitaal, thuis, het certificaat van de ander te ondertekenen.