WUA selitettynä: miten lompakko todistaa aitoutensa myöntäjälle
Wallet Unit Attestation, WUA, on se, minkä EUDI Wallet näyttää PID Providerille tai Attestation Providerille myöntämisen aikana todistaakseen olevansa aito. Se ei ole yksi asiakirja vaan kaksi, ja lompakon tarjoaja allekirjoittaa molemmat: Wallet Instance Attestation (WIA) koskee lompakkosovellusta, ja Key Attestation (KA) koskee niiden avainten suojattua säilytystä, joihin credential sidotaan.
Ongelma, jonka WUA ratkaisee
Myöntäjällä, joka on antamassa PID:n tai yritysrekisteröinnin credentialin lompakolle, ei ole sisäänrakennettua tapaa erottaa sertifioitua EUDI Walletia muokatusta sovelluksesta tai valtuutusvuota toistavasta skriptistä. Se ei myöskään näe, onko avain, johon credential sidotaan, sertifioidussa suojatussa laitteistossa vai tavallisessa tallennustilassa, josta sen voisi kopioida.
WUA sulkee molemmat aukot. Lompakon tarjoaja takaa sovelluksen WIA:lla ja avainten säilytyksen Key Attestationilla. Myöntäjä tarkistaa molemmat ennen myöntämistä ja seuraa niiden kumoamistilaa myös jälkikäteen, joten se voi kumota myöntämänsä, jos lompakon tai sen avainten säilytyksen havaitaan myöhemmin vaarantuneen.
WUA:ta käytetään vain myöntämisen aikana. ARF kieltää lompakkoyksikköä esittämästä WIA:ta tai Key Attestationia luottavalle osapuolelle, mikä pitää lompakon tiedot poissa jokaisesta esityksestä.
Osapuolet ja kuka luottaa keneen
Mukana on viisi roolia, ja vain neljä niistä käsittelee koskaan WUA:ta. WSCD (Wallet Secure Cryptographic Device) tai avainsäilö luo ja vartioi avaimet, lompakon tarjoaja takaa sovelluksen ja avaimet, ja myöntäjä luottaa tähän sen sijaan, että arvioisi lompakon itse.
Lompakon tarjoaja
Allekirjoittaa WIA:t ja Key Attestationit tarkistettuaan sovelluksen ja avainten säilytyksen sekä ylläpitää kummankin Status Listejä
Lompakkoyksikkö
Lähettää myöntäjälle WIA:n ja Key Attestationin myöntämisen aikana ja käyttää kutakin vain yhteen myöntämiseen
WSCD tai avainsäilö
Luo ja säilyttää yksityiset avaimet, joita Key Attestation kuvaa
PID Provider tai Attestation Provider
Tarkistaa WIA:n ja Key Attestationin, sitoo credentialin todennettuun avaimeen ja seuraa jatkuvasti kummankin kumoamistilaa
Luottava osapuoli
Ei koskaan saa WUA:ta. Se tarkistaa sen sijaan credentialin, sen laitesidonnan ja sen kumoamistilan
Myöntäjät luottavat WUA:han, koska lompakon tarjoajan allekirjoitusvarmenne, joka lähetetään x5c-otsakkeessa, ketjuutuu luottamusankkuriin lompakon tarjoajien Trusted Listissä. Itse lompakkoratkaisun sertifioi vaatimustenmukaisuuden arviointilaitos, ja WIA sisältää nämä sertifiointitiedot.
Kaksi todennusta yhden nimen alla
TS3, WUA:ita koskeva EUDI:n tekninen määrittely, jakaa todennuksen kahtia, koska sovellus ja avainten säilytys ovat eri asioita: ne tarkistetaan eri rajapinnoissa ja kumotaan eri syistä.
Wallet Instance Attestation (WIA)
- Todistaa
- Lompakkoinstanssin eli sovelluksen eheyden
- Vastaanottaja
- Authorization Server, Pushed Authorization Requestissa ja Token Requestissa
- Elinikä
- Alle 24 tuntia
- Kumoaminen
- client_status: tämän lompakkoinstanssin kumoamistila
- Tarvitaan
- Jokaisessa myöntämisessä, laitesidonnaisessa tai ei
Key Attestation (KA)
- Todistaa
- Että yksi tai useampi avain on luotu nimetyssä WSCD:ssä tai avainsäilössä ja säilytetään siellä, sekä kuinka hyvin säilytys kestää hyökkäyksiä
- Vastaanottaja
- Credential Issuer, Credential Requestin proofs-kentän sisällä
- Elinikä
- Lompakon tarjoajan valitsema, ja voi olla pidempi kuin WIA:n
- Kumoaminen
- key_storage_status: WSCD:n tai avainsäilön kumoamistila
- Tarvitaan
- Vain laitesidonnaiset credentialit, mukaan lukien jokainen PID
Molemmat ovat lompakon tarjoajan ES256-, ES384- tai ES512-algoritmilla allekirjoittamia JWT:itä. Key Attestationia käytetään vain yhteen myöntämiseen, eikä WIA:ta koskaan käytetä uudelleen toista myöntäjää kohtaan, joten myöntäjät eivät voi yhdistää saman lompakon pyyntöjä toisiinsa.
Miten lompakkoyksikkö saa WIA:nsa ja Key Attestationinsa
TS3 jättää tämän vaiheen kunkin lompakon tarjoajan päätettäväksi, koska se tapahtuu yhden lompakkotuotteen sisällä. ARF edellyttää vain, että lompakon tarjoaja tarkistaa sovelluksen eheyden ennen WIA:n allekirjoittamista ja varmistaa ennen Key Attestationin allekirjoittamista, että todennetut yksityiset avaimet todella ovat nimetyssä WSCD:ssä tai avainsäilössä. Tyypillinen kulku, jossa näyttönä käytetään alustan todennuksia, kuten Google Play Integrity tai Apple DeviceCheck, näyttää tältä.
1. Lompakkoyksikkö
Pyytää WSCD:tä tai avainsäilöä luomaan avainpareja
2. WSCD tai avainsäilö
Palauttaa julkiset avaimet sekä alustan näytön siitä, missä ne luotiin
3. Lompakon tarjoaja
Tarkistaa sovelluksen eheyden ja avaimia koskevan näytön ja allekirjoittaa sitten WIA:t ja Key Attestationit
4. Lompakkoyksikkö
Pitää varastossa tuoreita WIA:ita ja Key Attestationeita ja käyttää uutta jokaisessa myöntämisessä
Mitä WIA ja Key Attestation sisältävät
Kummassakaan ei ole iss-väitettä: myöntäjä tunnistaa lompakon tarjoajan x5c-otsakkeen allekirjoitusvarmenteesta. Alla olevat esimerkit on purettu, ja otsake ja hyötykuorma on erotettu pisteellä.
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": "..." }
}
}| Kenttä | Mitä se kertoo myöntäjälle |
|---|---|
| typ / x5c | Että kyseessä on clientin todennus, sekä lompakon tarjoajan varmenneketju, joka tarkistetaan Trusted Listiä vasten |
| sub | Lompakon tyyppi, sama jokaisessa asennuksessa, joten sillä ei voi seurata käyttäjää |
| wallet_name / wallet_version | Lompakkoratkaisu sellaisena kuin se on Trusted Listissä, sekä sen versio |
| wallet_solution_certification_information | Kuka lompakkoratkaisun sertifioi; tarkka sisältö on vielä määrittelemättä |
| exp | Tekninen vanhentuminen, alle 24 tuntia eheystarkistuksen jälkeen |
| client_status | Tämän lompakkoinstanssin Status List -merkintä sekä päivämäärä, johon asti lompakon tarjoaja pitää sen ajan tasalla |
| cnf | Avain, joka allekirjoittaa WIA:n mukana lähetettävän hallussapidon todisteen |
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
}
}| Kenttä | Mitä se kertoo myöntäjälle |
|---|---|
| typ / x5c | Että kyseessä on avaintodennus, sekä lompakon tarjoajan varmenneketju, joka tarkistetaan Trusted Listiä vasten |
| iat / exp | Milloin se myönnettiin ja milloin se teknisesti vanhenee |
| attested_keys | Julkiset avaimet, joiden yksityiset avaimet WSCD tai avainsäilö on luonut ja säilyttää; useat avaimet mahdollistavat eräajomyöntämisen |
| key_storage / user_authentication | Kuinka hyvin säilytys ja avaimet avaava käyttäjän todennus kestävät hyökkäyksiä; WSCD on aina iso_18045_high molemmissa |
| certification | WSCD:n tai avainsäilön sertifiointi, josta myöntäjä näkee, onko kyseessä WSCD |
| key_storage_status | WSCD:n tai avainsäilön Status List -merkintä sekä päivämäärä, johon asti lompakon tarjoaja pitää sen ajan tasalla |
| nonce | Myöntäjän c_nonce, mukana vain, kun Key Attestation lähetetään attestation-proofina |
Missä WUA kulkee OpenID4VCI-myöntämisen aikana
Kaksi todennusta menevät eri paikkoihin. WIA todentaa lompakon OAuth-clientina Authorization Serverille. Key Attestation menee Credential Issuerille itse credentialia koskevan pyynnön mukana.
Authorization Server vastaanottaa WIA:n
- WIA:n allekirjoitus ketjuutuu lompakon tarjoajien Trusted Listiin
- WIA ei ole vanhentunut, eikä lompakkoinstanssia ole kumottu
- Hallussapidon todiste on allekirjoitettu WIA:n cnf-väitteessä olevalla avaimella
Credential Issuer vastaanottaa Key Attestationin
- Key Attestationin allekirjoitus ketjuutuu lompakon tarjoajien Trusted Listiin
- Myöntäjän tuore c_nonce on jwt-proofissa tai itse Key Attestationissa
- WSCD:tä tai avainsäilöä ei ole kumottu, ja credential sidotaan yhteen attested_keys-avaimista
Pushed Authorization Request ja 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 vastaa WIA:n sub-arvoa. Token Request sisältää samat kaksi otsaketta. Koska Credential Issuer ei koskaan näe WIA:ta, Authorization Serverin on välitettävä sen client_status eteenpäin, esimerkiksi access tokenin sisällä.
Credential Request ja 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]>"]
}
}Kun käytetään attestation-proof-tyyppiä, pyyntö sisältää sen sijaan "proofs": { "attestation": ["<Key Attestation JWT>"] }. Tällöin hallussapidon todistetta ei ole: lompakkoyksikkö välittää myöntäjän c_nonce-arvon lompakon tarjoajalle, joka lisää sen juuri allekirjoitettuun Key Attestationiin.
WUA:n elinkaari
WUA on tarkoituksella lyhytikäinen ja kertakäyttöinen, mutta sen taustalla oleva kumoamistieto elää pidempään kuin itse token. Kolme ensimmäistä vaihetta ovat rutiinia; neljäs tapahtuu vain, kun jokin menee pieleen.
1. Myöntäminen
Lompakon tarjoaja allekirjoittaa WIA:t ja Key Attestationit eheys- ja avainten säilytystarkistustensa jälkeen
2. Kertakäyttöinen
Kukin palvelee yhtä myöntämistä, joten lompakkoyksikkö hankkii jatkuvasti uusia
3. Kumoamisen ketjutus
PID Provider tarkistaa WIA:n ja Key Attestationin tilan uudelleen vähintään 24 tunnin välein ja kumoaa PID:n, jos jompikumpi on kumottu
4. Kumoaminen
Lompakon tarjoaja kumoaa lompakkoinstanssin esimerkiksi katoamisen tai varkauden jälkeen, tai WSCD:n tai avainsäilön, jossa on tietoturvahaavoittuvuus
EUDI Wallet -ekosysteemin ulkopuolella jotkin lompakon tarjoajat myöntävät lompakkotodennuksia, joiden elinikä on hyvin lyhyt ja joissa ei ole lainkaan tilaviittausta, jolloin ne luottavat vanhentumiseen kumoamisen sijaan; OpenID4VCI tekee status-väitteestä valinnaisen. TS3 ei salli tätä EUDI Walletille. WIA elää jo valmiiksi alle 24 tuntia, mutta sekä WIA:n että Key Attestationin on sisällettävä tilaviittaus, jota lompakon tarjoaja ylläpitää vähintään 31 päivää, koska PID Providerit käyttävät sitä PID:iden kumoamiseen pitkään myöntämisen jälkeen.
WUA, WIA ja KA: mitä kukin termi tarkoittaa
Terminologia muuttui määrittelyjen kypsyessä. TS3 kutsui WIA:ta nimellä Wallet App Attestation versioon 1.1 asti ja käytti nimeä WUA nykyisestä Key Attestationista versioon 1.5 asti. Vanhemmat artikkelit ja ARF-luonnokset käyttävät siksi termejä eri tavoin.
| Termi | Mitä se kattaa | Kuka sen vastaanottaa |
|---|---|---|
| WUA | Yläkäsite alla oleville kahdelle todennukselle | PID Providerit ja Attestation Providerit, vain myöntämisen aikana |
| WIA | Lompakkoinstanssi eli sovellus | Authorization Server, Pushed Authorization Requestissa ja Token Requestissa |
| KA | WSCD tai avainsäilö ja sen säilyttämät avaimet | Credential Issuer, Credential Requestin proofs-kentässä |
Liittyvät termit
Usein kysytyt kysymykset
Onko WUA sama asia kuin Wallet Instance Attestation?
Ei. TS3:n versiosta 1.5 lähtien WUA on kahden todennuksen yläkäsite: Wallet Instance Attestation (WIA) kattaa sovelluksen, ja Key Attestation (KA) kattaa avaimia säilyttävän WSCD:n tai avainsäilön. Vanhemmissa asiakirjoissa WUA tarkoittaa sitä, mitä nykyään kutsutaan Key Attestationiksi, minkä vuoksi termit sekoitetaan usein.
Näkeekö todentaja koskaan WUA:ta?
Ei. ARF-vaatimukset WUA_07 ja WUA_24 sallivat lompakkoyksikön esittää WIA:n tai Key Attestationin vain PID Providerille tai Attestation Providerille myöntämisen aikana, ei koskaan luottavalle osapuolelle. Todentaja tarkistaa sen sijaan credentialin: sen allekirjoituksen, laitesidonnan ja kumoamistilan. Jos PID:n taustalla oleva lompakko kumotaan, PID Provider kumoaa PID:n 24 tunnin tarkistussyklinsä aikana, ja todentaja näkee sen PID:n omasta tilasta.
Kuinka kauan WUA on voimassa?
WIA vanhenee alle 24 tuntia sen jälkeen, kun lompakon tarjoaja tarkisti sovelluksen eheyden. Key Attestation voi olla voimassa pidempään lompakon tarjoajan harkinnan mukaan. Lisäksi kummassakin on tilan ylläpitopäivämäärä, client_status.exp tai key_storage_status.exp, johon asti lompakon tarjoaja pitää kumoamistilan ajan tasalla. Lompakkoyksikön on aina pystyttävä esittämään todennus, jonka päivämäärään on vähintään 31 päivää, ja PID:n on vanhennuttava ennen tätä päivämäärää.
Mitä tapahtuu, jos lompakkoyksikkö vaarantuu ennen kuin sen WUA vanhenee?
Lompakon tarjoaja kumoaa lompakkoinstanssin WIA:iden Status Listissä tai, jos haavoittuvuus koskee tietyntyyppistä WSCD:tä tai avainsäilöä, kyseisen säilytyksen Status List -merkinnän. PID Provider tarkistaa jokaisen myöntämänsä PID:n taustalla olevan WIA:n ja Key Attestationin tilan vähintään kerran 24 tunnissa ja kumoaa PID:n, kun jompikumpi on kumottu. Attestation Providerit voivat toimia samoin. Lompakkoa ei poista WUA:n oma vanhentuminen vaan sille myönnettyjen credentialien kumoaminen.
Voiko yksi Key Attestation kattaa useamman kuin yhden avaimen?
Kyllä. attested_keys voi listata useita saman WSCD:n tai avainsäilön julkisia avaimia, ja juuri näin eräajomyöntäminen toimii: myöntäjä sitoo erän jokaisen credentialin eri avaimeen, ja yksi lompakon tarjoajan allekirjoitus kattaa ne kaikki. Kun Key Attestation kulkee jwt-proofissa, lompakkoyksikkö allekirjoittaa proofin vain listan ensimmäisellä avaimella.
Lähteet
Tämä sivu on tiedoksianto eikä muodosta oikeudellista neuvontaa. Luotettavaa ohjeistusta varten ota yhteyttä suoraan Euroopan komissioon ja OpenID Foundationiin.