Project Capillary: End-to-end encryption for push messaging, simplified
android-developers.googleblog.com
android-developers.googleblog.com
Since Google has excellent crypto people on staff I'm sort of left wondering what I'm missing.
At least it's using Tink, under the hood. If you're unfamiliar with all this stuff, a better starting place might be Google's Tink project.
Caveat: I know enough about encryption to never roll my own.
TL;DR: Use NaCl, or libsodium, or the go equivalent (https://godoc.org/golang.org/x/crypto/nacl).
A nice jab at themselves. Glad they have a sense of humor.
For those looking for an actual solution, we've built tools (already running in production) that make this very easy:
- Cross-device, cross-platform.
- Fully P2P/decentralized.
- `user()` provides key management, multi-device login.
- ECDSA
- Diffie-Hellman
- Can do RSA-like DH-based 1-way messages.
- PBKDF2
- AES
- SHA256
This allows a service to send push messages to its users without Google being privvy to the content of the messages. I guess it's not ready for P2P use yet (aka encrypting the messages with a key unknown to $Service) but could still be useful for telling a user that "Jane sent you a message" without leaking the fact that John is communicating with Jane.
Some quick googling let me to this SO answer [0] suggesting that as of 2016 devs can configure APNS as an encrypted channel where the client decrypts notification payloads locally.
[0] https://stackoverflow.com/questions/32719476/how-secure-are-...
Not sure what Signal does here particularly, but their FAQ claims it's not a problem. https://support.signal.org/hc/en-us/articles/217524107-Can-G...
At least, that's what I read for Android/GCM, I'm not sure if that applies to Apple.