# I2P

I2P, of voluit Invisible Internet Project (onzichtbaar internetproject), is een gedecentraliseerd, peer-to-peer, anoniem communicatienetwerk dat boven op het gewone internet werkt (een zogenaamd 'overlay netwerk'). Programma's kunnen bovenop I2P met elkaar communiceren door berichten uit te wisselen. Zo kan men anoniem browsen, bestanden delen, bloggen, chatten en dergelijke. Het is vergelijkbaar met Tor en Freenet, hoewel er grote verschillen zitten tussen I2P, Tor en Freenet. I2P is open source vrije software, en is gratis te gebruiken.

## Onion routing

I2P is gebaseerd op Onion routing. Onion routing op zijn beurt is gebaseerd op asymmetrische cryptografie. Elke node heeft 2 sleutels: een publieke sleutel om te versleutelen en een privésleutel om te ontcijferen. Nu kan een node een bericht te versleutelen zodat slechts 1 andere node het kan ontcijferen. De zender versleutelt het bericht namelijk met de publieke sleutel van de ontvanger. In dit geval weet de ontvanger wie de zender is en andersom. Om dit op te lossen wordt het pakket via een andere node verstuurd. De verzender versleutelt het bericht voor de ontvanger, daarna versleutelt hij de uitkomt nog een keer; voor de tussenliggende node. De tussenliggende node kan het pakketje uitpakken, maar stuit dan op een ander versleuteld pakketje. Hij stuurt dit pakketje door naar de ontvanger die het dan kan uitpakken en het originele bericht kan lezen. De ontvanger weet nu niet wie de zender is.
Omdat nu de tussenliggende node weet wie de verzender en ontvanger is (hoewel hij niet weet wat het originele bericht is), wordt er soms een tweede tussenliggende node gebruikt. Dan weet niemand zowel wie de zender is, als wie de ontvanger is. Kortom, hoe meer hops, hoe beter de anonimiteit.

## Netwerk

Het netwerk is pakketgeschakeld en is opgebouwd uit verschillende lagen.

### IP

    De onderste laag is het Internet Protocol.

### Transport

    Deze laag hoort ook bij het internet. Hij bestaat uit TCP en UDP.

### I2P Transport

    Beschrijft een versleutelde verbinding tussen 2 nodes. Deze laag is direct en dus nog niet anoniem.

### I2P Tunnel Laag

    Op deze laag worden anonieme versleutelde tunnels gemaakt. Hier worden ook pakketjes samengevoegd.

### I2P Garlic Laag

    Hier worden anonieme versleutelde end-to-end verbindingen gemaakt.

## I2P-software

Verschillende programma's zijn speciaal gewijzigd om boven op het I2P-netwerk gebruikt te kunnen worden. Andere (zoals webbrowsers en IRC clients) kunnen zonder wijzigingen gebruikt worden. Onder de programma's die gewijzigd zijn voor I2P, vinden we onder andere:
* BitTorrentprogramma's
* iMule (een gewijzigde versie van aMule)
* Syndie (een blogprogramma, bruikbaar via I2P en Tor)

## Terminologie
### Router

    De router is de software dat de netwerklaag implementeert. Deze zorgt voor de opbouw van tunnels met andere nodes.

### Node/Peer

    Simpelweg een computer waarop een router draait.

### Tunnel

    Elke tien minuten wordt er een nieuwe verbinding gemaakt met een andere node in het netwerk. Zo'n verbinding heet een tunnel. Data van en naar deze node wordt verstuurd door deze verbinding. De data wordt samengevoegd met data dat bestemd is voor andere nodes (waardoor beide nodes als tussenpersoon fungeren) en daarna doorgestuurd. Een node stuurt dus ook data door waarvan hij niet de ontvanger, óf de ontvanger is.

### Hop/Jump

    Elke keer dat de data naar een andere node wordt verstuurd noemen we dit een hop. Doordat een pakket meerdere hops maakt is het lastiger te traceren wie de afzender of ontvanger is van een bericht.

### Eepsite

    Eepsites zijn Websites die anoniem gehost worden binnen het I2P netwerk. Eepsite eindigen met .i2p, zoals ugha.i2p of forum.i2p. Eep is vermoedelijk afgeleid van de Engelse uitspraak van IIP.

### .i2p

    .i2p is een pseudo Topleveldomein welke alleen in het I2P netwerk geldig is. .i2p domeinnamen worden vertaald door een eepProxy.

### Eepproxy

    Bij het softwarepakket zit een proxyprogramma geleverd. Dit programma is verantwoordelijk voor alle verkeer tussen de webbrowser en I2P. De eepproxy vertaald ook .i2p adressen door ze om te zetten in sleutels die verwijst naar een bepaalde node. De router zelf houdt een adresboek bij waarin naam/sleutelparen opgeslagen worden, maar kan ook via een jumpservice een domeinnaam op laten zoeken. Hierbij is het belangrijk te noteren dat zo'n jumpservice gebaseerd is op vertrouwen, want deze kan je ook naar een kwaadwillende node doorsturen.