Wind Farm 0: If there was suddenly no Internet, what would we do?

(Originally, posted on Medium and Fold, but here since this is my *real* blog after all, and if the Internet went down, I still will have my local blog archive, and can run a teeny tiny WordPress server on my own computer, local network and/or $9 computer).

This last Friday and Saturday, a group of tool developers, designers, user advocates, security experts, tinkerers and curious humans gathered at the Berkman Center on Friday and Saturday for discussions, teachings and hands-on learning about the past, present and future of nearby network communication technology…. and to answer the basic question “If there was suddenly no Internet, what would we do?”.
11146648_10152944926373434_4549087628200142545_o
I call this new communication space between all of our devices “Wind”, as it is a counterpart to the Web, but very different in its shape and basic nature.Wind Farm is an event designed to understand how to better harness the power from the Wind, and shape it to our needs.
10955252_10152944926218434_1722205278635437230_o
We had over 40 participants from Microsoft Research, the Open Technology Institute (part of New America Foundation), F-Droid (Free Software Foundation Europe), Tibet Action Institute, Rights Action Lab, the Briar Project, the Guardian Project, DeNovo (out of UC Berkekey’s TIER group), NYU, USC, members of the local Nepali community, and fellows from Harvard’s Berkman Center and Nieman Foundation. We all realized that there is a shared core problem that needs to be solved, around the basic “dialtone” or “chime” that let’s people near you, and their smart devices, know that you are there, available and interested in communicating about a specific topic, or using a specific set of information.On day two, powered by donuts and coffee, I (Nathan) gathered our experts together with curious participants in our outdoor introductory workshop and simulation event… the event we simulated? An alien invasion where our telecommunication system for the planet was about to be taken out by their mother ship. The participants were taught basic skills like using Bluetooth, NFC, Wifi and other tools to share information directly between their smartphones, instead of using the Internet.
image (3)
Everyone also learned how to fold an origami pinwheel, and adorn it (or themselves) with a 1KB read/write capable near field communication sticker chip. If you can turn a square piece of paper into a beautiful, functional pinwheel, and make it a portable, power free hard drive by putting a sticker on it, then you can do just about anything!
10750351_10152947234823434_7432061859459728997_o
We taught people how to transfer apps between their Android phones directly, since Google Play and other app stores don’t work when the Internet doesn’t exist. To do so, we used F-Droid and the App Swap feature.
One of the missions to help build a new, nearby community-powered network was to deploy an adhoc wifi mesh system, using Commotion, across the Harvard campus. Using some elevated platforms (aka fire escape), we managed to build a five-hop system that connected 23 Everett Street to Harvard Yard, with nothing but handheld antennas, battery packs, and the creativity of determined humans…
Simultaneously with the Wifi-mesh, we also deployed multiple covert battery and solar-charged PirateBoxes(Boxen?) throughout campus, and used them in a data relay “Pony Express” manner. Two teams with four relay runners each moved photos between each pirate box, to reach their end goal. Every PirateBox also contained a full, offline/nearby copy of the Guardian Project’s F-Droid repo app store, for local app distribution.
pirateboxen
To coordinate communications between teams throughout the afternoon, we used the Gilga app (aka Pinwheel) to send messages using only Bluetooth and WifiDirect… it was the first medium scale test of the technology (with 10-20 users communicating together at any given team), and it worked as expected. Each team needed to use the app to send critical messages about media being shared through out the local nearby networks.
gilgadouble
If you’d like to learn more about the concept of Wind, and the entire Wind Farm event, you can read on at WindFarm0.link. We will be holding more Wind Farm events in the coming months, so that you, too, can be prepared for a day without the Internet, and app and tool builders can understand the unique challenges this type of situation creates.

 

Bluetooth name meshyness on a Linux machine

First committed here: https://github.com/n8fr8/gilgamesh/blob/master/docs/linux-howto.txt

Since the Gilgamesh system uses plaintext bluetooth names for its basic broadcasting communication mode, it is a very easy system to participate in from any desktop system. Below is the set of steps that can be performed at the Linux command line to configure the device name to be up to a 248 byte message (~248 ASCII characters, or ~60 Unicode characters).

These commands can be easily used to build a stationary repeater system, using a high powered bluetooth antenna, or you can just use them to broadcast your own status constantly in the background, to anyone in the area who might be listening.

