A collaborative machine learning framework that operates through Tor.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
DistSys Latest eval files Jun 12, 2018
ML Update code, prep for lev May 30, 2018
ML_experimental Update to do validation via Krum, also adding core code for LSH based… Apr 11, 2018
eurosys-eval Move ccs-eval May 14, 2018
evaluation old nameip May 30, 2018
popets-eval Latest eval files Jun 12, 2018
presentations add presentation artifacts May 14, 2018
utils Dump all local changes Feb 25, 2018
.DS_Store updated number of nwalkers Oct 20, 2017
.gitattributes Add util script Oct 8, 2017
LICENSE Initial commit Sep 12, 2017
README.md Update README.md Jun 12, 2018



A collaborative machine learning framework that operates through Tor.

Talks and Presentations

May 11th - UBC Cybersecurity Summit: Talk Poster


Everything is stored in two directories: DistSys (in Golang, all the distributed systems logic) and ML (in Python, all the ML logic)
We use go-python to link the two.

Before running the system, all machines need to have tor installed.

If your ISP blocks Tor, a mirror is available here: https://thetorproject.github.io/gettor/

Once Tor is installed, the service machine needs to open up the hidden service. Do this by modifying the torrc (config file).
I found this file in: <tor_dir>/Browser/TorBrowser/Data/Tor

Add the following config parameters:

HiddenServiceDir <your_directory>  
HiddenServicePort 80       # Port for the webinterface
HiddenServicePort 5005     # Control port, used for joining and curating
HiddenServicePort 6000     # Worker ports: By default we use from 6000 - 6010
HiddenServicePort 6001  
HiddenServicePort etc...    
Log notice file /home/cfung/workspace/tor-browser_en-US/Browser/TorBrowser/Log/tor.log  
UseBridges 1

Add one HiddenServicePort for every connection you want the tor server to handle.


On server machine:
go run torserver.go

On each client machines:
go run torcurator.go curatorName minClients isLocal
go run torclient.go node1 datasetName epsilon isLocal
go run torclient.go node2 datasetName epsilon isLocal
go run torclient.go node3 datasetName epsilon isLocal

A good test set is the credit dataset: and use: credit1, credit2, creditbad.... etc.

An example deployment, 3 clients, with epsilon=1, running through Tor: go run torserver.go
go run torcurator.go c1 3
go run torclient.go h1 credit1 1
go run torclient.go h2 credit2 1
go run torclient.go h3 credit3 1