Přejít na hlavní obsah

WUA vysvětlena: jak se peněženka prokazuje vydavateli

Wallet Unit Attestation, WUA, je to, co EUDI Wallet při vydávání ukáže PID Providerovi nebo Attestation Providerovi, aby prokázala, že je pravá. Nejde o jeden dokument, ale o dva, oba podepsané poskytovatelem peněženky: Wallet Instance Attestation (WIA) o aplikaci peněženky a Key Attestation (KA) o zabezpečeném úložišti klíčů, se kterými bude osvědčení svázáno.

Problém, který WUA řeší

Vydavatel, který se chystá předat peněžence PID nebo osvědčení o registraci společnosti, nemá vestavěný způsob, jak odlišit certifikovanou EUDI Wallet od upravené aplikace nebo skriptu, který přehrává autorizační proces. Nevidí ani to, zda klíč, se kterým bude osvědčení svázáno, leží v certifikovaném zabezpečeném hardwaru, nebo v běžném úložišti, odkud by se dal zkopírovat.

WUA uzavírá obě mezery. Poskytovatel peněženky se za aplikaci zaručuje prostřednictvím WIA a za úložiště klíčů prostřednictvím Key Attestation. Vydavatel obojí zkontroluje před vydáním a jejich stav odvolání sleduje i poté, takže může vydaná osvědčení odvolat, pokud se později ukáže, že peněženka nebo její úložiště klíčů byly kompromitovány.

WUA se používá pouze při vydávání. ARF zakazuje Wallet Unit předložit WIA nebo Key Attestation spoléhající se straně, takže údaje o peněžence se do žádné prezentace nedostanou.

Zúčastněné strany a kdo komu důvěřuje

Zapojeno je pět rolí a jen čtyři z nich s WUA kdy přijdou do styku. WSCD (Wallet Secure Cryptographic Device) nebo úložiště klíčů generuje a chrání klíče, poskytovatel peněženky se zaručuje za aplikaci a klíče a vydavatel se na to spoléhá, místo aby peněženku posuzoval sám.

Poskytovatel peněženky

Podepisuje WIA a Key Attestation po kontrole aplikace a úložiště klíčů a spravuje Status List pro obě

Wallet Unit

Při vydávání posílá vydavateli WIA a Key Attestation a každou z nich použije jen pro jedno vydání

WSCD nebo úložiště klíčů

Generuje a uchovává soukromé klíče, které Key Attestation popisuje

PID Provider nebo Attestation Provider

Ověří WIA a Key Attestation, sváže osvědčení s atestovaným klíčem a u obou dál sleduje odvolání

Spoléhající se strana

WUA nikdy nedostane. Místo toho kontroluje osvědčení, jeho vazbu na zařízení a stav odvolání

Vydavatelé WUA důvěřují, protože podpisový certifikát poskytovatele peněženky, odeslaný v hlavičce x5c, vede řetězem ke kotvě důvěry na Trusted List pro poskytovatele peněženek. Samotné Wallet Solution certifikuje subjekt posuzování shody a WIA nese informace o této certifikaci.

Dvě atestace pod jedním názvem

TS3, technická specifikace EUDI pro WUA, dělí atestaci na dvě, protože aplikace a úložiště klíčů jsou různé věci, které se kontrolují na různých endpointech a odvolávají z různých důvodů.

Wallet Instance Attestation (WIA)

Atestuje
Integritu Wallet Instance, tedy aplikace
Příjemce
Authorization Server, v Pushed Authorization Request a v Token Request
Životnost
Méně než 24 hodin
Odvolání
client_status: stav odvolání této Wallet Instance
Potřeba pro
Každé vydání, ať je osvědčení vázané na zařízení, nebo ne

Key Attestation (KA)

Atestuje
Že jeden nebo více klíčů bylo vygenerováno v konkrétním WSCD nebo úložišti klíčů a je v něm uloženo, a jak dobře toto úložiště odolává útokům
Příjemce
Credential Issuer, v části proofs požadavku Credential Request
Životnost
Určuje ji poskytovatel peněženky a může být delší než u WIA
Odvolání
key_storage_status: stav odvolání WSCD nebo úložiště klíčů
Potřeba pro
Pouze osvědčení vázaná na zařízení, včetně každého PID

Obě jsou JWT podepsané poskytovatelem peněženky pomocí ES256, ES384 nebo ES512. Key Attestation se použije jen pro jedno vydání a WIA se nikdy znovu nepoužije vůči jinému vydavateli, takže vydavatelé nemohou propojit požadavky ze stejné peněženky.

Jak Wallet Unit získává své WIA a Key Attestation

TS3 tento krok ponechává na každém poskytovateli peněženky, protože probíhá uvnitř jednoho produktu peněženky. ARF pouze vyžaduje, aby poskytovatel peněženky před podpisem WIA ověřil integritu aplikace a před podpisem Key Attestation ověřil, že atestované soukromé klíče jsou skutečně uloženy v uvedeném WSCD nebo úložišti klíčů. Typický postup, který jako důkaz využívá atestace platformy, například Google Play Integrity nebo Apple DeviceCheck, vypadá takto.

