forked from I2P_Developers/i2p.www
Migrate proposals from old index
This commit is contained in:
42
i2p2www/spec/proposals/100-restricted-routes.rst
Normal file
42
i2p2www/spec/proposals/100-restricted-routes.rst
Normal file
@@ -0,0 +1,42 @@
|
||||
=================
|
||||
Restricted Routes
|
||||
=================
|
||||
.. meta::
|
||||
:author: zzz
|
||||
:created: 2008-09-14
|
||||
:thread: http://zzz.i2p/topics/114
|
||||
:lastupdated: 2008-10-13
|
||||
:status: Draft
|
||||
|
||||
.. contents::
|
||||
|
||||
|
||||
Introduction
|
||||
============
|
||||
|
||||
|
||||
Thoughts
|
||||
========
|
||||
|
||||
- Add a new transport "IND" (indirect) which publishes a leaseSet hash in the
|
||||
RouterAddress structure: "IND: [key=aababababababababb]". This transport bids
|
||||
the lowest priority when the target router publishes it. To send to a peer via
|
||||
this transport, fetch the leaseset from a ff peer as usual, and send it
|
||||
directly to the lease.
|
||||
|
||||
- A peer advertising IND must build and maintain a set of tunnels to another
|
||||
peer. These are not exploratory tunnels and not client tunnels, but a second
|
||||
set of router tunnels.
|
||||
|
||||
- 1-hop is sufficient?
|
||||
- How to select peers for these tunnels?
|
||||
- They need to be "non-restricted" but how do you know that? Reachability
|
||||
mapping? Graph theory, algorithms, data structures may help here. Need to
|
||||
read up on this. See tunnels TODO.
|
||||
|
||||
- If you have IND tunnels then your IND transport must bid (low-priority) to
|
||||
send messages out these tunnels.
|
||||
|
||||
- How to decide to enable building indirect tunnels
|
||||
|
||||
- How to implement and test without blowing cover
|
37
i2p2www/spec/proposals/101-multicast.rst
Normal file
37
i2p2www/spec/proposals/101-multicast.rst
Normal file
@@ -0,0 +1,37 @@
|
||||
=========
|
||||
Multicast
|
||||
=========
|
||||
.. meta::
|
||||
:author: zzz
|
||||
:created: 2008-12-08
|
||||
:thread: http://zzz.i2p/topics/172
|
||||
:lastupdated: 2009-03-25
|
||||
:status: Draft
|
||||
|
||||
.. contents::
|
||||
|
||||
|
||||
Introduction
|
||||
============
|
||||
|
||||
Basic idea: Send one copy through your outbound tunnel, outbound endpoint
|
||||
distributes to all the inbound gateways. End-end encryption precluded.
|
||||
|
||||
|
||||
Thoughts
|
||||
========
|
||||
|
||||
- New multicast tunnel message type (delivery type = 0x03)
|
||||
- Outbound endpoint multicast distribute
|
||||
- New I2NP Multicast Message type ?
|
||||
- New I2CP Multicast SendMessageMessage Message type
|
||||
- Don't encrypt router-router in OutNetMessageOneShotJob (garlic?)
|
||||
|
||||
App:
|
||||
|
||||
- RTSP Proxy?
|
||||
|
||||
Streamr:
|
||||
|
||||
- Tune MTU? Or just do it at the app?
|
||||
- On-demand receive & transmit
|
57
i2p2www/spec/proposals/102-service-directory.rst
Normal file
57
i2p2www/spec/proposals/102-service-directory.rst
Normal file
@@ -0,0 +1,57 @@
|
||||
=================
|
||||
Service Directory
|
||||
=================
|
||||
.. meta::
|
||||
:author: zzz
|
||||
:created: 2009-01-01
|
||||
:thread: http://zzz.i2p/topics/180
|
||||
:lastupdated: 2009-01-06
|
||||
:status: Draft
|
||||
|
||||
.. contents::
|
||||
|
||||
|
||||
Introduction
|
||||
============
|
||||
|
||||
This is similar to a proposal Sponge had a while back on IRC. I don't think he
|
||||
wrote it up, but his idea was to put it in the netDb. I'm not in favor of that,
|
||||
but the discussion of the best method of accessing the directory (netDb lookups,
|
||||
DNS-over-i2p, HTTP, hosts.txt, etc.) I will leave for another day.
|
||||
|
||||
I could probably hack this up pretty quickly using HTTP and the collection of
|
||||
perl scripts I use for the add key form.
|
||||
|
||||
|
||||
Directory Interface
|
||||
===================
|
||||
|
||||
Here's how an app would interface with the directory:
|
||||
|
||||
REGISTER
|
||||
- DestKey
|
||||
- List of Protocol/Service pairs:
|
||||
|
||||
- Protocol (optional, default: HTTP)
|
||||
- Service (optional, default: website)
|
||||
- ID (optional, default: none)
|
||||
|
||||
- Hostname (optional)
|
||||
- Expiration (default: 1 day? 0 for delete)
|
||||
- Sig (using privkey for dest)
|
||||
|
||||
Returns: success or failure
|
||||
|
||||
Updates allowed
|
||||
|
||||
LOOKUP
|
||||
- Hash or key (optional). ONE of:
|
||||
|
||||
- 80-bit partial hash
|
||||
- 256-bit full hash
|
||||
- full destkey
|
||||
|
||||
- Protocol/service pair (optional)
|
||||
|
||||
Returns: success, failure, or (for 80-bit) collision.
|
||||
If success, returns signed descriptor above.
|
37
i2p2www/spec/proposals/103-bigger-i2np-messages.rst
Normal file
37
i2p2www/spec/proposals/103-bigger-i2np-messages.rst
Normal file
@@ -0,0 +1,37 @@
|
||||
====================
|
||||
Bigger I2NP Messages
|
||||
====================
|
||||
.. meta::
|
||||
:author: zzz
|
||||
:created: 2009-04-05
|
||||
:thread: http://zzz.i2p/topics/258
|
||||
:lastupdated: 2009-05-27
|
||||
:status: Draft
|
||||
|
||||
.. contents::
|
||||
|
||||
|
||||
Introduction
|
||||
============
|
||||
|
||||
iMule's use of 12KB datagrams exposed lots of problems. The actual limit today
|
||||
is more like 10KB.
|
||||
|
||||
|
||||
Thoughts
|
||||
========
|
||||
|
||||
To do:
|
||||
|
||||
- Increase NTCP limit - not so easy?
|
||||
|
||||
- More session tag quantity tweaks. May hurt max window size? Are there stats to
|
||||
look at? Make the number variable based on how many we think they need? Can
|
||||
they ask for more? ask for a quantity?
|
||||
|
||||
- Investigate increasing SSU max size (by increasing MTU?)
|
||||
|
||||
- Lots of testing
|
||||
|
||||
- Finally check in the fragmenter improvements? - Need to do comparison testing
|
||||
first!
|
26
i2p2www/spec/proposals/104-tls-transport.rst
Normal file
26
i2p2www/spec/proposals/104-tls-transport.rst
Normal file
@@ -0,0 +1,26 @@
|
||||
=============
|
||||
TLS Transport
|
||||
=============
|
||||
.. meta::
|
||||
:author: zzz
|
||||
:created: 2009-05-03
|
||||
:thread: http://zzz.i2p/topics/287
|
||||
:lastupdated: 2009-05-03
|
||||
:status: Draft
|
||||
|
||||
.. contents::
|
||||
|
||||
|
||||
Introduction
|
||||
============
|
||||
|
||||
It's a frequently-suggested-suggestion that we have a snoop-resistant transport
|
||||
so that we are resistant to fingerprinting and blocking by ISPs and state-level
|
||||
adversaries, like what Tor has (i.e. tries to look like a Firefox HTTPS
|
||||
session).
|
||||
|
||||
|
||||
Proposal
|
||||
========
|
||||
|
||||
TBD
|
86
i2p2www/spec/proposals/105-garlicat-name-translation.rst
Normal file
86
i2p2www/spec/proposals/105-garlicat-name-translation.rst
Normal file
@@ -0,0 +1,86 @@
|
||||
=============================
|
||||
Name Translation for GarliCat
|
||||
=============================
|
||||
.. meta::
|
||||
:author: Bernhard R. Fischer
|
||||
:created: 2009-12-04
|
||||
:thread: http://zzz.i2p/topics/453
|
||||
:lastupdated: 2009-12-04
|
||||
:status: Draft
|
||||
|
||||
.. contents::
|
||||
|
||||
|
||||
Current Translation Mechanism
|
||||
=============================
|
||||
|
||||
GarliCat (GC) performs name translation for setting up connections to other GC
|
||||
nodes. This name translation is just a recoding of the binary representation of
|
||||
an address into the Base32 encoded form. Thus, translation works back and
|
||||
forth.
|
||||
|
||||
Those addresses are chosen to be 80 bits long. This is because Tor uses 80 bit
|
||||
long values for addressing its hidden services. Thus, OnionCat (which is GC for
|
||||
Tor) works with Tor without further intervention.
|
||||
|
||||
Unfortunately (in respect to this addressing scheme), I2P uses 256 bit long
|
||||
values for addressing of its services. As already mentioned, GC transcodes
|
||||
between binary and Base32 encoded form. Due to the nature of GC being a layer 3
|
||||
VPN, in its binary representation the addresses are defined to be IPv6
|
||||
addresses which have a total length of 128 bit. Obviously, 256 bit long I2P
|
||||
addresses do not fit into.
|
||||
|
||||
Thus, a second step of name translation becomes necessary:
|
||||
IPv6 address (binary) -1a-> Base32 address (80 bits) -2a-> I2P address (256 bits)
|
||||
-1a- ... GC translation
|
||||
-2a- ... I2P hosts.txt lookup
|
||||
|
||||
The current solution is to let the I2P router do the work. This is accomplished
|
||||
by insertion of the 80 bit Base32 address and its destination (the I2P address)
|
||||
as a name/value pair into the hosts.txt or privatehosts.txt file of the I2P
|
||||
router.
|
||||
|
||||
This basically works but it depends on a naming service which (IMHO) itself is
|
||||
in a state of development and not mature enough (especially in respect to name
|
||||
distribution).
|
||||
|
||||
|
||||
A Scalable Solution
|
||||
===================
|
||||
|
||||
I suggest to change the stages of addressing in respect to I2P (and maybe also
|
||||
for Tor) in that way that GC does reverse lookups on the IPv6 addresses using
|
||||
the regular DNS protocol. The reverse zone shall directly contain the 256 bit
|
||||
I2P address in its Base32 encoded form. This changes the lookup mechanism to a
|
||||
single step thereby adding further advantages.
|
||||
IPv6 address (binary) -1b-> I2P address (256 bits)
|
||||
-1b- ... DNS reverse lookup
|
||||
|
||||
DNS lookups within the Internet are known to be information leaks in respect to
|
||||
anonymity. Thus, those lookups have to be carried out within I2P. This implies
|
||||
that several DNS services should be around within I2P. As DNS queries are
|
||||
usually performed by using the UDP protocol, GC itself is needed for data
|
||||
transport because it does carry UDP packets which I2P natively does not.
|
||||
|
||||
Further advantages are associated with DNS:
|
||||
1) It is a well-known standard protocol, hence, it is continously improved and
|
||||
many tools (clients, servers, libraries,...) exist.
|
||||
2) It is a distributed system. It supports the name space being hosted on
|
||||
serveral servers in parallel by default.
|
||||
3) It supports cryptography (DNSSEC) which enables authentication of resource
|
||||
records. This could directly be tied with the keys of a destination.
|
||||
|
||||
|
||||
Future Opportunities
|
||||
====================
|
||||
|
||||
It may be possible that this naming service can also be used to do forward
|
||||
lookups. This is translating hostnames into I2P addresses and/or IPv6
|
||||
addresses. But this kind of lookup needs additional investigation because those
|
||||
lookups are usually done by the locally installed resolver library which uses
|
||||
regular Internet name servers (e.g. as specified in /etc/resolv.conf on
|
||||
Unix-like systems). This is different from the reverse lookups of GC that I
|
||||
explained above.
|
||||
A further opportunity could be that the I2P address (destination) gets
|
||||
registered automatically when creating a GC inbound tunnnel. This would greatly
|
||||
improve the usability.
|
48
i2p2www/spec/proposals/106-ntcp-obfuscation.rst
Normal file
48
i2p2www/spec/proposals/106-ntcp-obfuscation.rst
Normal file
@@ -0,0 +1,48 @@
|
||||
================
|
||||
NTCP Obfuscation
|
||||
================
|
||||
.. meta::
|
||||
:author: zzz
|
||||
:created: 2010-11-23
|
||||
:thread: http://zzz.i2p/topics/774
|
||||
:lastupdated: 2014-01-03
|
||||
:status: Draft
|
||||
|
||||
.. contents::
|
||||
|
||||
|
||||
Introduction
|
||||
============
|
||||
|
||||
This is fairly heavyweight but it prevents any detection by DPI equipment.
|
||||
|
||||
|
||||
Modifications to NTCP
|
||||
=====================
|
||||
|
||||
The following data will be added to the end of the 288-byte message 1:
|
||||
|
||||
- A 514-byte ElGamal encrypted block
|
||||
- Random padding
|
||||
|
||||
The ElG block is encrypted to Bob's public key. When decrypted to 222 bytes, it
|
||||
contains:
|
||||
- 214 bytes random padding
|
||||
- 4 bytes 0 reserved
|
||||
- 2 bytes padding length to follow
|
||||
- 2 bytes protocol version and flags
|
||||
|
||||
In messages 2-4, the last two bytes of the padding will now indicate the length
|
||||
of more padding to follow.
|
||||
|
||||
Note that the ElG block does not have perfect forward secrecy but there's
|
||||
nothing interesting in there.
|
||||
|
||||
We could modify our ElG library so it will encrypt smaller data sizes if we
|
||||
think 514 bytes is way too much? Is ElG encryption for each NTCP setup too much?
|
||||
|
||||
Support for this would be advertised in the netdb RouterAddress with the option
|
||||
"version=2". If only 288 bytes are received in Message 1, Alice is assumed to be
|
||||
version 1 and no padding is sent in subsequent messages. Note that communication
|
||||
could be blocked if a MITM fragmented IP to 288 bytes (very unlikely according
|
||||
to Brandon).
|
68
i2p2www/spec/proposals/107-bep9-information-recovery.rst
Normal file
68
i2p2www/spec/proposals/107-bep9-information-recovery.rst
Normal file
@@ -0,0 +1,68 @@
|
||||
=========================
|
||||
BEP9 Information Recovery
|
||||
=========================
|
||||
.. meta::
|
||||
:author: sponge
|
||||
:created: 2011-02-23
|
||||
:thread: http://zzz.i2p/topics/860
|
||||
:lastupdated: 2011-02-23
|
||||
:status: Draft
|
||||
|
||||
.. contents::
|
||||
|
||||
|
||||
Problem
|
||||
=======
|
||||
|
||||
BEP9 does not send the entire torrent file, thus losing several important
|
||||
dictionary items, and changes the torrent files total SHA1. This is bad for
|
||||
maggot links, and bad because important information is lost. Tracker lists,
|
||||
comments, and any additional data is gone. A way to recover this information is
|
||||
important, and it needs to add as little as possible to the torrent file. It
|
||||
also must not be circular dependent. Recovery information should not affect
|
||||
current clients in any way. torrents that are trackerless (tracker URL is
|
||||
literally 'trackerless') do not contain the extra field, as they are specific to
|
||||
using the maggot protocol of discovery and download, which does not ever lose
|
||||
the information in the first place.
|
||||
|
||||
|
||||
Solution
|
||||
========
|
||||
|
||||
All that needs to be done is to compress the information that would be lost, and
|
||||
store it in the info dictionary.
|
||||
|
||||
|
||||
Implementation
|
||||
--------------
|
||||
1. Generate the normal info dictionary.
|
||||
2. Generate the main dictionary, and leave out the info entry.
|
||||
3. Bencode, and compress he main dictionary with gzip.
|
||||
4. Add the compressed main dictionary to the info dictionary.
|
||||
5. Add info to the main dictionary.
|
||||
6. Write the torrent file
|
||||
|
||||
Recovery
|
||||
--------
|
||||
1. Decompress the recovery entry in the info dict.
|
||||
2. Bendecode the recovery entry.
|
||||
3. Add info to the recovered dictionary.
|
||||
4. For maggot-aware clients, you can now verify that the SHA1 is correct.
|
||||
5. Write out the recovered torrent file.
|
||||
|
||||
|
||||
Discussion
|
||||
==========
|
||||
|
||||
Using the above outlined method, the size of the torrent increase is very small,
|
||||
200 to 500 bytes is typical. Robert will be shipping with the new info
|
||||
dictionary entry creation, and it will not be able to be turned off. Here is the
|
||||
structure::
|
||||
|
||||
main dict {
|
||||
Tracker strings, comments, etc...
|
||||
info : {
|
||||
gzipped main bencoded dict minus the info dictionary and all other
|
||||
usual info
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user