Added a macro to simplify inserting site urls

This commit is contained in:
str4d
2012-09-14 02:03:44 +00:00
parent 8e75eeb712
commit 2d0a6c3313
15 changed files with 95 additions and 98 deletions

View File

@ -1,3 +1,4 @@
{%- from "global/macros" import site_url with context -%}
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
@ -10,7 +11,7 @@
<body> <body>
<div class="hide"><a href="#content" title="Skip navigation" accesskey="2">Skip navigation</a></div> <div class="hide"><a href="#content" title="Skip navigation" accesskey="2">Skip navigation</a></div>
<div id="branding"> <div id="branding">
<h1 id="logo"><a href="{{ url_for('site_show', lang=g.lang) }}"><img src="{{ url_for('static', filename='images/logo_medium.png') }}" alt="I2P" /></a></h1> <h1 id="logo"><a href="{{ site_url() }}"><img src="{{ url_for('static', filename='images/logo_medium.png') }}" alt="I2P" /></a></h1>
<div class="title">{{ self.title() }}</div> <div class="title">{{ self.title() }}</div>
</div> </div>
<div class="navigation"> <div class="navigation">

View File

@ -0,0 +1,5 @@
{%- macro site_url(path=None) -%}
{%- if path -%}{{ url_for('site_show', lang=g.lang, page=path) }}
{%- else -%}{{ url_for('site_show', lang=g.lang) }}
{%- endif -%}
{%- endmacro -%}

View File

@ -1,13 +1,13 @@
<div id="cssmenu"> <div id="cssmenu">
<ul> <ul>
<li><a href="{{ url_for('site_show', lang=g.lang) }}"><span>Home</span></a></li> <li><a href="{{ site_url() }}"><span>Home</span></a></li>
<li><a href="{{ url_for('downloads_list', lang=g.lang) }}"><span>Download</span></a></li> <li><a href="{{ url_for('downloads_list', lang=g.lang) }}"><span>Download</span></a></li>
<li class="has-sub"><a href="#"><span>Docs</span></a> <li class="has-sub"><a href="#"><span>Docs</span></a>
<ul> <ul>
<li class="has-sub"><a href="{{ url_for('site_show', lang=g.lang, page='docs/how') }}"><span>How does it work?</span></a> <li class="has-sub"><a href="{{ site_url('docs/how') }}"><span>How does it work?</span></a>
<ul> <ul>
<li><a href="{{ url_for('site_show', lang=g.lang, page='docs/how/intro') }}"><span>Gentle intro</span></a></li> <li><a href="{{ site_url('docs/how/intro') }}"><span>Gentle intro</span></a></li>
<li><a href="{{ url_for('site_show', lang=g.lang, page='docs/techintro') }}"><span>Tech intro</span></a></li> <li><a href="{{ site_url('docs/techintro') }}"><span>Tech intro</span></a></li>
</ul> </ul>
</li> </li>
<li><a href="howto.html"><span>Howto docs</span></a></li> <li><a href="howto.html"><span>Howto docs</span></a></li>

View File

@ -1,9 +0,0 @@
{% macro urlify(url, title, suffix) %}
{% autoescape false %}
{% if static %}
<a href="{{url}}.{{suffix}}">{{title}}</a>
{% else %}
<a href="{{url}}">{{title}}</a>
{% endif %}
{% endautoescape %}
{% endmacro %}

View File

@ -12,7 +12,7 @@ one asymmetric algorithm, one signing algorithm, and one hashing algorithm. How
we do combine them in some particular ways to provide message integrity (rather than we do combine them in some particular ways to provide message integrity (rather than
relying on a MAC). In addition, as much as we hate doing anything new in regards to relying on a MAC). In addition, as much as we hate doing anything new in regards to
cryptography, we can't seem to find a reference discussing (or even naming) the cryptography, we can't seem to find a reference discussing (or even naming) the
technique used in <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/elgamalaes') }}">ElGamal/AES+SessionTag</a> (but we're sure others have done it). technique used in <a href="{{ site_url('docs/how/elgamalaes') }}">ElGamal/AES+SessionTag</a> (but we're sure others have done it).
<p> <p>
<H2><a name="elgamal">ElGamal encryption</a></H2> <H2><a name="elgamal">ElGamal encryption</a></H2>
@ -25,7 +25,7 @@ To encrypt router-to-router <a href="tunnel-alt-creation.html">Tunnel Build Mess
For end-to-end (destination-to-destination) encryption as a part of <a href="how_elgamalaes">ElGamal/AES+SessionTag</a> For end-to-end (destination-to-destination) encryption as a part of <a href="how_elgamalaes">ElGamal/AES+SessionTag</a>
using the encryption key in the <a href="common_structures_spec.html#struct_LeaseSet">LeaseSet</a> using the encryption key in the <a href="common_structures_spec.html#struct_LeaseSet">LeaseSet</a>
</li><li> </li><li>
For encryption of some <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkdatabase') }}#delivery">netDb stores and queries sent to floodfill routers</a> For encryption of some <a href="{{ site_url('docs/how/networkdatabase') }}#delivery">netDb stores and queries sent to floodfill routers</a>
as a part of <a href="how_elgamalaes">ElGamal/AES+SessionTag</a> as a part of <a href="how_elgamalaes">ElGamal/AES+SessionTag</a>
(destination-to-router or router-to-router). (destination-to-router or router-to-router).
</li></ul> </li></ul>
@ -158,13 +158,13 @@ AES is used for symmetric encryption, in several cases:
<ul><li> <ul><li>
For <a href="#transports">transport encryption</a> after DH key exchange For <a href="#transports">transport encryption</a> after DH key exchange
</li><li> </li><li>
For end-to-end (destination-to-destination) encryption as a part of <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/elgamalaes') }}">ElGamal/AES+SessionTag</a> For end-to-end (destination-to-destination) encryption as a part of <a href="{{ site_url('docs/how/elgamalaes') }}">ElGamal/AES+SessionTag</a>
</li><li> </li><li>
For encryption of some <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkdatabase') }}#delivery">netDb stores and queries sent to floodfill routers</a> For encryption of some <a href="{{ site_url('docs/how/networkdatabase') }}#delivery">netDb stores and queries sent to floodfill routers</a>
as a part of <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/elgamalaes') }}">ElGamal/AES+SessionTag</a> as a part of <a href="{{ site_url('docs/how/elgamalaes') }}">ElGamal/AES+SessionTag</a>
(destination-to-router or router-to-router). (destination-to-router or router-to-router).
</li><li> </li><li>
For encryption of <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/tunnelrouting') }}#testing">periodic tunnel test messages</a> sent from the router to itself, through its own tunnels. For encryption of <a href="{{ site_url('docs/how/tunnelrouting') }}#testing">periodic tunnel test messages</a> sent from the router to itself, through its own tunnels.
</li></ul> </li></ul>
</p><p> </p><p>
We use AES with 256 bit keys and 128 bit blocks in CBC mode. We use AES with 256 bit keys and 128 bit blocks in CBC mode.
@ -376,7 +376,7 @@ NTCP connections are negotiated with a 2048 Diffie-Hellman implementation,
using the router's identity to proceed with a station to station agreement, followed by using the router's identity to proceed with a station to station agreement, followed by
some encrypted protocol specific fields, with all subsequent data encrypted with AES some encrypted protocol specific fields, with all subsequent data encrypted with AES
(as above). (as above).
The primary reason to do the DH negotiation instead of using <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/elgamalaes') }}">ElGamalAES+SessionTag</a> is that it provides '<a href="http://en.wikipedia.org/wiki/Perfect_forward_secrecy">(perfect) forward secrecy</a>', while <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/elgamalaes') }}">ElGamalAES+SessionTag</a> does not. The primary reason to do the DH negotiation instead of using <a href="{{ site_url('docs/how/elgamalaes') }}">ElGamalAES+SessionTag</a> is that it provides '<a href="http://en.wikipedia.org/wiki/Perfect_forward_secrecy">(perfect) forward secrecy</a>', while <a href="{{ site_url('docs/how/elgamalaes') }}">ElGamalAES+SessionTag</a> does not.
</p> </p>
<p> <p>
In order to migrate to a more standardized implementation (TLS/SSL or even SSH), the following issues must be addressed: In order to migrate to a more standardized implementation (TLS/SSL or even SSH), the following issues must be addressed:

