Dutch House of Representatives passes dragnet surveillance bill

Hoe perfect forward secrecy jouw communicatie veilig houdt

Veilig e-mailen met behulp van Edward

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.

  1. Jaap

    Interessant en verhelderend stuk! Bedankt hiervoor

  2. Rob van der Putten

    Je kan natuurlijk ook dagelijk je keys vervangen.

    • MathFox

      Een ander probleem dat met public key encryption opgelost wordt is authenticatie: Hoe weet je zeker dat je met de persoon communiceert waarmee je wil communiceren? Daarvoor is het juist heel handig dat de privé-sleutels redelijk stabiel zijn, want iemand kan zich met zijn privé-sleutel identificeren.

  3. Rik

    Ik sluit me bij de opmerking van Jaap aan!

  4. Klaas Vraag

    Is dit dan ook een goede vervanger/opvolger voor het de te ingewikkelde en kwetsbare pgp oplossing voor emailverkeer?

    • Tim van der Molen

      Het is inderdaad zo dat PGP geen PFS heeft, en dat Signal veel eenvoudiger in gebruik is dan PGP. In zeker opzicht zou je dus kunnen zeggen dat Signal een goede vervanging is voor PGP. In ander opzicht niet: e-mail is nog steeds een veelgebruikt medium en als je veilig wilt e-mailen, is PGP eigenlijk je enige optie.

  5. Fank

    Wanneer kunnen we de eerste browsers verwachten die PFS ondersteunen? En de eerste web-servers?

    • Tim van der Molen

      Die zijn er al! Alle moderne browsers ondersteunen PFS. Daarnaast zijn er redelijk veel websites die PFS ondersteunen, en dat aantal groeit gestaag. Je kunt op https://www.ssllabs.com/ssltest/ zelf checken of een website PFS ondersteunt (zoek in de uitgebreide testresultaten op “forward secrecy”).

Laat een reactie achter op Fank Reactie annuleren

Het e-mailadres wordt niet gepubliceerd.

Help mee en steun ons

Door mijn bijdrage ondersteun ik Bits of Freedom, dat kan maandelijks of eenmalig.