Independent, on-chain proof that plc.directory serves a DID's
complete, current, and non-equivocated history — exposed as a graduated status any
resolver or PDS can enforce unilaterally, with no network coordination and no
protocol change.
An atproto identity is a signed, hash-linked log of operations, served from a single directory. Every operation is self-certifying — but a signature only vouches for the operation it's attached to. It can't tell you whether the directory showed you all of them, the latest ones, or the same ones it showed everyone else.
This operation is authentic — signed by a key that was valid at the time. PLC already gives you this, per operation.
That you were shown the complete, current, and non-equivocated history. No signature can speak for the operations it isn't on — including the ones you never saw.
That gap isn't theoretical. Every operation can be perfectly signed and the directory can still deceive you, because it alone decides which operations you see. None of the attacks below needs a stolen key — only control of the directory a resolver trusts:
Your account key is stolen, so you do the right thing and rotate it out with a new signed operation. The directory serves your history with that one operation missing — so to the rest of the network the stolen key is still live, and the thief keeps signing as you.
The lie is the operation left out.
The directory simply returns nothing for a DID that plainly exists. Every app that looks the person up sees no such identity — handle dangling, posts unresolvable — with no error to appeal.
Absence carries no proof to check.
Show the victim their real history, while showing one targeted service a forked version that points their account at a server the attacker runs. Neither side ever sees the other's copy.
No one viewer holds both halves.
Each of these is a real, ground-truthed scenario in the adversarial report. DIDMARC is the layer that catches them: independent, on-chain proof of the whole, current history, so a resolver can tell when the directory's answer doesn't add up.
Each opted-in DID's full operation log is re-verified from genesis inside a Starknet
contract — the network proves the computation and settles to Ethereum; there is no bespoke
prover and no trusted snapshot. The contract commits a proven DID→document root. A resolver
fetches a document from the directory and checks it against that root, getting back a
status. plc.directory stays canonical; DIDMARC is a read-side witness that
anyone turns on alone — no coordination and no protocol change.
Never a
false diverged. A directory that's merely running ahead, or a contradiction
that plain clock skew could explain, stays at tentative-consistent — not an
alarm. A false alarm gets the check switched off, so that restraint is exactly what makes
diverged mean something.
Adoption is a ramp: start by just
logging the status, then quarantine on diverged, then refuse to relay — each
resolver decides on its own, at its own pace.