eIDAS 2.0 a EUDI Wallet: Co vývojář potřebuje vědět
Nová evropská digitální identita dostává podobu: s nařízením eIDAS 2.0 (EU 2024/1183) a spuštěním peněženky digitální identity Evropské unie, vývojáři musí ovládat Verifiable Credentials, OpenID4VC, SD-JWT a nové toky ověřování. Kompletní technický průvodce k implementaci integraci s EUDI Wallet do jejích služeb.
Regulační kontext: Od eIDAS 1.0 k eIDAS 2.0
Nařízení eIDAS 1.0 (EU 910/2014) položila základy interoperability systémů digitální identity v Evropské unii, ukázaly se však zjevná omezení: dobrovolné přijetí členskými státy, toky SAML 2.0, které nejsou příliš vhodné pro mobilní svět, a absence digitální peněženky standardizované pro občany. O deset let později nařízení EU 2024/1183 — formálně známý jako eIDAS 2.0 — vstoupil v platnost a 20. května 2024 přepisování pravidel hry.
Mezi nejdůležitější novinky pro vývojáře patří: povinnost pro všechny členské státy vydat a European Union Digital Identity Wallet (EUDI Wallet) do roku 2026, zavedení Elektronická osvědčení o atributech (EAA), koncept Kvalifikovaná elektronická atestace atributů (QEAA), a povinnost spoléhajících se stran (RP) v regulovaných odvětvích přijmout peněženku do roku 2027.
Časová osa regulace eIDAS 2.0
- 20. května 2024 – Vstup v platnost nařízení EU 2024/1183
- 2025 – Zveřejňování technických prováděcích aktů (ARF, protokoly)
- 2026 – Všechny státy EU musí svým občanům nabízet peněženky EUDI
- 2027 – Spoléhající se strany v regulovaných odvětvích, které jsou povinny přijmout peněženku EUDI
Architektura peněženky EUDI: Základní komponenty
Referenční architektura peněženky EUDI je definovánaArchitektura a referenční rámec (ARF), technická dokumentace vedená Evropskou komisí. Systém se skládá ze čtyř hlavních vrstev:
1. Vrstva emitenta – kdo vydává pověření
The Emitenti jsou subjekty oprávněné vydávat ověřitelné certifikáty. Existují dvě hlavní kategorie:
- Poskytovatelé PID: vydávají osobní identifikační údaje (PID), což je základní identifikační doklad vydávaný státem (ekvivalent digitálního dokladu totožnosti).
- Poskytovatelé atestací: vydávají EAA (Electronic Attribute Atestations) — například řidičský průkaz, vzdělání, zdravotní průkaz, profesní kvalifikaci.
Standardní protokol pro vydání je OpenID4VCI (OpenID pro ověřitelné vydání pověření), která rozšiřuje tok OAuth 2.0 o vyhrazené koncové body pro vyžádání a vydání pověření.
// Esempio: Token Request per OpenID4VCI
// POST /token
{
"grant_type": "urn:ietf:params:oauth:grant-type:pre-authorized_code",
"pre-authorized_code": "SplxlOBeZQQYbYS6WxSbIA",
"user_pin": "493536"
}
// Risposta con Access Token
{
"access_token": "eyJraWQiOiJrZXktMSJ9...",
"token_type": "bearer",
"expires_in": 86400,
"c_nonce": "tZignsnFbp",
"c_nonce_expires_in": 86400
}
// Credential Request
// POST /credential
// Authorization: Bearer eyJraWQiOiJrZXktMSJ9...
{
"format": "vc+sd-jwt",
"credential_definition": {
"type": ["VerifiableCredential", "PersonIdentificationData"]
},
"proof": {
"proof_type": "jwt",
"jwt": "eyJraWQiOiJrZXktMiIsInR5cCI6Im9wZW5pZDR2Y2ktcHJvb2Yrand..."
}
}
2. Vrstva peněženky — Občanská peněženka
Il EUDI peněženka je to aplikace (mobilní nebo webová), kterou občan využívá k přijímání, ukládání a předkládání svých přihlašovacích údajů. Musí být certifikován podle bezpečnostních standardů definovaných prováděcími zákony (EUCC - EU Cybersecurity Certification Scheme for Common Criteria). Mezi klíčové vlastnosti patří:
- Zabezpečená správa kryptografických klíčů (hardwarově zálohovaná, pokud je k dispozici)
- Podpora pro SD-JWT VC (Selective Disclosure JWT Verifiable Credentials)
- Podpora ISO 18013-5 (mdoc) pro profil mobilního řidičského průkazu
- Prezentace přiblížení přes NFC/BLE (pro fyzické ovládání)
- Vzdálená prezentace přes prohlížeč (HTTPS přesměrování)
3. Vrstva ověřovatele/spoléhající se strany – kdo obdrží pověření
I Spoléhající se strany (RP) — také nazývané Verifiers v ekosystému VC — jsou služby, které vyžadují ověření nebo ověření vlastností občana. Protokol k odevzdání je OpenID4VP (OpenID pro ověřitelné prezentace), často se používá v kombinaci s SIOPv2 (vlastně vydaný poskytovatel OpenID v2) pro sebesuverénní toky.
4. Infrastruktura důvěry — řetězec důvěry
Peněženka EUDI je založena na a Evropská infrastruktura veřejného klíče (PKI). koordinuje Komise. Každý emitent musí být registrován vRegistr důvěryhodných emitentů EUDIWa Ověřovatelé se musí zaregistrovat jako spoléhající strany. Dojde k ověření pověření ověřením digitálního podpisu Emitenta prostřednictvím certifikátů X.509 v3 ukotvených na národní PKI členského státu.
SD-JWT: Selektivní zveřejnění a soukromí
Jedním z nejdůležitějších technických aspektů eIDAS 2.0 je přijetí SD-JWT (Selective Disclosure JSON Web Tokens), definované v odpovídajícím RFC IETF. Základní myšlenkou je umožnit držiteli odhalit pouze atributy nezbytné pro danou transakci, bez vystavení celého dokladu totožnosti.
Princip minimalizace dat
S SD-JWT může občan prokázat, že je plnoletý, aniž by prozradil přesné datum narození. Nebo prokázat, že bydlíte v určité obci bez zobrazit celou adresu. To je srdce principu GDPR minimalizace dat aplikovat na digitální identitu.
SD-JWT se skládá ze tří částí:
// Struttura SD-JWT
// 1. JWT Header + Payload (con disclosures hashate)
{
"iss": "https://issuer.example.gov.it",
"sub": "user_12345",
"iat": 1710000000,
"exp": 1741536000,
"_sd_alg": "sha-256",
"_sd": [
"YIk1uXcv7d9yT8rX4mZ1aA", // hash di "given_name": "Mario"
"kp3uX9vZ2d8rT7yX5mZ3bB", // hash di "family_name": "Rossi"
"Xp4uX8vZ3d9rT6yX6mZ4cC", // hash di "birthdate": "1990-01-15"
"Zp5uX7vZ4d0rT5yX7mZ5dD" // hash di "age_over_18": true
]
}
// 2. Disclosure (payload completo, trasmesso separatamente)
// Ogni disclosure = base64url( salt || claim_name || claim_value )
// Esempio decoded:
["ynMvKGiQegTHCXkHkEL4aA", "given_name", "Mario"]
["qRpTaSvVlGnb9uOtCiKqGg", "age_over_18", true]
// 3. Presentazione selettiva al Verifier
// Il holder invia solo le disclosures che vuole rivelare
// In questo esempio: solo age_over_18, non given_name
eyJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJodHRwcz...~qRpTaSvVlGnb9uOtCiKqGg~
Implementujte peněženku EUDI spoléhající se strany
Pokud vyvíjíte digitální službu, která potřebuje přijmout identitu peněženky EUDI, musíte implementovat a Ověřovatel/spoléhající se strana. Hlavní kroky jsou:
Krok 1: Registrace jako spoléhající strana
Každý RP se musí zaregistrovat v národním registru zprostředkovatelů a získat certifikát X.509, který bude použit k podpisu Žádosti o autorizaci odesláno do peněženky. V Itálii registr spravuje AgID.
Krok 2: Vytvořte žádost o autorizaci (OpenID4VP)
// Authorization Request OpenID4VP
// Il RP genera un signed JWT con i parametri di presentazione
// Header JWT del Request Object
{
"alg": "ES256",
"kid": "rp-key-2025",
"typ": "oauth-authz-req+jwt"
}
// Payload JWT del Request Object
{
"client_id": "https://my-service.comune.it/eudi-rp",
"client_id_scheme": "x509_san_uri",
"response_type": "vp_token",
"response_mode": "direct_post",
"response_uri": "https://my-service.comune.it/eudi-rp/callback",
"nonce": "n-0S6_WzA2Mj",
"state": "af0ifjsldkj",
"presentation_definition": {
"id": "pid-age-verification",
"input_descriptors": [
{
"id": "pid_vc",
"format": {
"vc+sd-jwt": {
"alg": ["ES256", "ES384"]
}
},
"constraints": {
"fields": [
{
"path": ["$.vct"],
"filter": {
"type": "string",
"const": "PersonIdentificationData"
}
},
{
"path": ["$.age_over_18"],
"intent_to_retain": false
}
]
}
}
]
}
}
Krok 3: Ověření tokenu VP
Když peněženka odpoví a vp_tokenSpoléhající strana musí provést následující kontroly:
// Pseudo-codice Python per verifica VP Token
import jwt
import hashlib
import base64
def verify_vp_token(vp_token: str, expected_nonce: str) -> dict:
# 1. Splitta SD-JWT in parti (~ come separatore)
parts = vp_token.split("~")
sd_jwt = parts[0]
disclosures = parts[1:-1] # ultime parte potrebbe essere KB-JWT
key_binding_jwt = parts[-1] if len(parts) > 1 else None
# 2. Decodifica e verifica il JWT principale
header = jwt.get_unverified_header(sd_jwt)
# Recupera il certificato dell'issuer dalla PKI europea
issuer_cert = fetch_issuer_cert(header.get("x5c"))
payload = jwt.decode(sd_jwt, issuer_cert, algorithms=["ES256"])
# 3. Verifica nonce nel Key Binding JWT
if key_binding_jwt:
kb_payload = jwt.decode(key_binding_jwt, options={"verify_signature": False})
assert kb_payload["nonce"] == expected_nonce, "Nonce mismatch"
assert kb_payload["aud"] == "https://my-service.comune.it/eudi-rp"
# 4. Risolvi le disclosures
disclosed_claims = {}
for disclosure in disclosures:
# Verifica hash
disclosure_hash = base64.urlsafe_b64encode(
hashlib.sha256(disclosure.encode()).digest()
).rstrip(b"=").decode()
if disclosure_hash in payload.get("_sd", []):
decoded = json.loads(base64.urlsafe_b64decode(disclosure + "=="))
# formato: [salt, claim_name, claim_value]
disclosed_claims[decoded[1]] = decoded[2]
return disclosed_claims
IT peněženka Italiano: Nejmodernější
Itálie přistupuje k ekosystému peněženky EUDI prostřednictvím svého IT peněženka, stanovené legislativním nařízením 07.03.2024 n. 31 a vyvinutý v rámci PNRR. Systém obsluhuje Společnost PagoPA S.p.A. a integruje již existující systémy SPID a CIE (Electronic Identity Card).
IT peněženka je navržena jako přechodné řešení k peněžence vyhovující EUDI a od začátku roku 2025 byla zahájena pilotní fáze s digitálním řidičským průkazem, zdravotní kartou a zdravotním průkazem jako prvními dostupnými doklady.
Pověření k peněžence IT (pilotní fáze 2025)
- mDL – Mobilní řidičský průkaz (ISO 18013-5)
- TS-CNS – Zdravotní karta / karta národních služeb
- Osvědčení o invaliditě - Certifikace INPS
- PID – Identifikační údaje osoby (odvozené z CIE)
OpenID4VP se SIOPv2: The Cross-Device Flow
Častým scénářem je tok napříč zařízeními: uživatel navštíví webovou stránku na počítači a použije smartphone k ověření peněženky. Typický tok používá jako počáteční komunikační kanál QR kód:
// Flusso cross-device EUDI Wallet
// 1. Il RP genera il Request Object e lo rende disponibile
GET /eudi/request.jwt HTTP/1.1
// Risposta: signed JWT con presentation_definition
// 2. Il RP mostra un QR code che contiene:
eudi-openid4vp://?
client_id=https%3A%2F%2Fmy-service.comune.it%2Feudi-rp&
request_uri=https%3A%2F%2Fmy-service.comune.it%2Feudi-rp%2Frequest.jwt&
state=af0ifjsldkj
// 3. Il wallet dell'utente scansiona il QR:
// - Risolve il request_uri
// - Valida la firma del Request Object
// - Mostra all'utente quale attributo viene richiesto
// - Chiede il consenso
// 4. Il wallet invia la risposta via direct_post al response_uri:
POST /eudi-rp/callback HTTP/1.1
Content-Type: application/x-www-form-urlencoded
vp_token=eyJhbGciOiJFUzI1NiJ9...&
state=af0ifjsldkj
// 5. Il RP verifica la VP Token
// 6. Il RP redirige il browser desktop tramite session polling o SSE
Interoperabilita s SPID a CIE
Italští vývojáři musí pochopit, jak současné systémy koexistují s novým ekosystémem EUDI:
| Systém | Protokol | Identita | Vypršení platnosti | Poznámky |
|---|---|---|---|---|
| SPID | SAML 2.0 / OIDC | Federovaný (soukromý IdP) | V provozu do roku 2026+ | Postupně bude konvergovat do EUDI |
| CIE (elektronická identifikační karta) | SAML 2.0 / OIDC / NFC | stát (ministerstvo vnitra) | Dlouhodobě funkční | Zdroj PID pro peněženku EUDI |
| IT peněženka (PagoPA) | OpenID4VCI / OpenID4VP | Národní peněženka | 2025+ (pilotní) | Přechod na peněženku EUDI |
| EUDI peněženka | OpenID4VCI / OpenID4VP / SD-JWT | EU (přeshraniční) | Povinné od roku 2026 | Definitivní evropský standard |
Bezpečnostní a kryptografické aspekty
Implementace peněženky EUDI vyžaduje pozornost k několika bezpečnostním aspektům:
Vazby na klíče
Každý přihlašovací údaj je kryptograficky propojen s peněženkou (a tedy s fyzickým zařízením občana) prostřednictvím mechanismu tzv. Vazby na klíče. Soukromý klíč držitele nesmí nikdy opustit zabezpečený prvek zařízení. The Klíčová vazba JWT (KB-JWT) prokáže, že přednášející vlastní soukromý klíč odpovídající veřejnému klíči registrovanému v SD-JWT.
Prevence proti opakovanému útoku
Pole nonce v Žádosti o autorizaci je náhodně vygenerován RP a musí být obsažen v KB-JWT podepsaném peněženkou.
RP ověřuje, že se nonce shoduje s původně vygenerovaným, čímž zabraňuje opakovaným útokům.
Upozornění: Dočasná platnost
Ověřitelné přihlašovací údaje mají datum vypršení platnosti (exp). Služby musí vždy ověřit, zda nevypršela platnost pověření,
a zvážit zásady odvolání (prostřednictvím seznamu stavů nebo mechanismů podobných OCSP definovaným v prováděcích aktech).
Ověření certifikátu
Vydavatelské certifikáty musí být ověřeny podél řetězce PKI až po evropské důvěryhodné kotvy. Vždy používejte aktualizovanou verzi z Seznam důvěryhodných Evropská unie (dostupné prostřednictvím API od Komise EU).
Vývojářské nástroje a knihovny
Ekosystém open source kolem peněženky EUDI rychle roste. Toto jsou nejdůležitější reference:
# Librerie ufficiali EU (reference implementations)
# Python - EUDI Wallet Issuer SDK
pip install eudi-srv-pid-issuer
# Python - SD-JWT Reference Implementation
pip install sd-jwt
# Java - EUDI Wallet Core Library
# gradle dependency:
# implementation("eu.europa.ec.eudi:eudi-lib-jvm-sdjwt-kt:latest")
# TypeScript/JavaScript
npm install @sd-jwt/sd-jwt-vc @sd-jwt/decode
npm install openid4vc # OID4VCI + OID4VP client
# --- Esempio uso sd-jwt in TypeScript ---
import { SDJwtVcInstance } from "@sd-jwt/sd-jwt-vc";
import { digest, generateSalt } from "@sd-jwt/crypto-nodejs";
const sdjwt = new SDJwtVcInstance({
signer: async (data: string) => sign(data, issuerPrivateKey),
signAlg: "ES256",
verifier: async (data: string, sig: string) => verify(data, sig, issuerPublicKey),
hasher: digest,
hashAlg: "sha-256",
saltGenerator: generateSalt,
});
// Emetti una credenziale
const credential = await sdjwt.issue(
{
iss: "https://issuer.gov.it",
iat: Math.floor(Date.now() / 1000),
vct: "PersonIdentificationData",
given_name: "Mario",
family_name: "Rossi",
age_over_18: true,
birthdate: "1990-01-15",
},
// Indica quali claim sono selectively disclosable
{
_sd: ["given_name", "family_name", "birthdate", "age_over_18"],
}
);
console.log(credential); // eyJhbGciOiJFUzI1NiJ9...~...
Testování a prostředí Sandbox
Než přejdete do produkce, použijte oficiální prostředí sandbox:
- Referenční aplikace EUDI peněženky: K dispozici na GitHubu (eu-digital-identity-wallet) jako open source aplikace pro Android/iOS. Zahrnuje demo vydavatele, demo ověřovače a test vydavatele PID.
- Itálie IT Wallet Sandbox: PagoPA poskytuje testovací prostředí pro integraci, jako je Relying Party (kontakt komunita developers.italia.it pro přístup).
- Nástroj pro testování shody EUDIW: Nástroj Komise EU pro testování souladu s prováděcími akty.
Plán pro italské vývojáře
Pokud pracujete pro veřejnou správu nebo pro soukromou společnost, která poskytuje služby italským občanům, zde jsou konkrétní akce které se mají provést v následujících měsících:
Kontrolní seznam připravenosti k peněžence EUDI
- Aktualizujte svou strategii ověřování: zkombinujte OpenID4VP s SPID/CIE OIDC ještě dnes
- Prostudujte si Definice prezentace pro vaše případy použití (jaké atributy skutečně potřebujete?)
- Implementujte ověření SD-JWT ve své backendové aplikaci
- Zaregistrujte svou službu jako spoléhající se strana v registru AgID, je-li k dispozici
- Integrujte testování s referenční aplikací EUDI Wallet Reference (verze pro Android na GitHubu)
- Vyškolte tým o GDPR a minimalizaci dat v kontextu VC
- Sledujte prováděcí akty: technické specifikace se vyvíjejí do roku 2026
Závěry
eIDAS 2.0 a EUDI Wallet představují nejhlubší transformaci evropského prostředí digitální identity v posledních desetiletích. Pro vývojáře to znamená přijmout zcela nový technologický ekosystém: SD-JWT, OpenID4VCI, OpenID4VP, SIOPv2 a PKI pro celý kontinent.
Přechod není okamžitý – SPID a CIE budou fungovat paralelně po léta – ale čas začít se připravovat je nyní. Služby, které se včas přizpůsobí, budou mít skutečnou konkurenční výhodu a budou připraveny, až se masové přijetí peněženky EUDI transformuje očekávání uživatelů, pokud jde o soukromí, kontrolu a přeshraniční interoperabilitu.
Série GovTech pokračuje
Další informace o implementaci OpenID Connect pro vládní identitu naleznete v dalším článku série.







