Fluid Nexus Manual

Contents

1   Meta

1.3   Purpose

Some purpose here.

1.4   Suggestsions, Errata, and Translations

All are welcome. Please contact the author.

2   Introduction

Fluid Nexus is an application for mobile phones and desktop devices that is primarily designed to enable activists to send messages and data amongst themselves independent of a centralized network. The idea is to provide a means of communication between people when the centralized network has been shut down, either by the government during a time of unrest, or by nature due to a massive disaster. During such times the use of the centralized network for voice or SMS is not possible. Yet, if we can use the fact that people still must move about the world, then we can use ideas from sneaker-nets to turn people into carriers of data. Given enough people, we can create fluid, temporary, ad-hoc networks that pass messages one person at a time, spreading out as a contagion and eventually reaching members of the group. This enables surreptitious communication via daily activity and relies on a fluid view of reality. Additionally, Fluid Nexus can be used as a hyperlocal message board, loosely attached to physical locations.

For more information, see "Transnetworks and the Fluid Nexus Project" to be published in Fall 2011 in the proceedings of dis/connecting/media 2009.

3   Terminology & Icons

In this manual Android refers to the Android application, while Desktop refers to the application for Windows and Linux PCs.

The following icons are used throughout the manual and in the applications themselves:

Public messages created by you Public messages created by you
Messages that you have marked as public and will be pushed by yourself or someone else to the Nexus
Public messages created by someone else Public messages created by someone else
Messages that someone else has marked as public and will be pushed by yourself or someone else to the Nexus
Outgoing messages Outgoing messages
Messages that you've created and that will be passed to other devices running Fluid Nexus
Other messages Other messages
Messages that you've received from other users of Fluid Nexus
Blacklisted messages Blacklisted messages
Messages that you've blacklisted (removed from view)
Attachment Message attachment
Indicates that the given message has an attachment of some sort (audio, image, video)

4   Security

4.1   Identifying Information

Data is stored unencrypted in a local sqlite database. It is best that you take care of encryption yourself, such as by using ecryptfs home directories or LUKS encrypted devices on Linux. For Android we plan on implementing SQLCipher in the near future.

Data is sent over Bluetooth without any transport layer encryption. This is something we plan on implementing in the future.

Data is sent over link-local wifi using zeroconf for service discovery without any transport layer encryption. This is something we plan on implementing in the future.

While we do not save any identifying information, it is possible that you may inadvertently identify yourself through something you write or share using Fluid Nexus. Please take this into account when using the software. On Android, we suggest the use of ObscuraCam to anonymize any photos that you decide to share.

4.2   Data Sharing

4.2.1   Bluetooth

On Android, devices must be paired before any data sharing can occur. This should happen in a safe location prior to an event. Because of this need for pairing it is less likely that those unknown to you will be able to access Fluid Nexus messages when you are using the Bluetooth_ network modality alone; however, it is still possible that someone can sniff your Bluetooth traffic and thus see what messages are being sent.

On the Desktop, TODO

4.2.2   Zeroconf

On Android and the Desktop, devices will share messages with any other device running Fluid Nexus. This means that others, whom you do not know, will be able to receive Fluid Nexus message (but Fluid Nexus Messages alone) from your device. This is by design, as Fluid Nexus is a broadcast flooding protocol, meant to spread messages as far and as wide as possible. Please take care to remove identifying information if you deem this to be a risk.

5   Using Fluid Nexus

The main interface provides a list of all of the messages that have been created or received, sorted from newest to oldest.

android main interface

Main interface of the Android application.

desktop main interface

Main interface of the Desktop application.

Due to the small screen size on Android, you must tap on a message to view it in its entirety:

android view message

Viewing a message (Android)

If there is an attachment, a button will appear that will allow you to open it.

android view message attachment

Viewing a message with an attachment (Android)

On the desktop version, all of the message is displayed in the main window. If there is an attachment, an icon will be displayed with a blue clickable link to open it.

desktop main interface

Attachments can be opened on the desktop by clicking the blue underlined link.

You can further sort messages by their message type via the application menu (Android) or the "View" menu/toolbar buttons (Desktop). This allows you to view all messages (the default), messages to be sent to the Nexus, only those you have created and are thus "outgoing", and blacklisted messages.

android menu

Android menu

desktop view message types

Options for viewing different message types on the desktop version. On the toolbar, from left to right the options are: all, nexus messages, outgoing messages, and blacklisted messages.

5.1   Creating a new message

New messages can be created by selecting the "New Message" menu item on Android or by clicking the "New Message" button on the Desktop toolbar (also available under the "File" menu). This will open up a new message window.

android new message

Android new message window

Desktop new message window

Desktop new message window

Fill out the desired title and message. Messages can be marked as potentially being sent to the Nexus by checking "Public (push to Nexus?)". Attachments can be added as well. In the Desktop application simply press "Choose File..." to open up a file dialog and select the desired attachment. On Android, select the type of attachment (audio, image, video) and then tap "Add Attachment..." to open up the native file choosing application.

android new message attachment type

Selecting an attachment type on Android

Once complete, you can remove an attachment if desired by tapping "Remove Attachment..." on Android or clicking "Remove File" on the Desktop.

