Trust & transparency
Live numbers
COGOS_IMAGE_TAG or package.json version. Bound to a cosign signature once §3.2 finishes rolling out.cosign verify --key https://cogos.5ceos.com/cosign.pub <image>Verifiable security claims
Mirror of SECURITY.md §3. Each row is a claim plus the command an external auditor runs to check us right now. Items marked rolling out are wired in the deploy pipeline but not yet announced as enforced — SECURITY.md remains the source of truth.
| Claim | Verify command |
|---|---|
| SECURITY.md §3.2 — Image signature (cosign) rolling out Every deployed image is signed with a 5CEOS-controlled cosign key. Customers verify the running image hash against the public key. |
|
| SECURITY.md §3.3 — Response signature (HMAC) shipped Every /v1/* response carries X-Cogos-Signature = HMAC-SHA256(per-tenant-secret, body). Tampering in transit is detectable. |
|
| SECURITY.md §3.4 — Open determinism bench shipped The "same call in, same bytes out" claim is auditable by anyone — bench is OSS, published cadence runs are posted, drift surfaces same-day. |
|
| SECURITY.md §3.5 — Customer-key auth flow shipped API keys are stored as sha256 hashes; plaintext is shown once at issue time and never returned again. A keys.json leak does not leak usable keys. |
|
| SECURITY.md §3.6 — Admin auth flow shipped Admin endpoints (issue / revoke / list keys, read usage) require X-Admin-Key. Rotation is one env-var change; revocation is immediate. |
|
| SECURITY.md §3.7 — Stripe webhook signature shipped POST /stripe/webhook is gated on a valid Stripe-Signature header verified against STRIPE_WEBHOOK_SECRET. Forged checkout completions cannot trigger key issuance. |
|
| SECURITY.md §3.8 — Schema-enforced output shipped When response_format is json_schema, the decoder is grammar-constrained at the token level. Non-conforming output is physically impossible, not retried. |
|
Recent revisions
0.1.0. Recent revisions are tracked via
az containerapp revision list --name cogos-api --resource-group cogos-api-rg
on the operator substrate; a published recent-revisions card is a future addition.
We don't fabricate prior versions on this page.
Published security advisories
SECURITY.md change log for notices.
Per-call receipt chain (always-on)
This is the load-bearing continuous-verification mechanism — it runs on every customer call, not on a schedule. Every /v1/* response carries a receipt with request_id, deterministic_hash, output_hash, and (for grounded chat) verify_verdict. Each usage row is HMAC-chained to the previous row in a per-tenant append-only log; a chain break would be detectable in 90 seconds via GET /v1/audit?since=<ms> where the response includes chain_ok: true/false computed server-side from the returned slice.
The chain head is submitted to OpenTimestamps calendar servers on every audit-checkpoint with new activity (the checkpoint scheduler ticks hourly; idle hours don't submit). Bitcoin confirmation latency from submission to a block including the calendar's aggregate is typically 3-12 hours depending on calendar batching and block timing — so a customer checking the most recent confirmed anchor may see one that's several hours behind the latest submitted checkpoint. The anchored timestamps are publicly verifiable using the open-source ots verify CLI without contacting our infrastructure.
Verify yourself: pick any of your own request IDs, fetch the audit slice, re-hash the row, and compare to row_hash. A published Python re-verifier is on the roadmap; today the check is a one-liner (SHA-256 of the row's canonical bytes, compared to row_hash).
Verify a receipt yourself · in your browser
Paste any x-cogos-attestation header value you've received from a /v1/* response. Your browser fetches our public key from /attestation.pub, then verifies the ed25519 signature client-side using the Web Crypto API. Nothing leaves your browser except that public-key fetch.
Public hash-chain checkpoint
Every hour we snapshot every (tenant_id, app_id) chain head into a globally hash-chained checkpoint. Capture global_head now, replay /audit/checkpoint?ts=<your_capture_ts> later, prove we haven't rewritten any row in between.
| Last checkpoint | 2026-08-06T06:32:52.089Z |
|---|---|
| Global head (prefix) | 201267e48e529fa4… |
| Partitions snapshotted | 16 |
| Chain length | 1142 checkpoints on disk |
Verify yourself:
curl -s https://cogos.5ceos.com/audit/checkpoint/latest
curl -s https://cogos.5ceos.com/audit/checkpoint/verify
Scheduled probe job
The continuous unauthenticated-probe job (scripts/probes-unauth.sh + scripts/pentest-authed.sh in the repo) is currently not scheduled. The previous scheduler was dropped in the 2026-06-20 Azure→AWS cutover and has not yet been re-stood-up as a systemd timer on the new host. The probe scripts themselves are operator-runnable on demand. Re-enabling the schedule is on the roadmap; status will appear here once a run lands.
Pentest summary
Coordinated disclosure
[SECURITY].
Response SLA, scope, and safe-harbor terms are documented in SECURITY.md §1.