veilig communiceren over een onveilig netwerk: Public Key Infrastructure (PKI)

Communiceren via email is technisch mogelijk, maar de digitale wereld is in een fase beland die voorheen alleen maar in enge futurische verhalen beschreven werd. Email verzenden is daardoor onveiliger geworden, dan het versturen van open briefkaarten via de post.
Elke conversatie via email wordt op meerdere plaatsen onderschept, bewaard en direct of later geanaliseerd, afhankelijk van de prioriteit. Automatische netwerk-systemen zijn hier 24/7 uur per dag mee bezig. Ze zijn ontwikkeld door de 100.000den cyberattack-specialisten van diverse geheime diensten.
Het zogenaamde 'Veilig email verkeer' ( https:// ), dat emaildiensten sinds 2013 aanbieden zou een verbetering zijn, mits de versleuteling betrouwbaar is, en de opgeslagen data veilig en discreet bewaard wordt. We weten dat aan deze beide voorwaarden niet wordt voldaan. Dit is allang geen science fiction meer.

Om het veiligheids aspect van email te kunnen beoordelen en desgewenst te verbeteren, is enige kennis van versleutelen en signeren vereist.
Ik  zal ik hieronder uitleggen hoe asymetrische versleuteling (Public Key Infrastructure - PKI) werkt. Deze uitleg is met opzet eenvoudig gehouden.

Ik ga er van uit, dat de ontvanger de data moet kunnen ontsleutelen, die de verzender versleuteld heeft. Vaak is de ontvanger de eigenaar van een internet dienst, bijvoorbeeld een Email dienst , maar het kan ook de mail-ontvanger zelf zijn. Dat laatste noem ik Peer-to-Peer (P2P) versleuteling
 
Veilig data verkeer is gebaseerd op twee vertrouwens criteria:

  1. Er is maar EEN sleutel voor het openen van de data, en die is in goede handen. (gesigneerd)
  2. Zonder digitale sleutel is de data niet te openen, ook niet met de snelste supercomputers (goede versleuteling)


Ad.1 De eigenaar van de internet dienst (e-mail, website, forum, e-bank,...) heeft de sleutel waarmee hij de data kan openen (ontsleutelen, decrypten).
Zo'n sleutel zou eenvoudig gekopieerd kunnen worden, het zijn slechts een paar duizend eentjes en nulletjes (bits).
Daarom mag niemand die sleutel zien - deze 'Prive sleutel' (privat key) wordt nooit uit handen gegeven. Maar koe kan de toegezonden data dan versleuteld worden?

- voor versleuteling krijgen de internet gebruikers een andere sleutel, de publiek sleutel (public key)
Daarmee kan de data gesloten worden, zodanig dat de ontvanger deze met zijn prive key kan openen.
Omdat sluiten en openen met verschillende sleutels gebeurt, noemen we dit 'asymetrisch versleuteling'

De publieke sleutel wordt over het netwerk naar de verzender gezonden, die daarmee alle data pakketjes kan coderen (vesleutelen).

Om zeker te zijn, dat het de goede publieke sleutel is, en niet die van een cyber-dief,  is de publieke sleutel dubbel gesigneerd: door de private-key houder en door een authoriteit die de private-key houder certificieert. De publieke sleutel wordt daarom ook wel "certifikaat" genoemd.

 

Een vergelijkbaar beeld: Hoe kun je een dure nieuwe fiets veilig toegezonden krijgen, als je de bezorger niet vertrouwt:

- Je stuurt een open beugelslot naar de fietsenwinkel. Die zet daarmee je nieuwe fiets op slot en laat hem door de bezorger voor je deur zetten.
Maar hoe kan de verzender zeker weten dat het toegezonden slot van jou is, indien hij de bezorger ervan niet vertrouwt: 

- Je zet je handtekening op dat slot, en laat een autoriteit bevestigen, dat het echt jouw slot met jouw handtekening is.

- Jij ontvangt de fiets veilig over een onveilig transport netwerk, en kunt hem met jouw fiets-sleutel open maken.

In de onderstaande uitleg is de public key (certificate) te vergelijken met het open beugelslot. De private key (secret key) is te vergelijken met de fiets-sleutel. Signeren is te vergelijken met de handtekening en de bevestiging.

 

De digitale sleutels: private key (secret key) en public key (certificate)

Op internet gebruiken we een code als sleutel: een uniek blok getallen, waarmee data versleuteld kan worden.
Voor asymetrische versleuteling zijn er twee zulke code blokken nodig, die bij elkaar het sleutel-paar (key-pair) vormen; een public key (vgl beugelslot) en een private key (vgl fietssleutel).
De sleutel-eigenaar signeert de public key, met de sleutel waarmee hij de data kan openen (De prive-sleutel,  private key). Hij is de enige die dat kan, want heeft als enige die private key.door een standaard programma (algoritme) uniek
Hij heeft deze public key ook laten signeren door een CA (Certificate Authority), die  daarmee bevestigt dat de sleutel-eigenaar werkelijk de eigenaar van de internet dienst is.
Opm: Een internet dienst identificieert zich met een domein naam, zoals: google.com, live.nl, hotmail.com.   De eigenaar van zo'n domain naam kan beschouwd worden als de eigenaar van de internet dienst, zo simpel is dat.

De gesigneerde public key noemen we een certifikaat.

  •  Hij is door de ontvanger getekend, dat kan helaas iedereen zijn, in de signatuur zet hij de naam van het domein (vroeger ook: Land, Stad, Provicie, Organisatie en Afdeling, maar dat werd niet gecontroleerd)
  •  Hij is door een authoriteit getekend, die gecontroleerd heeft of de ontvanger daadwerkelijk de eigenaar is van de 'domein naam'

Deze controle is zeer eenvoudig, en kan in principe door iedereen uitgevoerd worden. Maar je moet degeen die het uitvoert kunndoor een standaard programma (algoritme) unieken vertrouwen.

  • Het certifikaat met de public key wordt via internet naar de klant gestuurt, die daarmee de data kan versleutelen.
    Indien deit certifikaat als 'betrouwbaar ' herkend wordt, zal de software van de klant (browser, mailprogramma) de public key erin gebruiken voor de versleuteling. Zo niet, dan zal deze software een waarschuwing geven en aanraden niet verder te gaan.

En hoe gaat dat in een commerciele wereld: De bedrijven als microsoft, apple en google, die sofware maken,  kunnen in hun software een aantal signaturen van CA's  (Certificate Authorities) bakken. Dat vragen ze erg veel geld voor.
Als een CA genoeg geld betaald heeft, zal zijn signatuur in alle software (windows, mac, firefox, opera, google-chromium) gebakken zijn, en worden de door hen gesigneerde certifikaten op elke computer, laptop, tablet of smartphone automatisch als 'betrouwbaar' herkend. Op certificaten die zij niet gesigneerd hebben, laten ze hun software product reageren met een dreigende waarschuwing. Angst is exploiteerbaar. Hoe dreigender, hoe meer geld ze kunnen vragen voor het inbakken van de signalement (root certificate)
Een CA die geen geld betaalt, kan net zo betrouwbaar zijn, maar zijn signatuur zit nog niet in de software. Gelukkig kan die signatuur nog toegevoegd worden. Dat is voor de webgebruiker helemaal niet moeilijk.
Maar omdat intenet beveiliging voor veel mensen erg onbekend en mystiek is, is er veel onzekerheid en daardoor angst om een signatuur toe te voegen.

Ad.2 Verzonden data wordt 'digitaal gesloten' (versleuteld, encrypted) met de public key in het certifikaat van de ontvanger.  Die is niet altijd onbreekbaar.
De publieke sleutel van bijvoorbeeld Gmail bestaat slechts uit slechts 1024 bits (128 karakters), dat is minimaal. Betere publieke sleutels zijn ingewikkelder, bijvoorbeeld 2048 bits (256 karakters)
De data wordt na ontvangst geopend met de andere sleutel, de private key. Daarna is deze data leesbaar en wordt opgeslagen voor verder gebruik.

Overwegingen t.a.v.  Certificate Authorities (CA's)

Een CA van de elite die aan software fabrikanten veel geld kunnen geven, vertrouwen we blindelings, omdat de software geen waarschuwing geeft. Ook al zijn de private keys van de meest bekende daarvan in verkeerde handen geraakt, en kan the-man-in-the-middle de data daarmee openen.
De certifikaten die niet door de certifikate-elite, maar bijvoorbeeld door CaCert gesigneerd worden, zullen we als onbetrouwbaar beschouwen, omdat we een akelige waarschuwing krijgen, met het advies om niet verder te gaan.
Terwijl CaCert toch erg zijn best doet om vervalsing en bedriegerij tegen te gaan:
Alle eigenaren van CaCert certificaten zijn deelnemer aan de organisatie en alle deelnemers controleren elkaar grondig.
CaCert doet een dubbele check om te controleren of een deelnemer inderdaad eigenaar is van zijn domein (en dus van de internet dienst).
Elk van deze checks is op zich al erg betrouwbaar.

Internet gebruikers kunnen de certifikaten van zo'n CA zonder waarschuwing gebruiken, nadat ze het root- en het intermediate-certifikaat van CaCert zelf in de software plaatsen, naast de standaard root-certifikaten van de elite.
CaCert heeft eenvoudige install-wizards gemaakt op hun website cacert.org.
Eenmaal klikken op de link "Root Certificate (PEM Format)" en daarna op "Intermediate Certificate (PEM Format)" is voor de meeste software voldoende. Voor een paar specifieke windows toepassingen staat bovenaan deze pagina de link "Windows installer package"