Liigu põhisisu juurde

DCQL lahti seletatuna: kuidas kontrollija küsib rahakotilt täpselt seda, mida vajab

Digital Credentials Query Language ehk DCQL on JSON-päringuvorming, mida OpenID4VP kasutab esitluspäringus. Sellega saab usaldav osapool kirjeldada, milliseid tõendeid ja milliseid nende väiteid ta näha soovib, nii et iga nõuetele vastav rahakott suudab päringut töödelda ilma eriintegratsioonita.

Probleem, mida DCQL lahendab

Ärirahakotis võib olla eri vormingus tõendeid: SD-JWT VC vormingus äriregistri tõend, mdoc-kodeeritud kutsekvalifikatsioon või varasema piloodi W3C kontrollitav tõend. Kontrollijal, kes vajab ainult registrikoodi ja ärinime kinnitust, puudub vormingute ülene viis küsida täpselt seda. Ta peab kas aktsepteerima kogu tõendi või koostama käsitsi eraldi päringu iga vormingu ja iga rahakoti tarnija jaoks.

DCQL lahendab selle probleemi päringu poolel. See on üks JSON-objekt OpenID4VP autoriseerimispäringus, mis nimetab ühe või mitu tõendipäringut, millest igaüks on seotud kindla vormingu ja väidete teedega. Rahakott hindab päringut salvestatud tõendite suhtes, selgitab välja sobivad tõendid ja alles siis palub omanikul kinnitada just nende väidete avaldamise. Kontrollija saab alati ettearvatava struktuuri, sõltumata sellest, millist rahakotti omanik kasutas.

1. Kontrollija

Saadab OpenID4VP päringu koos dcql_query objektiga

2. Rahakott

Võrdleb päringut salvestatud tõenditega

3. Omanik

Kinnitab ainult küsitud väidete avaldamise

4. Kontrollija

Saab iga tõendipäringu id kohta ühe esitluse

DCQL päringu ülesehitus

DCQL päring on üks JSON-objekt, milles on credentials massiiv ja valikuliselt credential_sets massiiv. Iga credentials kirje on tõendipäring. M-tähisega väljad on selles päringus kohustuslikud.

dcql_query

credentials[ ]

Üks tõendipäring iga vajaliku tõendi kohta

id + format

Milline tõend ja millises vormingus

meta

Tüübifilter, näiteks vct_values

claims[ ]

Avaldatavate väidete teed

claim_sets[ ]

Lubatud väidete kombinatsioonid

credential_sets[ ]

Valikuline: millised tõendipäringute kombinatsioonid päringu rahuldavad

VäliTüüpKohustuslik
idstringM
formatenum: dc+sd-jwt | mso_mdoc | jwt_vc_json | ldp_vcM
metaobjekt, kuju sõltub vormingust
claimsväitepäringute massiiv
claim_setsväidete id-de massiivide massiiv
trusted_authoritiesobjektide massiiv, millel on type ja values

Iga claims kirje on omakorda objekt: id, millega sellele claim_sets'is viidatakse, path, massiiv, mis määrab väite asukoha tõendis (näiteks ["legal_name"] SD-JWT ülemise taseme väite puhul või ["org", "registration_number"] pesastatud väite puhul), ning valikuliselt values, väärtuste loend, millest ühele väide peab vastama.

Näide: äriregistri andmete kontroll

Äriregistri andmed

dc+sd-jwt

Kontrollija ütleb: seda ma soovin saada

  • ✓ Registrikoodreg_nopath: ["registration_number"]
  • ✓ Ärinimilegal_namepath: ["legal_name"]
  • ✓ Registreerimisriikreg_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"] }
      ]
    }
  ]
}

Rahakoti vastuse näide

Rahakott vastab vp_token objektiga, mille võtmed on tõendipäringute id-d. Iga väärtus on esitluste massiiv. dc+sd-jwt puhul koosneb esitlus väljaandja allkirjastatud JWT-st, iga avaldatud väite kohta ühest disclosure'ist ja key binding JWT-st, mis seob esitluse selle päringu nonce'i ja kliendiga.

Mida rahakott saadab

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

Väited, mida kontrollija pärast valideerimist näeb

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

Varuvariandi küsimine: claim_sets

claim_sets loetleb väidete id-de grupid eelistuse järjekorras. Rahakott tagastab esimese grupi, mille ta saab omaniku tegelike andmete põhjal täielikult rahuldada, nii et kontrollija ei pea täpse ja varujuhtumi jaoks saatma kahte eraldi päringut.

Näide: registrikood või varuvariandina ainult ärinimi

1. Eelistatud

reg_nolegal_name

Tagastatakse, kui tõendis on mõlemad väited

2. Varuvariant

legal_name

