From 6df2bf60cc1ab2ac1324cd5d06ca7893cf4104e0 Mon Sep 17 00:00:00 2001
From: str4d <str4d@mail.i2p>
Date: Sun, 3 Apr 2016 12:56:41 +0000
Subject: [PATCH] Migrate proposals from old index

---
 .../spec/proposals/100-restricted-routes.rst  | 42 +++++++++
 i2p2www/spec/proposals/101-multicast.rst      | 37 ++++++++
 .../spec/proposals/102-service-directory.rst  | 57 ++++++++++++
 .../proposals/103-bigger-i2np-messages.rst    | 37 ++++++++
 i2p2www/spec/proposals/104-tls-transport.rst  | 26 ++++++
 .../105-garlicat-name-translation.rst         | 86 +++++++++++++++++++
 .../spec/proposals/106-ntcp-obfuscation.rst   | 48 +++++++++++
 .../107-bep9-information-recovery.rst         | 68 +++++++++++++++
 8 files changed, 401 insertions(+)
 create mode 100644 i2p2www/spec/proposals/100-restricted-routes.rst
 create mode 100644 i2p2www/spec/proposals/101-multicast.rst
 create mode 100644 i2p2www/spec/proposals/102-service-directory.rst
 create mode 100644 i2p2www/spec/proposals/103-bigger-i2np-messages.rst
 create mode 100644 i2p2www/spec/proposals/104-tls-transport.rst
 create mode 100644 i2p2www/spec/proposals/105-garlicat-name-translation.rst
 create mode 100644 i2p2www/spec/proposals/106-ntcp-obfuscation.rst
 create mode 100644 i2p2www/spec/proposals/107-bep9-information-recovery.rst

diff --git a/i2p2www/spec/proposals/100-restricted-routes.rst b/i2p2www/spec/proposals/100-restricted-routes.rst
new file mode 100644
index 000000000..0c7e90ce4
--- /dev/null
+++ b/i2p2www/spec/proposals/100-restricted-routes.rst
@@ -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
diff --git a/i2p2www/spec/proposals/101-multicast.rst b/i2p2www/spec/proposals/101-multicast.rst
new file mode 100644
index 000000000..9de714ff5
--- /dev/null
+++ b/i2p2www/spec/proposals/101-multicast.rst
@@ -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
diff --git a/i2p2www/spec/proposals/102-service-directory.rst b/i2p2www/spec/proposals/102-service-directory.rst
new file mode 100644
index 000000000..5e890e2a2
--- /dev/null
+++ b/i2p2www/spec/proposals/102-service-directory.rst
@@ -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.
diff --git a/i2p2www/spec/proposals/103-bigger-i2np-messages.rst b/i2p2www/spec/proposals/103-bigger-i2np-messages.rst
new file mode 100644
index 000000000..9b84e5003
--- /dev/null
+++ b/i2p2www/spec/proposals/103-bigger-i2np-messages.rst
@@ -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!
diff --git a/i2p2www/spec/proposals/104-tls-transport.rst b/i2p2www/spec/proposals/104-tls-transport.rst
new file mode 100644
index 000000000..c9128d07e
--- /dev/null
+++ b/i2p2www/spec/proposals/104-tls-transport.rst
@@ -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
diff --git a/i2p2www/spec/proposals/105-garlicat-name-translation.rst b/i2p2www/spec/proposals/105-garlicat-name-translation.rst
new file mode 100644
index 000000000..2a2ce6131
--- /dev/null
+++ b/i2p2www/spec/proposals/105-garlicat-name-translation.rst
@@ -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.
diff --git a/i2p2www/spec/proposals/106-ntcp-obfuscation.rst b/i2p2www/spec/proposals/106-ntcp-obfuscation.rst
new file mode 100644
index 000000000..fefbe2f77
--- /dev/null
+++ b/i2p2www/spec/proposals/106-ntcp-obfuscation.rst
@@ -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).
diff --git a/i2p2www/spec/proposals/107-bep9-information-recovery.rst b/i2p2www/spec/proposals/107-bep9-information-recovery.rst
new file mode 100644
index 000000000..553002aeb
--- /dev/null
+++ b/i2p2www/spec/proposals/107-bep9-information-recovery.rst
@@ -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
+        }
+    }
-- 
GitLab