View File

@ -142,7 +142,7 @@ The 32-byte Pre-IV will be used to generate the IV for the AES block that follow
the IV is the first 16 bytes of the SHA-256 Hash of the Pre-IV. the IV is the first 16 bytes of the SHA-256 Hash of the Pre-IV.
</p><p> </p><p>
The 222 byte payload is encrypted The 222 byte payload is encrypted
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/cryptography') }}#elgamal">using ElGamal</a> <a href="{{ site_url('docs/how/cryptography') }}#elgamal">using ElGamal</a>
and the encrypted block is 514 bytes long. and the encrypted block is 514 bytes long.
</p> </p>
@ -212,7 +212,7 @@ Minimum length: 48 bytes
</PRE> </PRE>
</p><p> </p><p>
The data is then <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/cryptography') }}">AES Encrypted</a>, The data is then <a href="{{ site_url('docs/how/cryptography') }}">AES Encrypted</a>,
using the session key and IV (calculated from the pre-IV) from the ElGamal section. using the session key and IV (calculated from the pre-IV) from the ElGamal section.
The encrypted AES Block length is variable but is always a multiple of 16 bytes. The encrypted AES Block length is variable but is always a multiple of 16 bytes.
</p> </p>

View File

@ -42,7 +42,7 @@ During the operating phase, messages are passed through the tunnel, and the
message and its routing instructions are only exposed to the endpoint of the tunnel. message and its routing instructions are only exposed to the endpoint of the tunnel.
</p><p> </p><p>
This is similar to the way Mixmaster This is similar to the way Mixmaster
(see <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkcomparisons') }}">network comparisons</a>) sends messages - taking a message, encrypting it (see <a href="{{ site_url('docs/how/networkcomparisons') }}">network comparisons</a>) sends messages - taking a message, encrypting it
to the recipient's public key, taking that encrypted message and encrypting to the recipient's public key, taking that encrypted message and encrypting
it (along with instructions specifying the next hop), and then taking that it (along with instructions specifying the next hop), and then taking that
resulting encrypted message and so on, until it has one layer of encryption resulting encrypted message and so on, until it has one layer of encryption
@ -84,7 +84,7 @@ and reliable delivery.
<h3>ElGamal/AES Encryption</h3> <h3>ElGamal/AES Encryption</h3>
In some cases, "garlic encryption" may simply mean In some cases, "garlic encryption" may simply mean
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/elgamalaes') }}">ElGamal/AES+SessionTag</a> encryption <a href="{{ site_url('docs/how/elgamalaes') }}">ElGamal/AES+SessionTag</a> encryption
(without multiple layers). (without multiple layers).
@ -117,7 +117,7 @@ This is described on the
Tunnel building details are defined on Tunnel building details are defined on
<a href="tunnel-alt-creation.html">this page</a>. <a href="tunnel-alt-creation.html">this page</a>.
We use We use
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/elgamalaes') }}">ElGamal/AES+SessionTag</a> for the encryption. <a href="{{ site_url('docs/how/elgamalaes') }}">ElGamal/AES+SessionTag</a> for the encryption.
</p><p> </p><p>
Tunnels are a general-purpose mechanism to transport all Tunnels are a general-purpose mechanism to transport all
<a href="i2np.html">I2NP messages</a>, and <a href="i2np.html">I2NP messages</a>, and
@ -134,7 +134,7 @@ the tunnel encryption is sufficient.
At the layer above tunnels, I2P delivers end-to-end messages between At the layer above tunnels, I2P delivers end-to-end messages between
<a href="common_structures_spec#struct_Destination">Destinations</a>. <a href="common_structures_spec#struct_Destination">Destinations</a>.
Just as within a single tunnel, we use Just as within a single tunnel, we use
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/elgamalaes') }}">ElGamal/AES+SessionTag</a> for the encryption. <a href="{{ site_url('docs/how/elgamalaes') }}">ElGamal/AES+SessionTag</a> for the encryption.
Each client message as delivered to the router through the Each client message as delivered to the router through the
<a href="i2cp.html">I2CP interface</a> becomes a single <a href="i2cp.html">I2CP interface</a> becomes a single
<a href="i2np.html#struct_GarlicClove">Garlic Clove</a> <a href="i2np.html#struct_GarlicClove">Garlic Clove</a>
@ -174,7 +174,7 @@ By periodically bundling a LeaseSet, the router ensures that the far-end will be
to maintain communications. to maintain communications.
Otherwise the far-end would have to query a floodfill router for the network database entry, Otherwise the far-end would have to query a floodfill router for the network database entry,
and all LeaseSets would have to be published to the network database, as explained on the and all LeaseSets would have to be published to the network database, as explained on the
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkdatabase') }}">network database page</a>. <a href="{{ site_url('docs/how/networkdatabase') }}">network database page</a>.
</li></ol> </li></ol>
</p><p> </p><p>
@ -191,7 +191,7 @@ and not part of a general-purpose routing scheme.
<h3> Storage to the Floodfill Network Database</h3> <h3> Storage to the Floodfill Network Database</h3>
</p> </p>
As explained on the As explained on the
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkdatabase') }}#delivery">network database page</a>, <a href="{{ site_url('docs/how/networkdatabase') }}#delivery">network database page</a>,
local local
<a href="common_structures_spec#struct_LeaseSet">LeaseSets</a> <a href="common_structures_spec#struct_LeaseSet">LeaseSets</a>
are sent to floodfill routers in a are sent to floodfill routers in a
@ -220,14 +220,14 @@ as limiting certain routing paths, restricting the types of I2NP messages that m
be forwarded along various paths, and enforcing certain message expiration times. be forwarded along various paths, and enforcing certain message expiration times.
</p><p> </p><p>
As a part of As a part of
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/elgamalaes') }}">ElGamal/AES encryption</a>, <a href="{{ site_url('docs/how/elgamalaes') }}">ElGamal/AES encryption</a>,
a garlic message contains a sender a garlic message contains a sender
specified amount of padding data, allowing the sender to take active countermeasures specified amount of padding data, allowing the sender to take active countermeasures
against traffic analysis. against traffic analysis.
This is not currently used, beyond the requirement to pad to a multiple of 16 bytes. This is not currently used, beyond the requirement to pad to a multiple of 16 bytes.
</p><p> </p><p>
Encryption of additional messages to and from the Encryption of additional messages to and from the
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkdatabase') }}#delivery">floodfill routers</a>. <a href="{{ site_url('docs/how/networkdatabase') }}#delivery">floodfill routers</a>.
</p> </p>

View File

@ -21,10 +21,10 @@ If you find any inaccuracies in the documents linked below, please
<h3>Overview</h3> <h3>Overview</h3>
<ul class="helplist"> <ul class="helplist">
<li><a href="{{ url_for('site_show', lang=g.lang, page='docs/techintro') }}">Technical Introduction</a></li> <li><a href="{{ site_url('docs/techintro') }}">Technical Introduction</a></li>
<li><a href="{{ url_for('site_show', lang=g.lang, page='docs/how/intro') }}">A Less-Technical Introduction</a></li> <li><a href="{{ site_url('docs/how/intro') }}">A Less-Technical Introduction</a></li>
<li><a href="{{ url_for('site_show', lang=g.lang, page='docs/how/threatmodel') }}">Threat model and analysis</a></li> <li><a href="{{ site_url('docs/how/threatmodel') }}">Threat model and analysis</a></li>
<li><a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkcomparisons') }}">Comparisons to other anonymous networks</a></li> <li><a href="{{ site_url('docs/how/networkcomparisons') }}">Comparisons to other anonymous networks</a></li>
<li><a href="protocols.html">Protocol stack chart</a></li> <li><a href="protocols.html">Protocol stack chart</a></li>
<li><a href="papers.html">Papers and Presentations on I2P</a></li> <li><a href="papers.html">Papers and Presentations on I2P</a></li>
<li><a href="{{ url_for('static', filename='pdf/i2p_philosophy.pdf') }}">Invisible Internet Project (I2P) Project Overview</a> August 28, 2003 (pdf)</li> <li><a href="{{ url_for('static', filename='pdf/i2p_philosophy.pdf') }}">Invisible Internet Project (I2P) Project Overview</a> August 28, 2003 (pdf)</li>
@ -101,16 +101,16 @@ Traditionally used only by Java applications and higher-level APIs.
<h3>End-to-End Encryption</h3> <h3>End-to-End Encryption</h3>
How client messages are end-to-end encrypted by the router. How client messages are end-to-end encrypted by the router.
<ul> <ul>
<li><a href="{{ url_for('site_show', lang=g.lang, page='docs/how/elgamalaes') }}">ElGamal/AES+SessionTag</a> encryption</li> <li><a href="{{ site_url('docs/how/elgamalaes') }}">ElGamal/AES+SessionTag</a> encryption</li>
<li><a href="{{ url_for('site_show', lang=g.lang, page='docs/how/cryptography') }}">ElGamal and AES cryptography details</a></li> <li><a href="{{ site_url('docs/how/cryptography') }}">ElGamal and AES cryptography details</a></li>
</ul> </ul>
<h3>Network Database</h3> <h3>Network Database</h3>
Distributed storage and retrieval of information about routers and clients. Distributed storage and retrieval of information about routers and clients.
<ul> <ul>
<li><a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkdatabase') }}">Network database overview, details, and threat analysis</a></li> <li><a href="{{ site_url('docs/how/networkdatabase') }}">Network database overview, details, and threat analysis</a></li>
<li><a href="{{ url_for('site_show', lang=g.lang, page='docs/how/cryptography') }}#SHA256">Cryptographic hashes</a></li> <li><a href="{{ site_url('docs/how/cryptography') }}#SHA256">Cryptographic hashes</a></li>
<li><a href="{{ url_for('site_show', lang=g.lang, page='docs/how/cryptography') }}#DSA">Cryptographic signatures</a></li> <li><a href="{{ site_url('docs/how/cryptography') }}#DSA">Cryptographic signatures</a></li>
</ul> </ul>
<h3>Router Message Protocol</h3> <h3>Router Message Protocol</h3>
@ -130,12 +130,12 @@ I2P is a message-oriented router. The messages sent between routers are defined
<h3>Tunnels</h3> <h3>Tunnels</h3>
Selecting peers, requesting tunnels through those peers, and encrypting and routing messages through these tunnels. Selecting peers, requesting tunnels through those peers, and encrypting and routing messages through these tunnels.
<ul> <ul>
<li><a href="{{ url_for('site_show', lang=g.lang, page='docs/how/peerselection') }}">Peer profiling and selection</a></li> <li><a href="{{ site_url('docs/how/peerselection') }}">Peer profiling and selection</a></li>
<li><a href="{{ url_for('site_show', lang=g.lang, page='docs/how/tunnelrouting') }}">Tunnel routing overview</a></li> <li><a href="{{ site_url('docs/how/tunnelrouting') }}">Tunnel routing overview</a></li>
<li><a href="{{ url_for('site_show', lang=g.lang, page='docs/how/garlicrouting') }}">Garlic routing and "garlic" terminology</a></li> <li><a href="{{ site_url('docs/how/garlicrouting') }}">Garlic routing and "garlic" terminology</a></li>
<li><a href="tunnel-alt.html">Tunnel building and encryption</a></li> <li><a href="tunnel-alt.html">Tunnel building and encryption</a></li>
<li><a href="{{ url_for('site_show', lang=g.lang, page='docs/how/elgamalaes') }}">ElGamal/AES</a> for build request encryption</li> <li><a href="{{ site_url('docs/how/elgamalaes') }}">ElGamal/AES</a> for build request encryption</li>
<li><a href="{{ url_for('site_show', lang=g.lang, page='docs/how/cryptography') }}">ElGamal and AES cryptography details</a></li> <li><a href="{{ site_url('docs/how/cryptography') }}">ElGamal and AES cryptography details</a></li>
<li><a href="tunnel-alt-creation.html">Tunnel building specification</a></li> <li><a href="tunnel-alt-creation.html">Tunnel building specification</a></li>
<li><a href="tunnel_message_spec.html">Low-level tunnel message specification</a></li> <li><a href="tunnel_message_spec.html">Low-level tunnel message specification</a></li>
<li><a href="unidirectional-tunnels.html">Unidirectional Tunnels</a></li> <li><a href="unidirectional-tunnels.html">Unidirectional Tunnels</a></li>
@ -154,9 +154,9 @@ The protocols for direct (point-to-point) router to router communication.
</li><li> </li><li>
<a href="udp_spec.html">SSU specification</a> <a href="udp_spec.html">SSU specification</a>
</li><li> </li><li>
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/cryptography') }}#tcp">NTCP transport encryption</a> <a href="{{ site_url('docs/how/cryptography') }}#tcp">NTCP transport encryption</a>
</li><li> </li><li>
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/cryptography') }}#udp">SSU transport encryption</a> <a href="{{ site_url('docs/how/cryptography') }}#udp">SSU transport encryption</a>
</li><li> </li><li>
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/router/transport/package-summary.html">Transport Javadoc</a> <a href="http://docs.i2p-projekt.de/javadoc/net/i2p/router/transport/package-summary.html">Transport Javadoc</a>
</li><li> </li><li>

View File

@ -32,7 +32,7 @@ Instead their view will be of one of the I2P enabled applications, or perhaps as
app to turn on and off various proxies to enable the anonymizing functionality.</p> app to turn on and off various proxies to enable the anonymizing functionality.</p>
<p>An essential part of designing, developing, and testing an anonymizing network is to define the <p>An essential part of designing, developing, and testing an anonymizing network is to define the
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/threatmodel') }}">threat model</a>, since there is no such thing as "true" anonymity, just <a href="{{ site_url('docs/how/threatmodel') }}">threat model</a>, since there is no such thing as "true" anonymity, just
increasingly expensive costs to identify someone. Briefly, I2P's intent is to allow people to communicate increasingly expensive costs to identify someone. Briefly, I2P's intent is to allow people to communicate
in arbitrarily hostile environments by providing good anonymity, mixed in with sufficient cover in arbitrarily hostile environments by providing good anonymity, mixed in with sufficient cover
traffic provided by the activity of people who require less anonymity. This way, some users can avoid traffic provided by the activity of people who require less anonymity. This way, some users can avoid
@ -43,20 +43,20 @@ others.</p>
<h2>Why?</h2> <h2>Why?</h2>
<p>There are a multitude of reasons why we need a system to support <p>There are a multitude of reasons why we need a system to support
anonymous communication, and everyone has their own personal rationale. There are many anonymous communication, and everyone has their own personal rationale. There are many
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkcomparisons') }}">other efforts</a> working on finding ways to provide varying degrees of <a href="{{ site_url('docs/how/networkcomparisons') }}">other efforts</a> working on finding ways to provide varying degrees of
anonymity to people through the Internet, but we could not find any that met our needs or threat anonymity to people through the Internet, but we could not find any that met our needs or threat
model.</p> model.</p>
<h2>How?</h2> <h2>How?</h2>
<p>The network at a glance is made up of a set of nodes ("routers") with a number of unidirectional <p>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 <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/tunnelrouting') }}">tunnel routing</a> page). inbound and outbound virtual paths ("tunnels", as outlined on the <a href="{{ site_url('docs/how/tunnelrouting') }}">tunnel routing</a> page).
Each router is identified by a cryptographic RouterIdentity which is typically long lived. These routers Each router is identified by a cryptographic RouterIdentity which is typically long lived. These routers
communicate with each other through existing transport mechanisms (TCP, UDP, etc), 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 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 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 allocation ("lease") of some tunnels that will be used for sending and receiving messages through the
network. I2P has its own internal <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkdatabase') }}">network database</a> (using a modification of network. I2P has its own internal <a href="{{ site_url('docs/how/networkdatabase') }}">network database</a> (using a modification of
the Kademlia algorithm) for distributing routing and contact information securely.</p> the Kademlia algorithm) for distributing routing and contact information securely.</p>
<div class="box" style="text-align:center;"><img src="{{ url_for('static', filename='images/net.png') }}" alt="Network topology example" title="Network topology example" /></div> <div class="box" style="text-align:center;"><img src="{{ url_for('static', filename='images/net.png') }}" alt="Network topology example" title="Network topology example" /></div>
@ -73,7 +73,7 @@ network database, which is constantly updated as new leases are authorized and o
<p>If Bob wants to reply to Alice, he simply goes through the same process - send a message out one of his <p>If Bob wants to reply to Alice, he simply goes through the same process - send a message out one of his
outbound tunnels targeting one of Alice's inbound tunnels (tunnel 1 or 2). To make things easier, most outbound tunnels targeting one of Alice's inbound tunnels (tunnel 1 or 2). To make things easier, most
messages sent between Alice and Bob are <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/garlicrouting') }}">garlic</a> wrapped, bundling the messages sent between Alice and Bob are <a href="{{ site_url('docs/how/garlicrouting') }}">garlic</a> wrapped, bundling the
sender's own current lease information so that the recipient can reply immediately without having to look 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.</p> in the network database for the current data.</p>
@ -81,12 +81,12 @@ in the network database for the current data.</p>
hence there are no directory servers keeping statistics regarding the performance and reliability of 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 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 and is responsible for selecting appropriate peers to meet the anonymity, performance, and reliability
needs of the users, as described in the <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/peerselection') }}">peer selection</a> page.</p> needs of the users, as described in the <a href="{{ site_url('docs/how/peerselection') }}">peer selection</a> page.</p>
<p>The network itself makes use of a significant number of <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/cryptography') }}">cryptographic techniques and algorithms</a> - <p>The network itself makes use of a significant number of <a href="{{ site_url('docs/how/cryptography') }}">cryptographic techniques and algorithms</a> -
a full laundry list includes 2048bit ElGamal encryption, 256bit AES in CBC mode with PKCS#5 padding, a full laundry list includes 2048bit ElGamal encryption, 256bit AES in CBC mode with PKCS#5 padding,
1024bit DSA signatures, SHA256 hashes, 2048bit Diffie-Hellman negotiated connections with station to 1024bit DSA signatures, SHA256 hashes, 2048bit Diffie-Hellman negotiated connections with station to
station authentication, and <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/elgamalaes') }}">ElGamal / AES+SessionTag</a>.</p> station authentication, and <a href="{{ site_url('docs/how/elgamalaes') }}">ElGamal / AES+SessionTag</a>.</p>
<p>Content sent over I2P is encrypted through three layers garlic encryption (used to verify the delivery of the message to <p>Content sent over I2P is encrypted through three layers garlic encryption (used to verify the delivery of the message to
the recipient), tunnel encryption (all messages passing through a tunnel is encrypted by the tunnel the recipient), tunnel encryption (all messages passing through a tunnel is encrypted by the tunnel
@ -100,7 +100,7 @@ A and h are the routers of Alice and Bob, while Alice and Bob in following chart
<div class="box" style="text-align:center;"><img src="{{ url_for('static', filename='images/endToEndEncryption.png') }}" alt="End to end layered encryption" title="End to end layered encryption." /></div> <div class="box" style="text-align:center;"><img src="{{ url_for('static', filename='images/endToEndEncryption.png') }}" alt="End to end layered encryption" title="End to end layered encryption." /></div>
<p>The specific use of these algorithms are outlined <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/cryptography') }}">elsewhere</a>.</p> <p>The specific use of these algorithms are outlined <a href="{{ site_url('docs/how/cryptography') }}">elsewhere</a>.</p>
<p>The two main mechanisms for allowing people who need strong anonymity to use the network are <p>The two main mechanisms for allowing people who need strong anonymity to use the network are
explicitly delayed garlic routed messages and more comprehensive tunnels to include support for pooling explicitly delayed garlic routed messages and more comprehensive tunnels to include support for pooling
@ -111,7 +111,7 @@ flexible and anonymous transports.</p>
<p>Some questions have been raised with regards to the scalability of I2P, and reasonably so. There <p>Some questions have been raised with regards to the scalability of I2P, and reasonably so. There
will certainly be more analysis over time, but peer lookup and integration should be bounded by will certainly be more analysis over time, but peer lookup and integration should be bounded by
<code>O(log(N))</code> due to the <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkdatabase') }}">network database</a>'s algorithm, while end to end <code>O(log(N))</code> due to the <a href="{{ site_url('docs/how/networkdatabase') }}">network database</a>'s algorithm, while end to end
messages should be <code>O(1)</code> (scale free), since messages go out K hops through the outbound messages should be <code>O(1)</code> (scale free), since messages go out K hops through the outbound
tunnel and another K hops through the inbound tunnel, with K no longer than 3. tunnel and another K hops through the inbound tunnel, with K no longer than 3.
The size of the network (N) bears no impact.</p> The size of the network (N) bears no impact.</p>
@ -144,7 +144,7 @@ There are currently no scheduled development meetings, however
<h2>Additional Information</h2> <h2>Additional Information</h2>
<p> <p>
See <a href="{{ url_for('site_show', lang=g.lang, page='docs/how') }}">the Index to Technical Documentation</a> See <a href="{{ site_url('docs/how') }}">the Index to Technical Documentation</a>
</p> </p>
{% endblock %} {% endblock %}

View File

@ -37,8 +37,8 @@ supports hidden services as well). In addition, Tor
takes the directory-based approach - providing a takes the directory-based approach - providing a
centralized point to manage the overall 'view' of the centralized point to manage the overall 'view' of the
network, as well as gather and report statistics, as network, as well as gather and report statistics, as
opposed to I2P's distributed <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkdatabase') }}">network opposed to I2P's distributed <a href="{{ site_url('docs/how/networkdatabase') }}">network
database</a> and <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/peerselection') }}">peer selection</a>.</p> database</a> and <a href="{{ site_url('docs/how/peerselection') }}">peer selection</a>.</p>
<p>The I2P/Tor outproxy functionality does have a few <p>The I2P/Tor outproxy functionality does have a few
substantial weaknesses against certain attackers - substantial weaknesses against certain attackers -

