所有法律文件仅提供英文版,且仅英文版具有法律约束力。
使用 Google 翻译进行翻译在新标签页中打开;仅供参考Which keys sign Intramedial ledger bundles, where they are held, who can use them, how their public halves are published and pinned, how rotation works, and what happens if a key is compromised.
Last updated November 5, 2026.
| Algorithm |
| Ed25519 (RFC 8032), signing the RFC 8785 canonical JSON of the bundle's signed core |
| Number of keys | Two signing jurisdictions: a European Union key (WEUR) and a key for every other region (ENAM) |
| Custody | Worker secrets in Cloudflare Workers, set per region. They are not held in a hardware security module or in AWS Key Management Service |
| Who can sign | Only the ledger-bundles service, when it seals a bundle for a workspace |
| Private key material | Never returned by any Intramedial API route, never written to a log, never included in a bundle |
| Expiry | None. Keys have no expiry date |
| Dedicated keys per customer | Not provisioned today |
In plain language: Intramedial signs each ledger bundle with one of two keys, kept as secrets inside the service that seals bundles. The public halves are published so you can check a bundle without us. We do not claim these keys sit in a hardware module, because they do not.
AWS Key Management Service does protect other secrets we hold: it wraps the keys that encrypt third-party credentials stored in our control plane. It does not hold the keys that sign bundles.
A bundle is signed with the key of the jurisdiction that matches the region serving the workspace's request:
| Serving regions | Signing jurisdiction |
|---|---|
Europe Central (weur-1), Europe West (weur-2), Europe North (neur) | WEUR |
US East (enam), US West (wnam), Asia-Pacific (apac), Oceania (oc) | ENAM |
The jurisdiction is written into the signed core of every bundle, together with the key id, so a verifier knows which published key to use. If the preferred key is not configured, the service may sign with the other jurisdiction's key, and the bundle then names that key; if no key is configured at all, the request fails with 503 and nothing is signed or returned unsigned.
A key id (kid) is derived from the public key itself: the first 16 bytes of the SHA-256 hash of the raw 32-byte public key, encoded as base64url without padding, 22 characters. You can recompute it from the published key, so nobody can attach a different id to a key without it showing.
Every bundle names its key in signingKeyId.
| Address | Content |
|---|---|
https://intramedial.com/.well-known/ledger-bundles-keys.json | The key set: one JWK for each configured jurisdiction, open to anyone without an account |
https://api.intramedial.com/api/v1/ledger-bundles/anchors | The anchoring record for sealed bundles, for those workspaces that use daily anchoring |
Each key in the set has kty: "OKP", crv: "Ed25519", alg: "EdDSA", use: "sig", its kid, the public key x in base64url and its jurisdiction. The private part is never in the set. See ledger-bundles.snapshot and Signing keys for the API.
A signature proves who holds a key, not whose key it is. For the strongest position, fetch the key set once through a channel you trust, store the kid and x of the key you rely on in your own repository or records, and verify against that copy. Keep the key set you verified against next to any bundle you keep as evidence: the two together verify on their own, years later and without us.
A key changes only through a manual key change run by us. There is no automatic rotation, no schedule and no expiry. No production signing key has been rotated so far.
When a key is retired, its public half stays in the published key set for as long as bundles it signed can be relied on, and a key change never changes the bundle format. This is our commitment, not something the key endpoint enforces on its own, which is one more reason to pin the keys you rely on.
Rotation requests from workspace owners and administrators follow the process in Signing keys. A request records the wish; it does not rotate anything by itself.
There is no automated compromise response, no revocation list and no revocation of single bundles. A leaked key would let its holder create bundles that verify, and a signature check alone could not tell them from genuine ones.
We would handle a suspected compromise as a security incident. Where a key has been, or may have been, misused, we would:
Your best protection does not depend on us: pin the key set you verified against, and where a bundle matters, keep it in a system you control, with its own clock, when you receive it. If the daily anchor for your workspace is switched on, the bundle's Merkle root is also entered in an anchor batch (see Verifying ledger bundles); a bundle whose root was anchored before a compromise keeps its value, because the anchor shows the root existed before the forgery became possible.
Report a suspected compromise to security@intramedial.com.
Because the signing keys are secrets available to the service that seals bundles, whoever can deploy or administer that service could cause it to sign. We limit that access to the people who operate the service, and the signed core of a bundle is built by the service from the workspace's own audit chain, not from content supplied in the request. The Record Practice Statement explains what a signature does and does not attest, and why the trust you place in us is limited to a short list. Moving the signing keys into a hardware-backed key service is a change we intend to make; until we do, this page will not say that it has happened.
No key has been rotated or compromised. Notices of rotations and compromises will be added here, with their dates. Questions: security@intramedial.com.