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

Hier tekenen alstublieft - digitale handtekeningen en CA's

E-mail is een van de onveiligste manieren om digitaal te communiceren. Het is echter namelijk bijzonder eenvoudig om e-mail te versturen onder andermans naam, of zelfs volledig anoniem. Wanneer een ontvanger dit niet in de gaten heeft, kan dit erg vervelende problemen veroorzaken. Bij normale post bestaat dit probleem veel minder, zolang de afzender maar zijn handtekening onder de brief zet. Voor e-mail bestaat er een analoog systeem: de digitale handtekening.

Het is niet voldoende om bijvoorbeeld een ingescand plaatje van iemands handtekening mee te sturen. Dit plaatje kan zo worden gekopieerd en onder elk ander bericht gezet worden. Een digitale handtekening moet dus uniek worden gekoppeld aan het bericht waar het bij hoort, zodat hij niet te kopieren is.

Inhoudsopgave

Encryptie

Voor deze koppeling wordt gebruik gemaakt van publieke-sleutel cryptografie, bijvoorbeeld het RSA-algoritme (Engelstalig). Hierbij heeft elke partij twee sleutels, een publieke en een geheime. Wat met de publieke sleutel wordt versleuteld, kan alleen worden ontsleuteld met de geheime sleutel, en andersom. De publieke sleutel is openbaar, zoals de naam al aangeeft. De geheime sleutel moet de gebruiker strikt geheim houden.

Bij normale encryptie gebruikt iemand die een bericht wil versturen de publieke sleutel van de ontvanger om het bericht mee te versleutelen. Deze kan dan zijn geheime sleutel gebruiken om het bericht te ontsleutelen en te lezen. Beide partijen kunnen er nu zeker van zijn dat meeluisterende derden het bericht niet te pakken kunnen krijgen.

Voor het zetten van een digitale handtekening wordt het systeem andersom gebruikt. De plaatser versleutelt het bericht met zijn geheime sleutel, en iedereen die zijn publieke sleutel opvraagt, kan het bericht ontsleutelen. Omdat er maar ��n persoon in het bezit van die geheime sleutel is, weten alle ontvangers dat alleen hij dit bericht versleuteld kon hebben.

In de praktijk wordt overigens het bericht zelf niet versleuteld, maar wordt er een ``hash waarde'' van het bericht berekend en wordt deze waarde versleuteld en meegestuurd. Een hash waarde is een (meestal 128 bits lange) string die uniek is voor het bericht waar hij bij hoort. Twee verschillende berichten hebben altijd een verschillende hash waarde. Aangezien het veel sneller is om 128 bits te versleutelen dan een bericht van mogelijk enkele megabytes, scheelt dit veel tijd. De ontvanger berekent dan de hash waarde van het bericht dat hij ontvangt en vergelijkt dit met de hash waarde die versleuteld werd meegestuurd. Als deze twee gelijk zijn, weet hij dat het bericht dat hij heeft ontvangen, hetzelfde is als het bericht dat de zender verstuurd heeft. De handtekening is dan dus juist.

Certificaten en identiteiten

Het grote probleem bij dit systeem is dat de ontvanger wel kan nagaan dat de handtekening echt gezet is met een bepaalde geheime sleutel, maar hij weet nog steeds niet welke persoon deze handtekening gezet heeft. Hiervoor moet hij zeker weten welke naam hoort bij de publieke sleutel die hij gebruikt. Als de zender en de ontvanger elkaar kennen, kunnnen ze even bij elkaar langsgaan en publieke sleutels uitwisselen. Bij grotere systemen, en zeker bij het wereldwijde Internet, is dit niet langer praktisch. Meestal kennen twee e-mailende mensen elkaar helemaal niet in het echt, en voor bedrijven is het al helemaal een zeldzaamheid dat zij hun klanten kunnen bezoeken om hun identiteit te verifieren.

Dit geeft nu wel een vervelend probleem. Het is immers altijd mogelijk dat iemand een publieke sleutel verspreidt met de naam van een ander er op, waardoor een derde misleid wordt en denkt dat het bericht van die persoon afkomstig is. Als hij hierdoor een contract of betaalopdracht accepteert, kan dat bijzonder pijnlijke consequenties hebben.

Om dit probleem op te lossen, wordt meestal gebruik gemaakt van zogeheten certificaten. Dit zijn publieke sleutels met de naam van de eigenaar er van er bij, voorzien van de digitale handtekening van de persoon of instantie die dit heeft geverifieerd. Zo'n persoon of instantie heet een Certificerende Autoriteit (CA). Mensen die een certificaat willen hebben, moeten zich dan bij de CA identificeren en hun publieke sleutel afgeven. Deze controleert dan of de aanvrager echt is wie hij zegt dat hij is, en geeft een certificaat af als alles in orde is. De CA maakt de certificaten ook beschikbaar via een _directory server_, zodat iedereen ze kan opvragen om een handtekening mee te verifieren. Deze directory server gebruikt vrijwel altijd de internationale standaard X.500, zodat een programma nu alleen maar X.500 hoeft te kunnen ``spreken'' om bij elke CA ter wereld een certificaat op te vragen.

