Liigu põhisisu juurde

WUA lahti seletatuna: kuidas rahakott end väljastajale tõendab

Wallet Unit Attestation ehk WUA on see, mida EUDI Wallet näitab väljastamise ajal PID Provider'ile või Attestation Provider'ile, et tõendada oma ehtsust. See ei ole üks dokument, vaid kaks, mõlemad rahakoti pakkuja allkirjastatud: Wallet Instance Attestation (WIA) rahakotirakenduse kohta ja Key Attestation (KA) nende võtmete turvalise hoiu kohta, millega tõend seotakse.

Probleem, mille WUA lahendab

Väljastajal, kes on andmas rahakotile PID-i või ettevõtte registreerimistõendit, pole sisseehitatud võimalust eristada sertifitseeritud EUDI Wallet'it muudetud rakendusest või skriptist, mis kordab volitusvoogu. Samuti ei näe ta, kas võti, millega tõend seotakse, asub sertifitseeritud turvalises riistvaras või tavalises hoidlas, kust selle saaks kopeerida.

WUA sulgeb mõlemad lüngad. Rahakoti pakkuja tagab rakenduse WIA kaudu ja võtmehoidla Key Attestation'i kaudu. Väljastaja kontrollib mõlemat enne väljastamist ja jälgib ka hiljem nende tühistamisolekut, et saaks väljastatu tühistada, kui rahakott või selle võtmehoidla osutub hiljem kompromiteerituks.

WUA-d kasutatakse ainult väljastamisel. ARF keelab rahakoti üksusel esitada WIA-d või Key Attestation'it tuginevale osapoolele, nii et rahakoti andmed ei jõua ühtegi esitlusse.

Osalised ja kes keda usaldab

Kaasatud on viis rolli ja ainult neli neist puutuvad kunagi WUA-ga kokku. WSCD (Wallet Secure Cryptographic Device) või võtmehoidla genereerib ja kaitseb võtmeid, rahakoti pakkuja tagab rakenduse ja võtmete ehtsuse ning väljastaja tugineb sellele, selle asemel et rahakotti ise hinnata.

Rahakoti pakkuja

Allkirjastab WIA-d ja Key Attestation'id pärast rakenduse ja võtmehoidla kontrollimist ning haldab mõlema Status List'e

Rahakoti üksus

Saadab väljastamise ajal väljastajale WIA ja Key Attestation'i ning kasutab kumbagi ainult üheks väljastamiseks

WSCD või võtmehoidla

Genereerib ja hoiab privaatvõtmeid, mida Key Attestation kirjeldab

PID Provider või Attestation Provider

Kontrollib WIA-d ja Key Attestation'it, seob tõendi atesteeritud võtmega ning jälgib edaspidi mõlema tühistamist

Tuginev osapool

Ei saa kunagi WUA-d. Selle asemel kontrollib ta tõendit, selle seadmega sidumist ja tühistamisolekut

Väljastajad usaldavad WUA-d, sest rahakoti pakkuja allkirjastamissertifikaat, mis saadetakse x5c päises, on ahelas usaldusankruga rahakoti pakkujate Trusted List'il. Wallet Solution'i enda sertifitseerib vastavushindamisasutus ja WIA kannab seda sertifitseerimisteavet.

Kaks atesteeringut ühe nime all

TS3, EUDI tehniline spetsifikatsioon WUA-de kohta, jagab atesteeringu kaheks, sest rakendus ja võtmehoidla on eri asjad, mida kontrollitakse eri otspunktides ja tühistatakse eri põhjustel.

Wallet Instance Attestation (WIA)

Tõendab
Wallet Instance'i ehk rakenduse terviklust
Saaja
Authorization Server, Pushed Authorization Request'is ja Token Request'is
Eluiga
Alla 24 tunni
Tühistamine
client_status: selle Wallet Instance'i tühistamisolek
Vajalik
Iga väljastamise jaoks, olgu tõend seadmega seotud või mitte

