diff --git a/pages/i2cp.html b/pages/i2cp.html new file mode 100644 index 00000000..fe767181 --- /dev/null +++ b/pages/i2cp.html @@ -0,0 +1,26 @@ +
The I2P Client Protocol (I2CP) exposes a strong seperation of concerns between +the router and any client that wishes to communicate over the network. It enables +secure and asynchronous messaging by sending and receiving messages over a +single TCP socket, yet never exposing any private keys and authenticating itself +to the router only through signatures. With I2CP, a client application tells the +router who they are (their "destination"), what anonymity, reliability, and +latency tradeoffs to make, and where to send messages. In turn the router uses +I2CP to tell the client when any messages have arrived, to request authorization +for some tunnels to be used, and, if necessary, to notify the client that the +router is under attack and unable to operate safely.
+ +As the I2CP requires all client libraries to provide an implementation of the +end to end encryption (including ElGamal/AES+SessionTag), +the protocol itself isn't likely to be adopted for normal client applications +(except for those implemented in Java that can use the existing I2P +SDK). +Instead, applications can take advantage of the base I2CP plus the +streaming and datagram libraries +by using the Simple Anonymous Messaging protocol (which does not +require clients to deal with any sort of cryptography).
+ +At the moment, while the I2CP has been quite stable since its inception in +August of 2003, there have been minor modifications on occation, and until the +network as a whole is thoroughly peer reviewed (including the +encryption used), making a hard and fast byte level +protocol specification does not seem like a wise use of time.