# Needham-Schroeder-protocol

Het Needham-Schroeder-protocol is een communicatieprotocol dat Roger Needham en Michael Schroeder 1978 voorstelden. Het doel van dit protocol is om een geautoriseerde verbinding tussen twee partijen op verschillende computers, die door een onveilig netwerk zijn verbonden, op te zetten. Zo weten beide partijen met wie ze te maken hebben. Er is daarom ook sprake van wederzijdse autorisatie. Er bestaan twee versies van dit protocol: met symmetrische en met asymmetrische cryptografie. De symmetrische versie is de basis voor het Kerberos protocol. Beide protocollen maken gebruik van een authenticatieserver die alle sleutels opslaat.

## Gebruikte Versleutelingsalgoritmen

Voor de implementatie mag een versleutelingsalgoritme worden gekozen. Needham en Schroeder noemen voor de symmetrische versie DES en voor de asymmetrische RSA als voorbeeld.

## De symmetrische versie

We nemen het volgende aan:
* A en B willen een geautoriseerde communicatie opzetten
* A en B hebben geheime sleutels KA en KB
* A en B vertrouwen in AS
* A is de initiator
Om het protocol op te schrijven wordt de volgende notatie gebruikt:
$A\rightarrow B:A,\{B\}_{K}$
Dit betekent dat A een boodschap naar B stuurt. De inhoud van de boodschap is A en B versleuteld met de sleutel K.
De eerste stap is dat A naar de server, samen met een nonce, stuurt wie een communicatie wil opzetten:
$A\rightarrow AS:A,B,I_{A}$
De nonce is belangrijk omdat anders een aanvaller het antwoord van de server kan opslaan om het later opnieuw te zenden als A en B nog een keer willen communiceren. Daardoor zal nog een keer dezelfde session key worden gebruikt, wat het kraken van de versleuteling makkelijker maakt. Het antwoord van de server is:
$AS\rightarrow A:\{I_{A},B,CK,\{CK,A\}_{KB}\}_{KA}$
Dit kan alleen door A worden gelezen omdat de hele boodschap met de sleutel van A is versleuteld. CK is een sleutel die A en B voor één communicatie gebruiken (session key). Het is belangrijk dat 'B' in deze boodschap zit omdat anders een aanvaller in de eerste boodschap de tweede identificatie kan veranderen. A weet nu CK en moet er alleen nog voor zorgen dat B het ook weet. Natuurlijk kan hij hem niet onversleuteld versturen en hem ook niet met KB versleutelen omdat KB geheim is. Daarom heeft de server KB{CK, A} meegestuurd. Als A dit doorstuurt naar B blijven CK en KB geheim:
$A\rightarrow B:\{CK,A\}_{KB}$
Nu weten alleen A en B (en AS) CK. Om na te gaan of {CK, A}_{KB} ook echt afkomstig is van A gebeurt het volgende:
$B\rightarrow A:\{I_{B}\}_{CK}$
$A\rightarrow B:\{I_{B}-1\}_{CK}$
Nu weet B zeker dat hij het te maken heeft met A omdat alleen iemand die CK weet het goede antwoord kan sturen.

### Zwakke punt van het protocol

Als een aanvaller door middel van cryptoanalyse CK van een eerdere communicatie kan achterhalen kan hij gewoon een opgeslagen $\{CK,A\}_{KB}$ naar B zenden en zich als A voordoen. In het Kerberos protocol is dit door timestamps opgelost.

## De asymmetrische versie

We nemen het volgende aan:
* A en B willen een autoriseerde communicatie opzetten
* A en B hebben geheime sleutels SKA en SKB en publieke sleutels PKA en PKB
* AS heeft ook een sleutel paar, SKAS en PKAS
* het geldt: ${\{[M]_{SKA}\}_{PKA}=M}$
* A en B vertrouwen in AS
* A is de initiator
Om het protocol op te schrijven wordt de volgende notatie gebruikt:
$A\rightarrow B:[A]_{SKA},\{B\}_{PKA}$
Dit betekent dat A een boodschap naar B stuurt. De inhoud van de bootschap is A, ontsleuteld met SKA, en B, versleuteld met PKA.
Als eerste stuurt A naar AS wie een communicatie wil opzetten:
$A\rightarrow AS:A,B$
AS antwoordt met de publieke sleutel van B en ondertekent het antwoordt:
$AS\rightarrow A:[PKB,B]_{SKAS}$
A kan de digitale handtekening controleren door ${\{[PKB,B]_{SKAS}\}_{PKAS}}$ te berekenen en weet zo zeker dat PKB afkomstig is van AS.
A stuurt vervolgens een nonce IA samen met zijn identiteit naar B toe. De boodschap wordt versleuteld met PKB zodat alleen B ze kan lezen:
$A\rightarrow B:\{IA,A\}_{PKB}$
B vraagt vervolgens PKA aan. Dit gebeurt op dezelfde manier als eerder beschreven:
$B\rightarrow AS:B,A$
$AS\rightarrow B:[PKA,A]_{SKAS}$
Vervolgens stuurt B de nonce van A en een eigen nonce naar A, versleuteld met PKA:
$B\rightarrow A:\{IA,IB\}_{PKA}$
Omdat het alleen voor B mogelijk is om ${\{IA,A\}_{PKB}}$ te ontsleutelen, is de identiteit van B zeker voor A. In de laatste stap toont A dat hij ook een met PKA versleutelde boodschap kan lezen:
$A\rightarrow B:\{IB\}_{PKB}$

## Uitbreidingen

In het origineel artikel wordt een versie van het symmetrische protocol die alleen drie boodschappen gebruikt gegeven. Ook het asymmetrische protocol kan worden verbeterd als A en B vaak gebruikte publieke sleutels onthouden. Verder geven Needham en Schroeder nog een uitbreiding die gebruikmaakt van meerdere authenticatie servers.