initial commit
This commit is contained in:
commit
c941bee2c6
3 changed files with 125 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
*.pdf
|
2
Makefile
Normal file
2
Makefile
Normal file
|
@ -0,0 +1,2 @@
|
|||
all:
|
||||
groff -ms omemo-discord.ms -T pdf > omemo-discord.pdf
|
122
omemo-discord.ms
Normal file
122
omemo-discord.ms
Normal file
|
@ -0,0 +1,122 @@
|
|||
.TL
|
||||
OMEMO over Discord
|
||||
|
||||
.AU
|
||||
Luna Mendes
|
||||
|
||||
.AB
|
||||
This paper describes what implementors could do to provide end-to-end encryption
|
||||
on Discord using the OMEMO standard from XMPP.
|
||||
|
||||
This is a draft document.
|
||||
.AE
|
||||
|
||||
.NH
|
||||
Disclaimer
|
||||
|
||||
.PP
|
||||
An OMEMO session can not be fully carried out over Discord due to limitations
|
||||
of the Discord API.
|
||||
|
||||
.NH
|
||||
Key negotiation / distribution
|
||||
|
||||
.PP
|
||||
Negotiating keys and prekeys in OMEMO use the User's originating XMPP server and
|
||||
XEP-0163: Personal Eventing Protocol to signal device key changes.
|
||||
|
||||
.PP
|
||||
Discord does not provide any semantics to what XEP-0163 provides, so
|
||||
implementors are allowed to improvise, and implement a generic pub/sub server.
|
||||
.B "However"
|
||||
notice that the protocol such a server provides can leak metadata about who is
|
||||
talking with who, and so, extra care must be given to implementations going down
|
||||
such paths.
|
||||
|
||||
.PP
|
||||
The second approach is leveraging the existing Discord protocol to provide, at
|
||||
least, key fingerprint material. Such an approach
|
||||
.I "could"
|
||||
involve the existing user profiles, and the fact that you can make a League of
|
||||
Legends entry without verification. USER_UPDATE events would be dispatched
|
||||
when such device keys change.
|
||||
|
||||
.PP
|
||||
If implementations go down the second approach, they could embed the key
|
||||
material inside the entries as well, but that might prove itself difficult,
|
||||
as there is a limit to how much you can insert on an entry. Same thing applies
|
||||
to the key fingerprints. Implementations should consider compressing. They
|
||||
should also consider a separate key server to give keys based on the key
|
||||
fingerprints so conversation can carry on.
|
||||
|
||||
.NH
|
||||
Key verification
|
||||
|
||||
.PP
|
||||
Keys must be verified out of band to prevent a MITM attack by Discord when
|
||||
negotiating the keys.
|
||||
|
||||
.NH
|
||||
On the subject of search
|
||||
|
||||
.PP
|
||||
Message search is something that is claimed to not work once you decide on using
|
||||
a cryptosystem, however, search is possible. There are two approaches to it:
|
||||
|
||||
.NH 2
|
||||
Client-side search
|
||||
|
||||
.PP
|
||||
The first one decides that the Discord Client stores the message plaintext on
|
||||
itself. The first obvious drawback is the overhead a client must have to do a
|
||||
search, and that is even more expensive when you consider the Web technologies
|
||||
powering the Client.
|
||||
|
||||
.NH 2
|
||||
Server-side search
|
||||
|
||||
.PP
|
||||
This involves a
|
||||
.I "separate"
|
||||
server that the client can send encrypted message history to.
|
||||
|
||||
.PP
|
||||
When searching, the client can ask for a batch of messages, decrypt, then
|
||||
search through them. However the obvious drawbacks are that you need a separate
|
||||
server with storage, and the implied bandwidth and decryption costs of searching
|
||||
this way.
|
||||
|
||||
.NH 2
|
||||
Conclusion
|
||||
|
||||
.PP
|
||||
All XMPP clients use client-side message storage for unencrypted operation.
|
||||
However, due to how Discord works, users assume the storage is server-side,
|
||||
causing a conflict of interests in the part of what users assume Discord works
|
||||
onto how a theoretical OMEMO-over-Discord provider provides.
|
||||
|
||||
.NH
|
||||
On the subject of JavaScript
|
||||
|
||||
.PP
|
||||
Notice that all the work described here can go to waste if Discord is still able
|
||||
to send you maliciously crafted JavaScript for the client to execute and dump
|
||||
all its private keys to Discord.
|
||||
|
||||
.PP
|
||||
Because of that, it is recommended to design a new client that is fully native
|
||||
and extensible to carry on the high expectations of a cryptosystem. "Signing
|
||||
a plugin" is not enough, as Discord can still send their own JavaScript that
|
||||
messes with the plugin's operation after signature verification.
|
||||
|
||||
.PP
|
||||
The bottom line is that if you can't trust the runtime then it is not secure.
|
||||
Another case where this line of thought is valid is in ProtonMail, where they
|
||||
can send you malicious JavaScript that just records everything. ProtonMail
|
||||
answers that such attacks are not worrisome when we have things like SNI.
|
||||
|
||||
.PP
|
||||
The author is in the "side" that if you can't trust ProtonMail from sending
|
||||
malicious JavaScript code, then you can't use ProtonMail. It might be more
|
||||
nuanced than that, considering how the client is open and "can" be "built"
|
||||
by people if wanted.
|
Loading…
Reference in a new issue