Fraud & Threat Model

This page lists the threats AdPriva is built for, what it does about each one today, and where that protection stops.

What AdPriva does today

  • Replay protection. Every view event carries a one-time nonce. The server refuses a nonce it has already seen, and the database refuses a second proof with the same signature.
  • Sealing. The server signs each event with an HMAC. The signature is the proof id.
  • Scoring. The ingest server scores every view proof from its user agent (L0) and the class of its IP address (L1). That score and verdict are public. AdPriva’s scoring service also checks behaviour (L2) and signed agent identity (L3), and keeps that result privately. See Proofs of Engagement.
  • Anchoring. Batches of proofs are anchored on Horizen, so batch membership can be checked by anyone.
  • Shadow mode. No event is blocked, dropped or left out of a batch because of its verdict. Verdicts describe traffic; they do not filter it yet.

Threats and responses

ThreatWhat AdPriva doesLimit
Bots that announce themselves in their user agent (headless browsers, automation tools, scripts, crawlers)L0 lowers the score. A headless or automation user agent lands in abusive_botA bot can send an ordinary browser user agent
Traffic from datacenter and cloud IP rangesL1 lowers the score. On its own, this gives uncertainVPNs and company networks can also look like datacenters. Residential proxies look clean
Headless browsers or scripts that hide their user agentL2 checks the interaction pattern and the tag’s automation hints, such as navigator.webdriverL2’s result is private and does not change the public verdict yet. The signals come from the browser, so a careful script can fake them
Crawlers and AI agents that sign their requestsL3 checks the Web Bot Auth signature. A valid one gives authorized_agent; a forged or expired one gives abusive_botOnly covers agents that sign. The result is private, like L2’s
Replaying a captured eventNonce check and unique signatureNone known
Sending made-up events without the tagEvery event is scored like any otherThe tag holds no secret, so the server cannot prove an event came from the real tag. Anyone can send an event that names any site. In shadow mode such events are recorded with their verdict, not blocked
Changing a record after the factThe HMAC seal covers the event type, site, nonce and timestamp. The anchored root fixes which proofs are in each batchThe seal and the root do not cover a view proof’s score or verdict

What the verdicts are for

The verdicts let a publisher, a buyer or an auditor see how much of the traffic looks automated, event by event. Automated traffic still gets a proof, marked abusive_bot, so the record shows what was flagged instead of hiding it.

Moving from shadow mode to enforcement, where flagged proofs would be left out of batches, is a separate decision. It is not enabled today.

{% @mermaid/diagram content="flowchart LR
A\[View event]
B\[Nonce check]
C\[HMAC seal: proof id]
D\[L0 and L1: public score and verdict]
E\[Scoring service: L2 and L3, private]
F\[Batch and anchor on Horizen]
G\[Explorer: public lookup]

A --> B
B --> C
C --> D
C --> E
D --> F
F --> G" %}