View File

@ -506,7 +506,7 @@
<h2 id="threat">Threat Analysis</h2> <h2 id="threat">Threat Analysis</h2>
<p> <p>
Also discussed on <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/threatmodel') }}#floodfill">the threat model page</a>. Also discussed on <a href="{{ site_url('docs/how/threatmodel') }}#floodfill">the threat model page</a>.
</p> </p>
<p> <p>
A hostile user may attempt to harm the network by A hostile user may attempt to harm the network by
@ -538,7 +538,7 @@
<h3>Slow or Unresponsive</h3> <h3>Slow or Unresponsive</h3>
<p> <p>
Each router maintains an expanded set of statistics in the Each router maintains an expanded set of statistics in the
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/peerselection') }}">peer profile</a> for each floodfill router, <a href="{{ site_url('docs/how/peerselection') }}">peer profile</a> for each floodfill router,
covering various quality metrics for that peer. covering various quality metrics for that peer.
The set includes: The set includes:
</p> </p>
@ -709,7 +709,7 @@ This attack becomes more difficult as the network size grows.
</p> </p>
<p> <p>
This doesn't have much to do with floodfill, but see This doesn't have much to do with floodfill, but see
the <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/peerselection') }}">peer selection page</a> the <a href="{{ site_url('docs/how/peerselection') }}">peer selection page</a>
for a discussion of the vulnerabilities of peer selection for tunnels. for a discussion of the vulnerabilities of peer selection for tunnels.
</p> </p>
@ -722,8 +722,8 @@ This attack becomes more difficult as the network size grows.
This paper addresses weaknesses in the "Finger Table" DHT lookups used by Torsk and NISAN. This paper addresses weaknesses in the "Finger Table" DHT lookups used by Torsk and NISAN.
At first glance, these do not appear to apply to I2P. First, the use of DHT by Torsk and NISAN At first glance, these do not appear to apply to I2P. First, the use of DHT by Torsk and NISAN
is significantly different from that in I2P. Second, I2P's network database lookups are only is significantly different from that in I2P. Second, I2P's network database lookups are only
loosely correlated to the <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/peerselection') }}">peer selection</a> and loosely correlated to the <a href="{{ site_url('docs/how/peerselection') }}">peer selection</a> and
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/tunnelrouting') }}">tunnel building</a> processes; only previously-known peers <a href="{{ site_url('docs/how/tunnelrouting') }}">tunnel building</a> processes; only previously-known peers
are used for tunnels. are used for tunnels.
Also, peer selection is unrelated to any notion of DHT key-closeness. Also, peer selection is unrelated to any notion of DHT key-closeness.
</p> </p>
@ -739,7 +739,7 @@ This attack becomes more difficult as the network size grows.
The floodfill routers are in a position to observe queries and gather information. The floodfill routers are in a position to observe queries and gather information.
Certainly, at a level of <i>f</i> = 0.2 (20% malicious nodes, as specifed in the paper) Certainly, at a level of <i>f</i> = 0.2 (20% malicious nodes, as specifed in the paper)
we expect that many of the Sybil threats we describe we expect that many of the Sybil threats we describe
(<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/threatmodel') }}#sybil">here</a>, (<a href="{{ site_url('docs/how/threatmodel') }}#sybil">here</a>,
<a href="#sybil">here</a> and <a href="#sybil">here</a> and
<a href="#sybil-partial">here</a>) <a href="#sybil-partial">here</a>)
become problematic for several reasons. become problematic for several reasons.

