a2cbbedc65
Change-Id: I96a2620ffb1d9e98a1d8ce7d97f2c4f58c2dbfd3 Reviewed-on: https://cl.tvl.fyi/c/depot/+/603 Reviewed-by: tazjin <mail@tazj.in>
151 lines
6.2 KiB
Markdown
151 lines
6.2 KiB
Markdown
After having tested countless messaging apps over the years, being
|
|
unsatisfied with most of them and finally getting stuck with
|
|
[Telegram](https://telegram.org/) I have developed a little theory about
|
|
messaging apps.
|
|
|
|
SMU stands for *Security*, *Multi-Device* and *Usability*. Quite like
|
|
the [CAP-theorem](https://en.wikipedia.org/wiki/CAP_theorem) I believe
|
|
that you can - using current models - only solve two out of three things
|
|
on this list. Let me elaborate what I mean by the individual points:
|
|
|
|
**Security**: This is mainly about encryption of messages, not so much
|
|
about hiding identities to third-parties. Commonly some kind of
|
|
asymmetric encryption scheme. Verification of keys used must be possible
|
|
for the user.
|
|
|
|
**Multi-Device**: Messaging-app clients for multiple devices, with
|
|
devices being linked to the same identifier, receiving the same messages
|
|
and being independent of each other. A nice bonus is also an open
|
|
protocol (like Telegram\'s) that would let people write new clients.
|
|
|
|
**Usability**: Usability is a bit of a broad term, but what I mean by it
|
|
here is handling contacts and identities. It should be easy to create
|
|
accounts, give contact information to people and have everything just
|
|
work in a somewhat automated fashion.
|
|
|
|
Some categorisation of popular messaging apps:
|
|
|
|
**SU**: Threema
|
|
|
|
**MU**: Telegram, Google Hangouts, iMessage, Facebook Messenger
|
|
|
|
**SM**:
|
|
[Signal](https://gist.github.com/TheBlueMatt/d2fcfb78d29faca117f5)
|
|
|
|
*Side note: The most popular messaging app - WhatsApp - only scores a
|
|
single letter (U). This makes it completely uninteresting to me.*
|
|
|
|
Let\'s talk about **SM** - which might contain the key to solving SMU.
|
|
Two approaches are interesting here.
|
|
|
|
The single key model
|
|
--------------------
|
|
|
|
In Signal there is a single identity key which can be used to register a
|
|
device on the server. There exists a process for sharing this identity
|
|
key from a primary device to a secondary one, so that the secondary
|
|
device can register itself (see the link above for a description).
|
|
|
|
This *almost* breaks M because there is still a dependence on a primary
|
|
device and newly onboarded devices can not be used to onboard further
|
|
devices. However, for lack of a better SM example I\'ll give it a pass.
|
|
|
|
The other thing it obviously breaks is U as the process for setting it
|
|
up is annoying and having to rely on the primary device is a SPOF (there
|
|
might be a way to recover from a lost primary device, but I didn\'t find
|
|
any information so far).
|
|
|
|
The multiple key model
|
|
----------------------
|
|
|
|
In iMessage every device that a user logs into creates a new key pair
|
|
and submits its public key to a per-account key pool. Senders fetch all
|
|
available public keys for a recipient and encrypt to all of the keys.
|
|
|
|
Devices that join can catch up on history by receiving it from other
|
|
devices that use its public key.
|
|
|
|
This *almost* solves all of SMU, but its compliance with S breaks due to
|
|
the fact that the key pool is not auditable, and controlled by a
|
|
third-party (Apple). How can you verify that they don\'t go and add
|
|
another key to your pool?
|
|
|
|
A possible solution
|
|
-------------------
|
|
|
|
Out of these two approaches I believe the multiple key one looks more
|
|
promising. If there was a third-party handling the key pool but in a way
|
|
that is verifiable, transparent and auditable that model could be used
|
|
to solve SMU.
|
|
|
|
The technology I have been thinking about for this is some kind of
|
|
blockchain model and here\'s how I think it could work:
|
|
|
|
1. Bob installs the app and begins onboarding. The first device
|
|
generates its keypair, submits the public key and an account
|
|
creation request.
|
|
|
|
2. Bob\'s account is created on the messaging apps\' servers and a
|
|
unique identifier plus the fingerprint of the first device\'s public
|
|
key is written to the chain.
|
|
|
|
3. Alice sends a message to Bob, her device asks the messaging service
|
|
for Bob\'s account\'s identity and public keys. Her device verifies
|
|
the public key fingerprint against the one in the blockchain before
|
|
encrypting to it and sending the message.
|
|
|
|
4. Bob receives Alice\'s message on his first device.
|
|
|
|
5. Bob logs in to his account on a second device. The device generates
|
|
a key pair and sends the public key to the service, the service
|
|
writes it to the blockchain using its identifier.
|
|
|
|
6. The messaging service requests that Bob\'s first device signs the
|
|
second device\'s key and triggers a simple confirmation popup.
|
|
|
|
7. Bob confirms the second device on his first device. It signs the key
|
|
and writes the signature to the chain.
|
|
|
|
8. Alice sends another message, her device requests Bob\'s current keys
|
|
and receives the new key. It verifies that both the messaging
|
|
service and one of Bob\'s older devices have confirmed this key in
|
|
the chain. It encrypts the message to both keys and sends it on.
|
|
|
|
9. Bob receives Alice\'s message on both devices.
|
|
|
|
After this the second device can request conversation history from the
|
|
first one to synchronise old messages.
|
|
|
|
Further devices added to an account can be confirmed by any of the
|
|
devices already in the account.
|
|
|
|
The messaging service could not add new keys for an account on its own
|
|
because it does not control any of the private keys confirmed by the
|
|
chain.
|
|
|
|
In case all devices were lost, the messaging service could associate the
|
|
account with a fresh identity in the block chain. Message history
|
|
synchronisation would of course be impossible.
|
|
|
|
Feedback welcome
|
|
----------------
|
|
|
|
I would love to hear some input on this idea, especially if anyone knows
|
|
of an attempt to implement a similar model already. Possible attack
|
|
vectors would also be really interesting.
|
|
|
|
Until something like this comes to fruition, I\'ll continue using
|
|
Telegram with GPG as the security layer when needed.
|
|
|
|
**Update:** WhatsApp has launched an integration with the Signal guys
|
|
and added their protocol to the official WhatsApp app. This means
|
|
WhatsApp now firmly sits in the SU-category, but it still does not solve
|
|
this problem.
|
|
|
|
**Update 2:** Facebook Messenger has also integrated with Signal, but
|
|
their secret chats do not support multi-device well (it is Signal
|
|
afterall). This means it scores either SU or MU depending on which mode
|
|
you use it in.
|
|
|
|
An interesting service I have not yet evaluated properly is
|
|
[Matrix](http://matrix.org/).
|