Skip to content

Keyring

The keyring is a signed JSON object containing all Veristamp public keys — active and retired. It is the root of trust for receipt verification: every receipt references a signing key that must be present and trusted in the keyring.

The public keyring is served at the following canonical well-known URL:

URL
https://stamp.veristamp.in/.well-known/veristamp-keyring.json

The keyring is a static file with strong caching headers and an ETag for conditional requests. You can safely cache it for offline verification in air-gapped or archival environments.

The keyring JSON contains the root key metadata, the full array of active and retired signing keys, and a cryptographic signature covering the entire payload:

{
"veristamp_keyring_version": "1.0",
"type": "veristamp.keyring",
"issuer": "Veristamp",
"generated_at": "2026-06-05T17:36:55.565Z",
"root": {
"root_key_id": "vst_root_2026_2",
"algorithm": "Ed25519",
"public_key": "5DVe_LOkGAejLsq6zlS8GqvTMhtlpZ5_QutHf16Q73g"
},
"signing_keys": [
{
"key_id": "vst_sign_2026_q2_01",
"algorithm": "Ed25519",
"public_key": "UJx39_KER7MImxeqQ11eCNXjq5JIy9X8qRpe9g74SEM",
"valid_from": "2026-06-05T17:36:55.565Z",
"valid_until": "2026-09-03T17:36:55.565Z",
"status": "active",
"usage": ["receipt_signing"],
"created_at": "2026-06-05T17:36:55.565Z"
}
],
"signature": {
"algorithm": "Ed25519",
"value": "7PS2e2myg..."
}
}

The root object identifies the root keypair. The root public key is pinned in the Veristamp web application. Any keyring must carry a valid Ed25519 signature from the private root key to be trusted. Only the root public key is publicly distributed — the private root key is kept offline.

Each signing key is an entry in the signing_keys array. Receipts reference the signing key by its key_id field. The signing key's public_key is used to verify the receipt's Ed25519 signature.

Signing keys transition through distinct lifecycle states to balance security and historical verifiability:

Active Key

active

Currently used to sign new timestamp receipts. Only one key is active at any time. The active key's key_id appears in every newly issued receipt.

Retired Key

retired

No longer used to sign new receipts. Retired keys are preserved in the keyring indefinitely so that historical receipts remain verifiable offline — even years after the key was rotated.

Signing keys are rotated on a regular schedule to limit the impact window of a potential key compromise. The rotation process:

  1. Generate: A new Ed25519 signing keypair is created.
  2. Retire: The current active key is marked as retired with a retired_at timestamp.
  3. Activate: The new key is appended to the keyring with status: "active".
  4. Sign: The updated keyring is re-signed with the offline root key.
  5. Publish: The updated keyring is deployed to the public well-known URL and the active signing key is updated in the signing service.

To independently verify that the keyring is authentic and unmodified:

  1. Extract the payload: Remove the signature field from the keyring JSON, leaving only the payload fields (veristamp_keyring_version, type, issuer, generated_at, root, and signing_keys).
  2. Canonicalize: Serialize the payload using deterministic JSON canonicalization with strict field ordering.
  3. Verify: Use the pinned root public key to verify the Ed25519 signature against the canonical payload bytes.

The root public key used for verification is pinned in the Veristamp web application's configuration. Any independent auditor should verify this value against a trusted source rather than blindly trusting a fetched copy.

Immutable verification history

Once a public key is added to the keyring, it is never removed. This guarantees that receipts issued years ago remain fully verifiable offline. Even after dozens of rotations, old receipts can still be verified because all retired keys remain present in the keyring.