1) Install Bluez Tools (https://code.google.com/p/bluez-tools/)

> sudo apt-get install bluez-tools

2) Find your Bluetooth adapter

> sudo bt-adapter -l

Available adapters:
default-device-name (A1:B1:C1:D1:E1:F1)

3) Set Discoverable and Powered

> sudo bt-adapter –adapter=A1:B1:C1:D1:E1:F1 –set Powered true
> sudo bt-adapter –adapter=A1:B1:C1:D1:E1:F1 –set Discoverable true
> sudo bt-adapter –adapter=A1:B1:C1:D1:E1:F1 –set DiscoverableTimeout 3600

4) Change the name of your device to a Gilgamesh compatible string (starts with space or special character)

> sudo bt-adapter –adapter=A1:B1:C1:D1:E1:F1 –set Name ” this is my laptop it is a great big BT device”

5) Listen for and discover other devices in the area

> sudo bt-adapter -d

Searching…

[A2:B2:C2:D2:E2:F2]
Name: Now what. This is a message from my phone…yo..
Alias: Now what. This is a message from my phone…yo..
Address: A2:B2:C2:D2:E2:F2
Icon: phone
Class: 0x5a020c
LegacyPairing: 0
Paired: 0
RSSI: -59

Update: Added bash script to make it simpler:https://github.com/n8fr8/gilgamesh/blob/master/docs/gilgamesh.sh

> ./gilgamesh.sh
> Powered: 1 -> 1
> Discoverable: 1 -> 1
> DiscoverableTimeout: 3600 -> 3600
> What’s happening nearby? this is a big ol’ test
> Name: this is a really long string that I am typing now!!!! -> this is a big ol’ test
> checking for local updates…
> Searching…

Gilgamesh: Twitter over Bluetooth

 

Hey, looks, it is like Twitter… except without any Internet! The Gilgamesh App continues to evolves, and is now tagged at 0.0.4. You can unofficially find it on FDroid thought it might take a bit for the latest code to show up there.

device-2014-10-06-165429 device-2014-10-06-165405 device-2014-10-06-165421  device-2014-10-06-165447

 

The primary update is that I have made the user interface look somewhat like a real app. This includes an easy popup menu to reshare (“retweet”) messages, which helps expand the reach of any message, while the human aspect of it combats spam and false information.

I have also added the ability to send a direct (private) message to anyone easily, as well. The direct messages will be queued and stored until delivered, which means you can send a message when someone is out of range, and it will be delivered if they happen to come into range. Delivery is indicated by a ✓mark.

This is all still operating using the plain text Bluetooth Discovery name hack that I’ve been writing about here for the last week, or so. Any Bluetooth device be it a $1000 iPhone or a $10 Nokia can participate in this network simply by changing their Bluetooth name to have a space in front of it, and then writing their own status updates there. They can view all of the messages as well, by scanning for nearby devices. This Android app simply builds on top of that network to support private messages, and a persistent log of all status/names encountered.

Finally, just to review some of the privacy-enhancing aspects of this app:

  • If you just want to listen/consume information, you do not need to broadcast (make your device visible), making it very difficult to target your device
  • The passive broadcast/discovery conduit allows for people that do not know each other, to passively and async exchange information in public spaces, with their devices out of sight (in their pockets)
  • The asynchronous direct message features allows the exchange of messages in public places without any direct or visible interaction between parties
  • All data received in the app is stored in memory, and not permanently stored to the device. This means killing the app wipes all memory clean, leaving no trace behind.
  • All user identifiers are derived from the device’s ID, and though simple to remember, are not “friendly” in anyway that allows for easy social engineering impersonation attacks
  • If Bluetooth pairing is done between devices, an extra level of identity verification is provided, and an * is tagged to all identifiers when displayed to ensure this is who you think it is.
  • For Direct messages, any device which you have paired with, will use the Bluetooth “secure” socket connection mode, which provides a basic level of encryption and verification
  • No registration, real name, phone number or email is required, providing no link to any other identity
  • All resharing/re-broadcasting of information is powered by human minds and human hands, making it more difficult for any attacker to poison the information flow

As always, feedback on these, the code, the design and the concept, are welcome here, on github, diaspora, twitter, etc, etc, etc… see you around, and I really hope to find you on the Gilgamesh soon!