node-Tor - phases 4 and 5

node-Tor - phases 4 and 5
From: Aymeric Vitte @ 2020-02-25 15:36 UTC ( / )
  To: LT, tor-talk, Bitcoin Dev

Please see the current status here:
https://github.com/Ayms/node-Tor#phases-and-funding

Quick reminder: this is a javascript implementation of the Tor protocol
inside nodes and browsers

Phase 4 (evented pipes) has been developped (self funded) but is not
fully tested/released, however the doc is here:
https://github.com/Ayms/node-Tor/blob/master/docs/README.md, it allows
to simply anonymize any protocol piping it to the Tor protocol

We were about to implement phase 5 (elliptic crypto, Tor v3 features and
WebRTC) but are running out of funding, while we have self funded the
vast majority of this project since 2012 we can't continue (thanks to
NLnet for supporting phases 1 to 3) and are looking for funding to
complete this work (cf above link)

The timing is supposed to be now because restarting such a project in
months or years is not trivial and despite of the huge efforts for the
refactoring/update/cleaning of the initial code and split into modules
it's probably still difficult to use/integrate/modify (see
https://github.com/Ayms/node-Tor/issues/14), it will become quite easy
if the project goes to its targeted phase

The code is subtle and minimal, it represents only 1MB browserified not
minified, so 500kB minified, which is quite small for what it does with
zero external dependencies, redevelopping everything from scratch would
be long and difficult

Some examples of what node-Tor does (as nodes or inside browsers using
WebSockets/WebRTC/XHR):

http.pipe(parser).pipe(gzip).pipe(tls).pipe(node-Tor)

ipfs.pipe(node-Tor)

webtorrent.pipe(node-Tor)

bitcoin | node-Tor | bitcoin (via stdin/stdout or using IPC)

Of course the Tor protocol itself might not be enough and each project
might have to design the full anonymization system (peer discovery,
introduction, etc) but they can rely on node-Tor to implement the Tor
protocol (not to be misunderstood again with the Tor network)

It does implement direct p2p via the Tor protocol or via RendezVous
(RDV) points using also Tor protocol hops to connect to them, the peers
advertise what they have or do using a hash to the RDV points they are
connected to, please see
https://github.com/Ayms/node-Tor#phase-4-and-phase-5

Example: by convention a bitcoin node could advertise a hash of "Satoshi
Nakamoto" to tell it is a bitcoin node, then bitcoin nodes will connect
to each others via RDV points or several Tor protocol hops requesting
this hash, they can also connect directly via several hops for well
known bitcoin nodes that don't need to hide themselves but want to hide
to whom they are connected to, which can be wallets too, for example to
hide who originated a transaction

Since peers are implementing both direct p2p and RDV functions (both via
Tor protocol hops), and can extend to other peers as peers or RDV points
again, it becomes difficult to understand who is doing what and how many
hops finally are used between the peers (suggested setting for p2p is 2
hops instead of 3 for a Tor protocol circuit, knowing that the number of
hops can extend via RDV points)

This is the current design and can of course be adapted

It would look logical that this techno is integrated natively one day
inside browsers, again it must not be misunderstood with what the Tor
Browser is doing (with many specific features inside the browser itself)
and is not a replacement for it, this is different but could be used
also by the Tor network with browsers acting as real Tor nodes (a bit à
la Snowflake but not only relaying messages via WebRTC, implementing the
Tor protocol inside browsers), or uproxy-like for those that remember it

-- 
Move your coins by yourself (browser version): https://peersm.com/wallet
Bitcoin transactions made simple: https://github.com/Ayms/bitcoin-transactions
Zcash wallets made simple: https://github.com/Ayms/zcash-wallets
Bitcoin wallets made simple: https://github.com/Ayms/bitcoin-wallets
Get the torrent dynamic blocklist: http://peersm.com/getblocklist
Check the 10 M passwords list: http://peersm.com/findmyass
Anti-spies and private torrents, dynamic blocklist: http://torrent-live.org
Peersm : http://www.peersm.com
torrent-live: https://github.com/Ayms/torrent-live
node-Tor : https://www.github.com/Ayms/node-Tor
GitHub : https://www.github.com/Ayms