Tagastatakse ainult siis, kui esimest komplekti ei saa rahuldada

{
  "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"]
      ]
    }
  ]
}

Siin eelistab kontrollija registrikoodi koos ärinimega, kuid aktsepteerib ka ainult ärinime, kui omaniku tõendis registrikoodi väidet ei ole.

Vastuse näide: kasutati varuvarianti

Mida rahakott saadab

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

Väited, mida kontrollija pärast valideerimist näeb

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

Omaniku tõendis ei ole registrikoodi, seega rahuldas rahakott teise väidete komplekti ja avaldas ühe disclosure'i. Vastus ei ütle, millist komplekti kasutati: kontrollija näeb seda saadud väidetest.

Tõendite kombineerimine: credential_sets

credential_sets toimib claim_sets'ist ühe taseme võrra kõrgemal. Iga kirje loetleb options, kus iga valik on tõendipäringute id-de grupp. Rahakott peab rahuldama iga nõutud kirje ühe valiku, mis annab kontrollijale ühes päringus tõendite ülese JA ning VÕI loogika.

Nõutud

Äriregistri andmed

AND

Üks neist

KMKR registreering

OR

Üks neist

Pangakonto kinnitus

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

Vastuse näide: registriandmed ja pangakonto

Mida rahakott saadab

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

Väited, mida kontrollija pärast valideerimist näeb

{
  "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."
  }
}

Omanikul ei ole KMKR registreeringu tõendit, seega valis rahakott teise komplekti teise valiku. Kasutamata päringu id-d, siin vat_registration, lihtsalt puuduvad vp_token objektist.

Ainult usaldusväärsed väljaandjad: trusted_authorities

trusted_authorities kitsendab tõendipäringu tõenditele, mille väljaandjat toetab kontrollija usaldatav asutus. Igal kirjel on type ja values loend: aki asutuse võtmeidentifikaatori jaoks, etsi_tl ETSI usaldusnimekirja jaoks või openid_federation föderatsiooni usaldusankru jaoks. Rahakott pakub ainult sobivaid tõendeid.

Näide: registritõend nimekirjas olevalt väljaandjalt

Kontrollija ütleb: ainult selle usaldusnimekirja väljaandjatelt

type: etsi_tl

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

Registritõend nimekirjas olevalt väljaandjalt

väljaandja on usaldusnimekirjas

✓ Vastab päringule

Registritõend nimekirjast puuduvalt väljaandjalt

väljaandja ei ole usaldusnimekirjas

✗ Ei vasta, omanikule ei pakuta

{
  "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"] }
      ]
    }
  ]
}

Vastuse näide: ainult nimekirjas oleva väljaandja tõend

Mida rahakott saadab

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

Väited, mida kontrollija pärast valideerimist näeb

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

Omanikul oli ka nimekirjast puuduva väljaandja registritõend, kuid rahakott seda ei pakkunud. trusted_authorities on rahakoti filter, mitte garantii: kontrollija kontrollib esitluse valideerimisel väljaandjat ise usaldusnimekirja alusel.

Väärtuse sobitamine: claims.values

Väitepäring võib sisaldada values loendit, mis koosneb stringidest, täisarvudest või tõeväärtustest. Rahakott tagastab väite ainult siis, kui selle tüüp ja väärtus vastavad täpselt ühele neist, nii et kontrollija saab tingimust kontrollida ilma midagi muud eelnevalt küsimata.

Näide: ainult Hollandis või Belgias registreeritud ettevõtted

Kontrollija ütleb: ainult ühes neist riikidest registreeritud ettevõte

reg_countryvalues:"NL""BE"

Hollandi ettevõte

registration_country: "NL"

✓ Vastab päringule

Saksa ettevõte

registration_country: "DE"

✗ Ei vasta, omanikule ei pakuta

{
  "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"]
        }
      ]
    }
  ]
}

Vastuse näide: Hollandi ettevõte

Mida rahakott saadab

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

Väited, mida kontrollija pärast valideerimist näeb

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

Saksa ettevõtte tõendis on registration_country väärtus "DE", seega ei rahulda see päringut ja rahakotil pole selle kohta midagi tagastada. Kontrollija peaks siiski kontrollima väärtust valideeritud väidetes, mitte lootma rahakoti filtreerimisele.

Vormingupõhised piirangud väljal meta

SD-JWT VC: vct_values

dc+sd-jwt puhul loetleb meta.vct_values tõenditüüpide identifikaatorid, mida kontrollija aktsepteerib. Päring vastab ainult salvestatud tõendile, mille vct on üks loetletud väärtustest. Kontrollija, kes usaldab ainult ühe väljaandja registritõendi tüüpi, loetleb täpselt selle identifikaatori.

