Praleisti ir pereiti prie pagrindinio turinio

WUA paaiškinta: kaip piniginė įrodo savo tikrumą išdavėjui

Wallet Unit Attestation (WUA) yra tai, ką EUDI piniginė išdavimo metu parodo PID Provider arba Attestation Provider, kad įrodytų esanti tikra. Tai ne vienas dokumentas, o du, abu pasirašyti Piniginės teikėjo: Wallet Instance Attestation (WIA) apie piniginės programėlę ir Key Attestation (KA) apie saugią saugyklą raktų, su kuriais bus susietas kredencialas.

Kokią problemą sprendžia WUA

Išdavėjas, ketinantis perduoti piniginei PID ar įmonės registracijos kredencialą, neturi integruoto būdo atskirti sertifikuotą EUDI piniginę nuo modifikuotos programėlės ar scenarijaus, pakartojančio autorizacijos srautą. Jis taip pat nemato, ar raktas, su kuriuo bus susietas kredencialas, yra sertifikuotoje saugioje aparatinėje įrangoje, ar įprastoje saugykloje, iš kurios jį galima nukopijuoti.

WUA užpildo abi spragas. Piniginės teikėjas laiduoja už programėlę per WIA, o už raktų saugyklą per Key Attestation. Išdavėjas abi patikrina prieš išduodamas ir vėliau toliau tikrina jų panaikinimo būseną, todėl gali panaikinti tai, ką išdavė, jei vėliau paaiškėja, kad piniginė ar jos raktų saugykla pažeista.

WUA naudojama tik išdavimo metu. ARF draudžia Piniginės vienetui pateikti WIA ar Key Attestation Relying Party, todėl piniginės duomenys nepatenka į jokią pateiktį.

Dalyviai ir kas kuo pasitiki

Dalyvauja penki vaidmenys, tačiau tik keturi iš jų kada nors turi reikalą su WUA. WSCD (Wallet Secure Cryptographic Device) arba raktų saugykla generuoja ir saugo raktus, Piniginės teikėjas laiduoja už programėlę ir raktus, o išdavėjas remiasi tuo, užuot pats vertinęs piniginę.

Piniginės teikėjas

Patikrinęs programėlę ir raktų saugyklą, pasirašo WIA ir Key Attestation bei tvarko abiejų Status List

Piniginės vienetas

Išdavimo metu siunčia išdavėjui WIA ir Key Attestation, kiekvieną naudodamas tik vienam išdavimui

WSCD arba raktų saugykla

Generuoja ir saugo privačiuosius raktus, kuriuos aprašo Key Attestation

PID Provider arba Attestation Provider

Patikrina WIA ir Key Attestation, susieja kredencialą su atestuotu raktu ir toliau tikrina, ar nė viena iš jų nepanaikinta

Relying Party

Niekada negauna WUA. Vietoj to tikrina kredencialą, jo susiejimą su įrenginiu ir jo panaikinimo būseną

Išdavėjai pasitiki WUA todėl, kad Piniginės teikėjo pasirašymo sertifikatas, siunčiamas x5c antraštėje, grandine veda į pasitikėjimo inkarą, esantį Piniginės teikėjų Trusted List. Patį Wallet Solution sertifikuoja atitikties vertinimo įstaiga, o WIA pateikia šią sertifikavimo informaciją.

Dvi atestacijos vienu pavadinimu

TS3, EUDI techninė WUA specifikacija, atestaciją skaido į dvi, nes programėlė ir raktų saugykla yra skirtingi dalykai, tikrinami skirtinguose galiniuose taškuose ir panaikinami dėl skirtingų priežasčių.

Wallet Instance Attestation (WIA)

Patvirtina
Wallet Instance, t. y. programėlės, vientisumą
Siunčiama
Authorization Server, per Pushed Authorization Request ir Token Request
Galiojimas
Mažiau nei 24 valandos
Panaikinimas
client_status: šio Wallet Instance panaikinimo būsena
Reikalinga
Kiekvienam išdavimui, nesvarbu, ar kredencialas susietas su įrenginiu

Key Attestation (KA)

Patvirtina
Kad vienas ar daugiau raktų buvo sugeneruoti ir yra laikomi nurodytame WSCD arba raktų saugykloje, ir kiek ši saugykla atspari atakoms
Siunčiama
Credential Issuer, Credential Request lauke proofs
Galiojimas
Nustato Piniginės teikėjas, gali būti ilgesnis nei WIA
Panaikinimas
key_storage_status: WSCD arba raktų saugyklos panaikinimo būsena
Reikalinga
Tik su įrenginiu susietiems kredencialams, įskaitant kiekvieną PID