android new message complete

Completed new message window on Android

desktop new message complete

Completed new message window on the Desktop

To save, simply tap the "Back" button on Android, where you will be presented a confirmation dialog, or click "Save" on the Desktop.

android new message save

Save new message dialog on Android

5.2   Editing Messages

Messages you create can be edited or deleted, while messages you receive can be deleted or blacklisted. On Android, to edit or delete a message you have created, long tap the desired message in the main window to open up a context menu.

android outgoing context menu

Android outgoing context menu

On the Desktop, click the Edit message edit message icon or the Delete message delete message icon to do the same.

For messages you have received you either blacklist or delete the message; long tap on Android the desired message to bring up the menu.

android other context menu

Android received message context menu

On the Desktop, click the Blacklist message blacklist message icon or the Delete message delete message icon to do the same.

Once a message is on the blacklist you can only view it by selecting the "Blacklist" view. Once there you can remove it by, on Android, long tapping on the desired message and selecting "Unblacklist Message".

android blacklist context menu

Android blacklisted message context menu

desktop blacklist

Desktop blacklist view

On the desktop, click the Unblacklist message unblacklist message icon.

5.3   Preferences

Both the Android and the Desktop applications have preferences that allow you to control how the applications behave.

The "Network" section provides checkboxes to enable or disable particular network modalities. Fluid Nexus is opportunistic and tries to use whatever modality is available to spread messages. Multiple modalities can run in parallel without problems. At the moment we have implemented three modalities:

  • Bluetooth: connects to nearby devices running Fluid Nexus. On Android, attempts to connect to paired Bluetooth devices only.
  • Zeroconf: uses the zeroconf protocol to discover nearby devices running Fluid Nexus and therefore transfer data over wireless or wired networks. This can occur even if you do not have an Internet connection, as data passes only "link-local", meaning behind a single router.
  • Nexus: tries to connect to the Internet to push messages marked as public to the Nexus.
android preferences

Android preferences screen

desktop preferences

Desktop preferences screen

Ad-Hoc Wifi is still under development.

For each of the network modalities (with the exception of "Nexus") you also have the possibility of setting the "Scan Frequency"; this is the amount of time between successive scans for nearby devices. Lower values mean more frequent scans. On Android, low values for the Bluetooth Scan Frequency will severely impact battery life.

android bluetooth scan frequency

Android bluetooth scan frequency

desktop bluetooth scan frequency

Desktop bluetooth scan frequency

Finally, the "Nexus" section allows you to set your key and secret for posting to the Nexus. To set this up, first register for an account at http://fluidnexus.net (by either creating a new account there or by logging in using your Google Account). Then, on your user page click "Request a key and secret". Enter these 20-digit numbers into the corresponding boxes in your Android or Desktop application.

android nexus preferences

Android Nexus Preferences

android nexus preferences key

Entering a Nexus key on Android

desktop nexus preferences

Desktop Nexus Preferences

Then, request authorization from within the application. On Android, open the menu and select "Request Nexus Authorization"; on the Desktop click the "Request Nexus Authorization" button.

android menu extension

Android menu showing "Request Nexus Authorization" option

You will be forwarded to the Fluid Nexus website; you must be logged in in order to proceed. Once you have granted authorization to the application (Android or Desktop) to post to the Nexus, you need to setup the Token and Token Secret. On Android, these are filled in automatically for you; on the Desktop, you need to copy and paste these values from the website into the corresponding boxes.

6   Technical Information

6.1   Protocol Buffer implementation

Fluid Nexus uses protocol buffers to share data. The following documents our message format:

message FluidNexusHashes {
    repeated string message_hash = 1;
}

message FluidNexusMessage {
    optional string message_title = 1;
    optional string message_content = 2;
    optional float message_timestamp = 3;
    optional float message_received_timestamp = 10;
    optional string message_hash = 4;
    optional string message_source = 5;
    optional bool message_mine = 6;
    optional bool message_public = 16;
    optional int32 message_ttl = 17 [default = 0];

    enum MessageType {
        TEXT = 0;
        AUDIO = 1;
        IMAGE = 2;
        VIDEO = 3;
    }

    optional MessageType message_type = 7;
    optional bytes message_attachment = 8;
    optional string message_attachment_original_filename = 9;
}

message FluidNexusMessages {
    repeated FluidNexusMessage message = 1;
}

Note that no directly identifying information is either sent in the message nor saved in the database. The only way identifying information might be saved is via anything placed in the message itself. Also note that there are no limitations on the length of the message.

The application uses a SHA1 hash of the message title and message content to determine whether or not the message needs to be exchanged. These hashes are first exchanged between devices to determine what needs to be sent. Thus Fluid Nexus uses a type of distributed hash table with the goal of replicating the entire table amongst all devices.

6.2   Network Modalities

Fluid Nexus currently works using Bluetooth and Zeroconf service discovery, with Ad-Hoc Wifi to be developed. Android requires Bluetooth devices to be paired before any data sharing can occur. On the Desktop, sharing between discoverable Linux devices does not require pairing beforehand. (Windows is to be determined.) Zeroconf does not require any pairing and thus messages will be shared between any device running Fluid Nexus and discoverable using Zeroconf service discovery.