Skip to content

Cs 06 conformance spec rpac rprc v0.3 - #196

Open
jillesvo wants to merge 8 commits into
webuild-consortium:mainfrom
jillesvo:cs-06-conformance-spec-rpac-rprc
Open

Cs 06 conformance spec rpac rprc v0.3#196
jillesvo wants to merge 8 commits into
webuild-consortium:mainfrom
jillesvo:cs-06-conformance-spec-rpac-rprc

Conversation

@jillesvo

Copy link
Copy Markdown

WE BUILD Conformance Specification: Issuance of Relying Party Access and Registration Certificates (v0.2)

Summary

This PR proposes the first version of the WE BUILD Consortium Conformance Specification (CS) for the automated issuance of Wallet-Relying Party Access Certificates (WRPACs) and optional co-issuance of Wallet-Relying Party Registration Certificates (WRPRCs), based on the ACME protocol (RFC 8555).

What this spec defines

  • An ACME protocol profile for automated WRPAC issuance, aligned with the WE BUILD Blueprint issuance process
  • A custom ACME identifier type (wrp-id) for WRP identifiers
  • A custom ACME challenge type (registrar-api-01) for verifying WRP authorization against WE BUILD RP Lists
  • An EBW-based External Account Binding mechanism for user authentication via European Business Wallets
  • Support for multi-instance issuance per the EUDI Wallet ARF v2.8 Relying Party Instance model
  • An explicit mapping of the WE BUILD Blueprint issuance workflow to ACME protocol operations (Section 9)

Normative alignment

  • CIR (EU) 2025/848, Articles 7, Annex I, IV, and V
  • ETSI TS 119 411-8 v1.1.1
  • ETSI TS 119 475 v1.2.1, Annex D Use Case 1 (Integrated model)
  • WE BUILD WP4 Architecture Blueprint
  • RFC 8555 (ACME)

Scope and limitations

This specification is intended for interoperability testing in the WE BUILD ITB+ environment only, not for production deployment. EBW authentication may be simulated in MVP scope; full OID4VP-based authentication is required for MVP+ conformance.

Requested feedback

  • Completeness of the certificate profile (§7.4) against ETSI TS 119 411-8 and TS 119 475
  • Multi-instance issuance design (§5.2, §7.2, §8.3)
  • EBW-based EAB mechanism (§5.4)
  • RP List structure and registrar-api-01 challenge design (§5.3, §7.8)

@jillesvo jillesvo changed the title Cs 06 conformance spec rpac rprc Cs 06 conformance spec rpac rprc v0.2 first proposal Apr 29, 2026
@Saramandus

Copy link
Copy Markdown
Contributor

Thank you very much for this impressive proposal, @jillesvo! I realised that the CS template does not have a Author field in the beginning, I will add that to the template. In the approved ones 01, 02, 03 there is a list of Authors / Contributors in the beginning. Could you please add the other involved authors in the top of the CS?

I suggest @webuild-consortium/blueprint-coordination-group reviews this.

@gfour

gfour commented May 21, 2026

Copy link
Copy Markdown
Contributor

This PR proposes the ACME protocol + authentication-via-POA-presentation for the automation of WRPAC/WRPRC generation. The ACME protocol seems a good fit for the problem and the extensions are reasonable (e.g., a new challenge "prove you are the RP by putting this token in the RP list"). Some questions:

  1. I understood that the ACME server that generates the certificates will be part of the ITB+. Who implements the ACME client? Must the EBW become an ACME client? Is the ACME client an RP that EBWs can present to? Or is this left out as an implementation choice? ("the EBW acts as the ACME Client or provides the authentication layer for the ACME Client")

  2. "The RA validates the POA and verifies the representative's authority": If I have a POA as a representative of X and I want to register wrp-id=Y, how is the X-Y relationship established? Is this the "WRP unique identifier"/"WRP legal name" information in the WE BUILD RP Lists?

Also, I think CLAUDE.md can be left out; people may have already their own uncommitted similar file.

@gfour gfour self-assigned this May 21, 2026
@gfour
gfour self-requested a review May 21, 2026 13:00
@gfour gfour removed their assignment May 21, 2026
@Saramandus Saramandus added the CS Conformance Specification label May 26, 2026
@gfour

gfour commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

We already have EBWOID, we can use that instead of the POA credential to authenticate.

CLAUDE.md is a per-developer local file; contributors may keep their own
uncommitted version, so it should not be tracked in the repo.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@jillesvo

