Signal Messenger (X3DH:Extended Triple Diffie-Hellman)

セキュアなメッセンジャーアプリ

開発向けドキュメント

X3DH

If the bundle does not contain a one-time prekey, she calculates:

DH1 = DH(IKA, SPKB)
DH2 = DH(EKA, IKB)
DH3 = DH(EKA, SPKB)
SK = KDF(DH1 || DH2 || DH3)

If the bundle does contain a one-time prekey, the calculation is modified to include an additional DH:

DH4 = DH(EKA, OPKB)
SK = KDF(DH1 || DH2 || DH3 || DH4)

The following diagram shows the DH calculations between keys. Note that DH1 and DH2 provide mutual authentication, while DH3 and DH4 provide forward secrecy.

X3DH

The Double Ratchet Algorithm

Signal-Server

Signal Server Installation Guide

Configuration of Signal Server

Maven
https://maven.apache.org/guides/getting-started/index.html#maven-getting-started-guide


X3DH (Extended Triple Diffie-Hellman) in Go
https://asecuritysite.com/encryption/go_x3dh

With x3dh (Extended Triple Diffie-Hellman), Bob and Alice create key pairs for their long-term identity (IDA and IDB) and publish these to a trusted server (such as WhatsApp or Signal). Next each of them generate a range of pre-shared public keys, and sign them with their private key. In the case of Alice communicating with Bob, then Bob will have a number of pre-shared signed keys. Let’s say the first one is ‘bG, and Alice selects this one. She then calculates three Diffie-Hellman key exchanges with a secret (a’) and her own long term ID (DH1, DH2 and DH3). This is illustrated in the left-hand side of the following graphic:

The X3DH Protocol: A Proof of Security