Threat model: anchor relay

Scope: anchor.ainumbers.co, a Cloudflare Worker (src/worker.mjs, wrangler.jsonc in the Anchor Suite repository) that relays timestamp requests to public authorities and exposes a small MCP tool set. Written from that source on . All threat models.

Assets

Trust boundaries

Adversaries

In scope and out of scope

In scope: relay abuse, request size, who may call from a browser, what the relay stores about a request, and the page headers on the anchor site.

Out of scope: the trustworthiness of each timestamp authority; the legal weight of a timestamp; availability of upstream services.

Controls

ThreatControlWhere it lives
A1: flood4 requests per minute per IP, enforced by a rate-limit binding; over-limit callers get 429 with Retry-Afterwrangler.jsonc (RELAY_LIMITER), relay and tool handlers in src/worker.mjs
A2: oversized body2048-byte cap on relay bodies, 413 above it; empty bodies refusedMAX_BODY_BYTES in src/worker.mjs
A2: generic proxyOnly POST with Content-Type: application/timestamp-query is accepted, and only on fixed relay paths for named authorities (unknown paths are refused); other methods and content types get 405 or 415relay handler in src/worker.mjs
A2: batch sizeBatch anchoring accepts 2 to 1024 hashestoolAnchorBatch in src/worker.mjs
A3: browser originRelay CORS is set to https://anchor.ainumbers.co; MCP browser origin allowlist holds only the ledger originALLOWED_RELAY_ORIGIN, MCP_ORIGIN_ALLOWLIST in src/worker.mjs
A4: bad proofRelay replies are passed back as the authority sent them, with no-store; a separate tool checks a bindingverify_anchor_binding tool and relay handler in src/worker.mjs. This page does not claim the check is offline or complete
Stored request dataThe Worker source contains no logging calls and no storage bindings; the rate limiter keeps only a counter keyed on IPsrc/worker.mjs (no console.* calls), wrangler.jsonc, comment "stores nothing else"
Anchor site pagesStrict header set: default-src 'none', trusted types required, frame-ancestors 'none', HSTS, no referrer, camera, microphone, geolocation and payment disabledpublic/_headers

UNTESTABLE claims

Residual risk