1. Wallet Unit

Požádá WSCD nebo úložiště klíčů o vygenerování párů klíčů

vygenerovat klíče

2. WSCD nebo úložiště klíčů

Vrátí veřejné klíče spolu s důkazem platformy o tom, kde byly vygenerovány

veřejné klíče + důkaz

3. Poskytovatel peněženky

Zkontroluje integritu aplikace a důkazy ke klíčům, poté podepíše WIA a Key Attestation

WIA + KA

4. Wallet Unit

Udržuje si zásobu čerstvých WIA a Key Attestation a pro každé vydání použije novou

Co obsahuje WIA a Key Attestation

Ani jedna nenese claim iss: vydavatel pozná poskytovatele peněženky podle podpisového certifikátu v hlavičce x5c. Níže uvedené příklady jsou dekódované, hlavička a payload jsou odděleny tečkou.

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": "..." }
  }
}
PoleCo sděluje vydavateli
typ / x5cŽe jde o atestaci klienta, a řetěz certifikátů poskytovatele peněženky pro kontrolu vůči Trusted List
subTyp peněženky, stejný pro každou instalaci, takže jej nelze použít ke sledování uživatele
wallet_name / wallet_versionWallet Solution tak, jak je uvedeno na Trusted List, a jeho verze
wallet_solution_certification_informationKdo Wallet Solution certifikoval; přesný obsah ještě není definován
expTechnické vypršení platnosti, méně než 24 hodin po kontrole integrity
client_statusZáznam Status List pro tuto Wallet Instance a datum, do kterého jej poskytovatel peněženky udržuje aktuální
cnfKlíč, kterým je podepsán důkaz držení odesílaný spolu s WIA

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
  }
}
PoleCo sděluje vydavateli
typ / x5cŽe jde o atestaci klíče, a řetěz certifikátů poskytovatele peněženky pro kontrolu vůči Trusted List
iat / expKdy byla vydána a kdy technicky vyprší její platnost
attested_keysVeřejné klíče, jejichž soukromé klíče WSCD nebo úložiště klíčů vygenerovalo a uchovává; více klíčů umožňuje dávkové vydávání
key_storage / user_authenticationJak dobře úložiště a autentizace uživatele, která klíče odemyká, odolávají útokům; WSCD má v obou případech vždy iso_18045_high
certificationCertifikace WSCD nebo úložiště klíčů, podle které vydavatel pozná, zda jde o WSCD
key_storage_statusZáznam Status List pro WSCD nebo úložiště klíčů a datum, do kterého jej poskytovatel peněženky udržuje aktuální
noncec_nonce vydavatele, přítomný pouze tehdy, když je Key Attestation odeslána jako důkaz typu attestation

Kudy WUA putuje při vydávání přes OpenID4VCI

Obě atestace míří na různá místa. WIA autentizuje peněženku jako OAuth klienta na Authorization Server. Key Attestation jde na Credential Issuer spolu s požadavkem na samotné osvědčení.

Authorization Server přijme WIA

OAuth-Client-AttestationOAuth-Client-Attestation-PoP
  • Podpis WIA vede řetězem k Trusted List pro poskytovatele peněženek
  • Platnost WIA nevypršela a Wallet Instance není odvolaná
  • Důkaz držení je podepsán klíčem uvedeným v claimu cnf ve WIA

Credential Issuer přijme Key Attestation

proofs.jwt[].key_attestationproofs.attestation
  • Podpis Key Attestation vede řetězem k Trusted List pro poskytovatele peněženek
  • Čerstvý c_nonce vydavatele je v důkazu jwt nebo přímo v Key Attestation
  • WSCD nebo úložiště klíčů není odvoláno a osvědčení je svázáno s jedním z attested_keys

Pushed Authorization Request s 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 odpovídá hodnotě sub ve WIA. Token Request nese stejné dvě hlavičky. Protože Credential Issuer WIA nikdy nevidí, musí mu Authorization Server předat její client_status, například uvnitř přístupového tokenu.

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

U typu důkazu attestation nese požadavek místo toho "proofs": { "attestation": ["<Key Attestation JWT>"] }. Důkaz držení pak chybí: Wallet Unit předá c_nonce vydavatele poskytovateli peněženky, který jej vloží do nově podepsané Key Attestation.

Životní cyklus WUA

WUA je záměrně krátkodobá a jednorázová, ale informace o odvolání, které za ní stojí, přetrvávají déle než samotný token. První tři fáze jsou běžné, čtvrtá nastává jen tehdy, když se něco pokazí.

1. Vydání

Poskytovatel peněženky podepisuje WIA a Key Attestation po kontrole integrity a úložiště klíčů