Copy link
Copy Markdown
Author

This PR proposes the ACME protocol + authentication-via-POA-presentation for the automation of WRPAC/WRPRC generation. The ACME protocol seems a good fit for the problem and the extensions are reasonable (e.g., a new challenge "prove you are the RP by putting this token in the RP list"). Some questions:

  1. I understood that the ACME server that generates the certificates will be part of the ITB+. Who implements the ACME client? Must the EBW become an ACME client? Is the ACME client an RP that EBWs can present to? Or is this left out as an implementation choice? ("the EBW acts as the ACME Client or provides the authentication layer for the ACME Client")
  2. "The RA validates the POA and verifies the representative's authority": If I have a POA as a representative of X and I want to register wrp-id=Y, how is the X-Y relationship established? Is this the "WRP unique identifier"/"WRP legal name" information in the WE BUILD RP Lists?

Also, I think CLAUDE.md can be left out; people may have already their own uncommitted similar file.

We already have EBWOID, we can use that instead of the POA credential to authenticate.

Thanks @gfour for the questions and input

1. Who implements the ACME client / must the EBW become one?

It's left as an implementation choice on purpose, and the client sits on the WRP side (not in the ITB+). §4 maps the ACME Client to "User + EBW" and is explicit that the EBW plays two separable roles:

  1. host/invocation environment for the ACME Client software, or
  2. just the authentication layer for it - "the EBW acts as the ACME Client or provides the authentication layer for the ACME Client."

Two valid topologies:

  1. Embedded: ACME client logic runs in/with the EBW.
  2. Decoupled (the realistic one): the WRP runs an ordinary off-the-shelf ACME client (e.g. a server-side daemon); the EBW only supplies the authentication. The only hard requirement is that whatever performs newAccount holds EAB credentials minted by the RA.

On "is the ACME client an RP that EBWs present to?" - no. The EBW presents to the RA (the ACME Server's RA function / TSP portal) in the pre-ACME phase; the RA then issues EAB credentials (Key ID + HMAC key), and the ACME client merely carries those into the protocol. The chain is EBW → presents to RA → RA issues EAB → ACME client consumes EAB; the ACME client is never a relying party in the EUDI sense.

2. The X-Y relationship (POA for X, registering wrp-id=Y)

You're right that this is the WRP unique identifier / WRP legal name linkage, and we're going to make it explicit and direct by authenticating with the EBWOID attestation (rb-ebwoid) rather than a POA.

EBWOID carries the organisation's id and the official name. So the binding becomes a straightforward, testable equality the RA enforces:

EBWOID.id == order's wrp-id, and EBWOID.name == the RP List entry's WRP legal name (§7.8).

We'll update the proposal accordingly.

Jilles van Oossanen and others added 2 commits June 15, 2026 15:38
Authenticate via the organisation's EBWOID attestation (rb-ebwoid) instead
of a Power of Attorney. EBWOID.id is the same EUID-style identifier format as
wrp-id, so the WRP binding becomes a direct, testable match: the ACME Server
MUST verify EBWOID.id == wrp-id and EBWOID.name == the RP List WRP legal name
(new normative MUST in 7.2 item 9, with matching conformance bullet in 9).
Authorisation now derives from control of the organisation's EBW; no separate
POA or representative binding. Bumps version to 0.3 and adds author.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Implements the new normative check (CS-06 7.2 item 9): the EBWOID bound to
the ACME account must correspond to the WRP being ordered.

- client: EAB now carries a simulated EBWOID {id, name} claim in its
  protected header (the identity the RA would verify out-of-band).
- facade: newAccount extracts and stores the EBWOID; registrar-api-01
  challenge validation rejects (403) unless EBWOID.id == wrp-id and
  EBWOID.name == the RP List entry's legal name.
- negative_tests: fresh_account carries a (default-matching) EBWOID and a
  new t_challenge_ebwoid_mismatch asserts a 403 when EBWOID.id differs from
  the ordered wrp-id.
- README: documents the EBWOID claim and the 7.2 item 9 enforcement; notes
  the EBWOID is trusted as-presented (HMAC still not verified) in this MVP.

Not run end-to-end here (requires the live Dogtag CA + FastAPI services);
py_compile passes and the seeded test identity matches the new check.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@jillesvo jillesvo changed the title Cs 06 conformance spec rpac rprc v0.2 first proposal Cs 06 conformance spec rpac rprc v0.3 Jun 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CS Conformance Specification

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

4 participants