Contents
Some here.
Some purpose here.
All are welcome. Please contact the author.
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.
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:
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.
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
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.
The main interface provides a list of all of the messages that have been created or received, sorted from newest to oldest.
Due to the small screen size on Android, you must tap on a message to view it in its entirety:
If there is an attachment, a button will appear that will allow you to open it.
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.
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.
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.
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.
Once complete, you can remove an attachment if desired by tapping "Remove Attachment..." on Android or clicking "Remove File" 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.
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.
On the Desktop, click the edit message icon or the 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.
On the Desktop, click the blacklist message icon or the 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".
On the desktop, click the unblacklist message icon.
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:
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.
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.
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.
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.
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.
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.