A Rust implementation of the Signal Protocol. Quite rough around the edges, and no security guarantees given. Just for curiosity.
- Overview
- Quick Start
- Components
- Road Map
- More Information
The Signal Protocol is at the heart of all mainstream end-to-end encrypted messaging these days: in addition to Signal, both Whats App and Facebook Messenger use it (along with a lot of other messaging apps). It is composed of two main parts: the X3DH key exchange protocol, and the Double Ratchet algorithm.
Run cargo test --all
. Among others, this runs the test in
crates/signal/src/lib.rs
, which is a mockup of a complete end-to-end
conversation including both key exchange and several iterations of
the ratchet, however, it is entirely in-process.
Then try make server
, followed by (in another tab) make
. This
runs the multi-process example. The first command starts the server,
which provides key & message relay. The second command starts the
two client processes, which communicate with one another via the
server.
The two key crates are x3dh
, which implements the key exchange
algorithm, and double-ratchet
, which implements the session key
ratcheting algorithm.
The main entity is the Participant
, which manages generating and
storing the various keys in play. In addition, you can create a
local Keyserver
to simulate the key relay functions in-process.
The main entity is the Session
, which can be created with a
SessionBuilder
. Initialize it with the shared session key,
begin a connection, and then use the Session
to encrypt and
decrypt messages.
- Clean up
x3dh
anddouble-ratchet
public APIs & docs. - Get rid of any unwrap or panic!
- Use the
log
crate for logging. - Use a more curated set of crypto implementations.
- Implement the encrypted headers extension.
- Complete
client
andserver
example implementations. - Make a little interactive chat client example.
- Make
Keyserver
trait asyncable so we can use it with a remote server? - Make a
Relayserver
trait fordouble-ratchet
that corresponds to theKeyserver
trait forx3dh
?
- The Signal Protocol Specifications, specifically:
- X3DH, and
- Double Ratchet.
- Curve25519 math by Dalek Cryptography
- Some primitives from RustCrypto:
aes
andsha2
. - HMAC and HKDF implementations from
orion
.