# IPsec

IPsec (of Internet Protocol Security) is een standaard voor het beveiligen van internetprotocol (IP) door middel van encryptie en/of authenticatie op alle IP-pakketten. IPSec ondersteunt beveiliging vanaf het 3e niveau van het OSI-model, namelijk de netwerklaag.
Hierdoor kan het gebruikt worden door zowel TCP als UDP maar het levert wel overhead op ten opzichte van bijvoorbeeld SSL dat op hogere OSI-niveaus werkt (en geen UDP kan beveiligen).
De standaard is door het IETF vastgelegd in RFC's 2401–2412, optioneel voor IPv4 en verplicht bij IPv6. IPsec wordt vaak ingezet bij VPN-verbindingen.

## Cryptografie

IPSec is een verzameling van cryptografische protocollen met twee doeleinden:
* Beveiliging van de pakketstroom.
* Uitwisseling van sleutels.
IPsec bestaat in twee varianten:
* Transport : versleutelt de inhoud (payload) van het IP-pakket, maar niet de header.
* Tunnel : versleutelt zowel de inhoud van het IP-pakket als de header.
Of het nu gaat om een klein of een groot bedrijf, een intern of een extern netwerk, een directe verbinding of een VPN verbinding, in een bedrijf met gevoelige data heeft men goede beveiliging nodig in het netwerk. Dit houdt ook in dat de data die verstuurd wordt via een netwerk beveiligd is tegen pakket sniffers die netwerkverkeer willen bekijken, onderscheppen of zelfs aanpassen. Om na te gaan of een verbinding veilig is moet men de CIA van beveiliging doorlopen, CIA staat voor Confidentiality – Integrity – Availability. Tevens moet de authenticity en anonimity van de berichten gegarandeerd worden.

## Confidentiality, Integrity en Availability (CIA), Authenticity en Anonymity

* Confidentiality
Betekent dat niemand anders de data kan lezen die in het netwerk van computer naar computer gaat. Wanneer je een e-mail zou verzenden kan de hacker die het netwerk snift de e-mail niet lezen als hij de e-mail zou kunnen onderscheppen.
* Integrity
Dit is dikwijls nog belangrijker dan confidentiality. Dit houdt in dat de data door niemand kan worden aangepast op weg naar zijn bestemming. Als een hacker een bericht aanpast van een militaire bevoegde om een aanval uit te voeren op een bepaald doel kan dit catastrofale gevolgen hebben. In die zin is Integriteit van het bericht belangrijker dan dat de hacker enkel zou kunnen lezen wat het bericht inhoudt.
* Availability
Betekent de beschikbaarheid van de informatie. Dit houdt in dat informatie goed beveiligd moet zijn maar wel toegankelijk moet zijn voor gebruikers.
* Authenticity
Authenticity zorgt voor een bevestiging dat de zender de zender is die hij beweert te zijn en dat de machine de machine is die ze beweert te zijn. Als de hacker uit het voorbeeld van integrity zich zou kunnen voordoen als die militaire bevoegde zou dit ook voor vreselijke gevolgen kunnen zorgen.
* Anonymity
Anonymity zorgt ervoor dat de afzender van berichten niet achterhaald kan worden door kwaadwillende gebruikers.
IPsec is een pakket met protocollen die samen aan vier van deze beveiligingspijlers voldoen: confidentiality, integrity, authenticity en anonymity
De beveiliging van IPsec bestaat voornamelijk uit twee delen. ESP - Encapsulating Security Payload en AH - Authentication Header, elk van deze voorziet in sommige van de CIA beveiligingspijlers.
* ESP behandelt de confidentiality
* AH behandelt authentication en integrity.
IPsec wordt toegepast met AH of ESP of een combinatie van beide. Aangezien IPsec zich in de netwerklaag van het OSI-model bevindt, is het volledig onafhankelijk van de applicaties die hier gebruik van zullen maken.

## Authentication Header (AH)
### Next Header

Dit veld toont aan welk soort inhoud het pakket heeft, bijvoorbeeld TCP . Dit wordt aangeduid door een nummer (TCP = 6) bepaald door IANA. (Internet Assigned Numbers Authority is een organisatie die het beheer voert over een aantal standaardnummeringen die in gebruik zijn op het internet.)

### Payload Length

8 bits veld dat de lengte van de Authentication Header aanduidt.

### Security Parameters Index

32 bitstring die de ontvanger helpt te bepalen onder welke SA dit pakket zich bevindt. Een computer kan namelijk pakketten van verschillende SA’s tegelijk verwerken. (Een SA is in de context van IPsec een simplex verbinding tussen 2 computers en heeft een bijbehorende "security identifier")

### Sequence Number

Volgnummer van het pakket, wanneer het pakket 2^32 + 1 zou worden, moet er een nieuwe SA met een nieuwe sleutel worden opgesteld. De Sequence Number zit ook in de Authentication Data, hierdoor wordt een verandering aan de Sequence Number meteen opgemerkt. Sequence Number gebruikt men tegen Replay Attacks. Bijvoorbeeld: een hacker onderschept pakketten van een persoon die zich aanmeldt op een netwerk. De volgende dag stuurt de hacker de pakketten terug het netwerk in en kan zo toegang krijgen tot het netwerk zonder te weten wat de logingegevens zijn.

### Authentication Data

Dit veld bevat de ICV (Integrity Check Value) die berekend wordt over het gehele pakket, inclusief sommige headers. De ontvanger berekent dezelfde hash. Als ze niet overeenkomen betekent dit dat het pakket beschadigd is geraakt (aangepast) of dat de secret key fout is. Deze pakketten worden genegeerd/verwijderd. Het veld is een veelvoud van 32-bits groot en moet steeds gevuld zijn. Men kan padding toepassen als de ICV het veld niet volledig vult.

## Encapsulation Security Payload (ESP)
### Security Parameter Index

Zie AH.

### Sequence Number

Zie AH.

### Payload Data

Dit is de versleutelde data die in het pakket zit.

### Padding

Vullen van resterende ruimte voor payload data zodat de data de grootte krijgt die het algoritme verwacht.

### Pad Length

Dit veld geeft aan hoeveel padding het pakket meedraagt.

### Next Header

Dit veld geeft aan welk datatype de inhoud van het gedecodeerde pakket is.

### Authentication Data

Zie AH.