Self-Hosted Signer
Both modes ship from a single container image. Pick the one that fits your trust model.
Cloud mode (default)
Full SaaS. Sign, verify, and report through api.asqav.com. Zero infrastructure on your side. Best for self-serve AI shops and teams that want zero ops.
Self-hosted signer (Enterprise)
Split-trust deployment. The Asqav signer runs on your infrastructure. ML-DSA-65 signing and hash-chaining happen locally. Keys stay in your KMS backend (LOCAL, AWS KMS, GCP KMS (Enterprise tier)). Only signed digests and timestamps flow to Asqav SaaS for compliance reports. A fully air-gapped install with no outbound HTTP is also available. See the operator guide in Offline and Air-Gapped Verification.
What flows where
Signer container, private keys (LOCAL, AWS KMS, GCP KMS (Enterprise tier)), raw prompts, raw model outputs, tool call payloads.
Signed digests, RFC 3161 timestamps, hash-chain metadata. No raw prompts, no raw outputs, no private keys.
Upstream relay
Set ASQAV_UPSTREAM_RELAY_URL on the signer container to forward signed digests to Asqav SaaS over a single outbound HTTPS hop. The relay sends only signed digests and timestamps, never raw prompts, outputs, or private keys. Leave it unset to run the signer inside your VPC. A fully air-gapped install is documented in Offline and Air-Gapped Verification.
Getting started
- Pull the signer image and bring up the stack with
docker-compose.signer.ymlat the repo root. - Mount your KMS credentials (LOCAL, AWS KMS, GCP KMS (Enterprise tier)) into the signer container.
- Point your SDK at the local signer endpoint. Digests stream to Asqav SaaS over the documented egress contract.
- Enterprise onboarding: contact info@asqav.com for access. Air-gapped install: see Offline and Air-Gapped Verification.
Maintenance migrations
Self-hosted deployments run schema migrations through authenticated maintenance routes. All migrations are idempotent (IF NOT EXISTS), so re-running them on a fresh container is a safe no-op.
curl -X POST https://signer.your-org.example/maintenance/run-migration-v3-15 \
-H "X-Maintenance-Key: $ASQAV_MAINTENANCE_KEY"
| Migration | Adds |
|---|---|
run-migration-v3-15 | rejected_attempts table for the forensic log. |
run-migration-v3-16 | nonce and valid_until columns on SignatureRecord: the sign path rejects a re-used (agent_id, nonce) pair with HTTP 409, and valid_until bounds the receipt window. |
run-migration-v3-17 | signature_status column on Action for the orphan and integrity sweeper. |
run-migration-v3-18 | applied_attestation column and expected_executor_pubkey column for post-apply attestation and counterparty pinning. |
run-migration-v3-19 | action_type_policies table for per-action save policy. |
run-migration-v3-20 | IETF Compliance Receipts schema additions. |
run-migration-v3-21 | TSA cert chain persistence on receipt. |
run-migration-v3-22 | Retention floor enforcement at insert time. |
Send the X-Maintenance-Key header on every request. The key is set via the ASQAV_MAINTENANCE_KEY environment variable on the signer container at deploy time.