2. Jednorázové použití

Každá slouží jen pro jedno vydání, takže si Wallet Unit průběžně obstarává nové

3. Řetězení odvolání

PID Provider nejméně každých 24 hodin znovu zkontroluje stav WIA a Key Attestation a PID odvolá, pokud je kterákoli z nich odvolaná

4. Odvolání

Poskytovatel peněženky odvolá Wallet Instance, například po ztrátě nebo krádeži, nebo WSCD či úložiště klíčů s bezpečnostní zranitelností

Mimo ekosystém EUDI Wallet někteří poskytovatelé peněženek vydávají atestace peněženky s velmi krátkou životností a zcela bez odkazu na stav, takže místo odvolání spoléhají na vypršení platnosti; OpenID4VCI činí claim status volitelným. TS3 to u EUDI Wallet nepovoluje. WIA sice žije méně než 24 hodin, přesto musí WIA i Key Attestation nést odkaz na stav, který poskytovatel peněženky udržuje nejméně 31 dní, protože PID Provideři jej používají k odvolání PID dlouho po vydání.

WUA, WIA a KA: co který pojem znamená

Terminologie se měnila spolu s tím, jak specifikace dozrávaly. TS3 až do verze 1.1 označovala WIA jako Wallet App Attestation a až do verze 1.5 používala WUA pro to, co je dnes Key Attestation. Starší články a návrhy ARF proto tyto pojmy používají jinak.

PojemNa co se vztahujeKdo ji přijímá
WUASouhrnný pojem pro dvě níže uvedené atestacePID Provider a Attestation Provider, pouze při vydávání
WIAWallet Instance, tedy aplikaciAuthorization Server, v Pushed Authorization Request a Token Request
KAWSCD nebo úložiště klíčů a klíče, které obsahujeCredential Issuer, v části proofs požadavku Credential Request

Související pojmy

Často kladené otázky

Je WUA totéž co Wallet Instance Attestation?

Ne. Od verze 1.5 TS3 je WUA souhrnný pojem pro dvě atestace: Wallet Instance Attestation (WIA), která se vztahuje na aplikaci, a Key Attestation (KA), která se vztahuje na WSCD nebo úložiště klíčů, v němž jsou klíče uloženy. Starší dokumenty používají WUA pro to, čemu se dnes říká Key Attestation, a proto se tyto pojmy často zaměňují.

Vidí ověřovatel někdy WUA?

Ne. Požadavky ARF WUA_07 a WUA_24 dovolují Wallet Unit předložit WIA nebo Key Attestation pouze PID Providerovi nebo Attestation Providerovi při vydávání, nikdy spoléhající se straně. Ověřovatel místo toho kontroluje osvědčení: jeho podpis, vazbu na zařízení a stav odvolání. Pokud je peněženka, ke které PID patří, odvolána, PID Provider odvolá PID v rámci svého 24hodinového kontrolního cyklu a ověřovatel to uvidí ve stavu samotného PID.

Jak dlouho je WUA platná?

Platnost WIA vyprší méně než 24 hodin poté, co poskytovatel peněženky zkontroloval integritu aplikace. Key Attestation může platit déle, podle uvážení poskytovatele peněženky. Nezávisle na tom nese každá z nich datum údržby stavu, client_status.exp nebo key_storage_status.exp, do kterého poskytovatel peněženky udržuje stav odvolání aktuální. Wallet Unit musí být vždy schopna předložit takovou, jejíž datum je vzdáleno nejméně 31 dní, a platnost PID musí skončit před tímto datem.

Co se stane, když je Wallet Unit kompromitována dříve, než vyprší platnost její WUA?

Poskytovatel peněženky odvolá Wallet Instance na svém Status List pro WIA, nebo v případě zranitelnosti určitého typu WSCD či úložiště klíčů odvolá záznam Status List pro toto úložiště. PID Provider nejméně jednou za 24 hodin kontroluje stav WIA a Key Attestation u každého PID, který vydal, a PID odvolá, pokud je kterákoli z nich odvolaná. Attestation Provider může postupovat stejně. Peněženku z ekosystému nevyřadí vypršení samotné WUA, ale odvolání osvědčení, která jí byla vydána.

Může jedna Key Attestation pokrývat více než jeden klíč?

Ano. attested_keys může obsahovat několik veřejných klíčů ze stejného WSCD nebo úložiště klíčů, a právě tak funguje dávkové vydávání: vydavatel sváže každé osvědčení v dávce s jiným klíčem a jeden podpis poskytovatele peněženky pokrývá všechny. Když Key Attestation putuje v důkazu jwt, Wallet Unit tento důkaz podepíše pouze prvním klíčem ze seznamu.

Zdroje

  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

Tato stránka má informativní charakter a nepředstavuje právní poradenství. Závazné informace získáte přímo od Evropské komise a OpenID Foundation.

Promluvte si s námi o integraci EUDI Wallet