What a C-ITS trust anchor is
A trust anchor is the cryptographic origin of trust: a public key that a station accepts as authoritative because of out-of-band provenance, not because some other authority signed it. In C-ITS, three distinct trust anchors matter, and they serve different jobs:
- Root CA — signs the EA (Enrolment Authority) and AA (Authorization Authority) certs from which every ITS station's enrolment and pseudonym certs descend. This is the trust anchor most stacks pin.
- TLM — Trust List Manager. Signs the ECTL. Pinning it lets a station bootstrap a fresh list of Root CAs in environments where the policy authority rotates them.
- MA — Misbehaviour Authority. Signs misbehaviour reports it accepts and audit trails it publishes. Pinning it lets a stack verify MR acks.
All three are issued by Castell itself in the testbed model: Castell is the trust authority for stations using it. In production, the Root CA is one of dozens listed in the EU CPOC ECTL, the TLM is the CPOC TLM, and the MA is jurisdiction-specific.
Castell's trust anchors — live
Pin these HashedId8 values out of band before exchanging any signed wire with Castell. They are stable across releases; they only change if Castell rotates a Root CA, which is announced ahead of time in the changelog.
| Anchor | HashedId8 | Endpoint |
|---|---|---|
| Root CA | AD7B90E1EB12A0F9 | GET /trustanchor |
| TLM | 74534B8C394779F4 | GET /tlm |
| MA | 405D3CF914EB9E05 | GET /ma |
Values above are the live ones at page render. The machine-readable equivalent is /status.json under trust_anchors.{root,tlm,ma}. Programmatic clients should consume that, not parse this table.
How to download and pin
The Root CA certificate is served as COER-encoded bytes under application/x-its-cert:
curl -sS https://pki.skyv2x.com/trustanchor -o root-ca.coer
wc -c root-ca.coer
# 410 bytes
# Compute SHA-256 and derive HashedId8 (last 8 bytes)
sha256sum root-ca.coer
# 8f...e2 root-ca.coer
# Pin the HashedId8 in your stack config:
# trust_anchor_hashedId8 = "AD7B90E1EB12A0F9"
The cert is an explicit ECDSA cert per IEEE 1609.2: the public key is in the certificate body rather than reconstructed from a witness as in implicit certs. This makes it directly parseable by any 1609.2 tool without needing reconstruction values.
Why pinning by HashedId8
HashedId8 is the canonical short identifier of a certificate in C-ITS: SHA-256 of the certificate, truncated to its last eight bytes. Every message that references the trust anchor uses HashedId8 to do so — it's what flows on the wire, not the full cert.
Pinning by HashedId8 instead of by full byte comparison lets a stack accept legitimate format-level changes (re-encoding, attribute reordering inside the cert) as long as the on-wire identity is preserved. It also keeps the pinned value short enough to embed in build artefacts and config files.
Caveat — this is a testbed Root CA
Castell's Root CA is a testbed trust anchor. It is not present in the EU CPOC ECTL. A vehicle pinning Castell's Root CA will trust messages signed under Castell's hierarchy but will not by itself be trusted by stations operating in production C-ITS deployments. Use Castell for development, conformance work, decoder reference, interop trials — not for live road deployments.
Related material
- ECTL — the signed list of Root CAs Castell vouches for (currently just its own).
- Multi-curve support — which ECC curves the Root CA accepts in chains below it.
- Integration walkthrough — using the trust anchor to verify an end-to-end signed CAM.
GET /capabilities— full machine-readable trust summary.