Skip to content
This repository has been archived by the owner on Jan 19, 2019. It is now read-only.

applied-mixnetworks/txmix

Repository files navigation

PyPI Package

travis

coveralls

txmix

txmix is a twisted API for building mix networks, it's modular design allows you to write mixnets with reduced code complexity.

mix networks

Mix networks are a high-latency message oriented anonymity network, invented by David Chaum in 1981. ("Untraceable electronic mail, return addresses, and digital pseudonyms", https://www.freehaven.net/anonbib/cache/chaum-mix.pdf ) An anonymity network is designed to hide the location of users on the network. Mixnets have very different properties from Tor/onion routing. In particular mixnets are by design not vulnerable to a global passive adversary, however they are vulnerable to a number of active attacks that are very different than the active attacks for Tor.

These might serve as good introductions to mixnet concepts:

status report

What's missing? A real PKI. Not having a PKI is the only thing stopping me from writing interesting proof of concept code that end users can use.

Currently this project has two transports, a UDP transport and a Tor Onion service transport.

The onion transport is very practical due to these three properties:

  • reliability
  • forward secrecy
  • NAT penetration

It is because of these important and practical properties that I've choosen to use the onion transport for the integration tests and future proof of concept development efforts. The fact that the Tor onion service transport has it's own anonymity properties is an added bonus since tor's anonymity properties are quite different from those of a mixnet. I would argue that they are complementary rather than overlapping.

There are two integration tests, entitled:

  • test_onion_threshold_cascade_mix
  • test_onion_continuous_time_mix

Both of these tests use the simulated 25 relay tor networks generated by Tor Project's Chutney. A small mixnet is generated that uses the onion transport and tests use this mixnet to send messages.

Before running the integration tests you must set the CHUTNEY_CONTROL_PORT environmental variable. The script test/scripts/install-chutney.sh installs/runs chutney and sets this variable.

You can use tox to run the tests or pytest directly (pytest -vs).