# Perfect forward secrecy

(Perfect) forward secrecy (of PFS) is in de cryptografie een eigenschap die ervoor zorgt dat in het geval een bepaalde sleutel uit een communicatiekanaal gecompromitteerd wordt, dat hiermee hooguit de sleutel voor een sessie wordt gecompromitteerd. Uit de gecompromitteerde sleutel kunnen niet de sleutels afgeleid worden die in voorgaande sessies zijn gebruikt. Hierdoor zijn de voorgaande berichten ook niet af te leiden. Doordat sessies kort duren en er een beperkte hoeveelheid informatie wordt gecommuniceerd wordt hiermee de impact van een gecompromitteerde sleutel aanzienlijk verlaagd.
Een sleutel zou bijvoorbeeld gecompromitteerd kunnen worden door een kwetsbaarheid in een implementatie (Heartbleed), een algoritme of sleutelwaarde welke op een moment in de toekomst niet meer veilig is, een rechter die beveelt een sleutel af te staan of doordat een aanvaller in de computer inbreekt.
Met PFS wordt voorkomen dat wanneer de versleutelde sessies in een communicatiekanaal door een aanvaller zijn opgeslagen deze op een later moment, nadat de aanvaller beschikking heeft gekregen over de sleutel, alsnog de sessies kan ontsleutelen en de informatie kan lezen.

## Geschiedenis

PFS werd als eerste geïntroduceerd door Diffie, Van Oorschot en Wiener , en werd gebruikt om een eigenschap van het Station-to-Station protocol (STS) te beschrijven, waarbij de langetermijngeheimen private keys zijn.
PFS is ook gebruikt om de analoge eigenschap van wachtwoord geauthentiseerde sleutel overeenkomst protocollen te beschrijven, waarbij het langetermijngeheim een gedeeld wachtwoord is.
Annex D.5.1 van IEEE 1363-2000 bediscussieert de aan elkaar gerelateerde eenpartij- en tweepartijen-forwardsecrecy-eigenschappen van diverse standaardsleutelovereenkomstschema's.

## Forward secrecy van een session key

Alice en Bob zijn met elkaar de session key $k$ overeengekomen. Nu willen ze graag forward secrecy over de door hen verstuurde berichten. Ze kiezen ervoor om voor het eerste bericht sleutel k te gebruiken, voor het 2$^e$ bericht $h(k)$, voor het n$^e$ bericht $h^{n}(k)$. $h$ is een hash-functie die aan de volgende eisen voldoet:
One-wayness: Indien $k$ uit te rekenen is uit een gegeven $h(k)$, is het hele systeem onveilig. Alle voorgaande sleutels kunnen dan gewoon uitgerekend worden.
Collision resistance: Je wilt dat er telkens weer unieke nieuwe sleutels uit de hash-functie komen, indien $h^{x}(k)=h^{x+n}(k)$ blijft de reeks sleutels zich steeds herhalen, je kan dan met $h^{x+n+k}(k)$ behalve bericht $x+n+k$ ook $x+k$ ontsleutelen.
Op deze manier zal de hash-functie telkens een nieuwe sleutel opleveren, vanuit een nieuwe sleutel is de oude niet te berekenen.
Daarnaast is het van belang dat ze de oude sleutel verwijderen, indien ze deze bewaren, kan een persoon die inbreekt op de computer, nog steeds alle sleutels verkrijgen.

## Protocollen
### Transport Layer Security

Bij Transport Layer Security (TLS) zonder PFS is de sessiesleutel, waarmee de communicatie wordt versleuteld, af te leiden uit de privésleutel van de server (die hoort bij het X.509 certificaat). Hiermee ontstaat het risico dat een aanvaller, die de door TLS versleutelde sessies heeft weten te onderscheppen en heeft bewaard en ook de private sleutel heeft weten te bemachtigen, met terugwerkende kracht alsnog de sessies kan ontsleutelen en de informatie kan lezen. Bij informatie die over langere tijd heen vertrouwelijk moet blijven is dit een dreiging. Dit wordt opgelost door middel van forward secrecy in het TLS protocol.
Reeds vanaf SSLv3, de voorloper van TLS, kan er gekozen worden voor forward secrecy, maar in het verleden weigerden veel implementaties om forward secrecy te verschaffen of ze verschaften het enkel met een zeer lage encryptie.
In TLS versie 1.2 is forward secrecy in combinatie met sterke encryptie nog optioneel maar is er al wel een brede ondersteuning. Vanaf TLS versie 1.3 wordt forward secrecy zelfs afgedwongen. In TLS 1.3 wordt het Diffie Hellman protocol gebruikt om de sessie sleutel te bepalen.
Deze sessie sleutel wordt ook wel een "ephemeral key" genoemd; een "vluchtige" sleutel, dit in tegenstelling tot de "statische" privésleutel die gebruikt wordt voor het certificaat waarmee de identiteit van de server wordt aangetoond tijdens de handshake fase van TLS.