Key Attestation (KA)

Tõendab
Et üks või mitu võtit on genereeritud nimetatud WSCD-s või võtmehoidlas ja neid hoitakse seal, ning kui hästi see hoidla rünnakutele vastu peab
Saaja
Credential Issuer, Credential Request'i proofs osas
Eluiga
Määrab rahakoti pakkuja, võib olla pikem kui WIA oma
Tühistamine
key_storage_status: WSCD või võtmehoidla tühistamisolek
Vajalik
Ainult seadmega seotud tõendite jaoks, sealhulgas iga PID

Mõlemad on JWT-d, mille rahakoti pakkuja on allkirjastanud algoritmiga ES256, ES384 või ES512. Key Attestation'it kasutatakse ainult üheks väljastamiseks ja WIA-d ei kasutata kunagi uuesti teise väljastaja juures, nii et väljastajad ei saa sama rahakoti päringuid omavahel siduda.

Kuidas rahakoti üksus saab oma WIA-d ja Key Attestation'id

TS3 jätab selle sammu iga rahakoti pakkuja otsustada, sest see toimub ühe rahakotitoote sees. ARF nõuab ainult, et rahakoti pakkuja kontrolliks enne WIA allkirjastamist rakenduse terviklust ning enne Key Attestation'i allkirjastamist seda, et atesteeritud privaatvõtmed asuvad tõesti nimetatud WSCD-s või võtmehoidlas. Tüüpiline voog, mis kasutab tõendina platvormi atesteeringuid, näiteks Google Play Integrity või Apple DeviceCheck, näeb välja selline.

1. Rahakoti üksus

Palub WSCD-l või võtmehoidlal genereerida võtmepaarid

genereeri võtmed

2. WSCD või võtmehoidla

Tagastab avalikud võtmed koos platvormi tõendiga selle kohta, kus need genereeriti

avalikud võtmed + tõend

3. Rahakoti pakkuja

Kontrollib rakenduse terviklust ja võtmete tõendeid, seejärel allkirjastab WIA-d ja Key Attestation'id

WIA + KA

4. Rahakoti üksus

Hoiab varu värskeid WIA-sid ja Key Attestation'eid ning kasutab iga väljastamise jaoks uut

Mida WIA ja Key Attestation sisaldavad

Kummalgi pole iss väidet: väljastaja tuvastab rahakoti pakkuja x5c päises oleva allkirjastamissertifikaadi järgi. Allolevad näited on dekodeeritud, päis ja sisu on eraldatud punktiga.

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": "..." }
  }
}
VäliMida see väljastajale ütleb
typ / x5cEt tegu on kliendi atesteeringuga, ning rahakoti pakkuja sertifikaadiahel, mida kontrollida Trusted List'i vastu
subRahakoti tüüp, mis on igal paigaldusel sama, nii et selle abil ei saa kasutajat jälgida
wallet_name / wallet_versionWallet Solution nii, nagu see on Trusted List'il kirjas, ja selle versioon
wallet_solution_certification_informationKes Wallet Solution'i sertifitseeris; täpne sisu on veel määratlemata
expTehniline aegumine, vähem kui 24 tundi pärast tervikluse kontrolli
client_statusStatus List'i kanne selle Wallet Instance'i jaoks ja kuupäev, milleni rahakoti pakkuja seda ajakohasena hoiab
cnfVõti, millega allkirjastatakse koos WIA-ga saadetav valdusetõend

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
  }
}
VäliMida see väljastajale ütleb
typ / x5cEt tegu on võtme atesteeringuga, ning rahakoti pakkuja sertifikaadiahel, mida kontrollida Trusted List'i vastu
iat / expMillal see väljastati ja millal see tehniliselt aegub
attested_keysAvalikud võtmed, mille privaatvõtmed WSCD või võtmehoidla genereeris ja mida ta hoiab; mitu võtit võimaldavad partiiväljastamist
key_storage / user_authenticationKui hästi hoidla ja võtmeid avav kasutaja autentimine rünnakutele vastu peavad; WSCD on mõlemas alati iso_18045_high
certificationWSCD või võtmehoidla sertifitseerimine, mille põhjal väljastaja saab aru, kas tegu on WSCD-ga
key_storage_statusStatus List'i kanne WSCD või võtmehoidla jaoks ja kuupäev, milleni rahakoti pakkuja seda ajakohasena hoiab
nonceVäljastaja c_nonce, olemas ainult siis, kui Key Attestation saadetakse attestation-tüüpi tõendina

