We decline privacy engagements that arrive without a threat model. Not because the projects are bad — because without a named adversary, “private” is not an engineering requirement. It is a mood.

TL;DR
  • Privacy technology is a menu — ZK proofs, MPC, TEEs, encryption at rest — and nothing on the menu can be chosen until you name who is looking, with what capabilities.
  • A workable threat model fits on one page: adversaries, capabilities, assets, acceptable leakage, non-goals, and the regulatory floor.
  • The two recurring failure patterns: privacy as a feature checkbox (discovers its adversary in production) and privacy versus compliance (discovers the subpoena after the architecture).
  • Refusing the work is the respectful move: a privacy system built against no adversary defends against nothing and still pays full engineering cost.

“Private” against whom?

Every privacy mechanism defends against someone specific and fails against someone else. ZK proofs hide inputs from verifiers — not metadata from network observers. MPC removes single-party trust — not a quorum of colluding operators. TEEs exclude the host — until the next side-channel paper. Encryption at rest stops the disk thief — not the operator with the key. Choosing among these before naming the adversary is choosing a lock before knowing whether the burglar comes through the door, the window, or payroll. When a project says “we want privacy” and cannot say against whom, there is no engineering decision to make yet — only a marketing one, and we are the wrong vendor for that.

What a workable threat model contains

One page is enough. Adversaries: who, concretely — chain analysts, the operator itself, a state actor, a curious counterparty. Capabilities: what they see and control — full ledger, network timing, one compromised operator, legal process. Assets: what must stay hidden — amounts, counterparties, strategy, identity — and from whom, since the answer usually differs per asset. Acceptable leakage: what you concede — timing, participation, aggregates — because every deployed system concedes something, and the honest ones write it down. Non-goals: the adversaries you explicitly do not defend against. The regulatory floor: which authorities must be able to see what, under what process — decided now, not discovered later.

Generic frameworks like LINDDUN enumerate the privacy threat categories well; a crypto-native model adds the observers they were never built for — public-ledger metadata analysis, MEV-adjacent searchers, and validator-level adversaries who see ordering before inclusion.

The two failure patterns

Pattern one: privacy as checkbox. The mechanism is selected for the pitch deck, the adversary is discovered in production, and the retrofit costs more than the original build — because privacy composed after the fact composes badly. Pattern two: privacy versus compliance. The architecture makes everything invisible to everyone; then the first lawful-order letter arrives, and the team must choose between breaking its privacy promise and breaking the law — a fork that a one-page threat model would have priced in from the start. We saw the discipline done right in the Penumbra ecosystem, where we contributed as OSS engineers from 2022 to 2024: the protocol's privacy claims were stated against explicit observers from day one, and the engineering followed the statement.

Why refusal is the respectful answer

A privacy system built against no adversary costs full price and defends against nothing in particular. Declining that build is not gatekeeping; it is refusing to bill for a wall around an unnamed threat. The refusal has a track record behind it: we built the initial Penumbra Web Wallet — the extension that became Prax — as OSS contributors from 2022 to 2024, and the cryptography behind these positions is in five peer-reviewed papers. The conversation we want takes thirty minutes and starts with one question — who are you hiding what from? — and every serious answer we have ever heard fit on a page. Bring the page.

If you're working on something similar, we'd like to hear about it. Talk to a founder — 30 minutes.