Moving Brad's reply (with permission) onto the thread. Is this an accurate
Just to provide a few more urls, since I'm learning the code. Key
1) QR Code: When you link your Signal-Desktop and Signal-Android, the QR
code fed to your phone contains a (transient) public key of the Desktop
device.
2) Server messaging interface: The phone sends a provisioning message [1]
back to the desktop, containing your phone's private identityKey (encrypted
with the that transient public key). After provisioning, the linked
Desktop holds the phone numbers IdentityKey pair.
3) Server Key API: devices send their pre-keys [2] to the server, and
retrieve recipients's keys [3] to encrypt messages for delivery to each
device of each recipient. This API is "device aware" - the client can get
pre-keys for one or all devices.
So: the identityKey is the identity of the contact identified by phone
number (shared among linked devices). The pre-keys are per device.
There is a /v1/devices endpoint [4] in the API, undocumented, but it
doesn't seem to be used - is it?
That's my reading. Feel free to correct it.
[1]
https://github.com/WhisperSystems/Signal-Desktop/blob/master/protos/DeviceMessages.proto
[2]
https://github.com/WhisperSystems/TextSecure-Server/wiki/API-Protocol#registering-prekeys
[3]
https://github.com/WhisperSystems/TextSecure-Server/wiki/API-Protocol#getting-a-recipients-prekey
[4]
https://github.com/WhisperSystems/TextSecure-Server/blob/master/src/main/java/org/whispersystems/textsecuregcm/controllers/DeviceController.java
That is a super helpful explanation (and a smart approach) to contact
syncing.
Does this also explain how keys are shared among devices? On my phone,
when I'm talking to a Signal contact as she moves between phone and
desktop, her key remains the same (or at least I get no key-change warning
and when I look at the conversation settings, it only shows me one key), so
it looks like this key was distributed somehow.
Were they bootstrap-sent using some other key the browser generated for
use in receiving the Android phone's keys? Or...?
-- Eric
On Wed, Dec 2, 2015 at 10:34 PM, Moxie Marlinspike <
Post by Moxie MarlinspikeThe former thread was about contact intersection (discovering that your
contacts are on Signal), while I think Brad is asking about contact sync
between your own devices.
Everything is just a Signal message. So at install time, the Android
client packages up all your contact info and sends it e2e encrypted as a
Signal message to the browser. Every time a contact changes, it's
another message to the browser. Other than the QR code, normal Signal
messages are the only primitive your devices use to communicate with
each-other.
- moxie
Post by Danny WuYes, there was _just_ a thread about this. Read the archive ;)
Just curious. Is there any write up or blog post on how device
linking
Post by Danny Wuis done (and how information like contact lists is shared among
linked
Post by Danny Wudevices)? The google fails me. - b
--
http://www.thoughtcrime.org
--