Cryptographic infrastructure

Signing keys & security policy

RocSite Discovery and AI Governor sign every emitted finding with Ed25519. The public keys below let any external auditor verify a signed finding without authentication, without contacting us, and without trusting our claims. Pin the fingerprints, fetch the PEM, verify offline.

Active signing keys

Cryptographic infrastructure activated 2026-05-04. Last revision: 2026-05-07.

SystemFingerprintAlgorithmActive fromPublic key
AI Governor 3ca34ae9eaf15da3 Ed25519 (EdDSA) 2026-05-04 PEM
Discovery Engine 358e1ba89076b7e5 Ed25519 (EdDSA) 2026-05-04 PEM

AI Governor public key

fp 3ca34ae9eaf15da3
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAcVzL25q+4XksI+Mtrv1LyImWmWyccAsyJ16IbyPaPzw=
-----END PUBLIC KEY-----

Discovery Engine public key

fp 358e1ba89076b7e5
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAI+tZ/Ol8tnPlx9oavOuphl8aFgD5pVpo1LkWkZ7ZkaQ=
-----END PUBLIC KEY-----

How to verify a finding

Any party can verify a signed finding without authentication. Three ways, in increasing order of independence:

1. Discovery Engine finding (by fingerprint_id)

curl https://api.rocsitediscovery.com/api/discovery/verify/<fingerprint_id>

Returns JSON with verification: "ok" on success, plus the public-key fingerprint, the signature, and the canonical evidence_hash.

2. AI Governor evaluation (by case_id) — deploying soon

curl https://api.rocsitediscovery.com/api/governor/verify/<case_id>

A hosted convenience lookup returning JSON with verification: "ok", the verdict, canonical failure mode, and signing-key fingerprint. This endpoint is in active deployment as part of our audit-record integrity work and is not yet live. Until it ships, an AI Governor evaluation is verified the same way as any signed finding — the signed bundle returned at evaluation time is checked offline against the published public key using method 3 below.

3. Manual verification with openssl + Python (institutional auditors)

curl https://rocsitediscovery.com/keys/discovery_engine_pubkey.pem -o pub.pem
openssl dgst -sha256 pub.pem | head -c 16
# expect: 358e1ba89076b7e5 — must match the kid on any signed Discovery report

Python verification example (using cryptography):

from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey
from cryptography.hazmat.primitives import serialization
import base64, json, requests

# 1. Pull the finding's canonical record + signature
fp_id = "RSD-260505-24LYDG"
r = requests.get(f"https://api.rocsitediscovery.com/api/discovery/verify/{fp_id}")
record = r.json()

# 2. Fetch the public key
pem = requests.get(record["public_key_pem_url"]).content
pub = serialization.load_pem_public_key(pem)

# 3. Verify the signature
sig = base64.b64decode(record["signature_b64"])
canonical = json.dumps(record["canonical"], separators=(",",":"), sort_keys=True).encode()
pub.verify(sig, canonical)
print("verified:", record["fingerprint_id"])

Key rotation policy

Both signing keys are permanent. Rotation is performed only on documented compromise. We do not rotate on a schedule, on personnel change, on hardware refresh, or on routine software update — calendar-based rotation breaks the trust chain that institutional buyers anchor verification to.

Documented compromise means: private-key file accessed by an unauthorized party, key extracted from memory by side-channel attack, the key used to sign findings outside normal system parameters, or loss of all encrypted backup copies. Anything else is not a rotation event.

Retired keys

SystemFingerprintActive rangeReason for retirement
AI Evaluator (predecessor of AI Governor) 32ee6e0e4434b55c 2026-05-01 → 2026-05-04 Cryptographic infrastructure consolidation. Not a security incident. All historical findings re-signed with the v1 AI Governor key on 2026-05-04.

Threat model

ThreatMitigation
Private-key exfiltration from diskStrict file mode 600 on a LUKS-encrypted volume. Three independent encrypted backups (age-encrypted, passphrase known only to operator).
Memory extraction of the in-process keyService runs as a non-root user. No remote shell access into the signing process. Periodic process monitoring.
Tampering with a signed finding in the databaseSignature is computed over canonical JSON of the finding (excluding the signature field itself). Any tampering invalidates the signature; external verifiers detect this immediately.
Substitution of the published public keyThe published key URL is served from the same domain as the verification page; key fingerprints are documented on this page and in the methodology page. External auditors should pin the fingerprint.
Loss of all signing-key copiesThree encrypted backups in three independent locations (encrypted local volume, encrypted backup drive, offsite encrypted storage). Recovery requires only the operator's passphrase.

Pre-infrastructure findings

The Discovery Engine signing infrastructure was activated on 2026-05-04. The 2,862 findings dated before that date are flagged signature_status = pre_signing_infrastructure. They are identified by content hash (evidence_hash) but not cryptographically attested. Backfilled signatures would misrepresent when attestation began, so we deliberately do not retroactively sign them. Any finding dated after 2026-05-04 is signed.

AI Governor evaluations from before 2026-05-04 were re-signed with the v1 key (this was a key rotation, not infrastructure activation — the prior 32ee… key was already in use).

Security contact

For security concerns, vulnerability reports, or questions about the cryptographic infrastructure: [email protected]