Certificaatklassen

Voordat een CA een certificaat afgeeft, moet de eigenaar er van zich eerst identificeren. De procedure hiervoor kan varieren van een e-mailtje sturen, tot persoonlijk langskomen bij de CA met paspoort of rijbewijs. Deze verschillende soorten identificatie geven het bijbehorende certificaat verschillende betrouwbaarheidsniveau's. Een certificaat dat is afgegeven op basis van een e-mailtje is minder betrouwbaar dan een certificaat dat is afgegeven nadat de aanvrager persoonlijk is langsgekomen. Beide certificaten kunnen echter hun nut hebben. Vandaar dat de meeste CA's verschillende klassen hanteren. Een ontvanger kan dan aan de klasse (die in het certificaat vermeld staat) zien om wat voor certificaat het gaat en hoe betrouwbaar dat is. Hij kan dan zelf inschatten of dat voldoende is voor de aktiviteit waarbij hij het certificaat nodig heeft.

De Nederlandse CA NLsign kent bijvoorbeeld twee klassen voor gebruikers. Klasse 1 certificaten worden verstrekt nadat de aanvrager een e-mailtje stuurt. Dit certificaat garandeert dus hoogstens dat het vermelde e-mail adres werkt, maar niet of het echt is van de persoon wiens naam er bij staat. Een klasse 2 certificaat vereist een kopie van een geldig legitimatiebewijs. Dit biedt dus al weer iets meer zekerheid. Daarnaast heeft NLsign ook nog een klasse 3 certificaat, met nog uitgebreidere controles. Dit certificaat wordt gebruikt voor beheerders van Websites, zodat gebruikers van die site zeker kunnen zijn van de identiteit van de instantie met wie zij communiceren.

Samenwerking tussen CA's

Iemand die een bericht krijgt met een digitale handtekening, kan bij zijn CA het bijbehorende certificaat opvragen en hiermee de handtekening controleren. Als alles klopt, weet hij nu dat deze handtekening is gezet door de persoon wiens naam in het certificaat staat. Natuurlijk moet hij dan wel controleren dat het certificaat echt van de CA is, en niet bijvoorbeeld door een hacker in de directory server is gezet. Dit doet hij door de digitale handtekening van de CA op het certificaat te controleren met de publieke sleutel van de CA. Als deze klopt, is het certificaat echt.

Hij moet er natuurlijk ook zeker van zijn dat hij de echte publieke sleutel van zijn CA heeft. Deze staat meestal op diens Website, en diegenen die dat niet vertrouwen, kunnen altijd even bellen of langsgaan voor een kopietje. Maar als het certificaat van een andere CA komt, is dit een stuk moeilijker. Hij weet misschien niet eens hoe betrouwbaar die andere CA is, en langsgaan om hun sleutel op te halen is nogal onpraktisch. Vandaar dat CA's vaak elkaar _cross-certificeren_. Dit wil zeggen dat CA's certificaten uitgeven voor elkaars sleutels, zodat hun gebruikers weten wat de echte sleutels van die andere CA's zijn.

De ontvanger kan nu met behulp van dat certificaat controleren dat hij de echte sleutel heeft van die andere CA, en met die sleutel weer het certificaat van de zender controleren op echtheid. Daarmee controleert hij dan weer het bericht, en als dat allemaal klopt, is het bericht echt. De zaak wordt nog gecompliceerder als de twee CA's elkaar niet ge-cross-certificeerd hebben, maar wel allebei dezelfde derde CA. De ontvanger controleert dan:

  1. dat de sleutel van zijn eigen CA echt is,
  2. dat het certificaat voor de sleutel van CA B echt is, met behulp van de sleutel van zijn eigen CA,
  3. dat het certificaat voor de sleutel van CA C echt is, met behulp van de sleutel van CA B,
  4. dat het certificaat van de zender echt is, met behulp van de sleutel van CA C, en
  5. dat het bericht echt van de zender afkomstig is, met behulp van diens sleutel.

Dit proces kan natuurlijk oneindig vaak herhaald worden, maar hoe meer CA's er tussen zender en ontvanger zitten, hoe onbetrouwbaarder alles wordt. In dit voorbeeld moet de ontvanger er al van uit gaan dat CA C net zo ``netjes'' is bij het certificeren van zijn eigen gebruikers als zijn eigen CA, terwijl hij daar eigenlijk niets over kan zeggen.

Conclusie

Digitale handtekeningen worden nu al op kleine schaal gebruikt bij bijvoorbeeld gesigneerde ActiveX controls, of bij sommige Websites. In de toekomst zullen er veel meer toepassingen komen voor digitale handtekeningen, bijvoorbeeld om elektronische contracten af te sluiten of bestellingen te bevestigen. De wiskundige techniek is veilig genoeg. Alles hangt af van de manier waarop Certificerende Autoriteiten zullen gaan opereren, en of er voldoende vertrouwen ontstaat in die CA's zodat de hierboven beschreven scenario's ook echt werkelijkheid kunnen worden.

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