View File

@ -11,14 +11,14 @@ Updated July 2010 for release 0.8
<p><b>Peer profiling</b> is the process of collecting data based on the <b>observed</b> performance <p><b>Peer profiling</b> is the process of collecting data based on the <b>observed</b> performance
of other routers or peers, and classifying those peers into groups. of other routers or peers, and classifying those peers into groups.
Profiling does <b>not</b> use any claimed performance data published by the peer itself Profiling does <b>not</b> use any claimed performance data published by the peer itself
in the <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkdatabase') }}">network database</a>. in the <a href="{{ site_url('docs/how/networkdatabase') }}">network database</a>.
<p> <p>
Profiles are used for two purposes: Profiles are used for two purposes:
<ol> <ol>
<li>Selecting peers to relay our traffic through, which is discussed below <li>Selecting peers to relay our traffic through, which is discussed below
<li>Choosing peers from the set of floodfill routers to use for network database storage and queries, <li>Choosing peers from the set of floodfill routers to use for network database storage and queries,
which is discussed on the <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkdatabase') }}">network database</a> page which is discussed on the <a href="{{ site_url('docs/how/networkdatabase') }}">network database</a> page
</ol> </ol>
@ -38,7 +38,7 @@ All peer selection is done through profiling.
This prevents simple attacks based on peers claiming high bandwidth This prevents simple attacks based on peers claiming high bandwidth
in order to capture large numbers of tunnels. in order to capture large numbers of tunnels.
It also makes It also makes
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/threatmodel') }}#timing">timing attacks</a> <a href="{{ site_url('docs/how/threatmodel') }}#timing">timing attacks</a>
more difficult. more difficult.
</p> </p>
<p> <p>

