Skip to content

Commit 442eca6

Browse files
danielfettGiuseppe De Marcoc2boDaniel Fett
authored
Adapt PID rulebook to latest SD-JWT VC (#160)
* Adapt PID rulebook to latest SD-JWT VC * Apply suggestions from Giuseppe Co-authored-by: Giuseppe De Marco <giuseppe.demarco@teamdigitale.governo.it> * Update docs/annexes/annex-06-pid-rulebook.md Co-authored-by: Christian Bormann <8774236+c2bo@users.noreply.github.com> * Editorial fix * Fix references * Remove accidentally added file * add references * Merge conflict not fully fixed in last commit * Address first comments by David * Revisit PR, incorporate David's feedback * Include clause on selectively disclosable claims * Use URNs for types * Fix gender in example * improve example * changing dot to colon in urn * Address feedback comments, add references * Remove sd-jwt reference again --------- Co-authored-by: Giuseppe De Marco <giuseppe.demarco@teamdigitale.governo.it> Co-authored-by: Christian Bormann <8774236+c2bo@users.noreply.github.com> Co-authored-by: Daniel Fett <danielf@yes.com>
1 parent ce3a412 commit 442eca6

File tree

2 files changed

+170
-11
lines changed

2 files changed

+170
-11
lines changed

docs/annexes/annex-3/annex-3.01-pid-rulebook.md

Lines changed: 164 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@ attributes and metadata are encoded in case the PID complies with [ISO/IEC
4444
18013-5].
4545
- [Chapter 5](#5-sd-jwt-vc-based-encoding-of-pid) specifies how the PID
4646
attributes and metadata are encoded in case the PID complies with [SD-JWT VC].
47-
In the current version of this PID Rulebook, this chapter is empty; it will be
48-
specified after further discussion with Member States.
4947

5048
### 1.3 Key words
5149

@@ -71,14 +69,14 @@ ecosystem, regardless of the encoding used.
7169
| **Index** | **Requirement specification** |
7270
|-----------|--------------|
7371
| PID_01 | A PID Provider SHALL issue any PID in both the format specified in ISO/IEC 18013-5 [ISO/IEC 18013-5] and the format specified in [SD-JWT VC]. *Note: CIR 2024/2977 mentions the W3C Verifiable Credentials Data Model v1.1 [W3C VCDM v1.1] instead of [SD-JWT VC]. However, W3C VCDM is not a complete specification of an attestation format. In particular, it does not specify a specific proof method to be used. Without additional specification, it is therefore impossible to implement a PID based on [W3C VCDM v1.1]. This Rulebook considers [SD-JWT VC] to essentially be such an additional specification.* |
74-
| PID_02 | PID Providers SHALL use the attestation type “eu.europa.ec.eudi.pid.1” for both ISO/IEC 18013-5-compliant and SD-JWT VC-compliant PIDs. *Notes: - This identifier uses the general format [Reverse Domain].[Domain Specific Extension]. Since the European Commission controls the domain ec.europa.eu, this attestation type identifier will not collide with any attestation type identifiers defined by other organisations in other Attestation Rulebooks. - The Commission may use the version number “1” in this identifier to distinguish between the first version of the PID, defined in this document, and any future version, which will then have an incremented version number.* |
72+
| PID_02 | PID Providers SHALL use “eu.europa.ec.eudi.pid.1” as the attestation type for ISO/IEC 18013-5-compliant PIDs. *Notes: - This identifier uses the general format [Reverse Domain].[Domain Specific Extension]. Since the European Commission controls the domain ec.europa.eu, this attestation type identifier will not collide with any attestation type identifiers defined by other organisations in other Attestation Rulebooks. - The Commission may use the version number “1” in this identifier to distinguish between the first version of the PID, defined in this document, and any future version, which will then have an incremented version number.* |
7573
| PID_03 | A PID Provider SHALL ensure that all of the mandatory attributes listed in [Section 3.2](#32-mandatory-attributes-specified-in-cir-20242977) are present in any PID it issues to a Wallet Unit. *Notes: - When requesting PID attributes from a Wallet Unit, a Relying Party is not necessarily required to request all mandatory attributes. - A User is allowed to refuse to present a mandatory attribute, if it is requested by a Relying Party.* |
7674

7775
## 3 PID attributes and metadata
7876

7977
### 3.1 Introduction
8078

81-
Sections 3.2, 3.3, 3.4 and 3.5 of this chapter lists the mandatory and optional
79+
Sections 3.2, 3.3, 3.4 and 3.5 of this chapter list the mandatory and optional
8280
PID attributes and PID metadata defined in CIR 2024/2977, respectively. Section
8381
3.6 lists the optional PID attributes additionally defined in this PID Rulebook.
8482

@@ -92,7 +90,7 @@ encoding used. Consequently,
9290
- the data identifiers in these tables are not necessarily the same as the
9391
attribute identifiers used for PIDs complying with [ISO/IEC 18013-5]. [Chapter
9492
4](#4-isoiec-18013-5-compliant-encoding-of-pid) specifies the data element
95-
identifiers to be used for such PIDs.
93+
identifiers to be used for PIDs in [ISO/IEC 18013-5] format
9694
- the data identifiers in these tables are not necessarily the same as the claim
9795
names used for PIDs complying with [SD-JWT VC]. [Chapter
9896
5](#5-sd-jwt-vc-based-encoding-of-pid) specifies the attribute identifiers to be
@@ -292,15 +290,171 @@ scope of this document.
292290

293291
## 5 SD-JWT VC-based encoding of PID
294292

295-
### 5.1 High-Level Requirements for SD-JWT VC-compliant PIDs
293+
### 5.1 High-Level Requirements for SD-JWT VC-based PIDs
294+
295+
The requirements in the table below are valid for PIDs in the EUDI Wallet
296+
ecosystem that are compliant with [SD-JWT VC].
297+
298+
| **Index** | **Requirement specification** |
299+
|-----------|-------------------------------|
300+
| PID_SVC_01 | A PID Provider issuing [SD-JWT VC]-compliant PIDs SHALL include the vct claim in their PIDs, where the vct claim SHALL be a URN within the `urn:eudi:pid:` namespace. The type indicated by the vct claim SHALL be `urn:eudi:pid:1` for the type defined in this document or a domestic type that extends it. |
301+
| PID_SVC_02 | A catalog linked in the PID rulebook SHALL associate all SD-JWT VC types for PIDs with SD-JWT VC type metadata which will include the same information as the PID rulebook applicable to the type. |
302+
| PID_SVC_03 | A PID Provider that defines a domestic type SHALL publish information about the type, including all claim identifiers, their definition, presence and encoding format, in an Attestation Rulebook complying with all applicable requirements in Annex 2 [Topic 12]. |
303+
| PID_SVC_04 | When issuing a PID compliant with [SD-JWT VC], a PID Provider SHALL include both the attributes and the metadata specified in CIR 2024/2977 in the PID as claims. *Note: This implies that technically speaking, there is no difference between these attributes and metadata.* |
304+
| PID_SVC_05 | When issuing a PID compliant with [SD-JWT VC], a PID Provider SHALL encode each attribute or metadata in the PID as specified in the tables in [Section 5.2](#52-encoding-of-pid-attributes). |
305+
| PID_SVC_06 | When issuing a PID compliant with [SD-JWT VC], a PID Provider SHALL ensure that the value of all attributes and metadata in the PID is valid at the value of the timestamp in the nbf claim, if present. *Note: The value of the age-related claims, if present, changes whenever the User to whom the person identification data relates has a relevant birthday. The value of many other attributes will also change over time.* |
306+
| PID_SVC_07 | When issuing a PID compliant with [SD-JWT VC], a PID Provider SHALL ensure that the date_of_issuance claim, if present, is not later than the value of the timestamp in the nbf claim, if present. |
307+
| PID_SVC_08 | When issuing a PID compliant with [SD-JWT VC], a PID Provider SHALL make all claims (i.e., all top-level properties, all nested properties, and all array entries) selectively disclosable individually, except those claims defined as non-selectively disclosable in [SD-JWT VC]. |
296308

297-
High-level requirements for SD-JWT VC-compliant PIDs will be added to a future
298-
version of this PID Rulebook.
299309

300310
### 5.2 Encoding of PID attributes
301311

302-
The encoding of PID attributes for SD-JWT VC-compliant PIDs will be added to a
303-
future version of this PID Rulebook.
312+
Following Requirement ARB_06b, SD-JWT VC-encoded PID attestations use claim names that are either registered in the JSON Web
313+
Token Claims Registry [IANA-JWT-Claims], are Public Names as defined in [RFC 7519], or are Private Names specific
314+
to the attestation type. The tables below maps the data
315+
identifiers defined above to the corresponding claim names.
316+
317+
Note that a hierarchical claim name structure can be used in SD-JWT VC encoded
318+
PIDs as SD-JWT allows for individual selective disclosure of objects
319+
and their properties. A hierarchical claim name structure is indicated by the
320+
notation `parent.child` in the tables below.
321+
322+
The following IANA registered claim names are to be used for PIDs:
323+
324+
| **Data Identifier** | **Attribute identifier** | **Encoding format** | **Reference/Notes** |
325+
|------------------------|--------------|------------------|
326+
| family_name | family_name | string | Section 5.1 of [OIDC] |
327+
| given_name | given_name | string | Section 5.1 of [OIDC] |
328+
| birth_date | birthdate | string, ISO 8601-1 [ISO8601‑1] YYYY-MM-DD format | Section 5.1 of [OIDC] |
329+
| birth_place | place_of_birth.country | string | Section 4.1 of [EKYC]; for the country |
330+
| birth_place | place_of_birth.region | string | Section 4.1 of [EKYC]; for the state, province or other region |
331+
| birth_place | place_of_birth.locality | string | Section 4.1 of [EKYC]; for the city or other locality |
332+
| nationality | nationalities | array of strings | Section 4.1 of [EKYC]; using alpha-2 country codes as defined in [Section 3.2](#32-mandatory-attributes-specified-in-cir-20242977) |
333+
| resident_address | address.formatted | string | Section 5.1 of [OIDC] |
334+
| resident_country | address.country | string | Section 5.1 of [OIDC] |
335+
| resident_state | address.region | string | Section 5.1 of [OIDC] |
336+
| resident_city | address.locality | string | Section 5.1 of [OIDC] |
337+
| resident_postal_code | address.postal_code | string | Section 5.1 of [OIDC] |
338+
| resident_street | address.street_address | string | Section 5.1 of [OIDC] |
339+
| resident_house_number | address.house_number | string | Section 5.1 of [OIDC] |
340+
| family_name_birth | birth_family_name | string | Section 4.1 of [EKYC] |
341+
| given_name_birth | birth_given_name | string | Section 4.1 of [EKYC] |
342+
| email_address | email | string | Section 5.1 of [OIDC] |
343+
| mobile_phone_number | phone_number | string | Section 5.1 of [OIDC] |
344+
| portrait | picture | string; data URL containing the base64-encoded portrait in JPEG format according to PID_04 | Section 5.1 of [OIDC] |
345+
346+
Note: The standard JWT claims nbf and exp are used to express the technical validity of the SD-JWT VC PID.
347+
348+
The following Private Names specific to the attestation type defined here are to be used for PIDs:
349+
350+
| **Data Identifier** | **Attribute identifier** | **Encoding format** | **Notes** |
351+
|------------------------|--------------|------------------|
352+
| expiry_date | date_of_expiry | string | ISO 8601-1 [ISO8601‑1] YYYY-MM-DD format, as defined in Section 5.4.4.2 of [EKYC Schema] |
353+
| issuance_date | date_of_issuance | string | ISO 8601-1 [ISO8601‑1] YYYY-MM-DD format, as defined in Section 5.4.4.2 of [EKYC Schema] |
354+
| personal_administrative_number | personal_administrative_number | string | |
355+
| sex | sex | number | numeric encoding as described in [Section 3.3](#33-optional-attributes-specified-in-cir-20242977); gender from [OIDC] uses a different value range and is therefore not used |
356+
| issuing_authority | issuing_authority | string | |
357+
| issuing_country | issuing_country | string | |
358+
| document_number | document_number | string | |
359+
| issuing_jurisdiction | issuing_jurisdiction | string | |
360+
| location_status | - | See [Section 4.2.3](#423-attribute-location_status) | |
361+
| age_over_18 | age_equal_or_over.18 | boolean (see note below) | |
362+
| age_over_NN | age_equal_or_over.NN | boolean (see note below) | |
363+
| age_in_years | age_in_years | number | |
364+
| age_birth_year | age_birth_year | number | |
365+
| trust_anchor | trust_anchor | string | |
366+
367+
Note: Instead of separate claims for (for example) age_over_16, age_over_18, age_over_65, etc., a single claim age_equal_or_over is used. This claim is an object with properties for each age as follows:
368+
369+
```json
370+
"age_equal_or_over": {
371+
"16": true,
372+
"18": true,
373+
"65": false
374+
}
375+
```
376+
377+
### 5.3 Note on VCT
378+
379+
SD-JWT VC defines the Verifiable Credential Type (`vct`). A type comes
380+
with associated metadata that, for instance, provides information about
381+
the type itself, outlines a schema detailing the claims that are
382+
optional or mandatory in the SD-JWT VC, and specifies their display
383+
methods. Additionally, a type can extend another type, enabling
384+
the creation of domestic types based on a common EU-wide type, while preserving
385+
the mandatory claims from the base type. Domestic
386+
types MAY however define additional claims and display information. Details
387+
are defined in [SD-JWT VC].
388+
389+
This document defines the base type to be "urn:eudi:pid:1". As a convention, all
390+
PIDs must use types in the namespace "urn:eudi:pid:".
391+
392+
SD-JWT VC specifies Type Metadata as a machine-readable format for information
393+
regarding a type, including the information on claims such as what is contained
394+
in this document. Requirement PID_SVC_02 requires that the information on the
395+
common EU-wide type as well as on any domestic types is published and
396+
accessible in a catalog.
397+
398+
### 5.4 Example
399+
400+
401+
EXAMPLE: The following example shows the payload of a PID in SD-JWT VC format before the encoding into the SD-JWT format.
402+
403+
```json
404+
{
405+
"vct": "urn:eudi:pid.de.1",
406+
407+
"given_name": "Jean",
408+
"family_name": "Dupont",
409+
"birthdate": "1980-05-23",
410+
411+
"age_equal_or_over": {
412+
"12": true,
413+
"14": true,
414+
"16": true,
415+
"18": true,
416+
"21": true,
417+
"65": false
418+
},
419+
"age_in_years": 44,
420+
"age_birth_year": 1980,
421+
422+
"address": {
423+
"street_address": "123 Via Appia",
424+
"locality": "Rome",
425+
"region": "Lazio",
426+
"postal_code": "00100",
427+
"country": "IT"
428+
},
429+
430+
"nationalities": ["FR"],
431+
432+
"sex": 5,
433+
434+
"place_of_birth": {
435+
"country": "DD"
436+
},
437+
438+
"cnf": {
439+
"jwk": {
440+
"kty": "EC",
441+
"crv": "P-256",
442+
"x": "52aDI_ur05n1f_p3jiYGUU82oKZr3m4LsAErM536crQ",
443+
"y": "ckhZ-KQ5aXNL91R8Eufg1aOf8Z5pZJnIvuCzNGfdnzo"
444+
}
445+
},
446+
447+
"issuing_authority": "DE",
448+
"issuing_country": "DE"
449+
}
450+
```
451+
452+
Note: The `cnf` claim is used for expressing key binding in SD-JWT VCs.
453+
The example above shows a public key in JWK format.
454+
455+
Note: Additional technical claims are not shown here, including
456+
references to the issuer, validity status information, and more.
457+
304458

305459
## 6 Further requirements
306460

docs/architecture-and-reference-framework-main.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4078,12 +4078,13 @@ For undated references, the latest version available applies.
40784078
| [ETSI EN 319 162-1]| [ETSI EN 319 162-1](https://www.etsi.org/deliver/etsi_en/319100_319199/31916201/01.01.01_60/en_31916201v010101p.pdf) - Electronic Signatures and Infrastructures (ESI); Associated Signature Containers (ASiC); Part 1: Building blocks and ASiC baseline containers |
40794079
| [ETSI EN 319 142] | [ETSI EN 319 142](https://www.etsi.org/deliver/etsi_en/319100_319199/31914202/01.01.01_60/en_31914202v010101p.pdf) - Electronic Signatures and Infrastructures (ESI); PAdES digital signatures; Part 1: Building blocks and PAdES baseline signatures |
40804080
| [CEN EN 419 241-1]| [CEN EN 419 241-1](https://www.en-standard.eu/csn-en-419241-1-trustworthy-systems-supporting-server-signing-part-1-general-system-security-requirements/) -- Trustworthy Systems Supporting Server Signing - Part 1: General System Security Requirements |
4081-
| [SD-JWT VC] | SD-JWT-based Verifiable Credentials (SD-JWT VC). Retrievable from: <https://datatracker.ietf.org/doc/draft-ietf-oauth-sd-jwt-vc/> |
4081+
| [SD-JWT VC] | SD-JWT-based Verifiable Credentials (SD-JWT VC). Available: <https://datatracker.ietf.org/doc/draft-ietf-oauth-sd-jwt-vc/> |
40824082
| [RFC 2119] | [RFC 2119](https://datatracker.ietf.org/doc/html/rfc2119) - Key words for use in RFCs to Indicate Requirement Levels. S. Bradner, March 1997. |
40834083
| [RFC 3339] | [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) - Date and Time on the Internet: Timestamps, G. Klyne et al., July 2002 |
40844084
| [RFC 4122] | [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122) - A Universally Unique Identifier (UUID) URN Namespace, P. Leach et al., July 2005 |
40854085
| [RFC 5280] | [RFC 5280](https://datatracker.ietf.org/doc/html/rfc5280) - Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile, D. Kooper et al., May 2008 |
40864086
| [RFC 3647] | [RFC 3647](https://datatracker.ietf.org/doc/html/rfc3647) - Internet X.509 Public Key Infrastructure Certificate Policy and Certification Practices Framework, S. Chokhani et al., November 2003 |
4087+
| [RFC 7519] | [RFC 7519](https://datatracker.ietf.org/doc/html/rfc7519) - JSON Web Token (JWT), M. Jones et al., May 2015 |
40874088
| [RFC 8259] | [RFC 8259](https://datatracker.ietf.org/doc/html/rfc8259) - The JavaScript Object Notation (JSON) Data Interchange Format, T. Bray, Ed., December 2017 |
40884089
| [RFC 8610] | [RFC 8610](https://datatracker.ietf.org/doc/html/rfc8610) - Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures, H. Birkholz et al., June 2019 |
40894090
| [RFC 8943] | [RFC 8943](https://datatracker.ietf.org/doc/html/rfc8943) - Concise Binary Object Representation (CBOR) Tags for Date, M. Jones et al., November 2020 |
@@ -4099,7 +4100,11 @@ For undated references, the latest version available applies.
40994100
| [CTAP] | Client to Authenticator Protocol (CTAP) Review Draft, March 21, 2023. Available: <https://fidoalliance.org/specs/fido-v2.2-rd-20230321/fido-client-to-authenticator-protocol-v2.2-rd-20230321.html> |
41004101
| [OpenID4VCI]| Lodderstedt, T. et al., "OpenID for Verifiable Credential Issuance", OpenID Foundation. Available: <https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html> |
41014102
| [OpenID4VP] | Terbu, O. et al., "OpenID Connect for Verifiable Presentations", OpenID Foundation. Available: <https://openid.net/specs/openid-4-verifiable-presentations-1_0.html> |
4103+
| [OIDC] | Sakimura, N. et al., "OpenID Connect Core 1.0", OpenID Foundation. Available: <https://openid.net/specs/openid-connect-core-1_0.html> |
4104+
| [EKYC] | Lodderstedt, T. et al., "OpenID Connect for Identity Assurance Claims Registration 1.0", OpenID Foundation. Available: <https://openid.net/specs/openid-connect-4-ida-claims-1_0-final.html> |
4105+
| [EKYC Schema] | Lodderstedt, T. et al., "OpenID Identity Assurance Schema Definition 1.0", OpenID Foundation. Available: <https://openid.net/specs/openid-ida-verified-claims-1_0-final.html> |
41024106
| [HAIP] | Yasuda, K. et al, "OpenID4VC High Assurance Interoperability Profile", OpenId Foundation. Available: <https://openid.net/specs/openid4vc-high-assurance-interoperability-profile-1_0.html> |
4107+
| [IANA-JWT-Claims] | IANA JSON Web Token Claims Registry. Available: <https://www.iana.org/assignments/jwt/jwt.xhtml> |
41034108
| [Topic 6]| Annex 2 - Relying Party authentication and User approval |
41044109
| [Topic 7] | Annex 2 - Attestation revocation and revocation checking |
41054110
| [Topic 9] | Annex 2 - Wallet Unit Attestation |

0 commit comments

Comments
 (0)