Skip to content

kwonalbert/riffle

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

68 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Riffle

This is a research prototype of Riffle, an anonymous communication system presented at PETS2016. This models the performance of the system and carries out the core parts of the protocol, but not necessarily in a secure way. In other words, this prototype implements most of what's described in the paper, but does NOT make any guarantees about security. It is almost certainly full of security bugs. Please do not adapt this code to use for real anonymous communication.

Requirements

Requires Go 1.5 or later for building the code, and the scripts are written for python2 (not 3).

It uses the DeDis Kyber library as well as SecretBox of NaCl and sha3.

Components

  • server: the mixing servers in the network (assumed to be handful many)

  • client: the clients who either send or receive messages

Building Riffle

Build the two by running

$ go install ./client ./server

Running tests

Clients can run in two modes: file sharing and microblogging.

File sharing

For file sharing, we assume each client has a file and they download a file. This prototype assumes the "optimal" case, in that in each round, there is a 1 to 1 mapping between files and clients. In a real implementation where this is not the case, there are a few solutions, the easiest being having the client request the file again if the file (block) is not available at the end of the round (but these solutions have not been implemented in this mode). In each round, a chunk of file is uploaded.

To run this, you need to first generate the files. To do so, run

$ python2 ./scripts/gen_file.py <num_clients> <num_blocks> <block_size> <dst_dir>
  • num_clients: number of clients in the system, and thus number of files to generate

  • num_blocks: number of blocks (chunks) in a file, and thus number of rounds

  • block_size: size of each block. This needs to be the same as the block size in params.go in lib.

  • dst_dir: destination folder for all the files. You will want to just create a folder (e.g., called files).

Microblogging

For microblogging, each client submits a small message, and the result is broadcast to everyone. Currently, it just sends random messages.

Running a local test

You can run a local test, where each server runs on a port on localhost, by running

$ python2 ./scripts/test_local.py <num_servers> <num_clients> <mode> <file_dir>
  • num_servers: number of servers in the test

  • num_clients: number of clients

  • mode: 'm' for microblogging test, and 'f' for file sharing test

  • file_dir: where the files are, if running file sharing test. Should be the same as dst_dir for gen_file script.

Running remote test

Coming soon. A modified version of the local test script can do this easily.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published