TOR Summer 2017 Internship to Create a Bridge Bandwidth Scanner

Discussion in 'TOR | TAILS' started by survivalmonkey, Jun 19, 2017.

  1. survivalmonkey

    survivalmonkey Monkey+++

    Summer 2017 Internship to Create a Bridge Bandwidth Scanner
    isis June 15, 2017

    This is a mentored internship position to produce a bridge bandwidth scanner for The Tor Project.

    The Tor Network has what are called "Bandwidth Authorities": volunteer-run machines which build circuits through permutations of all the relays in the network to connect back to themselves and request files of different sizes, in order to statistically determine the likely maximum bandwidth capacity of each relay. For the relay bandwidth scanners, the circuit used for testing look like this:
    BW → A → B → BW
    Where A is the relay being measured, B is a relay believed to possess equal or greater bandwidth than A (otherwise the circuit would bottleneck at B), and BW is the Bandwidth Authority doing the measurement.
    The intern is responsible for designing and implementing a similar system for measuring the bandwidth of Tor bridge relays.
    Design Constraints

    The bridge bandwidth scanner produced should meet the following design/implementation constraints:
    1. Must be implemented in one of the following memory-safe languages:
      • Python;
      • Rust;
      • Another $LANGUAGE, but you'll have a lot of convincing to do.
    2. Must run as a daemon;
    3. Must produce a measured bandwidths file identical (or nearly identical) in syntax to the measured bandwidth files currently produced by relay bandwidth authorities (sample format);
    4. During the course of the work, the intern should attend weekly tor dev meetings (on in #tor-dev on Mondays at 17:00 UTC), or otherwise send brief weekly status reports should be sent to and the mentor(s).
    5. The position is remote and may take place in any location of the intern's choice. (Optionally, you're welcome to arrange with your mentor(s) to work in person, but we cannot allocate funds towards travel expenses at this time.)
    6. The length of the internship project is negotiable (between 1 and 3 months), and the (non-negotiable, sorry) compensation is $3000 USD.
    Please be aware if you choose Rust, that The Tor Project does not yet currently have nearly as many tools and libraries written in Rust. For example, you'll need to implement (at least a fraction of) bridge descriptor parsing (whereas in Python you'll be able to outsource this to Stem) and circuit construction through Tor's ControlPort (also outsourceable in Python to txtorcon). If you choose Rust, I will gladly help you implement these functionalities in separate crates (this will make it easier for us to expand upon them more, later on).
    Please also be aware that, while there is better library support in Python, using txtorcon will require knowledge of Twisted, an asynchronous framework known for being… well… twisted.
    Prerequisite Skills/Knowledge

    • Reasonable ability to communicate w.r.t. technical matters in English, German, or French (in that order of preference);
    • Python, Rust, or $LANGUAGE;
    • Basic knowledge of how a circuit is constructed through the Tor Network;
    • Basic knowledge of Tor bridges and anti-censorship infrastructure.
    Applicants with the following demonstrable skills/knowledge will be prioritised:
    • Public code samples in the language of choice;
    • Contributions of (integration) tests to an open source project (again, preferably in the language of choice);
    • Asynchronous programming.

    How To Apply

    The mentor(s) for this project are:

    • Isis Agora Lovecruft>
    Please apply by sending an email whose subject contains the phrase "Bridge Bandwidth Scanner Internship" and includes the following information to
    • A brief description of yourself and/or a résumé;
    • Links to sample code you've authored;
    • A brief proposal for how you would implement this project (it's okay to be vague and/or include questions, part of the internship will involve mentoring and continual feedback);
    You are welcome (but certainly not obligated!) to encrypt your application to the OpenPGP key with fingerprint 0A6A58A14B5946ABDE18E207A3ADB67A2CDB8B35.
    (Photograph CC BY 2.5 by Rich Niewiroski Jr.)

    Continue reading...
survivalmonkey SSL seal warrant canary