"The protocol combines the Double Ratchet Algorithm, prekeys, and a triple Diffie–Hellman (3-DH) handshake, and uses Curve25519, AES-256 and HMAC-SHA256 as primitives."
Double Ratchet Algorithm
Key management algorithm.
Manages renewal and maintenance of short-lived session keys while providing forward secrecy. Based on Off-the-Record Messaging and Silent Circle Instant Messaging Protocol.
TL;DR There is no theoretically secure way to let a user find which of their contacts are using Signal that prevents Signal from being able to see their social graph. We're just writing the code to not store that info and giving users the choice between trusting us and opting out of contact discovery.
TL;DR In order to let a user find which of their contacts are using Signal without giving Signal a way to store that data, the lookup is done inside a sever-side Intel SGX enclave running verifiable code in a way that ensures the host machine can't get insight into the social graph through memory access patterns.
https://signal.org/blog/advanced-ratcheting/ <- Need to read this one again to fully grok all of it.
??? Read https://signal.org/docs/