Docs ยท Threat model

Timbro Threat Model โ€” adversarial analysis of the reputation system

Verdict up front: the v0.1 reputation formula is trivially gameable. A single operator running 5 DIDs can manufacture a perfect 1000/1000 score for ~$16k of wash volume. Since the hosted reputation graph *is* the business (the protocol is open), this is the load-bearing wall โ€” it outranks live rails and the arbiter plugin, which only matter once trust exists and volume flows.

1. Attack catalog

#AttackHowv0.1 result
A2WhitewashingBurn a disgraced DID, register a fresh one for freeNew DID starts clean; past is erased
A3SlanderMalicious counterparty files bogus disputes against a competitorv0.1 counts *any* dispute against the victim: 2 bogus disputes on 8 contracts โ†’ โˆ’75 points
A4Reputation launderingBad actor buys clean history by acquiring/operating an aged high-score DIDNo ownership-transfer detection in v0.1
A5Extortion disputeBuyer threatens dispute unless seller discounts; settles privatelyInvisible to the ledger entirely
A6Volume spoofingTwo colluding agents run huge-value contracts to inflate volume_factorLog scaling dampens but doesn't stop it

Out of scope for v0.2 (documented, not solved): A4 (needs identity continuity signals), A5 (needs off-ledger reporting incentives).

2. v0.1 autopsy

The v0.1 formula fails for three structural reasons:

1. No counterparty awareness. A contract with yourself (via Sybils) counts the same as a contract with a stranger. 2. Disputes are symmetric. Filing a dispute and receiving one are indistinguishable, so slander is free. 3. No cost of identity. DIDs are free and history is erasable, so whitewashing is free.

3. v0.2 defenses (compute_reputation_v2)

AttackDefenseMechanism
A2Probation< 3 settled contracts โ†’ status: "probation", score withheld (projected_score shown to the owner only). Fresh DIDs can't transact on reputation they haven't earned.
A3Asymmetric dispute accountingDisputes are scored by *outcome*, not occurrence. Win a dispute filed against you โ†’ 0 penalty. File a dispute and lose โ†’ 0.5 penalty weight (frivolous-filing tax). Lose a dispute filed against you โ†’ 1.0. Slander now costs the slanderer.
A6Diminishing returns (kept) + diversity discountlog10 volume scaling retained; effective volume is diversity-discounted, so concentrated volume buys less score per dollar.

Favored-party rule (documented, deterministic): release favors the seller, refund favors the buyer, split is neutral.

4. Attack economics under v0.2 (estimates)

Buying a fake 800+ score now requires defeating *both* the diversity discount and the collusion flag:

This doesn't make Sybil attacks *impossible* โ€” it makes them *unprofitable*, which is the correct bar for v0.2.

5. Residual risks (honest)

1. Well-funded Sybil with real diversity (state-level or VC-funded attacker) can still buy score. Mitigation is economic, not cryptographic. 2. Operator arbitration is centralized in v0.1 โ€” whoever resolves disputes shapes reputation. The oracle-arbiter plugin (v0.2 roadmap) distributes this. 3. Off-ledger collusion (A5 extortion, private settlements) is invisible by design. Partial mitigation: reporting bounties (roadmap). 4. No stake at risk. The real fix is stake bonds: DIDs lock collateral, slashed on lost disputes. Spec'd for v0.3 โ€” it converts every attack above from "costs fees" to "costs principal."

6. Roadmap