View File

@ -24,7 +24,7 @@ More review of existing literature (much of it focused on Tor) and original
work focused on I2P is needed.</p> work focused on I2P is needed.</p>
<h2>Network Topology Summary</h2> <h2>Network Topology Summary</h2>
<p>I2P builds off the ideas of many <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkcomparisons') }}">other</a> <p>I2P builds off the ideas of many <a href="{{ site_url('docs/how/networkcomparisons') }}">other</a>
<a href="links">systems</a>, but a few key points should be kept in mind when <a href="links">systems</a>, but a few key points should be kept in mind when
reviewing related literature:</p><ul> reviewing related literature:</p><ul>
<li><b>I2P is a free route mixnet</b> - the message creator explicitly defines the <li><b>I2P is a free route mixnet</b> - the message creator explicitly defines the
@ -88,8 +88,8 @@ As we continue to spread the word and grow the network,
these attacks will become much harder. these attacks will become much harder.
</p><p> </p><p>
The The
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkcomparisons') }}">network comparisons</a> and <a href="{{ site_url('docs/how/networkcomparisons') }}">network comparisons</a> and
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/garlicrouting') }}">"garlic" terminology</a> pages may also be helpful <a href="{{ site_url('docs/how/garlicrouting') }}">"garlic" terminology</a> pages may also be helpful
to review. to review.
</p> </p>
@ -147,7 +147,7 @@ routers contain limits as to how many tunnels can be routed through a single pee
As the network grows, these limits are subject to further adjustment. As the network grows, these limits are subject to further adjustment.
Other mechanisms for peer rating, selection and avoidance Other mechanisms for peer rating, selection and avoidance
are discussed on the are discussed on the
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/peerselection') }}">peer selection page</a>. <a href="{{ site_url('docs/how/peerselection') }}">peer selection page</a>.
</p> </p>
@ -203,7 +203,7 @@ Partial defenses implemented in I2P:
<ul><li> <ul><li>
<a href="tunnel-alt.html#ordering">strict ordering</a> of peers <a href="tunnel-alt.html#ordering">strict ordering</a> of peers
</li><li> </li><li>
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/peerselection') }}">peer profiling and selection</a> from a small group that changes slowly <a href="{{ site_url('docs/how/peerselection') }}">peer profiling and selection</a> from a small group that changes slowly
</li><li> </li><li>
Limits on the number of tunnels routed through a single peer Limits on the number of tunnels routed through a single peer
</li><li> </li><li>
@ -211,7 +211,7 @@ Prevention of peers from the same /16 IP range from being members of a single tu
</li><li> </li><li>
For eepsites or other hosted services, we support For eepsites or other hosted services, we support
simultaneous hosting on multiple routers, or simultaneous hosting on multiple routers, or
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/threatmodel') }}#intersection">multihoming</a> <a href="{{ site_url('docs/how/threatmodel') }}#intersection">multihoming</a>
</li></ul> </li></ul>
Even in total, these defenses are not a complete solution. Even in total, these defenses are not a complete solution.
@ -270,7 +270,7 @@ each with different costs and consequences:</p><ul>
Alternatively, the nodes may provide intermittent service by periodically Alternatively, the nodes may provide intermittent service by periodically
dropping selected traffic, or refusing connections to certain peers. dropping selected traffic, or refusing connections to certain peers.
This behavior may be indistinguishable from that of a heavily-loaded or failing node. This behavior may be indistinguishable from that of a heavily-loaded or failing node.
I2P addresses these issues by maintaining <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/peerselection') }}">profiles</a> on the I2P addresses these issues by maintaining <a href="{{ site_url('docs/how/peerselection') }}">profiles</a> on the
peers, attempting to identify underperforming ones and simply ignoring peers, attempting to identify underperforming ones and simply ignoring
them, or using them rarely. them, or using them rarely.
We have significantly enhanced the We have significantly enhanced the
@ -305,10 +305,10 @@ each with different costs and consequences:</p><ul>
A floodfill router may provide bad or no response to lookups, and A floodfill router may provide bad or no response to lookups, and
it may also interfere with inter-floodfill communication. it may also interfere with inter-floodfill communication.
Some defenses and Some defenses and
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/peerselection') }}">peer profiling</a> are implemented, <a href="{{ site_url('docs/how/peerselection') }}">peer profiling</a> are implemented,
however there is much more to do. however there is much more to do.
For more information see the For more information see the
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkdatabase') }}#threat">network database page</a>. <a href="{{ site_url('docs/how/networkdatabase') }}#threat">network database page</a>.
</li> </li>
</ul> </ul>
@ -356,7 +356,7 @@ matter, the attacker would need to control a significant portion of the network
which other tunnels or messages have those delays). which other tunnels or messages have those delays).
</p><p> </p><p>
Also discussed on the Also discussed on the
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkdatabase') }}#threat">network database page</a> (bootstrap attack). <a href="{{ site_url('docs/how/networkdatabase') }}#threat">network database page</a> (bootstrap attack).
</p> </p>
<h3 id="predecessor">Predecessor attacks</h3> <h3 id="predecessor">Predecessor attacks</h3>
@ -371,7 +371,7 @@ target is located. </p>
<p>I2P avoids this in four ways: first, the peers selected to participate in <p>I2P avoids this in four ways: first, the peers selected to participate in
tunnels are not randomly sampled throughout the network - they are derived from tunnels are not randomly sampled throughout the network - they are derived from
the <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/peerselection') }}">peer selection</a> algorithm which breaks them the <a href="{{ site_url('docs/how/peerselection') }}">peer selection</a> algorithm which breaks them
into tiers. Second, with <a href="tunnel-alt.html#ordering">strict ordering</a> of peers into tiers. Second, with <a href="tunnel-alt.html#ordering">strict ordering</a> of peers
in a tunnel, the fact that a peer shows up more frequently does not mean they're in a tunnel, the fact that a peer shows up more frequently does not mean they're
the source. Third, with <a href="tunnel-alt.html#length">permuted tunnel length</a> the source. Third, with <a href="tunnel-alt.html#length">permuted tunnel length</a>
@ -505,7 +505,7 @@ in several IP blocks.
However, this is not a meaningful defense against a powerful adversary. However, this is not a meaningful defense against a powerful adversary.
</p><p> </p><p>
See the See the
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkdatabase') }}#threat">network database page</a> <a href="{{ site_url('docs/how/networkdatabase') }}#threat">network database page</a>
for more Sybil discussion. for more Sybil discussion.
</p> </p>
@ -521,7 +521,7 @@ that a tunnel is formed wholly from its set of colluding routers.
The chances of success are enhanced if there is a large number of colluding routers, The chances of success are enhanced if there is a large number of colluding routers,
i.e. a <a href="#sybil">Sybil attack</a>. i.e. a <a href="#sybil">Sybil attack</a>.
This is somewhat mitigated by our This is somewhat mitigated by our
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/peerselection') }}">peer profiling</a> methods used to monitor the performance <a href="{{ site_url('docs/how/peerselection') }}">peer profiling</a> methods used to monitor the performance
of peers. of peers.
However, this is a powerful attack as the number of routers approaches However, this is a powerful attack as the number of routers approaches
<i>f</i> = 0.2, or 20% malicious nodes, as specifed in the paper. <i>f</i> = 0.2, or 20% malicious nodes, as specifed in the paper.
@ -537,7 +537,7 @@ Further research and defenses may be necessary.
<p> <p>
We use strong cryptography with long keys, and We use strong cryptography with long keys, and
we assume the security of the industry-standard cryptographic primitives used in I2P, as documented we assume the security of the industry-standard cryptographic primitives used in I2P, as documented
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/cryptography') }}">on the low-level cryptography page</a>. <a href="{{ site_url('docs/how/cryptography') }}">on the low-level cryptography page</a>.
Security features Security features
include the immediate detection of include the immediate detection of
altered messages along the path, the inability to decrypt messages not addressed to you, altered messages along the path, the inability to decrypt messages not addressed to you,
@ -555,7 +555,7 @@ shared secret values while maintaining backward compatibility.
</p><p> </p><p>
Upgrading the various data structures and protocols to support longer keys Upgrading the various data structures and protocols to support longer keys
will have to be tackled eventually, and this will be a will have to be tackled eventually, and this will be a
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/cryptography') }}">major undertaking</a>, just as it will be for <a href="{{ site_url('docs/how/cryptography') }}">major undertaking</a>, just as it will be for
<a href="https://torproject.org/">others</a>. <a href="https://torproject.org/">others</a>.
Hopefully, through careful planning, we can minimize the disruption, and Hopefully, through careful planning, we can minimize the disruption, and
implement mechanisms to make it easier for future transitions. implement mechanisms to make it easier for future transitions.
@ -578,9 +578,9 @@ in the netDb, and the high frequency of communication with those participants.
This is somewhat mitigated because floodfill routers only manage a portion This is somewhat mitigated because floodfill routers only manage a portion
of the total keyspace, and the keyspace rotates daily, as explained of the total keyspace, and the keyspace rotates daily, as explained
on the on the
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkdatabase') }}#threat">network database page</a>. <a href="{{ site_url('docs/how/networkdatabase') }}#threat">network database page</a>.
The specific mechanisms by which routers communicate with floodfills have been The specific mechanisms by which routers communicate with floodfills have been
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkdatabase') }}#delivery">carefully designed</a>. <a href="{{ site_url('docs/how/networkdatabase') }}#delivery">carefully designed</a>.
However, these threats should be studied further. However, these threats should be studied further.
The specific potential threats and corresponding defenses are a topic for future research. The specific potential threats and corresponding defenses are a topic for future research.
</p> </p>
@ -592,7 +592,7 @@ The specific potential threats and corresponding defenses are a topic for future
creating one or more floodfill routers and crafting them to offer creating one or more floodfill routers and crafting them to offer
bad, slow, or no responses. bad, slow, or no responses.
Several scenarios are discussed on the Several scenarios are discussed on the
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkdatabase') }}#threat">network database page</a>. <a href="{{ site_url('docs/how/networkdatabase') }}#threat">network database page</a>.
</p> </p>

