Preskoči na glavni sadržaj

DCQL objašnjen: kako verifikator od novčanika traži točno ono što mu treba

Digital Credentials Query Language, DCQL, JSON je format upita koji OpenID4VP koristi unutar zahtjeva za prezentaciju. Pouzdajućoj strani omogućuje da opiše koje vjerodajnice i koje tvrdnje u njima želi vidjeti, na način koji svaki usklađeni novčanik može obraditi bez posebne integracije.

Problem koji DCQL rješava

Poslovni novčanik može sadržavati vjerodajnice u više formata: registraciju tvrtke kao SD-JWT VC, stručnu kvalifikaciju kodiranu kao mdoc, W3C verifiable credential iz ranijeg pilota. Verifikator koji treba samo potvrditi matični broj i pravni naziv nema prenosiv način da zatraži upravo to, neovisno o formatu, a da ne prihvati cijelu vjerodajnicu ili ručno ne izradi zaseban zahtjev za svaki format i svakog dobavljača novčanika.

DCQL rješava stranu zahtjeva u tom jazu. To je jedan JSON objekt, ugrađen u OpenID4VP zahtjev za autorizaciju, koji navodi jedan ili više upita za vjerodajnice, svaki vezan uz format i skup putanja tvrdnji. Novčanik uspoređuje upit s pohranjenim vjerodajnicama, utvrđuje koje odgovaraju i tek tada traži od imatelja odobrenje za otkrivanje tih konkretnih tvrdnji. Verifikator dobiva predvidljivu strukturu za obradu, bez obzira na to koji je novčanik imatelj koristio.

1. Verifikator

Šalje OpenID4VP zahtjev s dcql_query

2. Novčanik

Uspoređuje upit s pohranjenim vjerodajnicama

3. Imatelj

Odobrava otkrivanje samo traženih tvrdnji

4. Verifikator

Prima jednu prezentaciju po id-u upita za vjerodajnicu

Oblik DCQL upita

DCQL upit je jedan JSON objekt s poljem credentials i, neobavezno, poljem credential_sets. Svaki unos u credentials je upit za vjerodajnicu. Polja označena s M obavezna su u tom upitu.

dcql_query

credentials[ ]

Jedan upit za svaku potrebnu vjerodajnicu

id + format

Koja vjerodajnica, u kojem formatu

meta

Filtar vrste, npr. vct_values

claims[ ]

Putanje tvrdnji za otkrivanje

claim_sets[ ]

Prihvatljive kombinacije tvrdnji

credential_sets[ ]

Neobavezno: koje kombinacije upita za vjerodajnice zadovoljavaju zahtjev

PoljeVrstaObavezno
idstringM
formatenum: dc+sd-jwt | mso_mdoc | jwt_vc_json | ldp_vcM
metaobjekt, oblik ovisi o formatu
claimspolje upita za tvrdnje
claim_setspolje polja id-ova tvrdnji
trusted_authoritiespolje objekata s vrstom i vrijednostima

Svaki unos u claims također je objekt: id kojim se na njega upućuje iz claim_sets, path, polje koje određuje položaj tvrdnje u vjerodajnici (na primjer ["legal_name"] za SD-JWT tvrdnju na najvišoj razini ili ["org", "registration_number"] za ugniježđenu), te neobavezno values, popis vrijednosti kojima tvrdnja mora odgovarati.

Primjer: provjera registracije tvrtke

Registracija tvrtke

dc+sd-jwt

Verifikator kaže: ovo želim primiti

  • ✓ Matični brojreg_nopath: ["registration_number"]
  • ✓ Pravni nazivlegal_namepath: ["legal_name"]
  • ✓ Država registracijereg_countrypath: ["registration_country"]
{
  "credentials": [
    {
      "id": "company_registration",
      "format": "dc+sd-jwt",
      "meta": {
        "vct_values": ["urn:eudi:business:company-registration:1"]
      },
      "claims": [
        { "id": "reg_no", "path": ["registration_number"] },
        { "id": "legal_name", "path": ["legal_name"] },
        { "id": "reg_country", "path": ["registration_country"] }
      ]
    }
  ]
}

Primjer odgovora novčanika

Novčanik odgovara objektom vp_token čiji su ključevi id-ovi upita za vjerodajnice. Svaka vrijednost je polje prezentacija. Za dc+sd-jwt prezentacija se sastoji od JWT-a koji je potpisao izdavatelj, jednog disclosurea po otkrivenoj tvrdnji i key binding JWT-a koji je veže uz nonce i klijenta ovog zahtjeva.

