Preskoči na glavni sadržaj

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

generiraj ključeve

2. WSCD ili spremište ključeva

Vraća javne ključeve, uz dokaz platforme o tome gdje su generirani

javni ključevi + dokaz

3. Pružatelj novčanika

Provjerava cjelovitost aplikacije i dokaz o ključevima, zatim potpisuje WIA-e i Key Attestation

WIA + KA

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 / x5cDa je riječ o atestaciji klijenta te lanac certifikata pružatelja novčanika za provjeru prema Trusted List
subVrsta novčanika, ista za svaku instalaciju, pa se ne može koristiti za praćenje korisnika
wallet_name / wallet_versionWallet Solution kako je naveden na Trusted List i njegova verzija
wallet_solution_certification_informationTko je certificirao Wallet Solution; točan sadržaj još nije definiran
expTehnički istek, manje od 24 sata nakon provjere cjelovitosti
client_statusUnos na Status List za ovu Wallet Instance i datum do kojeg ga pružatelj novčanika ažurira
cnfKljuč 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 / x5cDa je riječ o atestaciji ključa te lanac certifikata pružatelja novčanika za provjeru prema Trusted List
iat / expKada je izdana i kada tehnički istječe
attested_keysJavni 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_authenticationKoliko su pohrana i autentifikacija korisnika koja otključava ključeve otporne na napade; WSCD je za oboje uvijek iso_18045_high
certificationCertifikacija WSCD-a ili spremišta ključeva, iz koje izdavatelj može zaključiti je li riječ o WSCD-u
key_storage_statusUnos na Status List za WSCD ili spremište ključeva i datum do kojeg ga pružatelj novčanika ažurira
noncec_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

OAuth-Client-AttestationOAuth-Client-Attestation-PoP
  • 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

proofs.jwt[].key_attestationproofs.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 pokrivaTko je prima
WUAKrovni pojam za dvije atestacije u nastavkuPID Provideri i Attestation Provideri, samo tijekom izdavanja
WIAWallet Instance, odnosno aplikacijuAuthorization Server, u Pushed Authorization Request i Token Request
KAWSCD ili spremište ključeva i ključeve koje čuvaCredential 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

  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

Ova je stranica informativnog karaktera i ne predstavlja pravni savjet. Za mjerodavne smjernice obratite se izravno Europskoj komisiji i OpenID Foundationu.

Razgovarajte s nama o integraciji EUDI Wallet-a