Skip to content

Commit 4465f43

Browse files
Merge pull request #169 from LeoneRiello74/main
RFC003 update to align with ARF rulebook v 1.8
2 parents 90f305a + c6fcd70 commit 4465f43

File tree

1 file changed

+95
-42
lines changed

1 file changed

+95
-42
lines changed

ewc-rfc003-issue-person-identification-data.md

Lines changed: 95 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# EWC RFC003: Issue Person Identification Data (PID) - v2.0
1+
# EWC RFC003: Issue Person Identification Data (PID) - v2.1
22

33
**Authors:**
44

@@ -17,7 +17,7 @@
1717

1818
**Table of Contents**
1919

20-
- [EWC RFC003: Issue Person Identification Data (PID) - v2.0](#ewc-rfc003-issue-person-identification-data-pid---v20)
20+
- [EWC RFC003: Issue Person Identification Data (PID) - v2.1](#ewc-rfc003-issue-person-identification-data-pid---v21)
2121
- [1.0 Summary](#10-summary)
2222
- [2.0 Motivation](#20-motivation)
2323
- [3.0 Messages](#30-messages)
@@ -32,8 +32,8 @@
3232
- [3.6 Authorization request](#36-authorization-request)
3333
- [3.6 Authorization response](#36-authorization-response)
3434
- [3.7 Token request](#37-token-request)
35-
- [3.7.1 Authorisation code flow](#371-authorisation-code-flow)
36-
- [3.8.2 Pre-authorised code flow](#382-pre-authorised-code-flow)
35+
- [3.7.1 Authorization code flow](#371-authorization-code-flow)
36+
- [3.8.2 Pre-authorized code flow](#382-pre-authorized-code-flow)
3737
- [3.9 Token response](#39-token-response)
3838
- [3.10 Credential request](#310-credential-request)
3939
- [3.11 Credential response](#311-credential-response)
@@ -51,7 +51,7 @@
5151

5252
# 1.0 Summary
5353

54-
This specification implements the OID4VCI workflow for issuing Person Identification Data (PID) credentials by government-approved identity providers within the European Wallet Ecosystem. It defines a standard process to minimize risks and ensure interoperability in issuing high-assurance PIDs across the EUDI wallet ecosystem, adhering to the requirements set forth in the ARF [2] and in the implementing act 2024/2977 for PID and EAA issuance [6].
54+
This specification implements the OID4VCI workflow for issuing Person Identification Data (PID) credentials by government-approved identity providers within the European Wallet Ecosystem. It defines a standard process to minimize risks and ensure interoperability in issuing high-assurance PIDs across the EUDI wallet ecosystem, adhering to the requirements set forth in the ARF [2] and in the implementing act 2024/2977-2979 for PID and EAA issuance [6].
5555

5656
# 2.0 Motivation
5757

@@ -231,6 +231,9 @@ The wallet has
231231
In any case the signature of the credential, issued at the end of the process and delivered to the wallet, must be validated against the pid provider signature certificate.
232232
> Note: Pid Provider authentication and the definition of rp access certificates is still under development so it won't be mandatory in EWC integration test bed.
233233
234+
At this stage, not all PID issuer will support this authentication method: signed_metadata won't be present and the wallet should raise an alert to the user in order to inform that the PID provider authentication will not take place.
235+
On the other side the wallet could not support this function, so signed_metadata will be ignored if present.
236+
234237
## 3.6 Authorization request
235238

236239
The authorization request seeks permission to access the PID credential endpoint. Here is an adapted example of this request, specifically aimed at PID issuance by a government identity provider:
@@ -352,12 +355,12 @@ Location: https://Wallet.example.org/cb?code=SplxlOBeZQQYbYS6WxSbIA
352355
353356
## 3.7 Token request
354357

355-
In this step wallet trustwothiness in verified.
356-
The validation mechanism is delegated to RFC004, still a draft in this stage.
358+
In this step wallet trustwothiness in verified. The validation mechanism is delegated to RFC004.
357359
Wallet unit attestations received within token request will be verified; Wallet provider could be validated against trust framework and the wallet instance could be verified against a trustlist for valid and not revoked wallet versions published by the wallet provider, if available.
358-
> Note: The validation of wallet is based on wallet unit attestation (rif RFC004 (WIP) [https://github.com/EWC-consortium/eudi-wallet-rfcs/blob/main/ewc-rfc004-individual-wallet-attestation.md])
360+
The binding ow wallet instance and WUA must be verified too, in a similar manner of which the PID is bound to the wallet key in step 3.10 Credential Request/Response.
361+
> Note: The validation of wallet is based on wallet unit attestation (rif RFC004 (WIP) [https://github.com/EWC-consortium/eudi-wallet-rfcs/blob/main/ewc-rfc004-individual-wallet-attestation.md]) based on IETF attestation based client identification [11].
359362
360-
### 3.7.1 Authorisation code flow
363+
### 3.7.1 Authorization code flow
361364

362365
For PID credential issuance, the token request using the authorization code flow is structured as follows:
363366

@@ -407,7 +410,7 @@ This request is made with the following query params:
407410
</tr>
408411
</table>
409412

410-
### 3.8.2 Pre-authorised code flow
413+
### 3.8.2 Pre-authorized code flow
411414

412415
In scenarios where a pre-authorized code is used, the token request is structured as follows:
413416

@@ -480,12 +483,34 @@ Authorization: Bearer eyJ0eXAi...KTjcrDMg
480483
}
481484
```
482485

483-
This request specifies the format and type of credential being requested, along with a JWT proof of the user’s identity.
486+
This request specifies the format and type of credential being requested, along with a JWT proof of the wallet key.
487+
PID issuer extracts from the jwt of the proof , the public key and the nonce in order to verify it correctness and integrity.
488+
489+
> [!NOTE]
490+
> The nonce of the proof is handle differently in oidc4vci versions (the one used in EWC is the 13rd).
491+
> In version 13 before credential request, pid issuer should send a nonce to the wallet that should be signed and set in the proof. In the latest published version a nonce endpoint should be provided to the wallet to get a nonce to be signed.
484492
485493
## 3.11 Credential response
486494

487-
The issuance of PID credentials may proceed directly or be deferred, contingent on the issuer's readiness to issue the credential immediately or require additional processing time.
488-
The wallet should verify the signature pf the credential against the certificate collected at the beginning and verified against the trusted list.(the certificate used signing the credential must be the same of the one collected at the beginning).
495+
The issuance of PID credentials may proceed directly or be deferred, contingent on the issuer's readiness to issue the credential immediately or to require additional processing time.
496+
This step will follow [RFC001 Chapter 3.9 - 3.10](https://github.com/EWC-consortium/eudi-wallet-rfcs/blob/main/ewc-rfc001-issue-verifiable-credential.md#39-credential-request) using an in-time response and the `credential_identifier` parameter. The credential identifier values are obtained from the token response in 3.9.
497+
498+
There are legal requirements (CIR 2024/2977 Article 3.5) for PID issuers to implement key binding - PID issued must be bound to the key from the wallet:
499+
500+
**Providers of person identification data shall ensure that person identification data that they issue is cryptographically bound to the wallet unit to which it is issued.**
501+
502+
In OpenID4VCI protocol this is realized via proofs: [https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html#name-proof-types](https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html#name-proof-types).
503+
This proof is strongly tied with nonce generated by issuer.
504+
505+
For PID issuers there are several requirements based on this:
506+
1. to implement nonce endpoint
507+
2. to implement proof verification - check signature over nonce
508+
3. to implement cryptographic binding - add public key into PID as "cnf" attribute according to [https://www.ietf.org/archive/id/draft-ietf-oauth-selective-disclosure-jwt-15.html#name-key-binding](https://www.ietf.org/archive/id/draft-ietf-oauth-selective-disclosure-jwt-15.html#name-key-binding). Optionally, the key may also be required to be the same as one discovered during the presentation (if performed) so that the presentation can be used for wallet holder authentication.
509+
510+
For PID example ref to Appendix C.
511+
> [!NOTE]
512+
> It would be inline with HAIP to set we accept only JWT proofs that contains public key specified in JWK that should be included in cnf attribute of SD-JWT credential.
513+
> There are several types of proofs and to ensure interoperability we should probably agree on one type that we will implement.
489514
490515
### 3.11.1 In-time
491516

@@ -594,6 +619,8 @@ Please refer to the [implementers table](https://github.com/EWC-consortium/eudi-
594619
7. RFC004 for wallet authentication, Available at [https://github.com/EWC-consortium/eudi-wallet-rfcs/blob/main/ewc-rfc004-individual-wallet-attestation.md](https://github.com/EWC-consortium/eudi-wallet-rfcs/blob/main/ewc-rfc004-individual-wallet-attestation.md)
595620
8. ETSI 119.471 v 0.0.11 [https://docbox.etsi.org/esi/Open/Latest_Drafts/ETSI%20DRAFT%20TS_119_471v0.0.11-public.pdf] (https://docbox.etsi.org/esi/Open/Latest_Drafts/ETSI%20DRAFT%20TS_119_471v0.0.11-public.pdf)
596621
9. IANA JWT claim registry [https://www.iana.org/assignments/jwt/jwt.xhtml](https://www.iana.org/assignments/jwt/jwt.xhtml)
622+
10. ARF tech specification for Provider Info [https://github.com/eu-digital-identity-wallet/eudi-doc-architecture-and-reference-framework/blob/main/docs/technical-specifications/ts2-notification-publication-provider-information.md](https://github.com/eu-digital-identity-wallet/eudi-doc-architecture-and-reference-framework/blob/main/docs/technical-specifications/ts2-notification-publication-provider-information.md)
623+
11. IETF Attestation based client identification [https://datatracker.ietf.org/doc/draft-ietf-oauth-attestation-based-client-auth/](https://datatracker.ietf.org/doc/draft-ietf-oauth-attestation-based-client-auth/)
597624

598625
# Appendix A: Public key resolution
599626

@@ -611,13 +638,20 @@ The optional attributes that are only present in the ARF PID rulebook have been
611638
> [!NOTE]
612639
The json schema format is simple descriptive, and it includes both data and metadata.
613640
In EWC we use json shemes that do not refers specifically sdjwt or mdoc cases, but they simply describe the functional content of the PID and the other credentials.
614-
As now (February 2025) The ARF 1.5.1 contains only details for mdoc encoding rif [https://eu-digital-identity-wallet.github.io/eudi-doc-architecture-and-reference-framework/latest/annexes/annex-3/annex-3.01-pid-rulebook/#42-encoding-of-pid-attributes-and-metadata](https://eu-digital-identity-wallet.github.io/eudi-doc-architecture-and-reference-framework/latest/annexes/annex-3/annex-3.01-pid-rulebook/#42-encoding-of-pid-attributes-and-metadata) while the encoding for sdjwt is still missing [https://eu-digital-identity-wallet.github.io/eudi-doc-architecture-and-reference-framework/latest/annexes/annex-3/annex-3.01-pid-rulebook/#5-sd-jwt-vc-based-encoding-of-pid
615-
](https://eu-digital-identity-wallet.github.io/eudi-doc-architecture-and-reference-framework/latest/annexes/annex-3/annex-3.01-pid-rulebook/#5-sd-jwt-vc-based-encoding-of-pid
616-
). A pull request about sdjwt format has been made [https://github.com/danielfett/eudi-doc-architecture-and-reference-framework/blob/danielfett/update-pid-rulebook/docs/annexes/annex-3/annex-3.01-pid-rulebook.md#2532-data-element-identifer-to-claim-mapping](https://github.com/danielfett/eudi-doc-architecture-and-reference-framework/blob/danielfett/update-pid-rulebook/docs/annexes/annex-3/annex-3.01-pid-rulebook.md#2532-data-element-identifer-to-claim-mapping) and this proposal is based on IANA jwt claim registry [9] but it's not approved and official.
641+
The ds012 (PID scheme), follows SD-JWT VC-based encoding of PID description in the ARF [https://github.com/eu-digital-identity-wallet/eudi-doc-architecture-and-reference-framework/blob/main/docs/annexes/annex-3/annex-3.01-pid-rulebook.md#5-sd-jwt-vc-based-encoding-of-pid](https://github.com/eu-digital-identity-wallet/eudi-doc-architecture-and-reference-framework/blob/main/docs/annexes/annex-3/annex-3.01-pid-rulebook.md#5-sd-jwt-vc-based-encoding-of-pid).
642+
Subject attributes are collected on credentialSubject object, while credential metadata are flattened as root object.
643+
Credential lifecycle status and references is described using the credentialStatus object.
644+
645+
As now (April 2025) the PID Rulebook is structured as follows:
646+
647+
1. Chapter 2 contains generic high-level requirements, which are valid for all PIDs regardless of the encoding used.
648+
2. Chapter 3 describes the PID attributes and metadata on a generic level, regardless of the encoding used for the PID. Most of the content of this chapter is a direct copy of the Annex of Commission Implementing Regulation 2024/2977 on PID and EAA. However, a few additional attributes are specified in this chapter.
649+
3. Chapter 4 specifies how the PID attributes and metadata are encoded in case the PID complies with [ISO/IEC 18013-5].[https://github.com/eu-digital-identity-wallet/eudi-doc-architecture-and-reference-framework/blob/main/docs/annexes/annex-3/annex-3.01-pid-rulebook.md#4-isoiec-18013-5-compliant-encoding-of-pid](https://github.com/eu-digital-identity-wallet/eudi-doc-architecture-and-reference-framework/blob/main/docs/annexes/annex-3/annex-3.01-pid-rulebook.md#4-isoiec-18013-5-compliant-encoding-of-pid)
650+
4. Chapter 5 specifies how the PID attributes and metadata are encoded in case the PID complies with [SD-JWT VC].[https://github.com/eu-digital-identity-wallet/eudi-doc-architecture-and-reference-framework/blob/main/docs/annexes/annex-3/annex-3.01-pid-rulebook.md#5-sd-jwt-vc-based-encoding-of-pid](https://github.com/eu-digital-identity-wallet/eudi-doc-architecture-and-reference-framework/blob/main/docs/annexes/annex-3/annex-3.01-pid-rulebook.md#5-sd-jwt-vc-based-encoding-of-pid)
617651

618652
# Appendix C: SD-JWT PID example
619653

620-
This is an example of a PID formatted according to Reference implementation (Nov 2024 ).
654+
This is the example of a PID formatted according to Reference implementation, and present in the PID Rulebook .
621655

622656
```json
623657
{
@@ -632,30 +666,49 @@ The disclosed payload
632666
```json
633667

634668
{
635-
"$schema":"www.europa.ec/mypid.json",
636-
"iss": "https://example.com/issuer",
637-
"iat": 1683000000,
638-
"exp": 1883000000,
639-
"vct": "urn:eu.europa.ec.eudi:pid:1",
640-
"cnf": {
641-
"jwk": {
642-
"kty": "EC",
643-
"crv": "P-256",
644-
"x": "TCAER19Zvu3OHF4j4W4vfSVoHIP1ILilDls7vCeGemc",
645-
"y": "ZxjiWWbZMQGHVWKVQ4hbSIirsVfuecCE6t4jT9F2HZQ"
646-
}
647-
},
648-
"resident_address": "123 Main St,123456 Anytown, Anystate, US",
649-
"resident_street": "Main St",
650-
"resident_house_number": "123",
651-
"resident_postal_code": "123456",
652-
"resident_city": "Anytown",
653-
"resident_state": "Anystate",
654-
"resident_country": "US",
655-
"email": "johndoe@example.com",
656-
"phone_number": "+1-202-555-0101",
657-
"family_name": "Doe",
658-
"birth_date": "1940-01-01",
659-
"given_name": "John"
669+
"vct": "urn:eudi:pid:de:1",
670+
671+
"given_name": "Jean",
672+
"family_name": "Dupont",
673+
"birthdate": "1980-05-23",
674+
675+
"age_equal_or_over": {
676+
"12": true,
677+
"14": true,
678+
"16": true,
679+
"18": true,
680+
"21": true,
681+
"65": false
682+
},
683+
"age_in_years": 44,
684+
"age_birth_year": 1980,
685+
686+
"address": {
687+
"street_address": "123 Via Appia",
688+
"locality": "Rome",
689+
"region": "Lazio",
690+
"postal_code": "00100",
691+
"country": "IT"
692+
},
693+
694+
"nationalities": ["FR"],
695+
696+
"sex": 5,
697+
698+
"place_of_birth": {
699+
"country": "DD"
700+
},
701+
702+
"cnf": {
703+
"jwk": {
704+
"kty": "EC",
705+
"crv": "P-256",
706+
"x": "52aDI_ur05n1f_p3jiYGUU82oKZr3m4LsAErM536crQ",
707+
"y": "ckhZ-KQ5aXNL91R8Eufg1aOf8Z5pZJnIvuCzNGfdnzo"
708+
}
709+
},
710+
711+
"issuing_authority": "DE",
712+
"issuing_country": "DE"
660713
}
661714
```

0 commit comments

Comments
 (0)