Out-of-process Signing

Asqav is the unaffiliated third-party notary for AI tool call receipts. The signer runs in a trust boundary the agent does not own, holds the keys the agent never touches, and emits receipts an external auditor can verify offline against the public verify key. This page documents the out-of-process deployment topology: the signer ships as a container image the customer runs on its own infrastructure, with keys held in a customer-controlled KMS or HSM.

The unaffiliated-third-party position has a regulatory shape:

The signer running outside the agent process is what gives the resulting receipts verifiable evidentiary weight against these provisions. Asqav does not make legal admissibility claims; whether a receipt meets a given evidentiary standard is for the customer and its legal counsel to determine.

The threat the boundary closes

Threat model

An attacker who compromises the agent process, through prompt injection that achieves code execution, a poisoned tool dependency, or a memory-safety bug in a model runtime, gains arbitrary code execution inside the agent. With in-process signing, that attacker can:

With out-of-process signing, the attacker has process-level access to the agent but no read access to the signer's keys. The signer accepts request payloads, validates them, and returns signed envelopes. The signer never returns the private key. A compromised agent can request signatures on attacker-chosen payloads, but it cannot retroactively rewrite the chain, and the signer's local audit log captures every request the agent made.

Why this matters for compliance

Regulators and assessors expect the key custody question to have a clean answer, and that expectation comes from how the reviews run rather than from any clause naming a hardware security module. Take four of them:

Every one of those reviewers lands on the same question: where does the signing key live, and who can read it. Keys held in a hardware security module or a separate trust boundary keep that answer short, and the out-of-process signer is the architecture behind that answer.

What a compromised agent can still do

A precise threat model names the residual, not only the win. With Asqav, the agent process holds an API key and nothing else. The signing key and the receipt ledger live outside the agent, and on the hosted deployment they also live outside the agent operator's infrastructure.

What an attacker holding that API key cannot do:

What that attacker can still do:

The deployment topology

The signer ships as a single container image. Both deployment shapes (Asqav-hosted SaaS, customer-deployed self-hosted) use the same image and emit the same wire format.

The agent never holds the signing key. The signer holds the key in a LOCAL, AWS KMS, or GCP KMS backend, with BYO HSM available for FIPS 140-3 deployments. The signer talks to Asqav SaaS over a single outbound HTTPS hop to deposit signed digests and RFC 3161 timestamps. Raw prompts, raw model outputs, and private keys never leave the customer trust boundary. The signing time is anchored to Bitcoin through OpenTimestamps, the only required call outside the customer network.

Responsibilities split into two domains. The customer-controlled zone holds every component operated at runtime: the signer process, the signing key material, and the receipt store and payloads. The vendor-supplied artifacts are the fixed pieces the customer imports and inspects: the container image, the verifier libraries, the receipt format spec, and the default anchor URLs. Asqav does not operate any of the vendor-supplied artifacts on the customer's behalf.

Full operational detail is on the Self-hosted Signer page. An air-gapped install with zero outbound HTTP is also documented for the strictest deployments.

Two topologies from one SDK

The Python SDK reaches the signer through one environment variable. Pointing it at https://api.asqav.com/api/v1 uses the Asqav-hosted notary signer. Pointing it at a local socket or a private signer URL uses a customer-deployed notary signer.

Asqav-hosted notary signer

python
import asqav

asqav.init(api_key="sk_live_...")

agent = asqav.Agent.create("invoice-bot")
receipt = agent.sign(
    "filesystem:write",
    {"path": "/exports/q1-invoices.csv", "bytes": 18324},
)

Customer-deployed notary signer

python
import os
import asqav

os.environ["ASQAV_API_URL"] = "https://signer.internal.example.com/api/v1"

asqav.init(api_key="sk_live_...")

agent = asqav.Agent.create("invoice-bot")
receipt = agent.sign(
    "filesystem:write",
    {"path": "/exports/q1-invoices.csv", "bytes": 18324},
)

The SDK call is identical. The trust boundary changes: in the second example, the signer runs on customer-controlled infrastructure, the signing key never leaves that infrastructure, and a compromised agent cannot forge past receipts.

Who deploys this topology

Customers in regulated industries (finance, healthcare, defense, government) typically deploy the customer-hosted notary signer:

Customers iterating on a new AI feature, or self-serve teams without a hard regulatory boundary, typically use the Asqav-hosted notary signer until they need the customer-deployed topology.

Further reading