WUA objašnjen: kako novčanik dokazuje izdavatelju da je autentičan
Wallet Unit Attestation, WUA, ono je što EUDI novčanik tijekom izdavanja pokazuje PID Provideru ili Attestation Provideru kako bi dokazao da je autentičan. To nije jedan dokument nego dva, oba potpisana od pružatelja novčanika: Wallet Instance Attestation (WIA) o aplikaciji novčanika i Key Attestation (KA) o sigurnoj pohrani ključeva uz koje će vjerodajnica biti vezana.
Problem koji WUA rješava
Izdavatelj koji novčaniku treba predati PID ili vjerodajnicu o registraciji tvrtke nema ugrađen način da razlikuje certificirani EUDI novčanik od izmijenjene aplikacije ili skripte koja ponavlja autorizacijski tijek. Ne može ni vidjeti nalazi li se ključ uz koji će vjerodajnica biti vezana u certificiranom sigurnom hardveru ili u običnoj pohrani iz koje bi se mogao kopirati.
WUA zatvara oba jaza. Pružatelj novčanika jamči za aplikaciju putem WIA-e, a za pohranu ključeva putem Key Attestation. Izdavatelj provjerava oboje prije izdavanja i nakon toga nastavlja provjeravati njihov status opoziva, pa može opozvati ono što je izdao ako se kasnije utvrdi da su novčanik ili pohrana njegovih ključeva kompromitirani.
WUA se koristi samo tijekom izdavanja. ARF zabranjuje jedinici novčanika da WIA ili Key Attestation predoči oslonjenoj strani, čime podaci o novčaniku ostaju izvan svakog predočavanja.
Sudionici i tko kome vjeruje
Uključeno je pet uloga, a samo četiri od njih ikada rukuju WUA-om. WSCD (Wallet Secure Cryptographic Device) ili spremište ključeva generira i čuva ključeve, pružatelj novčanika jamči za aplikaciju i ključeve, a izdavatelj se oslanja na to umjesto da sam procjenjuje novčanik.
Pružatelj novčanika
Potpisuje WIA-e i Key Attestation nakon provjere aplikacije i pohrane ključeva te vodi Status List za oboje
Jedinica novčanika
Tijekom izdavanja šalje izdavatelju WIA i Key Attestation te svaki koristi samo za jedno izdavanje
WSCD ili spremište ključeva
Generira i čuva privatne ključeve koje Key Attestation opisuje
PID Provider ili Attestation Provider
Provjerava WIA i Key Attestation, veže vjerodajnicu uz atestirani ključ i nastavlja provjeravati je li išta od toga opozvano
Oslonjena strana
Nikada ne prima WUA. Umjesto toga provjerava vjerodajnicu, njezino vezanje uz uređaj i status opoziva
Izdavatelji vjeruju WUA-u jer se certifikat za potpisivanje pružatelja novčanika, poslan u zaglavlju x5c, ulančava do sidra povjerenja na Trusted List za pružatelje novčanika. Sam Wallet Solution certificira tijelo za ocjenu sukladnosti, a WIA sadrži podatke o toj certifikaciji.
Dvije atestacije pod jednim imenom
TS3, EUDI tehnička specifikacija za WUA, dijeli atestaciju na dvije jer su aplikacija i pohrana ključeva različite stvari, koje se provjeravaju na različitim krajnjim točkama i opozivaju iz različitih razloga.
Wallet Instance Attestation (WIA)
- Atestira
- Cjelovitost Wallet Instance, odnosno aplikacije
- Šalje se
- Authorization Serveru, u Pushed Authorization Request i Token Request
- Trajanje
- Manje od 24 sata
- Opoziv
- client_status: status opoziva ove Wallet Instance
- Potrebno za
- Svako izdavanje, bez obzira na vezanje uz uređaj
Key Attestation (KA)
- Atestira
- Da su jedan ili više ključeva generirani u navedenom WSCD-u ili spremištu ključeva i da se ondje čuvaju, te koliko je ta pohrana otporna na napade
- Šalje se
- Credential Issueru, unutar proofs dijela Credential Request
- Trajanje
- Određuje ga pružatelj novčanika i može biti dulje od WIA-e
- Opoziv
- key_storage_status: status opoziva WSCD-a ili spremišta ključeva
- Potrebno za
- Samo vjerodajnice vezane uz uređaj, uključujući svaki PID
Oboje su JWT-ovi koje pružatelj novčanika potpisuje algoritmom ES256, ES384 ili ES512. Key Attestation koristi se samo za jedno izdavanje, a WIA se nikada ponovno ne koristi prema drugom izdavatelju, pa izdavatelji ne mogu povezati zahtjeve istog novčanika.
Kako jedinica novčanika pribavlja svoje WIA-e i Key Attestation
TS3 ovaj korak prepušta svakom pružatelju novčanika jer se odvija unutar jednog proizvoda novčanika. ARF od pružatelja novčanika zahtijeva samo da prije potpisivanja WIA-e provjeri cjelovitost aplikacije, a prije potpisivanja Key Attestation da provjeri nalaze li se atestirani privatni ključevi zaista u navedenom WSCD-u ili spremištu ključeva. Tipičan tijek, uz atestacije platforme poput Google Play Integrity ili Apple DeviceCheck kao dokaz, izgleda ovako.
1. Jedinica novčanika
Traži od WSCD-a ili spremišta ključeva da generira parove ključeva
2. WSCD ili spremište ključeva
Vraća javne ključeve, uz dokaz platforme o tome gdje su generirani
3. Pružatelj novčanika
Provjerava cjelovitost aplikacije i dokaz o ključevima, zatim potpisuje WIA-e i Key Attestation
4. Jedinica novčanika
Drži zalihu svježih WIA-a i Key Attestation te za svako izdavanje koristi novi
Što sadrže WIA i Key Attestation
Nijedna ne sadrži tvrdnju iss: izdavatelj prepoznaje pružatelja novčanika po certifikatu za potpisivanje u zaglavlju x5c. Primjeri u nastavku su dekodirani, a zaglavlje i sadržaj odvojeni su točkom.
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": "..." }
}
}| Polje | Što govori izdavatelju |
|---|---|
| typ / x5c | Da je riječ o atestaciji klijenta te lanac certifikata pružatelja novčanika za provjeru prema Trusted List |
| sub | Vrsta novčanika, ista za svaku instalaciju, pa se ne može koristiti za praćenje korisnika |
| wallet_name / wallet_version | Wallet Solution kako je naveden na Trusted List i njegova verzija |
| wallet_solution_certification_information | Tko je certificirao Wallet Solution; točan sadržaj još nije definiran |
| exp | Tehnički istek, manje od 24 sata nakon provjere cjelovitosti |
| client_status | Unos na Status List za ovu Wallet Instance i datum do kojeg ga pružatelj novčanika ažurira |
| cnf | Ključ kojim se potpisuje dokaz posjedovanja poslan zajedno s WIA-om |
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
}
}| Polje | Što govori izdavatelju |
|---|---|
| typ / x5c | Da je riječ o atestaciji ključa te lanac certifikata pružatelja novčanika za provjeru prema Trusted List |
| iat / exp | Kada je izdana i kada tehnički istječe |
| attested_keys | Javni ključevi čije je privatne ključeve generiralo i čuva WSCD ili spremište ključeva; više ključeva omogućuje skupno izdavanje |
| key_storage / user_authentication | Koliko su pohrana i autentifikacija korisnika koja otključava ključeve otporne na napade; WSCD je za oboje uvijek iso_18045_high |
| certification | Certifikacija WSCD-a ili spremišta ključeva, iz koje izdavatelj može zaključiti je li riječ o WSCD-u |
| key_storage_status | Unos na Status List za WSCD ili spremište ključeva i datum do kojeg ga pružatelj novčanika ažurira |
| nonce | c_nonce izdavatelja, prisutan samo kad se Key Attestation šalje kao attestation dokaz |
Kamo WUA putuje tijekom izdavanja putem OpenID4VCI
Dvije atestacije idu na različita mjesta. WIA autentificira novčanik kao OAuth klijenta na Authorization Serveru. Key Attestation ide Credential Issueru zajedno sa zahtjevom za samu vjerodajnicu.
Authorization Server prima WIA
- Potpis WIA-e ulančava se do Trusted List za pružatelje novčanika
- WIA nije istekla i Wallet Instance nije opozvana
- Dokaz posjedovanja potpisan je ključem iz tvrdnje cnf u WIA-i
Credential Issuer prima Key Attestation
- Potpis Key Attestation ulančava se do Trusted List za pružatelje novčanika
- Svježi c_nonce izdavatelja nalazi se u jwt dokazu ili u samoj Key Attestation
- WSCD ili spremište ključeva nije opozvano, a vjerodajnica je vezana uz jedan od attested_keys
Pushed Authorization Request s WIA-om
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 odgovara vrijednosti sub u WIA-i. Token Request nosi ista dva zaglavlja. Budući da Credential Issuer nikada ne vidi WIA, Authorization Server mora proslijediti njezin client_status, primjerice unutar pristupnog tokena.
Credential Request s 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]>"]
}
}Kod vrste dokaza attestation zahtjev umjesto toga sadrži "proofs": { "attestation": ["<Key Attestation JWT>"] }. Tada nema dokaza posjedovanja: jedinica novčanika prosljeđuje c_nonce izdavatelja pružatelju novčanika, koji ga stavlja u svježe potpisanu Key Attestation.
Životni ciklus WUA-a
WUA je namjerno kratkotrajan i jednokratan, ali informacije o opozivu iza njega nadžive sam token. Prve tri faze su rutinske; četvrta se događa samo kad nešto pođe po zlu.
1. Izdavanje
Pružatelj novčanika potpisuje WIA-e i Key Attestation nakon provjere cjelovitosti i pohrane ključeva
2. Jednokratna upotreba
Svaka služi za jedno izdavanje, pa jedinica novčanika stalno pribavlja nove
3. Ulančani opoziv
PID Provider najmanje svaka 24 sata ponovno provjerava status WIA-e i Key Attestation te opoziva PID ako je bilo koja od njih opozvana
4. Opoziv
Pružatelj novčanika opoziva Wallet Instance, primjerice nakon gubitka ili krađe, ili WSCD odnosno spremište ključeva sa sigurnosnom ranjivošću
Izvan ekosustava EUDI novčanika neki pružatelji novčanika izdaju atestacije novčanika vrlo kratkog trajanja bez ikakve reference na status, oslanjajući se na istek umjesto na opoziv; OpenID4VCI tvrdnju o statusu čini neobaveznom. TS3 to ne dopušta za EUDI novčanike. WIA ionako traje manje od 24 sata, no i WIA i Key Attestation moraju sadržavati referencu na status koju pružatelj novčanika održava najmanje 31 dan, jer je PID Provideri koriste za opoziv PID-ova dugo nakon izdavanja.
WUA, WIA i KA: što koji pojam znači
Terminologija se mijenjala kako su specifikacije sazrijevale. TS3 je WIA-u do verzije 1.1 nazivao Wallet App Attestation, a do verzije 1.5 koristio je WUA za ono što je danas Key Attestation. Stariji članci i nacrti ARF-a stoga pojmove koriste drugačije.
| Pojam | Što pokriva | Tko je prima |
|---|---|---|
| WUA | Krovni pojam za dvije atestacije u nastavku | PID Provideri i Attestation Provideri, samo tijekom izdavanja |
| WIA | Wallet Instance, odnosno aplikaciju | Authorization Server, u Pushed Authorization Request i Token Request |
| KA | WSCD ili spremište ključeva i ključeve koje čuva | Credential Issuer, u proofs dijelu Credential Request |
Povezani pojmovi
Često postavljana pitanja
Je li WUA isto što i Wallet Instance Attestation?
Ne. Od verzije 1.5 specifikacije TS3, WUA je krovni pojam za dvije atestacije: Wallet Instance Attestation (WIA), koja pokriva aplikaciju, i Key Attestation (KA), koja pokriva WSCD ili spremište ključeva u kojem su ključevi. Stariji dokumenti koriste WUA za ono što se danas zove Key Attestation, zbog čega se pojmovi često miješaju.
Vidi li provjeritelj ikada WUA?
Ne. ARF zahtjevi WUA_07 i WUA_24 dopuštaju jedinici novčanika da WIA ili Key Attestation predoči samo PID Provideru ili Attestation Provideru tijekom izdavanja, nikada oslonjenoj strani. Provjeritelj umjesto toga provjerava vjerodajnicu: njezin potpis, vezanje uz uređaj i status opoziva. Ako je novčanik iza PID-a opozvan, PID Provider opoziva PID unutar svog 24-satnog ciklusa provjere, a provjeritelj to vidi kroz vlastiti status PID-a.
Koliko dugo WUA vrijedi?
WIA istječe manje od 24 sata nakon što je pružatelj novčanika provjerio cjelovitost aplikacije. Key Attestation može vrijediti dulje, prema odluci pružatelja novčanika. Osim toga, svaka ima datum održavanja statusa, client_status.exp ili key_storage_status.exp, do kojeg pružatelj novčanika ažurira status opoziva. Jedinica novčanika uvijek mora moći predočiti atestaciju čiji je datum udaljen najmanje 31 dan, a PID mora isteći prije tog datuma.
Što se događa ako je jedinica novčanika kompromitirana prije nego što njezin WUA istekne?
Pružatelj novčanika opoziva Wallet Instance na svojoj Status List za WIA-e ili, kod ranjivosti određene vrste WSCD-a ili spremišta ključeva, unos na Status List za tu pohranu. PID Provider najmanje jednom svaka 24 sata provjerava status WIA-e i Key Attestation iza svakog PID-a koji je izdao i opoziva PID kad je bilo koja od njih opozvana. Attestation Provideri mogu učiniti isto. Novčanik iz ekosustava ne uklanja istek samog WUA-a, nego opoziv vjerodajnica koje su mu izdane.
Može li jedna Key Attestation pokriti više od jednog ključa?
Da. attested_keys može navesti nekoliko javnih ključeva iz istog WSCD-a ili spremišta ključeva, a tako funkcionira skupno izdavanje: izdavatelj svaku vjerodajnicu u skupu veže uz drugi ključ, a jedan potpis pružatelja novčanika pokriva sve njih. Kad Key Attestation putuje u jwt dokazu, jedinica novčanika taj dokaz potpisuje samo prvim ključem s popisa.
Izvori
Ova je stranica informativnog karaktera i ne predstavlja pravni savjet. Za mjerodavne smjernice obratite se izravno Europskoj komisiji i OpenID Foundationu.