Threat Model

Updated

This page states the threats Asqav is designed to resist, the boundaries where trust changes hands, and the risks that remain after the controls. It covers the receipt and evidence layer, not the customer's agent runtime. The change controls and security posture pages carry the mechanics this model relies on.

Assets

AssetWhy it mattersWhere it lives
Signed receipts and their hash chainsThey are the evidence an auditor testsCloud database; exported audit packs
Signing keysA key that signs a false action forges evidenceServer-side custody, encrypted at rest; BYOK or self-hosted signer on Enterprise
Tenant data and metadataCross-tenant exposure breaks confidentialityTenant record tables behind row-level security (identity-resolution tables exempt)
Holder salt and keyed tagsThey prove a digest was keyed by the service, not the callerServer-side, encrypted at rest, never emitted
Anchors and transparency leavesExternal anchors and an externally witnessed tree head bound when a receipt existed without trusting Asqav alone; the default timestamp token and the transparency service are Asqav-operatedRFC 3161 and OpenTimestamps; digest-only leaf

Trust boundaries

Attack surface

The surfaces that accept input or hold evidence are the public verify API, the authenticated API and dashboard, the SDKs and CLI, the server-side signer, the database and holder salt, the outbound timestamp and anchoring calls, and the CI and release path. Each surface below is paired with the adversary it faces and the control that constrains it.

Adversaries

ThreatMitigationResidual risk
Forged or altered receiptML-DSA-65 signatures over canonical payloads (FIPS 204); the verifier evaluates the signature and reports fail rather than pass when it does not holdA forged receipt that never verifies can still be presented; rely on the verifier's verdict
Tampered or spliced historyPer-agent hash chains commit each receipt to its predecessor; a fork or a broken link fails verificationThe chain proves order within an agent, not that every action was recorded; a self-consistent replacement chain from a compromised signer verifies on its own, and external checkpoints and anchors only constrain that
Reuse of an old receiptReceipts carry an expiry and a signing-time nonce bound into the signed bytes; stored-record reads are org-scoped and gatedA receipt reused inside its validity window is still valid evidence
Cross-tenant readTenant record tables carry row-level security, reads are org-scoped, and a CI census checks every record table; identity-resolution tables are exempt by designA database role that bypasses RLS defeats the row policy; the org filter remains explicit
Key compromiseSuspension and revocation stop new signing; historical receipts still resolve to the key that signed them so old evidence does not breakA key used before revocation can have produced valid-looking receipts; revocation does not rewrite history
Operator or insider tamperingReceipt rows are retained for the org's retention window, the transparency leaf is digest-only, and the strongest anchors (Bitcoin, a configured external timestamp authority) are outside Asqav; merge-time change controls bind administratorsAsqav operates the signer and the database. A compromised operator could build a self-consistent alternative signed history that verifies on its own; anchors prove existence and constrain rollback, not completeness. The change-controls page covers merges, not production database or signer access
Database breachHash-only mode keeps raw context out; the holder salt is encrypted at rest and never emitted; keyed digests are server-computedA breach that also steals the salt lets an attacker recompute keyed tags for stored digests
Transport and browser attacksTLS to the API, CORS allowlists, CSRF tokens on cookie-authenticated writes, and rate limits on public and auth routesAn endpoint compromised before signing is outside this model
Anchoring unavailable or pendingAnchoring is recommended (SHOULD) and may be absent; a pending OpenTimestamps proof is reported, the upgrade bound is seven days, and the selected policy decides whether exceeding it fails verificationAbsent anchoring is not proof of absence; a policy that requires it must enforce that requirement
Supply-chain compromisePinned dependencies and a lockfile freshness gate run in CI, with Bandit, pip-audit and Trivy; the merge gates are listed on the change-controls pageA compromised upstream release can still pass a scan that has no advisory yet

Residual risk

Out of scope

Reporting a weakness

Email info@asqav.com with the subject Security report: <short description>. The acknowledgement and mitigation windows are on the public security page.

References