Giter Site home page Giter Site logo

xrd's Introduction

XRD

XRD (short for Crossroads) is a metadata point-to-point messaging system that allows users to exchange fixed sized messages in a way that doesn't reveal anything about their communication pattern. End-to-end communication does a great job of protecting the content of the messages, but sometimes, encryption alone is insufficient due to metadata leakages. For instance, for whistleblowing, just the fact that a government official talked to a journalist might be enough to get them into trouble (and the standard encryption does not protect this sort of communication metadata). XRD is designed to protect these sort of metadata as well as the actual content of the conversation. The details of the system is explained in our NSDI'20 paper.

If you have any questions or issues with this code, please contact us at kwonal [at] mit.edu.

The code posted here is a research prototype. While the code performs all the necessary crypto operations and should be fairly accurate in terms of performance, it is likely full of security bugs and security-criticial TODOs that hasn't been addressed. Pleae be careful if any part of this code is reused for real-world projects.

Code organization and usage

To see how the different modules fit together, please look at xrd_test.go: it creates a local test consisting of a small number of mix chains and a small number of users. The code at a high level is organized as follows.

  • client: Code that simulates many clients. It generates batches of realistic looking clients messages.
  • config: Common code that's used to configure various servers.
  • coordinator: A simple coordinator that connects to all servers for running experiments.
  • mailbox: A simple mailbox that supports put and get functionality.
  • mixnet: All the code related to actual mixing operation of the system. Also contains the verifiable mixnet (aggregate hybrid shuffle) code.
  • server: Wrapper code around mixnet to handle setting up the network, and starting and stopping rounds.

To run this with non-go tests, you can use the configuration generator in cmd/config to generate network configurations, and configure the servers and clients using the generated config files. There is also a sample run_experiment.py in scripts directory which can be used to run experiments remotely using SSH to coordinate the servers, assuming the list of server IPs are saved in a file called remote_ips.

xrd's People

Contributors

kwonalbert avatar myl7 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.