All Projects → cretz → tor-dht-poc

cretz / tor-dht-poc

Licence: MIT License
Anonymous DHT Accessible from Executable or Tor-Enabled Browser

Programming Languages

go
31211 projects - #10 most used programming language
javascript
184084 projects - #8 most used programming language
HTML
75241 projects

Labels

Projects that are alternatives of or similar to tor-dht-poc

denarius
Denarius [$D] is a PoW/PoS Hybrid Cryptocurrency with Tribus a new PoW Hashing Algo built specifically for D, one of a kind hybrid masternodes called Fortuna Stakes, atomic swaps, staking, mining, IPFS, optional Native Tor and I2P, and much more!
Stars: ✭ 105 (+162.5%)
Mutual labels:  ipfs, tor
ipns-link
Expose local http-server (web-app) through IPNS
Stars: ✭ 18 (-55%)
Mutual labels:  ipfs, tor
good-karma-kit
😇 A Docker Compose bundle to run on servers with spare CPU, RAM, disk, and bandwidth to help the world. Includes Tor, ArchiveWarrior, BOINC, and more...
Stars: ✭ 238 (+495%)
Mutual labels:  ipfs, tor
meanOs
Mean Operating System - The first decentralized, artificially intelligent, MEAN.js stack, operating system. Mean OS is the only operating system hosted anonymous using a P2P network and a suite of non-standard in-browser delivery mechanisms. Mean OS proudly supports Brave and Tor, be free!
Stars: ✭ 62 (+55%)
Mutual labels:  ipfs, tor
go-libp2p-tor-transport
🚧 WIP: tor transport for libp2p
Stars: ✭ 41 (+2.5%)
Mutual labels:  ipfs, tor
dlux open token
DLUX distributed deterministic finite state automata. Built for HIVE to take advantage of free transactions using multi-sig and escrow for security.
Stars: ✭ 16 (-60%)
Mutual labels:  ipfs
hyperledger
Blockchain、Hyperledger、Ethereum、IPFS learning materials / 学习指南
Stars: ✭ 93 (+132.5%)
Mutual labels:  ipfs
TORhunter
Designed to scan and exploit vulnerabilities within Tor hidden services. TORhunter allows most tools to work as normal while resolving .onion
Stars: ✭ 47 (+17.5%)
Mutual labels:  tor
filecoin-client
Golang的轻量级filecoin客户端,支持离线签名,基本满足钱包交易所充值提现逻辑
Stars: ✭ 50 (+25%)
Mutual labels:  ipfs
shh
Create Tor hidden services in Python.
Stars: ✭ 42 (+5%)
Mutual labels:  tor
DTrip
DTrip - Traveler's app on STEEM blockchain.
Stars: ✭ 18 (-55%)
Mutual labels:  ipfs
ruby-ipfs-http-client
A client library for the IPFS HTTP API, implemented in Ruby.
Stars: ✭ 21 (-47.5%)
Mutual labels:  ipfs
godless
Peer-to-peer lite database over IPFS
Stars: ✭ 72 (+80%)
Mutual labels:  ipfs
pinning-services-api-spec
New vendor-agnostic Pinning Service API for IPFS ecosystem
Stars: ✭ 48 (+20%)
Mutual labels:  ipfs
DunglasTorControlBundle
Integration of PHP TorControl library in Symfony
Stars: ✭ 13 (-67.5%)
Mutual labels:  tor
pacman.store
Pacman Mirror via IPFS for ArchLinux, Endeavouros and Manjaro
Stars: ✭ 65 (+62.5%)
Mutual labels:  ipfs
ipvpn
[WIP] Easy-to-use decentralized secure overlay private network (for any device)
Stars: ✭ 24 (-40%)
Mutual labels:  ipfs
RabbitMQ-with-Django
Example for using Microservices with RabbitMQ in a Django Web-Application
Stars: ✭ 26 (-35%)
Mutual labels:  ipfs
ipfs-docs
📚IPFS documentation platform
Stars: ✭ 196 (+390%)
Mutual labels:  ipfs
example-orbitdb-todomvc
TodoMVC with OrbitDB
Stars: ✭ 17 (-57.5%)
Mutual labels:  ipfs

Tor DHT PoC

This is a proof of concept to show that we can advertise onion services in Go and discover them in Go or JS.