Što novčanik šalje

{
  "vp_token": {
    "company_registration": [
      "<issuer-signed JWT>~<disclosure: registration_number>~<disclosure: legal_name>~<disclosure: registration_country>~<key binding JWT>"
    ]
  }
}

Tvrdnje koje verifikator vidi nakon provjere

{
  "vct": "urn:eudi:business:company-registration:1",
  "registration_number": "12345678",
  "legal_name": "Example Logistics B.V.",
  "registration_country": "NL"
}

Traženje zamjene: claim_sets

claim_sets navodi grupe id-ova tvrdnji redoslijedom prednosti. Novčanik vraća prvu grupu koju može u potpunosti zadovoljiti onim što imatelj stvarno posjeduje, pa verifikator ne mora slati dva odvojena zahtjeva za precizan i zamjenski slučaj.

Primjer: matični broj ili zamjenski samo pravni naziv

1. Željeno

reg_nolegal_name

Vraća se kad vjerodajnica sadrži obje tvrdnje

2. Zamjena

legal_name

Vraća se samo ako prvi skup nije moguće zadovoljiti

{
  "credentials": [
    {
      "id": "company_registration",
      "format": "dc+sd-jwt",
      "meta": { "vct_values": ["urn:eudi:business:company-registration:1"] },
      "claims": [
        { "id": "reg_no", "path": ["registration_number"] },
        { "id": "legal_name", "path": ["legal_name"] }
      ],
      "claim_sets": [
        ["reg_no", "legal_name"],
        ["legal_name"]
      ]
    }
  ]
}

Ovdje verifikator radije traži matični broj i pravni naziv, ali prihvatit će i samo pravni naziv ako imateljeva vjerodajnica ne sadrži tvrdnju o matičnom broju.

Primjer odgovora: upotrijebljena je zamjena

Što novčanik šalje

{
  "vp_token": {
    "company_registration": [
      "<issuer-signed JWT>~<disclosure: legal_name>~<key binding JWT>"
    ]
  }
}

Tvrdnje koje verifikator vidi nakon provjere

{
  "vct": "urn:eudi:business:company-registration:1",
  "legal_name": "Example Logistics B.V."
}

Imateljeva vjerodajnica nema matični broj, pa je novčanik zadovoljio drugi skup tvrdnji i otkrio jedan disclosure. Odgovor ne navodi koji je skup upotrijebljen: verifikator to zaključuje iz tvrdnji koje primi.

Kombiniranje vjerodajnica: credential_sets

credential_sets djeluje razinu iznad claim_sets. Svaki unos navodi options, gdje je svaka opcija grupa id-ova upita za vjerodajnice. Novčanik mora zadovoljiti jednu opciju svakog obaveznog unosa, čime verifikator dobiva logiku AND i OR preko više vjerodajnica u jednom zahtjevu.

Obavezno

Registracija tvrtke

AND

Jedno od

PDV registracija

OR

Jedno od

Potvrda bankovnog računa

"credential_sets": [
  { "options": [["company_registration"]] },
  { "options": [["vat_registration"], ["bank_account"]] }
]

Primjer odgovora: registracija i bankovni račun

Što novčanik šalje

{
  "vp_token": {
    "company_registration": [
      "<issuer-signed JWT>~<disclosures>~<key binding JWT>"
    ],
    "bank_account": [
      "<issuer-signed JWT>~<disclosures>~<key binding JWT>"
    ]
  }
}

Tvrdnje koje verifikator vidi nakon provjere

{
  "company_registration": {
    "vct": "urn:eudi:business:company-registration:1",
    "registration_number": "12345678",
    "legal_name": "Example Logistics B.V."
  },
  "bank_account": {
    "vct": "urn:eudi:business:bank-account:1",
    "iban": "NL91ABNA0417164300",
    "account_holder": "Example Logistics B.V."
  }
}

Imatelj nema vjerodajnicu o PDV registraciji, pa je novčanik odabrao drugu opciju drugog skupa. Id-ovi upita koji nisu upotrijebljeni, ovdje vat_registration, jednostavno nedostaju u vp_token.

Samo pouzdani izdavatelji: trusted_authorities

trusted_authorities sužava upit za vjerodajnicu na vjerodajnice čijeg izdavatelja podupire tijelo kojem verifikator vjeruje. Svaki unos ima vrstu i popis vrijednosti: aki za identifikator ključa tijela, etsi_tl za ETSI pouzdani popis ili openid_federation za sidro povjerenja federacije. Novčanik nudi samo vjerodajnice koje odgovaraju.

