forked from I2P_Developers/i2p.www
More URL fixes
This commit is contained in:
@@ -5,12 +5,12 @@
|
|||||||
Note: This document contains older information about alternatives to the
|
Note: This document contains older information about alternatives to the
|
||||||
current tunnel implementation in I2P,
|
current tunnel implementation in I2P,
|
||||||
and speculation on future possibilities. For current information see
|
and speculation on future possibilities. For current information see
|
||||||
<a href="tunnel-alt.html">the tunnel page</a>.
|
<a href="{{ site_url('docs/tunnels/implementation') }}">the tunnel page</a>.
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
That page documents the current tunnel build implementation as of release 0.6.1.10.
|
That page documents the current tunnel build implementation as of release 0.6.1.10.
|
||||||
The older tunnel build method, used prior to release 0.6.1.10, is documented on
|
The older tunnel build method, used prior to release 0.6.1.10, is documented on
|
||||||
<a href="tunnel.html">the old tunnel page</a>.
|
<a href="{{ site_url('docs/tunnels/old-implementation') }}">the old tunnel page</a>.
|
||||||
|
|
||||||
<h3 id="config">Configuration Alternatives</h3>
|
<h3 id="config">Configuration Alternatives</h3>
|
||||||
<p>Beyond their length, there may be additional configurable parameters
|
<p>Beyond their length, there may be additional configurable parameters
|
||||||
@@ -150,7 +150,7 @@ Reference:
|
|||||||
|
|
||||||
<h4 id="tunnel.building.old">Old tunnel build method</h4>
|
<h4 id="tunnel.building.old">Old tunnel build method</h4>
|
||||||
The old tunnel build method, used prior to release 0.6.1.10, is documented on
|
The old tunnel build method, used prior to release 0.6.1.10, is documented on
|
||||||
<a href="tunnel.html">the old tunnel page</a>.
|
<a href="{{ site_url('docs/tunnels/old-implementation') }}">the old tunnel page</a>.
|
||||||
This was an "all at once" or "parallel" method,
|
This was an "all at once" or "parallel" method,
|
||||||
where messages were sent in parallel to each of the participants.
|
where messages were sent in parallel to each of the participants.
|
||||||
|
|
||||||
@@ -213,9 +213,9 @@ Sponge has proposed using 'tokens' of some sort.
|
|||||||
<p>
|
<p>
|
||||||
Any students of tunnel building must study the historical record leading up to the current method,
|
Any students of tunnel building must study the historical record leading up to the current method,
|
||||||
especially the various anonymity vulnerabilities that may exist in various methods.
|
especially the various anonymity vulnerabilities that may exist in various methods.
|
||||||
The mail archives from October 2005 at <a href="http://zzz.i2p/archives/2005-10/">zzz.i2p</a> or
|
The mail archives from October 2005 at <a href="http://{{ i2pconv('zzz.i2p') }}/archives/2005-10/">zzz.i2p</a> or
|
||||||
<a href="http://osdir.com/ml/network.i2p/2005-10/">osdir.com</a> are particularly helpful.
|
<a href="http://osdir.com/ml/network.i2p/2005-10/">osdir.com</a> are particularly helpful.
|
||||||
As stated on <a href="tunnel-alt-creation.html">the tunnel creation specification</a>,
|
As stated on <a href="{{ site_url('docs/spec/tunnel-creation') }}">the tunnel creation specification</a>,
|
||||||
the current strategy came about during a discussion on the I2P mailing list between
|
the current strategy came about during a discussion on the I2P mailing list between
|
||||||
Michael Rogers, Matthew Toseland (toad), and jrandom regarding the predecessor attack.
|
Michael Rogers, Matthew Toseland (toad), and jrandom regarding the predecessor attack.
|
||||||
See:<a href="http://osdir.com/ml/network.i2p/2005-10/msg00138.html">Summary</a> and
|
See:<a href="http://osdir.com/ml/network.i2p/2005-10/msg00138.html">Summary</a> and
|
||||||
@@ -240,6 +240,6 @@ reordering, rerouting, or padding messages? To what extent should this be done
|
|||||||
automatically, how much should be configured as a per tunnel or per hop setting,
|
automatically, how much should be configured as a per tunnel or per hop setting,
|
||||||
and how should the tunnel's creator (and in turn, user) control this operation?
|
and how should the tunnel's creator (and in turn, user) control this operation?
|
||||||
All of this is left as unknown, to be worked out for
|
All of this is left as unknown, to be worked out for
|
||||||
<a href="http://www.i2p.net/roadmap#3.0">I2P 3.0</a></p>
|
<a href="{{ site_url('get-involved/roadmap') }}#v3.0">I2P 3.0</a></p>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@@ -23,11 +23,11 @@ They are not complete messages.
|
|||||||
</p>
|
</p>
|
||||||
<h4>Contents</h4>
|
<h4>Contents</h4>
|
||||||
<p>
|
<p>
|
||||||
1 byte <a href="{{ site_url('docs/spec/common_structures') }}#type_Integer">Integer</a> specifying the type of this message,
|
1 byte <a href="{{ site_url('docs/spec/common-structures') }}#type_Integer">Integer</a> specifying the type of this message,
|
||||||
followed by a 4 byte <a href="{{ site_url('docs/spec/common_structures') }}#type_Integer">Integer</a> specifying the message-id.
|
followed by a 4 byte <a href="{{ site_url('docs/spec/common-structures') }}#type_Integer">Integer</a> specifying the message-id.
|
||||||
After that there is an expiration <a href="{{ site_url('docs/spec/common_structures') }}#type_Date">Date</a>,
|
After that there is an expiration <a href="{{ site_url('docs/spec/common-structures') }}#type_Date">Date</a>,
|
||||||
followed by a 2 byte <a href="{{ site_url('docs/spec/common_structures') }}#type_Integer">Integer</a> specifying
|
followed by a 2 byte <a href="{{ site_url('docs/spec/common-structures') }}#type_Integer">Integer</a> specifying
|
||||||
the length of the message payload, followed by a <a href="{{ site_url('docs/spec/common_structures') }}#type_Hash">Hash</a>,
|
the length of the message payload, followed by a <a href="{{ site_url('docs/spec/common-structures') }}#type_Hash">Hash</a>,
|
||||||
which is truncated to the first byte. After that the actual message data follows.
|
which is truncated to the first byte. After that the actual message data follows.
|
||||||
</p>
|
</p>
|
||||||
<pre>
|
<pre>
|
||||||
@@ -110,12 +110,12 @@ where the far-end router's version is known and checksum generation can be disab
|
|||||||
<h4>Description</h4>
|
<h4>Description</h4>
|
||||||
<p>
|
<p>
|
||||||
One Record in a set of multiple records to request the creation of one hop in the tunnel. For more details see
|
One Record in a set of multiple records to request the creation of one hop in the tunnel. For more details see
|
||||||
<a href="tunnel-alt.html">the tunnel overview</a> and
|
<a href="{{ site_url('docs/tunnels/implementation') }}">the tunnel overview</a> and
|
||||||
<a href="tunnel-alt-creation.html">the tunnel creation specification</a>.
|
<a href="{{ site_url('docs/spec/tunnel-creation') }}">the tunnel creation specification</a>.
|
||||||
</p>
|
</p>
|
||||||
<h4>Contents</h4>
|
<h4>Contents</h4>
|
||||||
<p>
|
<p>
|
||||||
<a href="{{ site_url('docs/spec/common_structures') }}#type_TunnelId">TunnelId</a> to receive messages on, followed by the <a href="{{ site_url('docs/spec/common_structures') }}#type_Hash">Hash</a> of our <a href="{{ site_url('docs/spec/common_structures') }}#struct_RouterIdentity">RouterIdentity</a>. After that the <a href="{{ site_url('docs/spec/common_structures') }}#type_TunnelId">TunnelId</a> and the <a href="{{ site_url('docs/spec/common_structures') }}#type_Hash">Hash</a> of the next router's <a href="{{ site_url('docs/spec/common_structures') }}#struct_RouterIdentity">RouterIdentity</a> follow.
|
<a href="{{ site_url('docs/spec/common-structures') }}#type_TunnelId">TunnelId</a> to receive messages on, followed by the <a href="{{ site_url('docs/spec/common-structures') }}#type_Hash">Hash</a> of our <a href="{{ site_url('docs/spec/common-structures') }}#struct_RouterIdentity">RouterIdentity</a>. After that the <a href="{{ site_url('docs/spec/common-structures') }}#type_TunnelId">TunnelId</a> and the <a href="{{ site_url('docs/spec/common-structures') }}#type_Hash">Hash</a> of the next router's <a href="{{ site_url('docs/spec/common-structures') }}#struct_RouterIdentity">RouterIdentity</a> follow.
|
||||||
</p>
|
</p>
|
||||||
<h4>Definition</h4>
|
<h4>Definition</h4>
|
||||||
<pre>
|
<pre>
|
||||||
@@ -274,7 +274,7 @@ the ElGamal data contains bytes 1-256 and 258-513 of the
|
|||||||
<a href="{{ site_url('docs/how/cryptography') }}#elgamal">514-byte ElGamal encrypted block</a>.
|
<a href="{{ site_url('docs/how/cryptography') }}#elgamal">514-byte ElGamal encrypted block</a>.
|
||||||
The two padding bytes from the block (the zero bytes at locations 0 and 257) are removed.
|
The two padding bytes from the block (the zero bytes at locations 0 and 257) are removed.
|
||||||
</li><li>
|
</li><li>
|
||||||
See the <a href="tunnel-alt-creation.html">tunnel creation specification</a> for details on field contents.
|
See the <a href="{{ site_url('docs/spec/tunnel-creation') }}">tunnel creation specification</a> for details on field contents.
|
||||||
</li></ul>
|
</li></ul>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -312,7 +312,7 @@ total length: 528
|
|||||||
The first 527 bytes could, in the future, be used to return congestion or peer connectivity information
|
The first 527 bytes could, in the future, be used to return congestion or peer connectivity information
|
||||||
back to the requestor.
|
back to the requestor.
|
||||||
</li><li>
|
</li><li>
|
||||||
See the <a href="tunnel-alt-creation.html">tunnel creation specification</a> for details on the reply field.
|
See the <a href="{{ site_url('docs/spec/tunnel-creation') }}">tunnel creation specification</a> for details on the reply field.
|
||||||
</li></ul>
|
</li></ul>
|
||||||
|
|
||||||
|
|
||||||
@@ -380,7 +380,7 @@ Certificate :: Always NULL in the current implementation (3 bytes total, all zer
|
|||||||
|
|
||||||
|
|
||||||
<h3 id="struct_DeliveryInstructions">Delivery Instructions</h3>
|
<h3 id="struct_DeliveryInstructions">Delivery Instructions</h3>
|
||||||
Defined in the <a href="tunnel_message_spec.html#delivery">Tunnel Message Specification</a>.
|
Defined in the <a href="{{ site_url('docs/spec/tunnel-message') }}#delivery">Tunnel Message Specification</a>.
|
||||||
|
|
||||||
|
|
||||||
<h2 id="messages">Messages</h2>
|
<h2 id="messages">Messages</h2>
|
||||||
@@ -508,7 +508,7 @@ reply token:
|
|||||||
reply tunnelId:
|
reply tunnelId:
|
||||||
4 byte Tunnel ID
|
4 byte Tunnel ID
|
||||||
only included if reply token > 0
|
only included if reply token > 0
|
||||||
This is the <a href="{{ site_url('docs/spec/common_structures') }}#type_TunnelID">tunnel ID</a> of the inbound gateway of the tunnel the response should be sent to
|
This is the <a href="{{ site_url('docs/spec/common-structures') }}#type_TunnelID">tunnel ID</a> of the inbound gateway of the tunnel the response should be sent to
|
||||||
|
|
||||||
reply gateway:
|
reply gateway:
|
||||||
32 bytes
|
32 bytes
|
||||||
@@ -801,11 +801,11 @@ Expiration :: Date (8 bytes)
|
|||||||
the minimum size of the encrypted message is 160 bytes; with the 4 length bytes
|
the minimum size of the encrypted message is 160 bytes; with the 4 length bytes
|
||||||
the minimum size of the Garlic Message is 164 bytes.
|
the minimum size of the Garlic Message is 164 bytes.
|
||||||
<li>
|
<li>
|
||||||
Actual max length is less than 64 KB; see the <a href="i2np.html">I2NP Overview</a>.
|
Actual max length is less than 64 KB; see the <a href="{{ site_url('docs/protocol/i2np') }}">I2NP Overview</a>.
|
||||||
<li>
|
<li>
|
||||||
See also the <a href="{{ site_url('docs/how/elgamalaes') }}">ElGamal/AES specification</a>.
|
See also the <a href="{{ site_url('docs/how/elgamal-aes') }}">ElGamal/AES specification</a>.
|
||||||
<li>
|
<li>
|
||||||
See also the <a href="{{ site_url('docs/how/garlicrouting') }}">garlic routing specification</a>.
|
See also the <a href="{{ site_url('docs/how/garlic-routing') }}">garlic routing specification</a>.
|
||||||
<li>
|
<li>
|
||||||
The 128 byte minimum size of the AES encrypted block is not currently configurable,
|
The 128 byte minimum size of the AES encrypted block is not currently configurable,
|
||||||
however the minimum size of a DataMessage in a GarlicClove in a GarlicMessage, with
|
however the minimum size of a DataMessage in a GarlicClove in a GarlicMessage, with
|
||||||
@@ -851,7 +851,7 @@ data:
|
|||||||
<h4>Notes</h4>
|
<h4>Notes</h4>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
See also the <a href="{{ site_url('docs/spec/tunnel_message') }}">Tunnel Message Specification</a>
|
See also the <a href="{{ site_url('docs/spec/tunnel-message') }}">Tunnel Message Specification</a>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
@@ -949,7 +949,7 @@ Total size: 8*528 = 4224 bytes
|
|||||||
|
|
||||||
<h4>Notes</h4>
|
<h4>Notes</h4>
|
||||||
<p>
|
<p>
|
||||||
See also the <a href="tunnel-alt-creation.html">tunnel creation specification</a>.
|
See also the <a href="{{ site_url('docs/spec/tunnel-creation') }}">tunnel creation specification</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
@@ -962,7 +962,7 @@ same format as TunnelBuild message, with Build Response Records
|
|||||||
|
|
||||||
<h4>Notes</h4>
|
<h4>Notes</h4>
|
||||||
<p>
|
<p>
|
||||||
See also the <a href="tunnel-alt-creation.html">tunnel creation specification</a>.
|
See also the <a href="{{ site_url('docs/spec/tunnel-creation') }}">tunnel creation specification</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h3 id="msg_VariableTunnelBuild">VariableTunnelBuild</h3>
|
<h3 id="msg_VariableTunnelBuild">VariableTunnelBuild</h3>
|
||||||
@@ -993,7 +993,7 @@ Total size: 1 + $num*528
|
|||||||
<li>
|
<li>
|
||||||
This message was introduced in router version 0.7.12, and may not be sent to tunnel participants earlier than that version.
|
This message was introduced in router version 0.7.12, and may not be sent to tunnel participants earlier than that version.
|
||||||
<li>
|
<li>
|
||||||
See also the <a href="tunnel-alt-creation.html">tunnel creation specification</a>.
|
See also the <a href="{{ site_url('docs/spec/tunnel-creation') }}">tunnel creation specification</a>.
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h3 id="msg_VariableTunnelBuildReply">VariableTunnelBuildReply</h3>
|
<h3 id="msg_VariableTunnelBuildReply">VariableTunnelBuildReply</h3>
|
||||||
@@ -1014,7 +1014,7 @@ Same format as VariableTunnelBuild message, with Build Response Records.
|
|||||||
<li>
|
<li>
|
||||||
This message was introduced in router version 0.7.12, and may not be sent to tunnel participants earlier than that version.
|
This message was introduced in router version 0.7.12, and may not be sent to tunnel participants earlier than that version.
|
||||||
<li>
|
<li>
|
||||||
See also the <a href="tunnel-alt-creation.html">tunnel creation specification</a>.
|
See also the <a href="{{ site_url('docs/spec/tunnel-creation') }}">tunnel creation specification</a>.
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
@@ -277,7 +277,7 @@ But that's ok. Then you can start and stop i2ptunnel and jetty together.
|
|||||||
So don't count on the router to automatically merge this with some existing eepsite. It probably won't happen.
|
So don't count on the router to automatically merge this with some existing eepsite. It probably won't happen.
|
||||||
Start a new I2PTunnel and Jetty from clients.config.
|
Start a new I2PTunnel and Jetty from clients.config.
|
||||||
The best examples of this are the zzzot and pebble plugins,
|
The best examples of this are the zzzot and pebble plugins,
|
||||||
available at <a href="http://stats.i2p/i2p/plugins/">zzz's plugins page</a>.
|
available at <a href="http://{{ i2pconv('stats.i2p') }}/i2p/plugins/">zzz's plugins page</a>.
|
||||||
<p>
|
<p>
|
||||||
How to get path substitution into jetty.xml?
|
How to get path substitution into jetty.xml?
|
||||||
See zzzot and pebble plugins for examples.
|
See zzzot and pebble plugins for examples.
|
||||||
@@ -301,7 +301,7 @@ whether or not they were previously started.
|
|||||||
Shell script and external program notes
|
Shell script and external program notes
|
||||||
</h3>
|
</h3>
|
||||||
<p>
|
<p>
|
||||||
To run shell scripts or other external programs, see <a href="http://zzz.i2p/topics/141">zzz.i2p</a>
|
To run shell scripts or other external programs, see <a href="http://{{ i2pconv('zzz.i2p') }}/topics/141">{{ i2pconv('zzz.i2p') }}</a>
|
||||||
<p>
|
<p>
|
||||||
To work on both Windows and Linux, write a small Java class that checks the OS type, then
|
To work on both Windows and Linux, write a small Java class that checks the OS type, then
|
||||||
runs ShellCommand on either the .bat or a .sh file you provide.
|
runs ShellCommand on either the .bat or a .sh file you provide.
|
||||||
@@ -346,7 +346,7 @@ could ask.
|
|||||||
There is no reliable way to find the i2p install or config or plugin directory without using the
|
There is no reliable way to find the i2p install or config or plugin directory without using the
|
||||||
context API in i2p.jar.
|
context API in i2p.jar.
|
||||||
<li>
|
<li>
|
||||||
See <a href="http://zzz.i2p/topics/16">Howto</a> for info on generating signing keys and generating/verifying keys and sud files
|
See <a href="http://{{ i2pconv('zzz.i2p') }}/topics/16">Howto</a> for info on generating signing keys and generating/verifying keys and sud files
|
||||||
<li>
|
<li>
|
||||||
All config files must be UTF-8.
|
All config files must be UTF-8.
|
||||||
<li>
|
<li>
|
||||||
@@ -407,7 +407,7 @@ the entire JVM.
|
|||||||
However, as of 0.7.13-3, this was fixed using class loaders, and now, as originally intended,
|
However, as of 0.7.13-3, this was fixed using class loaders, and now, as originally intended,
|
||||||
the specified classpath in clients.config is only for the particular thread.
|
the specified classpath in clients.config is only for the particular thread.
|
||||||
See the section on JVM crashes below, and
|
See the section on JVM crashes below, and
|
||||||
<a href="http://zzz.i2p/topics/633">this thread on zzz.i2p</a> for background.
|
<a href="http://{{ i2pconv('zzz.i2p') }}/topics/633">this thread on zzz.i2p</a> for background.
|
||||||
Therefore, specify the full required classpath for each client.
|
Therefore, specify the full required classpath for each client.
|
||||||
|
|
||||||
|
|
||||||
|
@@ -121,15 +121,15 @@ fragmentation to external adversaries.
|
|||||||
<p>
|
<p>
|
||||||
DSA signatures in the SessionCreated and SessionConfirmed messages are generated using
|
DSA signatures in the SessionCreated and SessionConfirmed messages are generated using
|
||||||
the
|
the
|
||||||
<a href="common_structures_spec.html#type_SigningPublicKey">signing public key</a>
|
<a href="{{ site_url('docs/spec/common-structures') }}#type_SigningPublicKey">signing public key</a>
|
||||||
from the
|
from the
|
||||||
<a href="common_structures_spec.html#struct_RouterIdentity">router identity</a>
|
<a href="{{ site_url('docs/spec/common-structures') }}#struct_RouterIdentity">router identity</a>
|
||||||
which is distributed out-of-band by publishing in the network database, and the associated
|
which is distributed out-of-band by publishing in the network database, and the associated
|
||||||
<a href="common_structures_spec.html#type_SigningPrivateKey">signing private key</a>.
|
<a href="{{ site_url('docs/spec/common-structures') }}#type_SigningPrivateKey">signing private key</a>.
|
||||||
</p><p>
|
</p><p>
|
||||||
Both introduction keys and session keys are 32 bytes,
|
Both introduction keys and session keys are 32 bytes,
|
||||||
and are defined by the
|
and are defined by the
|
||||||
<a href="common_structures_spec.html#type_SessionKey">Common structures specification</a>.
|
<a href="{{ site_url('docs/spec/common-structures') }}#type_SessionKey">Common structures specification</a>.
|
||||||
The key used for the MAC and encryption is specified for each message below.
|
The key used for the MAC and encryption is specified for each message below.
|
||||||
</p>
|
</p>
|
||||||
<p>Introduction keys are delivered through an external channel
|
<p>Introduction keys are delivered through an external channel
|
||||||
@@ -145,7 +145,7 @@ IPv6 addressing is not currently supported within I2P.
|
|||||||
All IP addresses are currently 4 bytes.
|
All IP addresses are currently 4 bytes.
|
||||||
|
|
||||||
<h3 id="time">Timestamps</h3>
|
<h3 id="time">Timestamps</h3>
|
||||||
While most of I2P uses 8-byte <a href="common_structures_spec.html#type_Date">Date</a> timestamps with
|
While most of I2P uses 8-byte <a href="{{ site_url('docs/spec/common-structures') }}#type_Date">Date</a> timestamps with
|
||||||
millisecond resolution, SSU uses a 4-byte timestamp with one-second resolution.
|
millisecond resolution, SSU uses a 4-byte timestamp with one-second resolution.
|
||||||
|
|
||||||
|
|
||||||
@@ -238,7 +238,7 @@ This is the response to a Session Request.
|
|||||||
<li>4 byte relay (introduction) tag which Alice can publish (else 0x00000000)</li>
|
<li>4 byte relay (introduction) tag which Alice can publish (else 0x00000000)</li>
|
||||||
<li>4 byte timestamp (seconds from the epoch) for use in the DSA
|
<li>4 byte timestamp (seconds from the epoch) for use in the DSA
|
||||||
signature</li>
|
signature</li>
|
||||||
<li>40 byte <a href="common_structures_spec.html#type_Signature">DSA signature</a> of the critical exchanged data
|
<li>40 byte <a href="{{ site_url('docs/spec/common-structures') }}#type_Signature">DSA signature</a> of the critical exchanged data
|
||||||
(X + Y + Alice's IP + Alice's port + Bob's IP + Bob's port + Alice's
|
(X + Y + Alice's IP + Alice's port + Bob's IP + Bob's port + Alice's
|
||||||
new relay tag + Bob's signed on time), encrypted with another
|
new relay tag + Bob's signed on time), encrypted with another
|
||||||
layer of encryption using the negotiated sessionKey. The IV
|
layer of encryption using the negotiated sessionKey. The IV
|
||||||
@@ -326,7 +326,7 @@ bits 7-4: current identity fragment # 0-14
|
|||||||
bits 3-0: total identity fragments (F) 1-15</pre></li>
|
bits 3-0: total identity fragments (F) 1-15</pre></li>
|
||||||
<li>2 byte size of the current identity fragment</li>
|
<li>2 byte size of the current identity fragment</li>
|
||||||
<li>that many byte fragment of Alice's
|
<li>that many byte fragment of Alice's
|
||||||
<a href="common_structures_spec#struct_RouterIdentity">Router Identity</a>
|
<a href="{{ site_url('docs/spec/common-structures') }}#struct_RouterIdentity">Router Identity</a>
|
||||||
</li>
|
</li>
|
||||||
<li>After the last identity fragment only:
|
<li>After the last identity fragment only:
|
||||||
<ul><li>4 byte signed-on time
|
<ul><li>4 byte signed-on time
|
||||||
@@ -334,7 +334,7 @@ bits 3-0: total identity fragments (F) 1-15</pre></li>
|
|||||||
<li>N bytes padding, currently uninterpreted
|
<li>N bytes padding, currently uninterpreted
|
||||||
<li>After the last identity fragment only:
|
<li>After the last identity fragment only:
|
||||||
<ul><li>The last 40
|
<ul><li>The last 40
|
||||||
bytes contain the <a href="common_structures_spec.html#type_Signature">DSA signature</a> of the critical exchanged
|
bytes contain the <a href="{{ site_url('docs/spec/common-structures') }}#type_Signature">DSA signature</a> of the critical exchanged
|
||||||
data (X + Y + Alice's IP + Alice's port + Bob's IP + Bob's port
|
data (X + Y + Alice's IP + Alice's port + Bob's IP + Bob's port
|
||||||
+ Alice's new relay key + Alice's signed on time)</li>
|
+ Alice's new relay key + Alice's signed on time)</li>
|
||||||
</li></ul>
|
</li></ul>
|
||||||
@@ -392,7 +392,7 @@ Typical size including header, in current implementation: 480 bytes
|
|||||||
<ul><li>
|
<ul><li>
|
||||||
In the current implementation, the maximum fragment size is 512 bytes.
|
In the current implementation, the maximum fragment size is 512 bytes.
|
||||||
</li><li>
|
</li><li>
|
||||||
The typical <a href="common_structures_spec.html#struct_RouterIdentity">Router Identity</a>
|
The typical <a href="{{ site_url('docs/spec/common-structures') }}#struct_RouterIdentity">Router Identity</a>
|
||||||
is 387 bytes, so no fragmentation is usually necessary.
|
is 387 bytes, so no fragmentation is usually necessary.
|
||||||
</li><li>
|
</li><li>
|
||||||
There is no mechanism for requesting or redelivering missing fragments.
|
There is no mechanism for requesting or redelivering missing fragments.
|
||||||
@@ -735,7 +735,7 @@ the message ID must be an actual random number.
|
|||||||
|
|
||||||
<h3 id="peerTest">PeerTest (type 7)</h3>
|
<h3 id="peerTest">PeerTest (type 7)</h3>
|
||||||
<p>
|
<p>
|
||||||
See <a href="{{ site_url('docs/transport/ssu') }}#peerTesting">the UDP overview page</a> for details.
|
See <a href="{{ site_url('docs/transport/ssu') }}#peerTesting">the SSU overview page</a> for details.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<table border="1">
|
<table border="1">
|
||||||
|
@@ -11,7 +11,7 @@ This page documents the current tunnel build implementation.
|
|||||||
<p>
|
<p>
|
||||||
This document specifies the details of the encrypted tunnel build messages
|
This document specifies the details of the encrypted tunnel build messages
|
||||||
used to create tunnels using a "non-interactive telescoping" method.
|
used to create tunnels using a "non-interactive telescoping" method.
|
||||||
See <a href="tunnel-alt.html">the tunnel build document</a>
|
See <a href="{{ site_url('docs/tunnels/implementation') }}">the tunnel build document</a>
|
||||||
for an overview of the process, including peer selection and ordering methods.
|
for an overview of the process, including peer selection and ordering methods.
|
||||||
|
|
||||||
<p>The tunnel creation is accomplished by a single message passed along
|
<p>The tunnel creation is accomplished by a single message passed along
|
||||||
@@ -19,11 +19,11 @@ the path of peers in the tunnel, rewritten in place, and transmitted
|
|||||||
back to the tunnel creator. This single tunnel message is made up
|
back to the tunnel creator. This single tunnel message is made up
|
||||||
of a variable number of records (up to 8) - one for each potential peer in
|
of a variable number of records (up to 8) - one for each potential peer in
|
||||||
the tunnel. Individual records are asymmetrically
|
the tunnel. Individual records are asymmetrically
|
||||||
<a href="how_cryptography.html#elgamal">(ElGamal)</a>
|
<a href="{{ site_url('docs/how/cryptography') }}#elgamal">(ElGamal)</a>
|
||||||
encrypted to be
|
encrypted to be
|
||||||
read only by a specific peer along the path, while an additional
|
read only by a specific peer along the path, while an additional
|
||||||
symmetric layer of encryption
|
symmetric layer of encryption
|
||||||
<a href="how_cryptography.html#AES">(AES)</a>
|
<a href="{{ site_url('docs/how/cryptography') }}#AES">(AES)</a>
|
||||||
is added at each hop so as to expose
|
is added at each hop so as to expose
|
||||||
the asymmetrically encrypted record only at the appropriate time.</p>
|
the asymmetrically encrypted record only at the appropriate time.</p>
|
||||||
|
|
||||||
@@ -32,10 +32,10 @@ Not all records must contain valid data.
|
|||||||
The build message for a 3-hop tunnel, for example, may contain more records
|
The build message for a 3-hop tunnel, for example, may contain more records
|
||||||
to hide the actual length of the tunnel from the participants.
|
to hide the actual length of the tunnel from the participants.
|
||||||
There are two build message types. The original
|
There are two build message types. The original
|
||||||
<a href="i2np_spec.html#msg_TunnelBuild">Tunnel Build Message</a> (TBM)
|
<a href="{{ site_url('docs/spec/i2np') }}#msg_TunnelBuild">Tunnel Build Message</a> (TBM)
|
||||||
contains 8 records, which is more than enough for any practical tunnel length.
|
contains 8 records, which is more than enough for any practical tunnel length.
|
||||||
The recently-implemented
|
The recently-implemented
|
||||||
<a href="i2np_spec.html#msg_VariableTunnelBuild">Variable Tunnel Build Message</a> (VTBM)
|
<a href="{{ site_url('docs/spec/i2np') }}#msg_VariableTunnelBuild">Variable Tunnel Build Message</a> (VTBM)
|
||||||
contains 1 to 8 records. The originator may trade off the size of the message
|
contains 1 to 8 records. The originator may trade off the size of the message
|
||||||
with the desired amount of tunnel length obfuscation.
|
with the desired amount of tunnel length obfuscation.
|
||||||
<p>
|
<p>
|
||||||
@@ -51,7 +51,7 @@ The reply message must be the same type and length as the build message.
|
|||||||
<h3 id="tunnelCreate.requestRecord">Request Record Specification</h3>
|
<h3 id="tunnelCreate.requestRecord">Request Record Specification</h3>
|
||||||
|
|
||||||
Also specified in the
|
Also specified in the
|
||||||
<a href="i2np_spec.html#struct_BuildRequestRecord">I2NP Specification</a>
|
<a href="{{ site_url('docs/spec/i2np') }}#struct_BuildRequestRecord">I2NP Specification</a>
|
||||||
|
|
||||||
<p>Cleartext of the record, visible only to the hop being asked:</p><pre>
|
<p>Cleartext of the record, visible only to the hop being asked:</p><pre>
|
||||||
bytes 0-3: tunnel ID to receive messages as
|
bytes 0-3: tunnel ID to receive messages as
|
||||||
@@ -97,14 +97,14 @@ The layer and reply key pairs are generated.
|
|||||||
|
|
||||||
<h4 id="encryption">Request Record Encryption</h4>
|
<h4 id="encryption">Request Record Encryption</h4>
|
||||||
|
|
||||||
<p>That cleartext record is <a href="how_cryptography.html#elgamal">ElGamal 2048 encrypted</a> with the hop's
|
<p>That cleartext record is <a href="{{ site_url('docs/how/cryptography') }}#elgamal">ElGamal 2048 encrypted</a> with the hop's
|
||||||
public encryption key and formatted into a 528 byte record:</p><pre>
|
public encryption key and formatted into a 528 byte record:</p><pre>
|
||||||
bytes 0-15: First 16 bytes of the SHA-256 of the current hop's router identity
|
bytes 0-15: First 16 bytes of the SHA-256 of the current hop's router identity
|
||||||
bytes 16-527: ElGamal-2048 encrypted request record</pre>
|
bytes 16-527: ElGamal-2048 encrypted request record</pre>
|
||||||
|
|
||||||
In the 512-byte encrypted record,
|
In the 512-byte encrypted record,
|
||||||
the ElGamal data contains bytes 1-256 and 258-513 of the
|
the ElGamal data contains bytes 1-256 and 258-513 of the
|
||||||
<a href="how_cryptography.html#elgamal">514-byte ElGamal encrypted block</a>.
|
<a href="{{ site_url('docs/how/cryptography') }}#elgamal">514-byte ElGamal encrypted block</a>.
|
||||||
The two padding bytes from the block (the zero bytes at locations 0 and 257) are removed.
|
The two padding bytes from the block (the zero bytes at locations 0 and 257) are removed.
|
||||||
|
|
||||||
<p>Since the cleartext uses the full field, there is no need for
|
<p>Since the cleartext uses the full field, there is no need for
|
||||||
@@ -129,7 +129,7 @@ are dropped.</p>
|
|||||||
|
|
||||||
<p>After deciding whether they will agree to participate in the tunnel
|
<p>After deciding whether they will agree to participate in the tunnel
|
||||||
or not, they replace the record that had contained the request with
|
or not, they replace the record that had contained the request with
|
||||||
an encrypted reply block. All other records are <a href="how_cryptography.html#AES">AES-256
|
an encrypted reply block. All other records are <a href="{{ site_url('docs/how/cryptography') }}#AES">AES-256
|
||||||
encrypted</a> with the included reply key and IV. Each is
|
encrypted</a> with the included reply key and IV. Each is
|
||||||
encrypted separately, rather than chained across records.</p>
|
encrypted separately, rather than chained across records.</p>
|
||||||
|
|
||||||
@@ -172,17 +172,17 @@ The padding is placed before the status byte:
|
|||||||
</p><pre>
|
</p><pre>
|
||||||
AES-256-CBC(SHA-256(padding+status) + padding + status, key, IV)</pre>
|
AES-256-CBC(SHA-256(padding+status) + padding + status, key, IV)</pre>
|
||||||
This is also described in the
|
This is also described in the
|
||||||
<a href="i2np_spec.html#msg_TunnelBuildReply">I2NP spec</a>.
|
<a href="{{ site_url('docs/spec/i2np') }}#msg_TunnelBuildReply">I2NP spec</a>.
|
||||||
|
|
||||||
<h3 id="tunnelCreate.requestPreparation">Tunnel Build Message Preparation</h3>
|
<h3 id="tunnelCreate.requestPreparation">Tunnel Build Message Preparation</h3>
|
||||||
|
|
||||||
<p>When building a new Tunnel Build Messaage, all of the Build Request Records must first be
|
<p>When building a new Tunnel Build Messaage, all of the Build Request Records must first be
|
||||||
built and asymmetrically encrypted using
|
built and asymmetrically encrypted using
|
||||||
<a href="how_cryptography.html#elgamal">ElGamal</a>.
|
<a href="{{ site_url('docs/how/cryptography') }}#elgamal">ElGamal</a>.
|
||||||
Each record is then
|
Each record is then
|
||||||
premptively decrypted with the reply keys and IVs of the hops earlier in the
|
premptively decrypted with the reply keys and IVs of the hops earlier in the
|
||||||
path, using
|
path, using
|
||||||
<a href="how_cryptography.html#AES">AES</a>.
|
<a href="{{ site_url('docs/how/cryptography') }}#AES">AES</a>.
|
||||||
That decryption should be run in reverse order so that the
|
That decryption should be run in reverse order so that the
|
||||||
asymmetrically encrypted data will show up in the clear at the
|
asymmetrically encrypted data will show up in the clear at the
|
||||||
right hop after their predecessor encrypts it.</p>
|
right hop after their predecessor encrypts it.</p>
|
||||||
@@ -211,14 +211,14 @@ encrypting a reply in place of the record and encrypting all of the
|
|||||||
other records, but since there is no 'next hop' to forward the
|
other records, but since there is no 'next hop' to forward the
|
||||||
TunnelBuildMessage on to, it instead places the encrypted reply
|
TunnelBuildMessage on to, it instead places the encrypted reply
|
||||||
records into a
|
records into a
|
||||||
<a href="i2np_spec.html#msg_TunnelBuildReply">TunnelBuildReplyMessage</a>
|
<a href="{{ site_url('docs/spec/i2np') }}#msg_TunnelBuildReply">TunnelBuildReplyMessage</a>
|
||||||
or
|
or
|
||||||
<a href="i2np_spec.html#msg_VariableTunnelBuildReply">VariableTunnelBuildReplyMessage</a>
|
<a href="{{ site_url('docs/spec/i2np') }}#msg_VariableTunnelBuildReply">VariableTunnelBuildReplyMessage</a>
|
||||||
(the type of message and number of records must match that of the request)
|
(the type of message and number of records must match that of the request)
|
||||||
and delivers it to the
|
and delivers it to the
|
||||||
reply tunnel specified within the request record. That reply tunnel
|
reply tunnel specified within the request record. That reply tunnel
|
||||||
forwards the Tunnel Build Reply Message back to the tunnel creator,
|
forwards the Tunnel Build Reply Message back to the tunnel creator,
|
||||||
<a href="tunnel-alt.html#tunnel.operation">just as for any other message</a>.
|
<a href="{{ site_url('docs/tunnels/implementation') }}#tunnel.operation">just as for any other message</a>.
|
||||||
The tunnel creator then
|
The tunnel creator then
|
||||||
processes it, as described below.</p>
|
processes it, as described below.</p>
|
||||||
|
|
||||||
@@ -290,10 +290,10 @@ inject a random delay before forwarding on the request?</li>
|
|||||||
<h2 id="ref">References</h2>
|
<h2 id="ref">References</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<a href="http://prisms.cs.umass.edu/brian/pubs/wright-tissec.pdf">Predecessor
|
<a href="http://forensics.umass.edu/pubs/wright-tissec.pdf">Predecessor
|
||||||
attack</a>
|
attack</a>
|
||||||
<li>
|
<li>
|
||||||
<a href="http://prisms.cs.umass.edu/brian/pubs/wright.tissec.2008.pdf">2008
|
<a href="http://forensics.umass.edu/pubs/wright.tissec.2008.pdf">2008
|
||||||
update</a>
|
update</a>
|
||||||
<li>
|
<li>
|
||||||
<a href="http://www-users.cs.umn.edu/~hopper/hashing_it_out.pdf">Hashing it out in Public</a>
|
<a href="http://www-users.cs.umn.edu/~hopper/hashing_it_out.pdf">Hashing it out in Public</a>
|
||||||
|
@@ -6,9 +6,9 @@
|
|||||||
<h1>Tunnel Message Specification</h1>
|
<h1>Tunnel Message Specification</h1>
|
||||||
This document specifies the format of tunnel messages.
|
This document specifies the format of tunnel messages.
|
||||||
For general information about tunnels see
|
For general information about tunnels see
|
||||||
<a href="tunnel-alt.html">the tunnel documentation</a>.
|
<a href="{{ site_url('docs/tunnels/implementation') }}">the tunnel documentation</a>.
|
||||||
|
|
||||||
<h2>Message preprocessing</h3>
|
<h2>Message preprocessing</h2>
|
||||||
|
|
||||||
|
|
||||||
A <i>tunnel gateway</i> is the entrance, or first hop, of a tunnel.
|
A <i>tunnel gateway</i> is the entrance, or first hop, of a tunnel.
|
||||||
@@ -16,7 +16,7 @@ For an outbound tunnel, the gateway is the creator of the tunnel.
|
|||||||
For an inbound tunnel, the gateway is at the opposite end from the creator of the tunnel.
|
For an inbound tunnel, the gateway is at the opposite end from the creator of the tunnel.
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
A gateway <i>preprocesses</i> <a href="i2np.html">I2NP messages</a>
|
A gateway <i>preprocesses</i> <a href="{{ site_url('docs/protocol/i2np') }}">I2NP messages</a>
|
||||||
by fragmenting and combining them into tunnel messages.
|
by fragmenting and combining them into tunnel messages.
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@@ -28,7 +28,7 @@ observing message size.
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
After the tunnel messages are created, they are encrypted as described in
|
After the tunnel messages are created, they are encrypted as described in
|
||||||
<a href="tunnel-alt.html">the tunnel documentation</a>.
|
<a href="{{ site_url('docs/tunnels/implementation') }}">the tunnel documentation</a>.
|
||||||
|
|
||||||
<h2 id="msg_Data">Tunnel Message (Encrypted)</h2>
|
<h2 id="msg_Data">Tunnel Message (Encrypted)</h2>
|
||||||
These are the contents of a tunnel data message after encryption.
|
These are the contents of a tunnel data message after encryption.
|
||||||
|
Reference in New Issue
Block a user