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
2. WSCD arba raktų saugykla
Grąžina viešuosius raktus kartu su platformos įrodymais, kur jie buvo sugeneruoti
3. Piniginės teikėjas
Patikrina programėlės vientisumą ir raktų įrodymus, tada pasirašo WIA ir Key Attestation
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": "..." }
}
}| Laukas | Ką tai pasako išdavėjui |
|---|---|
| typ / x5c | Kad tai kliento atestacija, ir Piniginės teikėjo sertifikatų grandinė, tikrinama pagal Trusted List |
| sub | Piniginės tipas, vienodas visoms įdiegtims, todėl juo negalima sekti naudotojo |
| wallet_name / wallet_version | Wallet Solution, kaip nurodyta Trusted List, ir jo versija |
| wallet_solution_certification_information | Kas sertifikavo Wallet Solution; tikslus turinys dar turi būti apibrėžtas |
| exp | Techninis 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 |
| cnf | Raktas, 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
}
}| Laukas | Ką tai pasako išdavėjui |
|---|---|
| typ / x5c | Kad tai rakto atestacija, ir Piniginės teikėjo sertifikatų grandinė, tikrinama pagal Trusted List |
| iat / exp | Kada ji buvo išduota ir kada techniškai baigiasi jos galiojimas |
| attested_keys | Viešieji raktai, kurių privačiuosius raktus sugeneravo ir saugo WSCD arba raktų saugykla; keli raktai leidžia paketinį išdavimą |
| key_storage / user_authentication | Kiek saugykla ir raktus atrakinanti naudotojo autentifikacija atsparios atakoms; WSCD abiem atvejais visada yra iso_18045_high |
| certification | WSCD arba raktų saugyklos sertifikavimas, pagal kurį išdavėjas gali nustatyti, ar tai WSCD |
| key_storage_status | WSCD arba raktų saugyklos įrašas Status List ir data, iki kurios Piniginės teikėjas jį atnaujina |
| nonce | Iš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
- 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
- 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.
| Terminas | Ką apima | Kas ją gauna |
|---|---|---|
| WUA | Bendrinis terminas dviem toliau aprašytoms atestacijoms | PID Provider ir Attestation Provider, tik išdavimo metu |
| WIA | Wallet Instance, t. y. programėlę | Authorization Server, per Pushed Authorization Request ir Token Request |
| KA | WSCD arba raktų saugyklą ir joje laikomus raktus | Credential 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
Šis puslapis yra informacinio pobūdžio ir nėra teisinė konsultacija. Dėl autoritetingų rekomendacijų kreipkitės tiesiogiai į Europos Komisiją ir OpenID Foundation.