### Signal

Het Signal Protocol, dat gebruikt wordt door de gelijknamige messaging app, gebruikt het Double Ratchet algoritme om forward secrecy te bieden.

### IPsec

IPsec heeft PFS als optie, deze maakt gebruik van het OAKLEY sleuteluitwisselingsprotocol (RFC 2412), wat op zijn beurt weer gebruikmaakt van het Diffie-Hellman-sleuteluitwisselingsprotocol.

### SSH

SSH maakt gebruik van Diffie-Hellman sleutel uitwisselingen die voor PFS zorgen. SSH-sessies die resulteren uit een Diffie-Hellman sleutel uitwisseling (RFC 4253) zijn dus veilig, ook als een private key later wordt achterhaald. Echter niet als de sessiesleutel is achterhaald. Gegeven dit heeft SSH perfect forward secrecy.
In het geval dat Diffie-Hellmanparameters worden achterhaald kan natuurlijk ook de sessiesleutel achterhaald worden, echter behoren deze gegevens verwijderd te worden nadat de sleuteluitwisseling klaar is. Deze behoren dus niet per ongeluk op een swapschijf opgeslagen te worden.

### OpenPGP

OpenPGP stelt gebruikers in staat, veelal via e-mail, veilig te communiceren. Elke gebruiker heeft een private key en een public key die iedereen weet, deze public key is veelal voor lange termijn geldig en te vinden op een website of keyserver. Bij e-mail is het echter een stuk lastiger om forward secrecy te handhaven, aangezien hier geen sprake is van een directe verbinding tussen verzender en ontvanger.
Er bestaat echter wel een draft om PFS toe te voegen aan het protocol. Het idee is dat er keys worden gegenereerd die slechts een beperkte levensduur hebben en deze te groeperen onder een zogenaamde long term signature (langetermijnhandtekening). Een verlopen private key dient op het moment dat de levensduur verstreken is verwijderd te worden, anders kan een aanvaller nog steeds alle berichten achterhalen. Het probleem zit er vooral in hoe dit goed, makkelijk en flexibel te beheren is in een mailclient.

### Off the Record Messaging

Off-the-Record Messaging, een cryptografisch protocol en bibliotheek voor allerlei instant messaging clients, verschaft perfect forward secrecy evenals deniable encryption. Om PFS te bereiken wordt het Diffie-Hellman-sleuteluitwisselingsprotocol gebruikt.

### WPA

Interessant om te vermelden is dat het meest gebruikte protocol voor het beveiligen van Wi-Fi netwerken, WPA2, geen forward secrecy ondersteund. In de opvolger WPA3 wordt dit wel ondersteund. Met een marktintegratie van WPA3 van minder dan een 0,5% in juli 2023 wordt PFS echter nog maar beperkt gebruikt voor Wi-Fi. Door de inzet van TLS (met forward secrecy) wordt dit risico verminderd.
* H. Orman. The OAKLEY Key Determination Protocol. IETF RFC 2412.
* Voorbeeld van de session key overgenomen uit opdracht 7 van het vak security aan de Radboud Universiteit.
* ↑ W. Diffie, P.C. van Oorschot & M. Wiener. Authentication and Authenticated Key Exchanges. Designs Codes and Cryptography, 2, 107-125, 1992.
* ↑ D. Jablon. Strong Password-Only Authenticated Key Exchange. Computer Communication Review, ACM SIGCOMM, vol. 26, no. 5, p. 5-26, oktober 1996.
* ↑ Re: [TLS] security levels for TLS, ietf.org, 2007
* ↑ RFC 2412
* ↑ RFC 4251 sectie 9.3.7
* ↑ RFC 4253
* ↑ Forward Secrecy Extensions for OpenPGP, apache-ssl.org, oktober 2001
* ↑ Off-the-Record Communication, or, Why Not To Use PGP, cypherpunks.ca