Primjer: registracija od izdavatelja s popisa

Verifikator kaže: samo od izdavatelja s ovog popisa pouzdanih

type: etsi_tl

https://ec.europa.eu/tools/lotl/eu-lotl.xml

Vjerodajnica o registraciji od izdavatelja s popisa

izdavatelj je na popisu pouzdanih

✓ Odgovara upitu

Vjerodajnica o registraciji od izdavatelja izvan popisa

izdavatelj nije na popisu pouzdanih

✗ Ne odgovara, ne nudi se imatelju

{
  "credentials": [
    {
      "id": "company_registration",
      "format": "dc+sd-jwt",
      "meta": { "vct_values": ["urn:eudi:business:company-registration:1"] },
      "trusted_authorities": [
        {
          "type": "etsi_tl",
          "values": ["https://ec.europa.eu/tools/lotl/eu-lotl.xml"]
        }
      ],
      "claims": [
        { "id": "reg_no", "path": ["registration_number"] },
        { "id": "legal_name", "path": ["legal_name"] }
      ]
    }
  ]
}

Primjer odgovora: samo vjerodajnica izdavatelja s popisa

Što novčanik šalje

{
  "vp_token": {
    "company_registration": [
      "<issuer-signed JWT>~<disclosure: registration_number>~<disclosure: legal_name>~<key binding JWT>"
    ]
  }
}

Tvrdnje koje verifikator vidi nakon provjere

{
  "vct": "urn:eudi:business:company-registration:1",
  "registration_number": "12345678",
  "legal_name": "Example Logistics B.V."
}

Imatelj je imao i vjerodajnicu o registraciji od izdavatelja koji nije na popisu, ali je novčanik nije ponudio. trusted_authorities je filtar za novčanik, a ne jamstvo: verifikator pri provjeri prezentacije i sam provjerava izdavatelja prema pouzdanom popisu.

Podudaranje vrijednosti: claims.values

Upit za tvrdnju može sadržavati values, popis nizova znakova, cijelih brojeva ili booleovih vrijednosti. Novčanik vraća tvrdnju samo kad njezina vrsta i vrijednost točno odgovaraju jednoj od njih, pa verifikator može provjeriti uvjet bez prethodnog traženja bilo čega drugog.

Primjer: samo tvrtke registrirane u Nizozemskoj ili Belgiji

Verifikator kaže: samo tvrtka registrirana u jednoj od ovih država

reg_countryvalues:"NL""BE"

Nizozemska tvrtka

registration_country: "NL"

✓ Odgovara upitu

Njemačka tvrtka

registration_country: "DE"

✗ Ne odgovara, ne nudi se imatelju

{
  "credentials": [
    {
      "id": "company_registration",
      "format": "dc+sd-jwt",
      "meta": { "vct_values": ["urn:eudi:business:company-registration:1"] },
      "claims": [
        { "id": "legal_name", "path": ["legal_name"] },
        {
          "id": "reg_country",
          "path": ["registration_country"],
          "values": ["NL", "BE"]
        }
      ]
    }
  ]
}

Primjer odgovora: nizozemska tvrtka

Što novčanik šalje

{
  "vp_token": {
    "company_registration": [
      "<issuer-signed JWT>~<disclosure: legal_name>~<disclosure: registration_country>~<key binding JWT>"
    ]
  }
}

Tvrdnje koje verifikator vidi nakon provjere

{
  "vct": "urn:eudi:business:company-registration:1",
  "legal_name": "Example Logistics B.V.",
  "registration_country": "NL"
}

Vjerodajnica njemačke tvrtke ima registration_country "DE", pa ne zadovoljava upit i novčanik za nju nema što vratiti. Verifikator bi ipak trebao provjeriti vrijednost u provjerenim tvrdnjama umjesto da se oslanja na filtriranje u novčaniku.

Ograničenja specifična za format u meta

SD-JWT VC: vct_values

Za dc+sd-jwt, meta.vct_values navodi identifikatore vrsta vjerodajnica koje verifikator prihvaća. Upit odgovara samo pohranjenoj vjerodajnici čiji je vct jedna od navedenih vrijednosti, pa verifikator koji vjeruje samo vrsti vjerodajnice o registraciji jednog izdavatelja navodi upravo taj identifikator.

mso_mdoc: doctype_value i namespace

