-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256
For this first status update on my SoP project (the Onion Name System), I'd like to give a quick run-down of where the project currently is. I would consider OnioNS ahead of schedule as I made significant progress on it for the paper before the SoP program officially began. The following features are in place:
*Client-side:* * A reliable Stem script that intercepts a .tor domain and sends it to the OnioNS client. It sets Tor to leave streams unattached, then auto-attaches non .tor streams, and rewrites .tor to .onion before attaching. Thank you arma! * Reliable IPC communication over a localhost TCP socket between the Stem script and the OnioNS client. The IPC syntax is simple enough to support telnet or other tools. * Ability to specify the IP of a name server (essentially a Mirror, but the name server isn't mirroring anything since the Synchronization protocol isn't there yet). * JSON communication over a Tor circuit (SOCKS username "OnioNS") to a name server. * The ability to verify the signature and proof-of-work of a Record.
*HS-side:* * The capability to create and validate (through scrypt proof-of-work) a Record. * Prompts to allow a user to specify the domain name and subdomain-destinations that they want for their hidden service. * The printout in JSON of a Record, which one can copy and send over email or IRC until I get the upload protocols in place.
*Server-side:* * JSON communication to make life easy. * TCP server for receiving a .tor domain and returning a Record. * Support for multiple Records. * The ability to accept and cache a new Record. * Construction of a Merkle tree and RSA-signing of the root. * Ability to find a Record in the Merkle tree, or to find a subtree that proves a domain's non-existence.
*General:* * A hidden service for this project. * Reliance on Botan rather than OpenSSL. The difference is night and day. Thank you Yawning! * A Record for example.tor and several others for testing and illustrative purposes. * Clean and organized code. The style is similar to Chromium with the exception that I put three spaces between each method. I enforce the style with clang-format. * A basic but functional manpage. * Support for Clang and GCC, with Clang being the preferred compiler for development and GCC is used when packaging. * Packaging into a PPA on Launchpad for Ubuntu 14.04 and beyond, so "tor-onions" can be installed and updated through apt-get. I also support Debian 8+ but do not currently package for it. * Packaging for x86, amd64, and armhf, so I'm supporting Pis/BBB/Odroid as well. * Many labeled tickets on Github to improve workflow. * Signed git tagging.
As you can imagine, this constitutes the bulk of the essential functionality. The remainder is primarily networking and server-side protocols, such as the Quorum, the Synchronization and Broadcast (upload) protocols, various algorithms, and so on. Those are next. I'm temporarily in a remote location and the Internet here is slow and quite spotty, so the project's hidden service is down and I haven't tested the latest commits over the network. However, once I have the Internet figured out I'll post a prototype here that everyone can test if they like. It's a centralized DNS at the moment, so spreading it out is next on the list.
- - Jesse V.