Goals

  • In Go, all network interaction over Tor
    • Use existing tested DHT code (e.g. BT mainline or IPFS)
    • Broadcast different onion addresses for a key
    • Discover different onion addresses for a key
  • In browser (all network interaction doesn't have to be in Tor since it will run in Tor Browser, so no WebRTC)
    • Use existing tested DHT code (e.g. BT mainline or IPFS)
    • Discover different onion addresses for a key

Probably choosing IPFS here due to WebTorrent's requirement on WebRTC which Tor Browser doesn't implement.

Results

Usage Quick Overview

Ok, so now that we have success in both places, we can show a quick overview of how to use it. This assumes that GOPATH is set with this repo properly checked out in it and that latest stable versions of Go, Tor, and nodejs/npm are installed and on the PATH.

In this test, we create 5 nodes, say that 2 of them provide a certain type of service, and in both the Tor browser and Go command line, we determine those 2 from the DHT starting with any of the 5 addresses. All over Tor and anonymous.

First, provide the 5 nodes. Build and run the executable to create the DHT and "provide" the services:

go build && go-tor-dht-poc provide

This will take a sec to build the DHT. The output (sans some Tor warnings):

2018/07/10 16:54:32 Created peer #1: gvumv3dlefinroaeibjlrsknedmpd73stlqey4552boeqqfrcktkdvqd:52516/QmRdDcR647RjC7UkdZXiodAQoXQuqjiiR9wXas4RBhw71x
2018/07/10 16:54:49 Created peer #2: vn5sgarqtdmzl27cnbrsfchkmrwm5erjb6jtmcwqras6qmhpmf6mahqd:52519/QmY9tHQMGUVg7xBnLiKGN81J9DCrns5KS4jK8wn8CwqHym
2018/07/10 16:55:11 Created peer #3: my4f2m3yggnnpoeacjgwie5gc5yxeshzgvu5eukx7lodwgmwf2ek52yd:52523/QmRLFFGsVv6uq1WbHhZjA2gknRUwQTyLGdiTAs344egWp8
2018/07/10 16:55:25 Created peer #4: q2fdsiu7eyoj42iii5o44rnrhxncnljexu6zncw44bpdk3udoveyi6ad:52528/QmNQanzjr862heY5ndTuMQPhbEa8GfyniVk6dhkoGXb5MS
2018/07/10 16:55:35 Created peer #5: lhcaimk5pvkj2p3ewcdrunryout2wgpjasfum45rochkxwi2y4raauyd:52535/QmSMd8DytSqkAJunHfbG4phedaDs3ugmGFMZY3e3UyePJG
2018/07/10 16:55:35 Providing key on the first one (gvumv3dlefinroaeibjlrsknedmpd73stlqey4552boeqqfrcktkdvqd:52516/QmRdDcR647RjC7UkdZXiodAQoXQuqjiiR9wXas4RBhw71x)
2018/07/10 16:55:37 Providing key on the last one (lhcaimk5pvkj2p3ewcdrunryout2wgpjasfum45rochkxwi2y4raauyd:52535/QmSMd8DytSqkAJunHfbG4phedaDs3ugmGFMZY3e3UyePJG)
2018/07/10 16:55:42 Press enter to quit...

So the 5 nodes were created and we are marking #1 and #5 as "providers". Now, we can connect to this DHT through any of the nodes and find that #1 and #5 are the providers. With this running, in a new console issue a "find" and provide, say, peer #2's address (don't need to build, already did above):

go-tor-dht-poc find vn5sgarqtdmzl27cnbrsfchkmrwm5erjb6jtmcwqras6qmhpmf6mahqd:52519/QmY9tHQMGUVg7xBnLiKGN81J9DCrns5KS4jK8wn8CwqHym

After a sec, here's the output:

2018/07/10 16:58:17 Found data ID on gvumv3dlefinroaeibjlrsknedmpd73stlqey4552boeqqfrcktkdvqd:52516/QmRdDcR647RjC7UkdZXiodAQoXQuqjiiR9wXas4RBhw71x
2018/07/10 16:58:17 Found data ID on lhcaimk5pvkj2p3ewcdrunryout2wgpjasfum45rochkxwi2y4raauyd:52535/QmSMd8DytSqkAJunHfbG4phedaDs3ugmGFMZY3e3UyePJG

Now let's connect to this DHT from the Tor browser and find them that way. With the DHT "provide" still running, navigate to js-tor-dht-poc. Run npm install to install dependencies and to prepare index.js for use at public/index.js, run npm run browserify. This makes a fairly large JS file that our page uses. Now, to start the web server, build and run the executable via:

go build && js-tor-dht-poc

The output will be something like:

Open Tor browser and navigate to http://n6ls3ltbmoyv2ucblvwz7skjg6mmajt6zfi33skwbhanomgexye6r5ad.onion
Press enter to exit

Now take that address and open it in the Tor browser (it may take a bit for the large JS file to load). Now take any peer address, say, peer #4 this time and put it in the text box and click `Find Providers. The result after a some time should be similar to:

Found 2 peers
gvumv3dlefinroaeibjlrsknedmpd73stlqey4552boeqqfrcktkdvqd.onion:52516/QmRdDcR647RjC7UkdZXiodAQoXQuqjiiR9wXas4RBhw71x
lhcaimk5pvkj2p3ewcdrunryout2wgpjasfum45rochkxwi2y4raauyd.onion:52535/QmSMd8DytSqkAJunHfbG4phedaDs3ugmGFMZY3e3UyePJG

Yay, you have an anonymous DHT that can be joined by other programs and have pieces discovered via other programs or via a Tor-enabled browser.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].