Abi yra JWT, kuriuos Piniginės teikėjas pasirašo ES256, ES384 arba ES512. Key Attestation naudojama tik vienam išdavimui, o WIA niekada pakartotinai nenaudojama kitam išdavėjui, todėl išdavėjai negali susieti užklausų iš tos pačios piniginės.

Kaip Piniginės vienetas gauna savo WIA ir Key Attestation

TS3 šį žingsnį palieka kiekvienam Piniginės teikėjui, nes jis vyksta viename piniginės produkte. ARF tik reikalauja, kad Piniginės teikėjas prieš pasirašydamas WIA patikrintų programėlės vientisumą, o prieš pasirašydamas Key Attestation patikrintų, kad atestuoti privatieji raktai tikrai yra nurodytame WSCD arba raktų saugykloje. Įprastas srautas, kuriame kaip įrodymai naudojamos platformos atestacijos, pavyzdžiui, Google Play Integrity ar Apple DeviceCheck, atrodo taip.

1. Piniginės vienetas

Paprašo WSCD arba raktų saugyklos sugeneruoti raktų poras

generuoti raktus

2. WSCD arba raktų saugykla

Grąžina viešuosius raktus kartu su platformos įrodymais, kur jie buvo sugeneruoti

viešieji raktai + įrodymai

3. Piniginės teikėjas

Patikrina programėlės vientisumą ir raktų įrodymus, tada pasirašo WIA ir Key Attestation

WIA + KA

4. Piniginės vienetas

Turi naujų WIA ir Key Attestation atsargą ir kiekvienam išdavimui naudoja naują

Ką turi WIA ir Key Attestation

Nė viena neturi iss teiginio: išdavėjas Piniginės teikėją nustato pagal pasirašymo sertifikatą x5c antraštėje. Toliau pateikti pavyzdžiai yra dekoduoti, antraštė ir naudingoji apkrova atskirtos tašku.

Wallet Instance Attestation

{
  "typ": "oauth-client-attestation+jwt",
  "alg": "ES256",
  "x5c": ["MIIC..."]
}.{
  "sub": "https://wallet.example.eu",
  "wallet_name": "ExampleWallet-mobile",
  "wallet_version": "2.3.0",
  "wallet_link": "https://wallet.example.eu/about",
  "wallet_solution_certification_information": "https://wallet.example.eu/certification/2-3-0",
  "exp": 1789329600,
  "client_status": {
    "status": {
      "status_list": { "idx": 48213, "uri": "https://wallet.example.eu/status/wia/17" }
    },
    "exp": 1791936000
  },
  "cnf": {
    "jwk": { "kty": "EC", "crv": "P-256", "x": "...", "y": "..." }
  }
}
LaukasKą tai pasako išdavėjui
typ / x5cKad tai kliento atestacija, ir Piniginės teikėjo sertifikatų grandinė, tikrinama pagal Trusted List
subPiniginės tipas, vienodas visoms įdiegtims, todėl juo negalima sekti naudotojo
wallet_name / wallet_versionWallet Solution, kaip nurodyta Trusted List, ir jo versija
wallet_solution_certification_informationKas sertifikavo Wallet Solution; tikslus turinys dar turi būti apibrėžtas
expTechninis galiojimo pabaigos laikas, mažiau nei 24 valandos po vientisumo patikros
client_statusŠio Wallet Instance įrašas Status List ir data, iki kurios Piniginės teikėjas jį atnaujina
cnfRaktas, kuriuo pasirašomas kartu su WIA siunčiamas turėjimo įrodymas

Key Attestation

{
  "typ": "key-attestation+jwt",
  "alg": "ES256",
  "x5c": ["MIIC..."]
}.{
  "iat": 1789257600,
  "exp": 1791936000,
  "certification": "https://wallet.example.eu/certification/wscd/secure-element",
  "key_storage": ["iso_18045_high"],
  "user_authentication": ["iso_18045_high"],
  "attested_keys": [
    { "kty": "EC", "crv": "P-256", "x": "...", "y": "..." },
    { "kty": "EC", "crv": "P-256", "x": "...", "y": "..." }
  ],
  "key_storage_status": {
    "status": {
      "status_list": { "idx": 3, "uri": "https://wallet.example.eu/status/ka/1" }
    },
    "exp": 1794614400
  }
}
LaukasKą tai pasako išdavėjui
typ / x5cKad tai rakto atestacija, ir Piniginės teikėjo sertifikatų grandinė, tikrinama pagal Trusted List
iat / expKada ji buvo išduota ir kada techniškai baigiasi jos galiojimas
attested_keysViešieji raktai, kurių privačiuosius raktus sugeneravo ir saugo WSCD arba raktų saugykla; keli raktai leidžia paketinį išdavimą
key_storage / user_authenticationKiek saugykla ir raktus atrakinanti naudotojo autentifikacija atsparios atakoms; WSCD abiem atvejais visada yra iso_18045_high
certificationWSCD arba raktų saugyklos sertifikavimas, pagal kurį išdavėjas gali nustatyti, ar tai WSCD
key_storage_statusWSCD arba raktų saugyklos įrašas Status List ir data, iki kurios Piniginės teikėjas jį atnaujina
nonceIšdavėjo c_nonce, esantis tik tada, kai Key Attestation siunčiama kaip attestation įrodymas

