Veilig communiceren met OpenPGP
- October 3, 2014
- 0
Wanneer je een brief naar je tante stuurt, wil je niet dat deze onderweg door de postbode of anderen gelezen wordt. Daarom stop je hem in een envelop. Bij communicatie via het internet vergeten we dat vaak. E-mails, whatsappberichten en facebookchats gaan vaak gewoon leesbaar over de lijn. Het digitale equivalent van de envelop voor elektronische berichten is encryptie. Met encryptie zorg je ervoor dat je bericht onderweg niet door anderen te lezen is. In dit artikel gaan we in op de werking van OpenPGP programma’s, zoals GnuPG.
Encryptie is een wiskundige methode om data te versleutelen, waarbij een sleutel of wachtwoord nodig is om de versleutelde uitkomst terug te vertalen naar de oorspronkelijke data. Iemand zonder sleutel of wachtwoord, mag niet in staat zijn om de versleuteling te kraken, dan wel de oorspronkelijke data te reproduceren.
Bij sommige encryptie-methoden is dat makkelijker dan bij andere, we spreken dan ook van zwakke en sterke encryptie. Doordat de wiskunde steeds verder ontwikkelt en doordat computers steeds krachtiger worden, kan een encryptie-methode die tien jaar geleden sterk was, inmiddels zwak zijn geworden. Daarom worden steeds nieuwe encryptie-methoden ontwikkeld, waarbij de sterkte van de encryptie en de benodigde snelheid om een bericht te versleutelen of te ontsleutelen belangrijke parameters zijn.
PGP
Phil Zimmermann bracht in 1991 de eerste versie van Pretty Good Privacy (PGP) uit voor het beveiligen van communicatie via bulletin boards, de voorloper van het internet. Later postte hij PGP op het internet. In 1993 startte een justitieel onderzoek naar Phil Zimmermann wegens het exporteren van munitie. Dit kwam omdat in de VS encryptie met keylengtes van meer dan 40 bits als munitie beschouwd werden. Het heeft jaren geduurd voordat dit justitieel onderzoek werd afgesloten, zonder dat het ooit tot een aanklacht geleid heeft. PGP wisselde later nog verschillende keren van eigenaar.
GnuPG
Werner Koch besloot om een open source alternatief uit te brengen. Hij ontwikkelde Gnu Privacy Guard (GPG of GnuPG). Na enkele jaren doorontwikkelen, vond hij in 1999 GnuPG rijp genoeg om versie 1.0.0 uit te brengen. De Duitse overheid zag het belang van een Europees alternatief in en financierde de documentatie van GnuPG alsmede het importeren van GnuPG naar het Microsoft Windows platform.
Rond deze periode werd de OpenPGP-standaard aan de IETF voorgesteld. Het doel van de OpenPGP-standaard is om ervoor te zorgen dat de verschillende encryptietools met elkaar compatibel zijn, zodat gebruikers met verschillende applicaties toch veilig met elkaar kunnen communiceren. Het OpenPGP protocol is modulair opgebouwd, waarbij verschillende encryptie methoden naast elkaar gebruik kunnen worden. Hierdoor is het toekomst-vast. Wanneer een gebruikelijke encryptie-methode op een gegeven moment niet meer veilig blijkt te zijn, dan kunnen andere methoden worden opgenomen zonder dat hierdoor het protocol niet meer bruikbaar is.
Alice en Bob
OpenPGP biedt encryptie op basis van een public key infrastructuur (PKI). Het is traditie om dit uit te leggen aan de hand van twee gefingeerde gebruikers, Alice en Bob. Ook in dit artikel zullen wij deze traditie in ere houden.
Bij PKI werk je met een sleutel die uit twee delen bestaat, een publiek deel en een geheim deel. Voordat je met PGP aan de slag kunt, moet je eerst zo’n sleutel aanmaken. Alice en Bob doen dit allebei, dus Alice maakt op haar systeem haar eigen sleutel aan en Bob maakt eveneens een eigen sleutel aan. Ze hebben nu alle twee een publieke sleutel en een geheime sleutel.
Alice wil veilig een boodschap naar Bob sturen. Om dat te kunnen doen, heeft zij de publieke sleutel van Bob nodig. Bob kan met een gerust hart zijn publieke sleutel naar Alice sturen, het bekend zijn van de publieke sleutel doet niets af aan de veiligheid.
Alice versleutelt haar boodschap en gebruikt daarbij de publieke sleutel van Bob. De uitkomst is een versleutelde boodschap die alleen met het geheime deel van Bob’s sleutel te ontcijferen is. Alice kan dus zelf ook niet de versleutelde boodschap ontcijferen.
Bob ontvangt de versleutelde boodschap van Alice en gebruikt dan het geheime deel van zijn sleutel om de boodschap te ontcijferen. Hij heeft nu een kopie van de originele boodschap van Alice en kan daarmee doen wat hij wil. Dit is te vergelijken met onze brief die wij aan onze tante hebben verstuurd. Nadat onze tante de brief uit de envelop gehaald heeft, kan zij hem lezen en weggooien, op de schoorsteenmantel zetten of met een kopieerapparaat kopietjes maken. Zo kan Bob er ook voor kiezen om de boodschap van Alice voor zichzelf te houden of met anderen te delen.
Door haar boodschap met de publieke sleutel van Bob te versleutelen, heeft Alice de garantie dat Bob de enige is die hem kan ontcijferen. Maar daar stopt de controle die Alice over de boodschap heeft. Zodra Bob de boodschap ontcijfert heeft, heeft hij volledige controle over het ontcijferde bericht.
Digitale handtekening
OpenPGP wordt niet alleen gebruikt voor het vercijferen van berichten, maar ook voor het ondertekenen. Je gebruikt dan het geheime deel van je sleutel om een digitale handtekening te zetten. Anderen kunnen met behulp van je publieke sleutel vaststellen dat het getekende bericht ongewijzigd is en dat jij daadwerkelijk degene bent die het bericht getekend heeft. Bij e-mailberichten gebruik je deze digitale handtekening, zodat de ontvanger zeker weet dat jij de afzender bent. Daarnaast wordt dit mechanisme ook gebruikt om bijvoorbeeld de authenticiteit van broncode te waarborgen.
Key server
Je kunt alleen een bericht versleutelen wanneer je over de publieke sleutel van de ontvanger beschikt. Hiervoor zijn de key servers bedoeld. Een key server is een webdienst waar je jouw publieke sleutel naar toe kunt sturen en anderen kunnen deze sleutel vervolgens weer opvragen. De key servers vormen samen een wereldwijd netwerk. Dit betekent dat je jouw key maar naar één server hoeft te sturen. Na enige tijd is deze sleutel op alle servers op te vragen. Een bekende key server is pgp.mit.edu. In Nederland wordt pgp.surfnet.nl veel gebruikt.
Stel Alice ontvangt een bericht welke voorzien is van de digitale handtekening van Bob. Alice heeft de publieke sleutel van Bob en daarmee kan zij vaststellen dat de digitale handtekening inderdaad gezet is met behulp van de geheime sleutel van Bob. Maar weet zij nu ook zeker dat het bericht van Bob afkomstig is? Dat kan alleen als zij zeker weet dat de sleutel echt van Bob is en niet door iemand anders op Bob’s naam is aangemaakt. Hiervoor is een mechanisme in het leven geroepen waarmee je een mate van vertrouwen aan een sleutel kunt vastleggen. Elke sleutel heeft een zogenaamde fingerprint. Dit is een eenvoudig op te vragen unieke lange reeks hexadecimale tekens. Alice kan op haar systeem de fingerprint van Bob’s sleutel opvragen en dan bijvoorbeeld Bob opbellen en hem vragen de fingerprint van zijn key voor te lezen. Hiermee kan zij vaststellen dat het inderdaad de sleutel van Bob is. Zij kan nu aan de publieke sleutel van Bob aangeven dat zij volledig vertrouwd dat dit de sleutel van Bob is.
Keysign party
Wanneer zij vervolgens haar exemplaar van Bob’s publieke sleutel naar een key server upload, kunnen andere gebruikers zien dat Alice weet dat de sleutel inderdaad van Bob is. Ook andere kennissen van Bob kunnen dit doen. Dit mechanisme wordt key signen genoemd. Soms komt een grotere groep mensen bij elkaar die dan gezamenlijk elkaars identiteit en fingerprint vaststelt, waarna men elkaars key signed. Dit wordt een keysign party genoemd.
Web of trust
Stel Bob ontvangt een e-mail van Dirk. Bob kent Dirk niet en download Dirks key van een keyserver. Bob ziet dat de key van Dirk onder andere door Caroline getekend is. Bob kent Caroline niet, maar de key van Caroline is door Alice gesigned. Op deze manier kan Bob er redelijk zeker van zijn dat Dirk inderdaad Dirk is. Dit netwerk van mensen die elkaars key gesigned hebben, wordt het ‘web of trust’ genoemd.
We hebben in dit artikel de achtergrond van het gebruik van OpenPGP laten zien. In de volgende Linux Magazine gaan we aan de slag met GnuPG. We gaan onze eigen key genereren en we gaan dan aan de slag met het encrypten en signen van berichten.