View File

@ -10,7 +10,7 @@ Updated July 2011 for release 0.8.7
This page contains an overview of I2P tunnel terminology and operation, with This page contains an overview of I2P tunnel terminology and operation, with
links to more technical pages, details, and specifications. links to more technical pages, details, and specifications.
</p> </p>
<p>As briefly explained in the <a href="{{ url_for('site_show', lang=g.lang, page='docs/how') }}">introduction</a>, I2P builds virtual "tunnels" - <p>As briefly explained in the <a href="{{ site_url('docs/how') }}">introduction</a>, I2P builds virtual "tunnels" -
temporary and unidirectional paths through a sequence of routers. These temporary and unidirectional paths through a sequence of routers. These
tunnels are classified as either inbound tunnels (where everything tunnels are classified as either inbound tunnels (where everything
given to it goes towards the creator of the tunnel) or outbound tunnels given to it goes towards the creator of the tunnel) or outbound tunnels
@ -35,7 +35,7 @@ F: Inbound Endpoint (Bob)
<ul> <ul>
<li class="gap"><b>Tunnel gateway</b> - the first router in a tunnel. For inbound tunnels, <li class="gap"><b>Tunnel gateway</b> - the first router in a tunnel. For inbound tunnels,
this is the one mentioned in the LeaseSet published in the this is the one mentioned in the LeaseSet published in the
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkdatabase') }}">network database</a>. For outbound tunnels, the <a href="{{ site_url('docs/how/networkdatabase') }}">network database</a>. For outbound tunnels, the
gateway is the originating router. (e.g. both A and D above)</li> gateway is the originating router. (e.g. both A and D above)</li>
<li class="gap"><b>Tunnel endpoint</b> - the last router in a tunnel. (e.g. both C and F above)</li> <li class="gap"><b>Tunnel endpoint</b> - the last router in a tunnel. (e.g. both C and F above)</li>
<li class="gap"><b>Tunnel participant</b> - all routers in a tunnel except for the gateway or <li class="gap"><b>Tunnel participant</b> - all routers in a tunnel except for the gateway or
@ -157,7 +157,7 @@ but could show similar information (though would be slightly harder to mount)</p
<h3>1-hop tunnels</h3> <h3>1-hop tunnels</h3>
<p>With only one remote router in a tunnel, the user has both plausible <p>With only one remote router in a tunnel, the user has both plausible
deniability and basic anonymity, as long as they are not up against an internal deniability and basic anonymity, as long as they are not up against an internal
adversary (as described on <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/threatmodel') }}">threat model</a>). However, adversary (as described on <a href="{{ site_url('docs/how/threatmodel') }}">threat model</a>). However,
if the adversary ran a sufficient number of routers such that the single remote if the adversary ran a sufficient number of routers such that the single remote
router in the tunnel is often one of those compromised ones, they would be able router in the tunnel is often one of those compromised ones, they would be able
to mount the above statistical traffic analysis attack.</p> to mount the above statistical traffic analysis attack.</p>
@ -190,12 +190,12 @@ DeliveryStatusMessage out an outbound tunnel and bound for another inbound tunne
functional. If it was used for a client's inbound tunnel, a new leaseSet functional. If it was used for a client's inbound tunnel, a new leaseSet
is created. is created.
Tunnel test failures are also reflected in the Tunnel test failures are also reflected in the
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/peerselection') }}#capacity">capacity rating in the peer profile</a>. <a href="{{ site_url('docs/how/peerselection') }}#capacity">capacity rating in the peer profile</a>.
</p> </p>
<h2>Tunnel creation</h2> <h2>Tunnel creation</h2>
<p>Tunnel creation is handled by <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/garlicrouting') }}">garlic routing</a> <p>Tunnel creation is handled by <a href="{{ site_url('docs/how/garlicrouting') }}">garlic routing</a>
a Tunnel Build Message to a router, requesting that they participate in the a Tunnel Build Message to a router, requesting that they participate in the
tunnel (providing them with all of the appropriate information, as above, along tunnel (providing them with all of the appropriate information, as above, along
with a certificate, which right now is a 'null' cert, but will support hashcash with a certificate, which right now is a 'null' cert, but will support hashcash
@ -207,7 +207,7 @@ Details are in the
<h2>Tunnel encryption</h2> <h2>Tunnel encryption</h2>
<p>Multi-layer encryption is handled by <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/garlicrouting') }}">garlic encryption</a> <p>Multi-layer encryption is handled by <a href="{{ site_url('docs/how/garlicrouting') }}">garlic encryption</a>
of tunnel messages. of tunnel messages.
Details are in the Details are in the
<a href="tunnel-alt.html">tunnel specification</a>. <a href="tunnel-alt.html">tunnel specification</a>.
@ -245,9 +245,9 @@ tunnel's lifetime may be implemented (e.g. no more than 300 messages or
</li><li> </li><li>
<a href="tunnel_message_spec.html">tunnel message specification</a> <a href="tunnel_message_spec.html">tunnel message specification</a>
</li><li> </li><li>
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/garlicrouting') }}">garlic routing</a> <a href="{{ site_url('docs/how/garlicrouting') }}">garlic routing</a>
</li><li> </li><li>
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/elgamalaes') }}">ElGamal/AES+SessionTag</a> <a href="{{ site_url('docs/how/elgamalaes') }}">ElGamal/AES+SessionTag</a>
</li><li> </li><li>
<a href="i2cp.html#options">I2CP options</a> <a href="i2cp.html#options">I2CP options</a>
</li> </li>

View File

@ -306,7 +306,7 @@
<h2 id="op.netdb">Network Database</h2> <h2 id="op.netdb">Network Database</h2>
<p> <p>
As mentioned earlier, I2P's netDb works to share the network's metadata. As mentioned earlier, I2P's netDb works to share the network's metadata.
This is detailed in <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkdatabase') }}">the networkdatabase</a> page, This is detailed in <a href="{{ site_url('docs/how/networkdatabase') }}">the networkdatabase</a> page,
but a basic explanation is available below. but a basic explanation is available below.
</p> </p>
<p> <p>
@ -320,7 +320,7 @@
If a floodfill router receives a 'store' query, it will spread the information to other floodfill routers If a floodfill router receives a 'store' query, it will spread the information to other floodfill routers
using the <a href="http://en.wikipedia.org/wiki/Kademlia">Kademlia algorithm</a>. using the <a href="http://en.wikipedia.org/wiki/Kademlia">Kademlia algorithm</a>.
The 'lookup' queries currently function differently, to avoid an important The 'lookup' queries currently function differently, to avoid an important
<a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkdatabase') }}#lookup">security issue</a>. <a href="{{ site_url('docs/how/networkdatabase') }}#lookup">security issue</a>.
When a lookup is done, the floodfill router will not forward the lookup to other peers, When a lookup is done, the floodfill router will not forward the lookup to other peers,
but will always answer by itself (if it has the requested data). but will always answer by itself (if it has the requested data).
</p> </p>
@ -576,7 +576,7 @@ What other tunnel peer selection and ordering strategies should be available?
the research results of existing systems and papers. While there are a few the research results of existing systems and papers. While there are a few
similar efforts worth reviewing, both for technical and functional comparisons, similar efforts worth reviewing, both for technical and functional comparisons,
two in particular are pulled out here - Tor and Freenet. </p> two in particular are pulled out here - Tor and Freenet. </p>
<p> See also the <a href="{{ url_for('site_show', lang=g.lang, page='docs/how/networkcomparisons') }}">Network Comparisons Page</a>. <p> See also the <a href="{{ site_url('docs/how/networkcomparisons') }}">Network Comparisons Page</a>.
</p> </p>
<h2 id="similar.tor">Tor</h2> <h2 id="similar.tor">Tor</h2>