Kuhu WUA OpenID4VCI väljastamise ajal liigub

Kaks atesteeringut lähevad eri kohtadesse. WIA autendib rahakoti OAuth kliendina Authorization Server'is. Key Attestation läheb Credential Issuer'ile koos päringuga tõendi enda saamiseks.

Authorization Server saab WIA

OAuth-Client-AttestationOAuth-Client-Attestation-PoP
  • WIA allkiri on ahelas rahakoti pakkujate Trusted List'iga
  • WIA ei ole aegunud ja Wallet Instance ei ole tühistatud
  • Valdusetõend on allkirjastatud võtmega, mis on WIA cnf väites

Credential Issuer saab Key Attestation'i

proofs.jwt[].key_attestationproofs.attestation
  • Key Attestation'i allkiri on ahelas rahakoti pakkujate Trusted List'iga
  • Väljastaja värske c_nonce on jwt tõendis või Key Attestation'is endas
  • WSCD või võtmehoidla ei ole tühistatud ja tõend seotakse ühega attested_keys võtmetest

Pushed Authorization Request koos WIA-ga

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 vastab WIA sub väärtusele. Token Request kannab samu kahte päist. Kuna Credential Issuer ei näe WIA-d kunagi, peab Authorization Server selle client_status väärtuse edasi andma, näiteks pääsuloa sees.

Credential Request koos Key Attestation'iga

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

Tõenditüübi attestation korral kannab päring selle asemel "proofs": { "attestation": ["<Key Attestation JWT>"] }. Sel juhul valdusetõendit ei ole: rahakoti üksus edastab väljastaja c_nonce'i rahakoti pakkujale, kes lisab selle värskelt allkirjastatud Key Attestation'isse.

WUA elutsükkel

WUA on meelega lühiealine ja ühekordne, kuid selle taga olev tühistamisteave elab tokenist endast kauem. Esimesed kolm etappi on rutiinsed; neljas toimub ainult siis, kui midagi läheb valesti.

1. Väljastamine

Rahakoti pakkuja allkirjastab WIA-d ja Key Attestation'id pärast tervikluse ja võtmehoidla kontrolli

2. Ühekordne kasutus

Igaüks teenib ühte väljastamist, nii et rahakoti üksus hangib pidevalt uusi

3. Tühistamise ahel

PID Provider kontrollib WIA ja Key Attestation'i olekut uuesti vähemalt iga 24 tunni järel ja tühistab PID-i, kui kumbki neist on tühistatud

4. Tühistamine

Rahakoti pakkuja tühistab Wallet Instance'i, näiteks kaotuse või varguse järel, või turvanõrkusega WSCD või võtmehoidla

Väljaspool EUDI Wallet ökosüsteemi väljastavad mõned rahakoti pakkujad väga lühikese elueaga rahakoti atesteeringuid üldse ilma olekuviiteta, tuginedes tühistamise asemel aegumisele; OpenID4VCI teeb olekuväite valikuliseks. TS3 ei luba seda EUDI Wallet'ite puhul. WIA elab niigi alla 24 tunni, kuid nii WIA kui ka Key Attestation peavad kandma olekuviidet, mida rahakoti pakkuja hoiab vähemalt 31 päeva, sest PID Provider'id kasutavad seda PID-ide tühistamiseks kaua pärast väljastamist.

WUA, WIA ja KA: mis termin mida tähendab

