Hoe perfect forward secrecy jouw communicatie veilig houdt
- 16 februari 2017
Je hoort de laatste tijd steeds vaker over perfect forward secrecy. Dat is begrijpelijk, want het is een belangrijk wapen tegen massasurveillance. Gelukkig wordt deze manier van versleutelen door steeds meer websites ondersteund en gebruikt door chat-apps zoals Signal. Hoe werkt perfect forward secrecy eigenlijk en waarom is het zo belangrijk?
Encryptie zonder perfect forward secrecy
Als twee computers versleuteld met elkaar gegevens willen uitwisselen, hebben ze een encryptiesleutel nodig. De verzender gebruikt de encryptiesleutel om data te versleutelen en verstuurt die dan naar de ontvanger. De ontvanger gebruikt vervolgens dezelfde encryptiesleutel om die data weer te ontsleutelen.
Als je een website via een beveiligde HTTPS-verbinding bezoekt, wordt de communicatie tussen je browser en de webserver op dezelfde manier versleuteld. Je browser genereert een encryptiesleutel, die vervolgens door je browser en de webserver gebruikt worden.
De vraag is nu: hoe kan je browser die encryptiesleutel op een veilige manier naar de webserver sturen, zonder dat derden die encryptiesleutel bij het versturen kunnen onderscheppen?
Om dat op te lossen beschikt de webserver over een publieke sleutel én een geheime sleutel. Met de publieke sleutel kun je data versleutelen, maar niet ontsleutelen. Dat kan alleen met de geheime sleutel, en die heeft alleen de webserver in zijn bezit. Het idee is dat iedereen de publieke sleutel kan gebruiken om versleutelde data naar de webserver te sturen. Alleen de webserver kan die versleutelde data met zijn geheime sleutel weer ontsleutelen. Op deze manier wordt de encryptiesleutel van de browser naar de webserver gestuurd.
Kortom, als je browser dus een beveiligde website opvraagt, gebeurt er ongeveer het volgende.
1. De browser genereert een encryptiesleutel.
2. De browser vraagt de webserver om zijn publieke sleutel.
3. De browser versleutelt de encryptiesleutel met de publieke sleutel van de webserver en stuurt het resultaat naar de webserver.
4. De webserver gebruikt zijn geheime sleutel om de ontvangen encryptiesleutel weer te ontsleutelen.
5. Nu beschikken de browser en de webserver allebei over de encryptiesleutel en kunnen ze op een beveiligde manier data uitwisselen.
De geheime sleutel van de webserver wordt dus gebruikt om de verstuurde encryptiesleutel te ontsleutelen. Daarom is het essentieel dat die geheime sleutel ook echt geheim blijft. Als derden de geheime sleutel van de webserver kunnen bemachtigen, dan kunnen ze daarmee de encryptiesleutel ook in handen krijgen, en vervolgens met die encryptiesleutel alle beveiligde communicatie tussen browser en webserver afluisteren.
Gevaren voor de geheime sleutel
Er zijn verschillende manieren waarop een derde partij de geheime sleutel van een webserver in handen kan krijgen. Ten eerste kunnen ze natuurlijk proberen de webserver te hacken. Als dat lukt, hebben ze ook toegang tot de geheime sleutel.
Daarnaast is het ook mogelijk dat de webserver software gebruikt waar een kwetsbaarheid in zit en waardoor die geheime sleutel per ongeluk uitlekt. Dit is precies wat er gebeurd is bij het beruchte Heartbleed-lek uit 2014.
Tot slot kan de beheerder van de webserver gedwongen worden om de geheime sleutel aan een geheime dienst of een opsporingsdienst af te staan. Dit overkwam de e-maildienst Lavabit. Nadat bekend werd dat Edward Snowden gebruik maakte van Lavabit, vorderde de FBI de geheime sleutel van Lavabit.
Het is daarom voor geheime diensten interessant om ook versleuteld netwerkverkeer op te slaan, zelfs als ze dat op het moment zelf nog niet kunnen ontcijferen. Als ze namelijk in de toekomst de geheime sleutel van een webserver in handen krijgen, kunnen ze met terugwerkende kracht alle opgeslagen data ontsleutelen die in het verleden van of naar die webserver is gestuurd.
Laten we een voorbeeld nemen. Stel, een geheime dienst is geïnteresseerd in een of ander online forum. Dat forum maakt gebruik van een HTTPS-verbinding. Geduldig slaat de dienst alle versleutelde communicatie met dat forum op – dag na dag, jaar na jaar. Op een dag krijgen ze de geheime sleutel van het forum in handen. Nu kunnen ze eenvoudig al die opgeslagen data ontsleutelen en inzien wat er al die jaren op dat forum is gezegd, en door wie.
Het nut van perfect forward secrecy
Dit probleem – het met terugwerkende kracht ontsleutelen van al die data – is nou precies het probleem dat perfect forward secrecy (PFS) oplost. Met PFS wordt het namelijk mogelijk dat de browser en de webserver allebei dezelfde encryptiesleutel gebruiken zonder dat die encryptiesleutel van de één naar de ander verstuurd moet worden. Er is dan ook geen noodzaak meer om de encryptiesleutel te versturen. En daardoor is het niet meer mogelijk om die encryptiesleutel te achterhalen als de geheime sleutel van de server is buitgemaakt.
Toch moeten de browser en de webserver op één of andere manier dezelfde encryptiesleutel gaan gebruiken. Hoe werkt dat bij PFS? Dat gaat op een vernuftige wiskundige manier die de Diffie-Hellman key exchange heet.
Het komt er kort gezegd op neer dat de browser en de webserver ieder een geheim getal kiezen. Daarnaast kiezen ze samen een derde getal, dat niet geheim hoeft te blijven. De browser voert nu een berekening uit op zijn eigen geheime getal en het gedeelde derde getal. Dat resultaat stuurt hij naar de webserver. Vervolgens kan de webserver met behulp van zijn geheime getal uit dat resultaat een encryptiesleutel afleiden.
Andersom gebeurt hetzelfde: de webserver voert ook een berekening uit op zijn geheime getal en het gedeelde derde getal, en stuurt het resultaat van die berekening naar de browser. Met behulp van zijn geheime getal kan de browser nu ook dezelfde encryptiesleutel afleiden.
Als de de browser en de webserver de encryptiesleutel eenmaal berekend hebben, gooien ze ieder hun geheime getal weg. En als ze klaar zijn met het uitwisselen van data, gooien ze de encryptiesleutel ook weg. Daarna is het voor een derde partij vrijwel onmogelijk de encryptiesleutel nog te achterhalen – en kan de versleutelde communicatie niet meer ontsleuteld worden, ook niet in de toekomst.
Bovendien wordt bij PFS de encryptiesleutel heel vaak vernieuwd, bijvoorbeeld iedere keer dat je een webpagina opvraagt. Mocht een encryptiesleutel dan toch een keer in verkeerde handen vallen, dan wordt er maar heel weinig informatie prijsgegeven.
Bij Signal wordt PFS gebruikt om ieder bericht met een nieuwe encryptiesleutel te versleutelen. Omdat de encryptiesleutel direct na het versturen en ontvangen van een bericht wordt weggegooid, is het voor een derde partij heel moeilijk die encryptiesleutel nog te achterhalen. En als dat dan toch lukt, is de schade beperkt, omdat die encryptiesleutel maar voor één bericht is gebruikt.
Wil je weten hoe je weten hoe je je privacy en vrijheid op je je computer of telefoon beter kunt beschermen? Ga dan naar de Internetvrijheid Toolbox. Zijn er andere beveiligingstermen die je uitgelegd zou willen zien? Laat het ons hieronder weten.