Almost all messaging systems become useless when you lose access to the internet. What happens when the internet is cut off by a disaster or government? What if the app is banned in an app store? This is something I have been thinking about lately. Both because of the frequency of natural disasters and also because internet cutoff is a tactic increasingly used by authoritarian governments. The result of this is xmpp+OMEMO (i.e. signal) over airdrop. Since this circumvents the internet and never tries to connect to anything, it works around national firewalls and internet blocks. There are multiple layers of encryption here, that offered by Apple with Airdrop as well as application level encryption with OMEMO .
To do this, I hijacked airdrop’s file transfer and automated the process. However, it works remarkably well. There have been other attempts to do things like this but these are usually not open source, not a documented protocol like signal and do not work when the app is closed. Additionally, there is often a dependence on SMS/phone numbers which is an inherently insecure system. Using airdrop allows for notifications to show up when Monal is closed without going over Apns (Apple’s push system). There is no connection to Apple or my own push server.
For now you need to establish your initial key trust with an xmpp server however after that you can go offline and work via airdrop (I recommend setting airdrop to contacts only to prevent spam). I hope to have qr code based key exchange some point in the future. So the circle of trust can be established quickly in person. You can use an existing server using the in app registration flow or just run a simple xmpp server like prosody on a Linux vm or raspberry pi.
This is in the latest beta. To use airdrop mode go to your account and toggle use air drop. This will take your account offline. When you send a message, the airdrop share sheet will appear and you will be asked to select the recipient.
This is text messages only for now. Airdrop mode will create an XMPP payload with a message encrypted with the signal protocol and send that to its recipient. I suggest you set your airdrop receiving settings to contacts only so only those who are your contacts in your iOS contacts app can send you files (in this case messages).
The primary flaw for airdrop that I have seen is your screen has to be on. I am not sure how to get around that right now. Because this is peer to peer, obviously you will also need to be nearby to message as well. This is really intended for small groups in close proximity that need to communicate off the grid.
Try the Monal iOS beta and let me know how it works.
Since Monal is open source, if Monal is blocked for some reason anyone can grab the source on GitHub and build it for themselves and friends. Any version of Monal whether from app store or self compiled will be compatible for messaging.