{
  "issuer": "rightshold-production",
  "url": "https://www.rightshold.com",
  "current_key_id": "key_41eb7b6d1b11968a",
  "keys": [
    {
      "key_id": "key_41eb7b6d1b11968a",
      "kid": "S-pfGf-aMvl90u38yjB0S4qhZnDD6YNkO7ZffwyJSnM",
      "alg": "Ed25519",
      "status": "current",
      "spki_sha256": "rJvvp267VKWhjy9TNPyLIxUkwtu2GrEW2dKrxM3DQcA=",
      "public_key_pem": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEAEYWJAvPDwdwiByA4ucuPBAV0jLWwXGgtbZqbyrLNMiM=\n-----END PUBLIC KEY-----\n",
      "first_ledger_block": 9,
      "retired_at": null,
      "revoked_at": null,
      "revocation_ledger_seq": null
    },
    {
      "key_id": "key_f6a85f595bce8b9f",
      "kid": "JM2sgwCfk2HguA0iVRXlyXxJlCHG2Kl4YoTw2gFYOTo",
      "alg": "Ed25519",
      "status": "retired",
      "spki_sha256": "4tvLp6U104z3YQ9dDy7iL2OeEG3RWoqHddwOnQC7U6o=",
      "public_key_pem": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEA901XhjpBAEz+oJbwbGxJQiQ3bZ1PIM8WWzZpPLnIMSI=\n-----END PUBLIC KEY-----\n",
      "first_ledger_block": 0,
      "retired_at": "2026-10-18T23:08:49.440Z",
      "revoked_at": null,
      "revocation_ledger_seq": null
    }
  ],
  "why": "TLS shows which server you reached only as far as the certificate system holds. If a certificate authority is compromised, a forged certificate can impersonate any site. These keys let you check Rightshold's answers yourself, whatever the connection. This adds a layer; it does not fix or replace TLS.",
  "response_signatures": {
    "standard": "RFC 9421 HTTP Message Signatures on responses",
    "label": "rs",
    "tag": "rightshold-response",
    "alg": "ed25519",
    "covered": [
      "@status",
      "@authority;req",
      "@path;req",
      "rightshold-body-digest"
    ],
    "body_digest": "Rightshold-Body-Digest: sha-256 of the decoded (identity) body, RFC 9530 syntax, so it survives gzip",
    "keyid": "kid above (RFC 7638 JWK thumbprint)",
    "applies_to": "buffered answers from /v1/*, /mcp, /.well-known/*, /openapi.json and /llms.txt",
    "verify_offline": "node ledger-witness.mjs verify-response --url <URL> (or --body FILE --headers FILE --path P) --keys rightshold-keys.json [--pin SPKI_SHA256]",
    "cli": "https://www.rightshold.com/cli/ledger-witness.mjs"
  },
  "pinning": "Save spki_sha256 of the current key from two independent paths (this file and a ledger block's public_key_pem, or a witness's snapshot). Reject any key that is revoked or that you did not pin; after a rotation, the new key appears on the ledger as issuer.key_rotated signed in sequence.",
  "ledger_records": {
    "rotation": "issuer.key_rotated",
    "revocation": "issuer.key_revoked",
    "search": "https://www.rightshold.com/v1/ledger/entries?type=issuer.key_revoked"
  },
  "jwks": "https://www.rightshold.com/.well-known/jwks.json",
  "issuer_document": "https://www.rightshold.com/.well-known/rightshold-issuer.json",
  "explainer": "https://www.rightshold.com/answers/agent-identity-when-tls-is-compromised"
}