mso_mdoc: doctype_value ja nimeruum

mso_mdoc puhul määrab meta.doctype_value ISO 18013-5 DocType'i ning iga väite path algab mdoc nimeruumiga, kuhu väide kuulub, mitte lihtsalt välja nimega, sest mdoc rühmitab väited nimeruumidesse, mitte lamedasse objekti.

DCQL-i praegune seis

  • DCQL on defineeritud OpenID4VP spetsifikatsiooni sees, mitte eraldi dokumendina, ja on olnud mustandi osa alates sellest, kui mehhanism võeti kasutusele, et asendada OpenID4VP päringute varasem sõltuvus DIF Presentation Exchange'ist.
  • EUDI Wallet Architecture and Reference Framework määrab esitlusprotokolliks OpenID4VP ja koos sellega päringumehhanismiks DCQL-i, mida ökosüsteemi usaldavad osapooled ja rahakotid peavad toetama.
  • EUDI Wallet Reference Implementation programmi rahakoti ja kontrollija referentsteostused on koondunud DCQL-i ümber. Seetõttu peaksid uued OpenID4VP-l põhinevad ärirahakoti integratsioonid eeldama esitluspäringute vorminguna DCQL-i, mitte Presentation Exchange'i.

Seotud mõisted

Korduma kippuvad küsimused

Mille poolest erineb DCQL DIF Presentation Exchange'ist?

Mõlemad kirjeldavad, mida kontrollija rahakotilt soovib, kuid DCQL on piiratud OpenID4VP-ga ja defineeritud otse selles spetsifikatsioonis, samas kui Presentation Exchange on eraldi DIF-i spetsifikatsioon, mis katab ka teisi protokolle. DCQL on teadlikult väiksem: selles puuduvad sisendkirjelduste grupid ja esitamisnõuded ning vormingupõhised piirangud, näiteks mdoc doctype või SD-JWT VC tüüp, väljendatakse otse päringuobjektis, mitte üldise JSON Schema filtri kaudu. EUDI Walleti ökosüsteem on OpenID4VP esitluste jaoks standardiseerinud DCQL-i.

Kas üks DCQL päring saab küsida rohkem kui ühte tõendit?

Jah. Massiiv credentials võib sisaldada mitut tõendipäringut, igaüks oma id-ga. Rahakott, milles on vasted kõigile kirjetele, tagastab iga kirje kohta ühe esitluse. Valikuline credential_sets objekt võib lisaks nõuda kindlaid kombinatsioone, näiteks lubada kas ainult äriregistri tõendit või äriregistri tõendit koos UBO deklaratsiooniga, ilma et omanikult peaks kaks korda küsima.

Millist probleemi lahendab claim_sets ühe tõendipäringu sees?

Tõendis ei ole alati kõiki väiteid, mida kontrollija soovib. claim_sets loetleb alternatiivsed väidete id-de grupid, millest igaüks rahuldaks päringu iseseisvalt, järjestatuna kõige eelistatumast kõige vähem eelistatuni. Rahakott valib esimese grupi, mille ta saab omaniku tegelikest väidetest täielikult rahuldada. Nii saab kontrollija küsida võimalusel täpset isikukoodi ja kasutada varuvariandina üldisemat kontrolli, näiteks üle 18 aasta vanuse lippu, ilma kahte eraldi päringut saatmata.

Kas DCQL on mõeldud ainult EUDI Walleti jaoks?

Ei. DCQL on osa OpenID4VP põhispetsifikatsioonist ja iga OpenID4VP teostus saab seda kasutada. EUDI Walleti ökosüsteem on selle silmapaistev kasutaja: Architecture and Reference Framework määrab OpenID4VP koos DCQL-iga esitlusmehhanismiks, mida usaldavad osapooled peavad toetama. Seetõttu on see eriti oluline Euroopa turu jaoks loodud rahakottide ja kontrollijate puhul.

Kas DCQL ise teostab valikulist avalikustamist?

Ei. DCQL kirjeldab ainult seda, mida küsitakse. See, kas rahakott saab avaldada täpselt need väited ja mitte midagi muud, sõltub tõendi vormingust: nii SD-JWT VC kui ka ISO mdoc toetavad väidete alamhulga avaldamist, nii et DCQL-i claims massiiv kasutab seda tuge. DCQL töötaks ka vormingu puhul, mis valikulist avalikustamist ei toeta, kuid siis peaks omanik isegi ühe väitega päringu rahuldamiseks avaldama kogu tõendi.

Allikad

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

See leht on informatiivne ega ole õigusnõuanne. Autoriteetsete juhiste saamiseks pöörduge otse OpenID Foundationi ja Euroopa Komisjoni poole.

Räägi meiega EUDI Walleti integratsioonist