Kur keliauja WUA per OpenID4VCI išdavimą

Dvi atestacijos keliauja į skirtingas vietas. WIA autentifikuoja piniginę kaip OAuth klientą Authorization Server. Key Attestation kartu su pačio kredencialo užklausa keliauja į Credential Issuer.

Authorization Server gauna WIA

OAuth-Client-AttestationOAuth-Client-Attestation-PoP
  • WIA parašas grandine veda į Piniginės teikėjų Trusted List
  • WIA galiojimas nepasibaigęs, o Wallet Instance nepanaikintas
  • Turėjimo įrodymas pasirašytas raktu iš WIA cnf teiginio

Credential Issuer gauna Key Attestation

proofs.jwt[].key_attestationproofs.attestation
  • Key Attestation parašas grandine veda į Piniginės teikėjų Trusted List
  • Naujas išdavėjo c_nonce yra jwt įrodyme arba pačioje Key Attestation
  • WSCD arba raktų saugykla nepanaikinta, o kredencialas susietas su vienu iš attested_keys

Pushed Authorization Request su WIA

POST /par HTTP/1.1
Host: issuer.example.eu
Content-Type: application/x-www-form-urlencoded
OAuth-Client-Attestation: <WIA JWT>
OAuth-Client-Attestation-PoP: <PoP JWT signed with the WIA cnf key>

response_type=code
&client_id=https%3A%2F%2Fwallet.example.eu
&scope=company_registration
&code_challenge=<S256 challenge>
&code_challenge_method=S256
&redirect_uri=<wallet redirect URI>

client_id sutampa su WIA sub. Token Request turi tas pačias dvi antraštes. Kadangi Credential Issuer niekada nemato WIA, Authorization Server turi perduoti jos client_status toliau, pavyzdžiui, prieigos žetone.

Credential Request su Key Attestation

POST /credential HTTP/1.1
Host: issuer.example.eu
Authorization: DPoP <access_token>
DPoP: <DPoP proof JWT>
Content-Type: application/json

{
  "credential_configuration_id": "company_registration",
  "proofs": {
    "jwt": ["<proof JWT: Key Attestation in its key_attestation header, signed with attested_keys[0]>"]
  }
}

Naudojant attestation įrodymo tipą, užklausoje vietoj to yra "proofs": { "attestation": ["<Key Attestation JWT>"] }. Tuomet turėjimo įrodymo nėra: Piniginės vienetas perduoda išdavėjo c_nonce Piniginės teikėjui, kuris jį įrašo į naujai pasirašytą Key Attestation.

WUA gyvavimo ciklas

WUA sąmoningai yra trumpalaikė ir vienkartinė, tačiau už jos esanti panaikinimo informacija gyvuoja ilgiau nei pats žetonas. Pirmi trys etapai yra įprasti; ketvirtas įvyksta tik tada, kai kas nors nutinka ne taip.

1. Išdavimas

Piniginės teikėjas pasirašo WIA ir Key Attestation po vientisumo ir raktų saugyklos patikrų

2. Vienkartinis naudojimas

Kiekviena skirta vienam išdavimui, todėl Piniginės vienetas nuolat gauna naujų

3. Grandininis panaikinimas

PID Provider bent kas 24 valandas iš naujo tikrina WIA ir Key Attestation būseną ir panaikina PID, jei kuri nors iš jų panaikinta

4. Panaikinimas

Piniginės teikėjas panaikina Wallet Instance, pavyzdžiui, praradus ar pavogus įrenginį, arba WSCD ar raktų saugyklą, turinčią saugumo spragą

Už EUDI Wallet ekosistemos ribų kai kurie piniginių teikėjai išduoda labai trumpai galiojančias piniginės atestacijas visai be būsenos nuorodos ir remiasi galiojimo pabaiga, o ne panaikinimu; OpenID4VCI būsenos teiginį palieka neprivalomą. TS3 EUDI piniginėms to neleidžia. WIA ir taip galioja mažiau nei 24 valandas, tačiau tiek WIA, tiek Key Attestation privalo turėti būsenos nuorodą, kurią Piniginės teikėjas palaiko bent 31 dieną, nes PID Provider ją naudoja PID panaikinti ilgai po išdavimo.

