I've been reading details about the Double Ratchet algorithm, and I wanted some clarification regarding the aspect of the DH public keys going out in the plain in the header of every message. Quoting from the specifications of the Double Ratchet:
Every message from either party begins with a header which contains the sender's current ratchet public key. When a new ratchet public key is received from the remote party, a DH ratchet step is performed which replaces the local party's current ratchet key pair with a new key pair
Doesn't that effectively allow an adversary to trace back the message to you and effectively prevent deniability? For example, lets say some messages get delayed from A to B, and meanwhile B is advertising the same public key over and over again, won't you be able to somehow know that it is B communicating with A. Probably, another way to put the same question is, is there a way for some adversary to know who B is, given that they can see their public key in the header (in that interval of time when B has not received a new DH public key from A)? Or alternatively, at least link that communication to a distinct user.