From 3c0c06ce6f9d407ffc376d32826416dd9df8a1f9 Mon Sep 17 00:00:00 2001 From: jrandom Date: Sat, 21 Aug 2004 21:26:31 +0000 Subject: [PATCH] added new text / image describing the overall flow of messages and tunnels imported png files into CVS so they're tracked and mirrorable --- images/endToEndEncryption.png | Bin 0 -> 12288 bytes images/net.png | Bin 0 -> 22179 bytes pages/how_intro.html | 48 ++++++++++++++-------------------- 3 files changed, 19 insertions(+), 29 deletions(-) create mode 100644 images/endToEndEncryption.png create mode 100644 images/net.png diff --git a/images/endToEndEncryption.png b/images/endToEndEncryption.png new file mode 100644 index 0000000000000000000000000000000000000000..e430bb320e40bf5462f7f793a4099ceb3f4f2cea GIT binary patch literal 12288 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 FKLDPyToV8Q literal 0 HcmV?d00001 diff --git a/images/net.png b/images/net.png new file mode 100644 index 0000000000000000000000000000000000000000..295432114140906bf05aa962c60b669161ac7663 GIT binary patch literal 22179 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 z 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

The network at a glance is made up of a set of nodes ("routers") with a number of unidirectional inbound and outbound virtual paths ("tunnels", as outlined on the tunnel routing page). Each router is identified by a cryptographic RouterIdentity which is typically long lived. These routers -communicate with each other through existing transport mechanisms (e.g. TCP, UDP, PHTTP), passing various +communicate with each other through existing transport mechanisms (TCP, UDP, etc), passing various messages. Client applications have their own cryptographic identifier ("Destination") which enables it to send and receive messages. These clients can connect to any router and authorize the temporary allocation ("lease") of some tunnels that will be used for sending and receiving messages through the network. I2P has its own internal network database (using a modification of -the Kademlia algorithm) for distributing routing and contact information.

+the Kademlia algorithm) for scalably distributing routing and contact information securely.

-

The following illustration is a simplistic view regarding how tunnels, routers, and destinations -are associated, with a pair of inbound tunnels (pink lines) leading towards the router which the -destination is connected to (little "a"), with a set of outbound tunnels (green lines) leading away -from that router. The gateway for each of the inbound tunnels (big "A"s) are identified in the lease -as published in the network database.

+

Network topology example

-

The network topology

- -

Messages send from one Destination to another are (typically) sent through a pair of tunnels - first -they go out one of the local router's outbound tunnels with instructions specifying that the outbound -tunnel's end point forward the message to one of the target Destination's inbound tunnel gateways, -which, on receiving the message, passes it down the tunnel to the recipient. Various mechanisms are -used to secure these tunnel routed messages, as described tunnel routing. -In addition, they can be sent in parallel down multiple tunnels, with the last router discarding -duplicates.

- -

I2P Tunnel sending

- -

Some of the messages sent in the network (such as those used to manage tunnels, publish some Leases, -and deliver long lived end to end messages) may be instead are sent via -garlic routing. Inspired by a subsection for future works written by -Michael Freedman within Roger Dingledine's freehaven -thesis, and with some similarities to -onion routing. I2P's garlic routing allows multiple messages -("cloves") to be wrapped inside a single message ("garlic") so that only the intended recipient can -determine how many cloves are contained as well as how those cloves should be processed.

+

In the above, Alice, Bob, Charlie, and Dave are all running routers with a single Destination on their +local router. They each have a pair of 2-hop inbound tunnels per destination (labeled 1,2,3,4,5 and 6), +and a small subset of each of those router's outbound tunnel pool is shown with 2-hop outbound tunnels. +For simplicity, Charlie's inbound tunnels and Dave's outbound tunnels are not shown, nor are the rest of +each router's outbound tunnel pool (typically stocked with 5-10 tunnels at a time). When Alice and Bob +talk to each other, Alice sends a message out one of her (pink) outbound tunnels targetting one of Bob's +inbound tunnels (tunnel 3 or 4). She knows to send to those tunnels on the correct router by querying the +network database, which is constantly updated as new leases are authorized and old ones expire.

+ +

If Bob wants to reply to Alice, he simply goes through the same process - send a message out one of his +outbound tunnels targetting one of Alice's inbound tunnels (tunnel 1 or 2). To make things easier, all +but the initial messages sent between a Alice and Bob are garlic wrapped, +bundling the sender's own current lease information so that the recipient can reply immediately without +having to look in the network database for the current data.

To deal with a wide range of attacks, I2P is fully distributed with no centralized resources - and hence there are no directory servers keeping statistics regarding the performance and reliability of routers within the network. As such, each router must keep and maintain profiles of various routers and is responsible for selecting appropriate peers to meet the anonymity, performance, and reliability -needs of the users, as described in the peer selection pages

+needs of the users, as described in the peer selection page.

The network itself makes use of a significant number of cryptographic techniques and altorithms - a full laundry list includes 2048bit ElGamal encryption, 256bit AES in CBC mode with PKCS#5 padding, @@ -98,7 +88,7 @@ the recipient), tunnel encryption (all messages passing through a tunnel is encr gateway to the tunnel endpoint), and interrouter transport layer encryption (e.g. the TCP transport uses AES256 with ephemeral keys):

-

end to end layered encryption

+

end to end layered encryption

The specific use of these algorithms are outlined elsewhere