On Privacy versus Freedom
2020-01-02 â Privacy, Thoughts â Matthew HodgsonA few years ago, back when Matrix was originally implementing end-to-end encryption, we asked Moxie (the project lead for Signal) whether heâd ever consider connecting Signal (then TextSecure) to Matrix. After all, one of Matrixâs goals is to be an interoperability layer between other communication silos, and one of the reasons for us using Signalâs Double Ratchet Algorithm for Matrixâs encryption was to increase our chances of one day connecting with other apps using the same algorithm (Signal, WhatsApp, Google Allo, Skype, etc). Moxie politely declined, and then a few months later wrote âThe ecosystem is movingâ to elaborate his thoughts on why he feels he âno longer believes that it is possible to build a competitive federated messenger at all.â
At the time we didnât respond via a blog post; instead we ended up talking it through a few times in person to see how misaligned we really were. The conclusion was that we agreed to disagree and Moxie said heâd be happy to be proved wrong, and wished us good luck. However, the subject has come up again thanks to Moxieâs talk on the same subject at 36C3 last week, and we keep getting asked to write a formal response on the Matrix side. So, hereâs an attempt to do so. (Moxie didnât want the 36C3 talk recorded, and I havenât watched it, so this is responding to the original blog post).
From my perspective, the main points proposed in âThe ecosystem is movingâ boil down to:
-
Decentralised systems are harder to design and build than centralised ones, as coordination is harder if you donât have a single authority to trust.
-
Decentralised systems are harder and slower to evolve than centralised ones, as you canât force participants to rapidly roll out (or even agree on) new features.
-
Users in federated systems tend to coalesce around the best/biggest server that the bulk of people use - which means that server typically gets to see a disproportionate amount of communication metadata (whoâs talking to who, and when), and has disproportionate power over the network, which could bully others away from running their own deployments.
-
If users donât trust their app provider, they can always go switch apps, which gives them freedom.
-
Open systems are less secure because you have no control over the quality of the implementations - if anyone can bring their own client or server to the table, all it takes is one bad implementation to compromise everyone in the vicinity.
Now, all of these points are valid to some extent.
Itâs absolutely true that decentralised systems are harder than centralised ones. Prior to Matrix we built centralised comms systems - we literally can do a side-by-side comparison for the same team to see how easily and fast we built our centralised comms system relative to Matrix. Empirically It took us around 6 times longer to get to the same feature-set with Matrix.
Itâs also true that decentralised systems are harder to evolve than centralised ones - you canât just push out a given feature with a single app update, but you have to agree and publish a public spec, support incremental migration, and build governance processes and community dynamics which encourage everyone to implement and upgrade. This is hard, but not impossible: weâve spent loads of time and money on Matrixâs governance model and spec process to get it right. Itâs still not perfect, but we havenât seen much fragmentation so far, and when weâre pushing out a feature empirically we can and do go just as fast as the centralised alternatives. (E2E by default is a bit of a special case because weâve had to go and reimplement many features users take for granted today in an E2E-capable manner, but weâre sprinting to get it done in the coming weeks). A bigger problem is that there are hundreds of spec change proposals which folks would like to see in the protocol, and finding a way to manage expectations and parallelise spec progress is hard - something weâre looking to improve in 2020 (although still figuring out how!)
Itâs also fair that in a multi-server federated model, users naturally tend to sign up on the most prominent server(s) (e.g. the matrix.org homeserver in the case of Matrix). In practice, the matrix.org homeserver currently makes up about 35% of the visible Matrix network by active users. Itâs also true that Matrix servers currently store metadata about whoâs talking to who, and when, as a side-effect of storing and relaying messages on behalf of their users. And without an adequate protocol governance system in place, a large server could start pushing around smaller ones in terms of protocol behaviour. In practice, weâre looking into solving metadata protection in Matrix by experimenting with hybrid P2P / Client Server models - letting users store their metadata purely clientside if they so desire, and potentially obfuscating whoâs talking to who via mixnets of blinded store & forward servers (more about this coming up at FOSDEM). Combined with nomadic accounts, this would let us eventually turn off the matrix.org server entirely and eliminate the pseudo-centralisation effect - the default âserverâ would be the one running on your client.
Itâs true that if a user doesnât trust (say) Telegram, they are free to go switch to Signal or WhatsApp or whatever instead⌠at the massive expense of having to persuade all their friends to install yet another app, and fragmenting their conversation history across multiple apps.
Finally, itâs also true that because anyone can develop a Matrix client or server and connect to the global network, thereâs a risk of bad quality implementations in the wild. There are many forks of Riot on the app stores - we simply canât vouch for whether they are secure. Similarly there are Matrix clients whose E2E encryption is partial, missing, or unreviewed. And there are a wide range of different Matrix servers run by different people with different agendas in different locations, which may be more or less trustworthy.
HOWEVER: all of this completely ignores one critical thing - the value of freedom. Freedom to select which server to use. Freedom to run your own server (perhaps invisibly in your app, in a P2P world). Freedom to pick which country your server runs in. Freedom to select how much metadata and history to keep. Freedom to choose which apps to use - while still having the freedom to talk to anyone you like (without them necessarily installing yet another app). Freedom to connect your own functionality - bots, bridges, integrations etc. Freedom to select which identifiers (if any) to use to register your account. Freedom to extend the protocol. Freedom to write your own client, or build whole new as-yet-unimagined systems on top.
Itâs true that if youâre writing a messaging app optimised for privacy at any cost, Moxieâs approach is one way to do it. However, this ends up being a perversely closed world - a closed network, where unofficial clients are banned, with no platform to build on, no open standards, and you end up thoroughly putting all your eggs in one basket, trusting past, present & future Signal to retain its values, stay up and somehow dodge compromise & censorship⌠despite probably being the single highest value attack target on the ânet.
Quite simply, that isnât a world I want to live in.
We owe the entire success of the Internet (let alone the Web) to openness, interoperability and decentralisation. To declare that openness, interoperability and decentralisation is âtoo hardâ and not worth the effort when building a messaging solution is to throw away all the potential of the vibrancy, creativity and innovation that comes from an open network. Sure, you may end up with a super-private messaging app - but one that starts to smell alarmingly like a walled garden like Facebookâs Internet.org initiative, or an AOL keyword, or Googleâs AMP.
So, we continue to gladly take up Moxieâs challenge to prove him wrong - to show that itâs both possible and imperative to create an open decentralised messaging platform which (if you use reputable apps and servers) can be as secure and metadata-protecting as Signal⌠and indeed more so, given you can run your server off the grid, and donât need to register with a phone number, and in future may not even need a server at all.
--Matthew
(Comments over at HN)