WUA, WIA ir KA: ką reiškia kiekvienas terminas

Terminija keitėsi bręstant specifikacijoms. Iki 1.1 versijos TS3 WIA vadino Wallet App Attestation, o iki 1.5 versijos WUA vadino tai, kas dabar yra Key Attestation. Todėl senesniuose straipsniuose ir ARF projektuose terminai vartojami kitaip.

TerminasKą apimaKas ją gauna
WUABendrinis terminas dviem toliau aprašytoms atestacijomsPID Provider ir Attestation Provider, tik išdavimo metu
WIAWallet Instance, t. y. programėlęAuthorization Server, per Pushed Authorization Request ir Token Request
KAWSCD arba raktų saugyklą ir joje laikomus raktusCredential Issuer, Credential Request lauke proofs

Susiję terminai

Dažnai užduodami klausimai

Ar WUA yra tas pats kas Wallet Instance Attestation?

Ne. Nuo TS3 1.5 versijos WUA yra bendrinis dviejų atestacijų terminas: Wallet Instance Attestation (WIA), apimančios programėlę, ir Key Attestation (KA), apimančios raktus laikantį WSCD arba raktų saugyklą. Senesniuose dokumentuose WUA vadinama tai, kas dabar vadinama Key Attestation, todėl šie terminai dažnai painiojami.

Ar tikrintojas kada nors mato WUA?

Ne. ARF reikalavimai WUA_07 ir WUA_24 leidžia Piniginės vienetui pateikti WIA arba Key Attestation tik PID Provider arba Attestation Provider išdavimo metu, bet niekada Relying Party. Vietoj to tikrintojas tikrina kredencialą: jo parašą, susiejimą su įrenginiu ir panaikinimo būseną. Jei piniginė, kuriai išduotas PID, panaikinama, PID Provider per savo 24 valandų tikrinimo ciklą panaikina PID, o tikrintojas tai mato pagal paties PID būseną.

Kiek laiko galioja WUA?

WIA galiojimas baigiasi praėjus mažiau nei 24 valandoms nuo tada, kai Piniginės teikėjas patikrino programėlės vientisumą. Key Attestation Piniginės teikėjo nuožiūra gali galioti ilgiau. Be to, kiekviena turi būsenos palaikymo datą, client_status.exp arba key_storage_status.exp, iki kurios Piniginės teikėjas atnaujina panaikinimo būseną. Piniginės vienetas visada turi galėti pateikti tokią atestaciją, kurios data yra ne anksčiau kaip po 31 dienos, o PID galiojimas turi baigtis anksčiau už tą datą.

Kas atsitinka, jei Piniginės vienetas pažeidžiamas dar prieš pasibaigiant jo WUA galiojimui?

Piniginės teikėjas panaikina Wallet Instance savo WIA Status List, o esant spragai tam tikro tipo WSCD ar raktų saugykloje, panaikina tos saugyklos įrašą Status List. PID Provider bent kartą per 24 valandas tikrina kiekvieno savo išduoto PID WIA ir Key Attestation būseną ir panaikina PID, jei kuri nors iš jų panaikinta. Attestation Provider gali daryti tą patį. Piniginę iš ekosistemos pašalina ne pačios WUA galiojimo pabaiga, o jai išduotų kredencialų panaikinimas.

Ar viena Key Attestation gali apimti daugiau nei vieną raktą?

Taip. attested_keys gali išvardyti kelis to paties WSCD ar raktų saugyklos viešuosius raktus. Taip veikia paketinis išdavimas: išdavėjas kiekvieną paketo kredencialą susieja su skirtingu raktu, o vienas Piniginės teikėjo parašas apima juos visus. Kai Key Attestation siunčiama jwt įrodyme, Piniginės vienetas tą įrodymą pasirašo tik pirmuoju sąrašo raktu.

Šaltiniai

  1. TS3: Wallet Unit Attestations used in issuance of PID and Attestations
  2. EUDI Wallet Architecture and Reference Framework
  3. OpenID for Verifiable Credential Issuance 1.0
  4. OpenID4VC High Assurance Interoperability Profile 1.0
  5. OAuth 2.0 Attestation-Based Client Authentication
  6. Token Status List

Šis puslapis yra informacinio pobūdžio ir nėra teisinė konsultacija. Dėl autoritetingų rekomendacijų kreipkitės tiesiogiai į Europos Komisiją ir OpenID Foundation.

Susisiekite dėl EUDI Wallet integracijos