Za mso_mdoc, meta.doctype_value određuje ISO 18013-5 DocType, a svaka putanja tvrdnje počinje mdoc namespaceom u kojem se tvrdnja nalazi umjesto običnim nazivom polja, jer mdoc grupira tvrdnje po namespaceu umjesto u ravnom objektu.

Gdje je DCQL danas

  • DCQL je definiran unutar same specifikacije OpenID4VP, a ne kao zaseban dokument, i dio je nacrta otkako je mehanizam uveden kako bi zamijenio raniju ovisnost o DIF Presentation Exchange za OpenID4VP zahtjeve.
  • EUDI Wallet Architecture and Reference Framework propisuje OpenID4VP kao protokol prezentacije, a s njim i DCQL kao mehanizam upita koji pouzdajuće strane i novčanici u ekosustavu trebaju podržavati.
  • Referentne implementacije novčanika i verifikatora u programu EUDI Wallet Reference Implementation ujednačile su se oko DCQL-a, pa nove integracije poslovnih novčanika izgrađene danas na OpenID4VP trebaju pretpostaviti DCQL, a ne Presentation Exchange, kao format upita za zahtjeve za prezentaciju.

Povezani pojmovi

Česta pitanja

Po čemu se DCQL razlikuje od DIF Presentation Exchange?

Oba opisuju što verifikator traži od novčanika, no DCQL je ograničen na OpenID4VP i definiran izravno u toj specifikaciji, dok je Presentation Exchange zasebna DIF specifikacija koja pokriva i druge protokole. DCQL je namjerno manji: nema grupe input descriptora ni submission requirements, a ograničenja specifična za format, poput mdoc doctypea ili SD-JWT VC vrste, izražava izravno u objektu upita umjesto kroz generički JSON Schema filtar. Ekosustav EUDI Wallet standardizirao je DCQL za OpenID4VP prezentacije.

Može li jedan DCQL upit tražiti više od jedne vjerodajnice?

Da. Polje credentials može navesti više upita za vjerodajnice, svaki s vlastitim id-om. Novčanik koji ima podudaranja za svaki unos vraća jednu prezentaciju po unosu. Neobavezni objekt credential_sets povrh toga može zahtijevati određene kombinacije, primjerice prihvatiti samo vjerodajnicu o registraciji tvrtke ili vjerodajnicu o registraciji tvrtke zajedno s UBO izjavom, bez dvostrukog traženja od imatelja.

Koji problem rješava claim_sets unutar jednog upita za vjerodajnicu?

Vjerodajnica ne sadrži uvijek svaku tvrdnju koju bi verifikator želio. claim_sets navodi alternativne grupe id-ova tvrdnji od kojih bi svaka sama zadovoljila zahtjev, poredane od najpoželjnije prema najmanje poželjnoj. Novčanik bira prvu grupu koju može u potpunosti zadovoljiti tvrdnjama koje imatelj stvarno ima, pa verifikator može tražiti točan identifikacijski broj kad je dostupan i vratiti se na grublju provjeru, poput oznake punoljetnosti, bez slanja dva odvojena zahtjeva.

Je li DCQL specifičan za EUDI Wallet?

Nije. DCQL je dio osnovne specifikacije OpenID4VP i može ga koristiti svaka implementacija OpenID4VP. Ekosustav EUDI Wallet istaknuti je korisnik: Architecture and Reference Framework propisuje OpenID4VP s DCQL-om kao mehanizam prezentacije koji pouzdajuće strane moraju podržavati, zbog čega je osobito važan za novčanike i verifikatore namijenjene europskom tržištu.

Provodi li DCQL sam selektivno otkrivanje?

Ne. DCQL samo opisuje što se traži. Može li novčanik otkriti upravo te tvrdnje i ništa više ovisi o formatu vjerodajnice: i SD-JWT VC i ISO mdoc podržavaju otkrivanje podskupa tvrdnji, pa se polje claims u DCQL-u preslikava na tu podršku. DCQL bi radio i s formatom bez selektivnog otkrivanja, ali bi imatelj morao otkriti cijelu vjerodajnicu čak i za upit s jednom tvrdnjom.

Izvori

  1. OpenID for Verifiable Presentations 1.0, odjeljak Digital Credentials Query Language (DCQL)
  2. EUDI Wallet Architecture and Reference Framework
  3. Specifikacija DIF Presentation Exchange 2.0.0

Ova stranica služi isključivo informiranju i ne predstavlja pravni savjet. Za mjerodavne smjernice obratite se izravno OpenID Foundation i Europskoj komisiji.

Razgovarajte s nama o integraciji EUDI Wallet