I've been trying to get a grasp of how the Signal protocol works. According to the spec, DH is done on four keys: IK_A
, SPK_B
, EK_A
and IK_B
:
If the bundle does not contain a one-time prekey, she calculates:
DH1 = DH(IK_A, SPK_B)
DH2 = DH(EK_A, IK_B)
DH3 = DH(EK_A, SPK_B)
SK = KDF(DH1 || DH2 || DH3)
Given that all these four keys are public keys and are announced through untrusted channels, couldn't a nefarious player compute the shared secret SK
?