[tor-dev] oppy - an Onion Proxy in Python
nskinkel at iastate.edu
Tue Jan 20 00:15:06 UTC 2015
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 :)
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,
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 819 bytes
Desc: OpenPGP digital signature
More information about the tor-dev