DNSCHAT-2: Build Proof of Concept



Issue Information

Issue Type: Task
 
Priority: Major
Status: Closed

Reported By:
Ben Tasker
Assigned To:
Ben Tasker
Project: DNS Chat (DNSCHAT)
Resolution: Done (2015-01-19 16:29:03)

Created: 2015-01-14 23:28:16
Time Spent Working


Description
Build a PoC implementation based on the high-level design in DNSCHAT-1


Issue Links

PoC documentation
Toggle State Changes

Activity



Repo: DNSChat
Commit: 84cc56eea853217091f7e0b528d2956261cf32b2
Author: Ben Tasker <github@<Domain Hidden>>

Date: Thu Jan 15 17:08:20 2015 +0000
Commit Message: Creating Repo. See DNSCHAT-2



Added (+)
-------
.gitignore




Webhook User-Agent

GitHub-Hookshot/2e7ffb9


View Commit

Made a couple of minor changes to the protocol described in DNSCHAT-1 - details are in the attached file.

The resulting interface is incredibly basic - I've not really put much effort into look and feel - but the system works. Did briefly tinker with Urwid to look at creating a more IRC feel, but as I'm not planning on building this beyond the PoC decided it wasn't worth the effort.
The resulting DNS Queries take the following format

{Sn}.{Sid}.{N}.{TN}.{msgstring}.endpointDomain


Where

- Sn = Sender ID - an arbitrary numerical figure used to identify the user (can be set manually, otherwise changes between sessions)
- Sid = Sequence ID - A numerical identifier for the current sequence of messages, increases incrementally
- N = Sequence Number - Used to identify message ordering within each despatch of messages
- TN = Total number of messages in the current despatch
- msgstring = hex encoded ciphertext

And there are a couple of trade-offs made on the basis that they weren't necessarily worth solving in a PoC.

- The pattern used is easily identifiable
- The Regex used to identify relevant traffic is incredibly simplistic

Although I've not made use of it, user ID (Sn above) 0 is reserved for 'system' messages - so could be used to generate a notification that a user has joined the chat. It could also be used to auto-negotiate a session encryption key, if a little thought was put into it.

The existing functionality works in two deployment scenarios

- Direct Peer 2 Peer (i.e. specifying each other's IP's as the resolvers with -r)
- Via intermediary resolvers (i.e. each end is sat somewhere on the traffic route for a real nameserver and queries are sent to an open resolver such as 8.8.8.8)

The potential OpSec mistakes that could be made were identified in DNSCHAT-1, and still stand.

Repo: DNSChat
Commit: ba2220405163226e37795d840e73c89a1ba6a983
Author: Ben Tasker <github@<Domain Hidden>>

Date: Thu Jan 15 17:11:04 2015 +0000
Commit Message: Added proof of Concept. See DNSCHAT-2



Added (+)
-------
dnschat.py




Webhook User-Agent

GitHub-Hookshot/2e7ffb9


View Commit


Repo: DNSChat
Commit: eaf44f14d2b02b9cb91292906e1d5e9c22ee9ee1
Author: Ben Tasker <github@<Domain Hidden>>

Date: Thu Jan 15 17:23:11 2015 +0000
Commit Message: Added README - based on the docs in DNSCHAT-2



Added (+)
-------
README.md




Webhook User-Agent

GitHub-Hookshot/2e7ffb9


View Commit

btasker changed status from 'Open' to 'Resolved'
btasker added 'Done' to resolution
btasker changed status from 'Resolved' to 'Closed'