Terminoloogia muutus spetsifikatsioonide küpsemise käigus. TS3 nimetas WIA-d kuni versioonini 1.1 Wallet App Attestation'iks ja kasutas kuni versioonini 1.5 terminit WUA selle kohta, mis on nüüd Key Attestation. Seetõttu kasutavad vanemad artiklid ja ARF-i mustandid termineid teisiti.

TerminMida see katabKes selle saab
WUAKatustermin kahe allpool toodud atesteeringu jaoksPID Provider'id ja Attestation Provider'id, ainult väljastamise ajal
WIAWallet Instance ehk rakendusAuthorization Server, Pushed Authorization Request'is ja Token Request'is
KAWSCD või võtmehoidla ja selles hoitavad võtmedCredential Issuer, Credential Request'i proofs osas

Seotud mõisted

Korduma kippuvad küsimused

Kas WUA on sama mis Wallet Instance Attestation?

Ei. Alates TS3 versioonist 1.5 on WUA katustermin kahele atesteeringule: Wallet Instance Attestation (WIA), mis katab rakenduse, ja Key Attestation (KA), mis katab võtmeid hoidva WSCD või võtmehoidla. Vanemates dokumentides tähendab WUA seda, mida praegu nimetatakse Key Attestation'iks, mistõttu termineid aetakse sageli segi.

Kas kontrollija näeb kunagi WUA-d?

Ei. ARF-i nõuded WUA_07 ja WUA_24 lubavad rahakoti üksusel esitada WIA-d või Key Attestation'it ainult PID Provider'ile või Attestation Provider'ile väljastamise ajal, mitte kunagi tuginevale osapoolele. Kontrollija kontrollib selle asemel tõendit: selle allkirja, seadmega sidumist ja tühistamisolekut. Kui PID-i taga olev rahakott tühistatakse, tühistab PID Provider PID-i oma 24-tunnise kontrollitsükli jooksul ning kontrollija näeb seda PID-i enda oleku kaudu.

Kui kaua WUA kehtib?

WIA aegub vähem kui 24 tundi pärast seda, kui rahakoti pakkuja rakenduse terviklust kontrollis. Key Attestation võib kehtida kauem, rahakoti pakkuja äranägemisel. Lisaks kannab kumbki oleku hoolduskuupäeva, client_status.exp või key_storage_status.exp, milleni rahakoti pakkuja hoiab tühistamisoleku ajakohasena. Rahakoti üksus peab alati suutma esitada sellise, mille kuupäevani on vähemalt 31 päeva, ja PID peab aeguma enne seda kuupäeva.

Mis juhtub, kui rahakoti üksus kompromiteeritakse enne selle WUA aegumist?

Rahakoti pakkuja tühistab Wallet Instance'i oma WIA Status List'is või, kui turvanõrkus puudutab teatud tüüpi WSCD-d või võtmehoidlat, selle hoidla kande Status List'is. PID Provider kontrollib iga väljastatud PID-i taga oleva WIA ja Key Attestation'i olekut vähemalt kord 24 tunni jooksul ja tühistab PID-i, kui kumbki on tühistatud. Attestation Provider'id võivad teha sama. Rahakotti ei eemalda WUA enda aegumine, vaid sellele väljastatud tõendite tühistamine.

Kas üks Key Attestation saab katta rohkem kui ühte võtit?

Jah. attested_keys võib loetleda mitu sama WSCD või võtmehoidla avalikku võtit ja nii toimibki partiiväljastamine: väljastaja seob iga partii tõendi eri võtmega ning üks rahakoti pakkuja allkiri katab need kõik. Kui Key Attestation liigub jwt tõendis, allkirjastab rahakoti üksus selle tõendi ainult loendi esimese võtmega.

Allikad

  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

See leht on informatiivne ega kujuta endast õigusnõustamist. Autoriteetse juhise saamiseks pöörduge otse Euroopa Komisjoni ja OpenID Foundationi poole.

Rääkige meiega EUDI Wallet integratsioonist