Try   HackMD

Signal Protocol - Learnings

Protocol Overview

Responder(Bobby)ServerInitiator(Alice)Responder(Bobby)ServerInitiator(Alice)loop[Until Bobby responds]par[[Registration]][[Alice Session Setup]][[Bobby Session Setup]][[Symmetric ratchet stage]][[Asymmetric ratchet stage]]1. long-term identity key(ik)2. medium-term "signed prekey"(prek)3. multiple short term "one-time prekeys" keys)eprek4. signature to prek using iksend public pub keys of 1~4(pre-key bundle)generate ik, prek, eprek, sign prek w iksend pre-key bundle (ipk, prepk, sig of prepk w ik, multiple eprepk)request Bobby PubKeysipk-b, prepk-b, sig of prepk-b, eprepk-b(if available)removes the sent eprepk-bgenerate ephemeral ratchet public key(rchpk) and ephemeral key (ek/epk)calculates master secret(ms) with several ECDH (1)use HKDF and derive root key/chaining keys(rk, ck) from msrchpk-a & epk-a & ipk-a, identifier for eprepk-b used, message (hi!)makes sure bobby knows which ik, prek, eprek Alice usedderives ms with received keysKDF(ck) -> new mk & updated ckencrypt message, delete old cksecond message(how are you?), new eprkgenerate eprkderive ck, mkencrypt messageeprk, first message (hello!)