Hi tor-dev,
I care deeply about the ability for people to have anonymity online, and I've always been really interested in exactly how Tor works.
So for a class project last semester I wrote oppy, an onion proxy in 100% Python. I spent most of my winter break cleaning it up and writing documentation, and today I'm releasing oppy as a free software project :)
code: https://github.com/nskinkel/oppy docs: https://nskinkel.github.com/oppy
Here's a brief description of the project, with some questions I have for tor-devs at the end.
@@@ WARNING @@@
*DO NOT* use oppy if you want anonymity (see warnings on the project README and the documentation homepage). It's currently just a prototype and is not meant for normal client usage. ---------
oppy works like a regular Tor client (i.e. any application that can use SOCKS 5 can use oppy), and it can even work with the Tor Browser Bundle if you fiddle with the TorButton settings to use oppy instead of the normal Tor process. See: https://nskinkel.github.io/oppy/usage.html
There are a number of simplifications made, with the major ones primarily centering around circuit management/build logic and how and when network status documents are collected (see: simplifications.md in the repo or https://nskinkel.github.io/oppy/simplifications.html). So oppy doesn't currently work *exactly* the same as a standard Tor OP according to tor-spec.
oppy seems to get reasonable performance (for an OP at least). I haven't done any serious performance tests so this is all anecdotal, but oppy seems to work fast enough for normal usage (e.g. I can generally stream videos without issues).
I hope anyone on this list who is interested will try it out and/or have a look at the code! :)
I have a few questions for tor-devs:
1. Do you think this project is/could be interesting, useful, or potentially beneficial as an addition to the world of Tor software?
2. If so, do you see any major use-cases for oppy? At this point it's still really just a prototype, so if anyone has some really cool use-cases for oppy I could try to design future modifications to support them. Some things I had considered so far:
- a tool for research and/or rapidly prototyping new protocol modifications (e.g. new kinds of handshakes, circuit management behavior, or path selection)
- a tool for testing/fuzzing Tor. With a few modifications, oppy could pretty easily be turned into a somewhat-advanced fuzzer (e.g. it'd be easy to do something like "After building C circuits and sending R relay data cells on circuit X, send N number of malformed cells of type Y to the middle node on circuit X").
- a drop-in OP replacement for specialized applications. oppy is still a pretty long way from this being a viable option, but maybe someday people could use oppy as a regular Tor client for certain use-cases (e.g. if someone wants to ship a full Python Tor stack for a locked down, special-purpose application using Tor).
3. If yes to 1 or 2, would anyone here be interested in hacking on oppy with me? :)
I had a *ton* of fun building oppy and learned a lot about Tor in the process, and I'd love to continue working on it.
I'm currently thinking about what a project roadmap for oppy could look like, but whether or not I continue hacking on oppy to make it a solid piece of software (rather than just a prototype) or just leave it as is as a reference depends on whether or not the Tor development community sees any real uses or future potential for the project.
Thanks for reading!
All the best, Nik