I've just tried Facebook Messenger's secret conversations feature. I started a conversation with Alice on Facebook Messenger for iOS. I noticed the following in Facebook's online help, under the heading How do I verify that my secret conversation in Messenger is encrypted?
Both people in a secret conversation have a device key that you can compare to verify that the messages are end-to-end encrypted.
To verify that the conversation is encrypted, compare your device key with the other person's device key to confirm that they match.
When I tap through to the device keys pane for a secret conversation, I am presented with keys called "YOUR KEY" and "ALICE'S KEY". They do not match. The wording above implies to me that I should see two identical keys. Although if they are "device keys" then they should be unique to a device and therefore be different. I concluded the help's wording is just unclear.
On that same screen displaying the keys, I read the following message.
Your key is the same for all of your secret conversations on this device. Alice's key should match the one on their device.
That seems to say that if Alice sees the same two keys on her device, encryption is "verified." So it seems that:
- A device key is the public key of a keypair generated by the Facebook Messenger app.
- By confirming with Alice that her device key is the one I'm using, I authenticate her public key and achieve the "verification" Facebook is talking about.
If all of this is correct, then I have to ask:
Is this verification process just here to provide some comfort? Or is Facebook Messenger actually vulnerable to MITM attacks? Do paranoid users require an already-secure channel over which to verify keys? Finally, how can I find out more about the implementation of Facebook's secret conversations?