European Digital Identity Wallet — Data Protection Impact Assessment template
Tenant-facing DPIA template covering the Aloaha WebPhone European Digital Identity Wallet product surface — OpenID4VP verifier, OpenID4VCI issuer, SIOPv2, HAIP 1.0 profile. Template version 1.0, dated 2026-07-26.
Aloaha describes what the platform SHIPS and what CONTROLS it provides. Aloaha does NOT certify GDPR compliance of any tenant deployment.
1. Overview
1.1 What processing does this DPIA cover?
Presentation and verification of European Digital Identity Wallet credentials to authenticate a natural person and, where applicable, issuance of verifiable credentials to the same person. Specifically:
- OID4VP verifier flow. The tenant Aloaha WebPhone deployment acts as an OpenID4VP verifier / relying party. It requests one or more claims from the end-user’s European Digital Identity Wallet under the HAIP 1.0 profile (SD-JWT VC + KB-JWT, optional mDoc where the tenant has enabled the ISO 18013-7 pipeline).
- OID4VCI issuer flow. The tenant deployment acts as a credential issuer under OpenID4VCI, issuing tenant-specific attestations (e.g. employee-authorisation credentials, membership credentials) to a user’s European Digital Identity Wallet.
- Session state. The verifier / issuer stores short-lived state to bind the OpenID4VP request to the presented response and to prevent replay (nonce,
redirect_uri, DPoPjti, wallet-attestationiat). - Audit and billing metrics. Success / failure counters, timestamps, wallet type, and licensable-metric increments are logged to per-tenant files under
App_Data/<tenant>/.
1.2 Why is a DPIA required?
DPIA is mandatory under GDPR Article 35(1) when the processing is likely to result in a high risk to the rights and freedoms of natural persons. The European Data Protection Board’s WP248 rev.01 lists nine criteria; wallet identity flows meet at least four:
- Evaluation or scoring of data subjects (age, eligibility, entitlement)
- Systematic monitoring in some tenant configurations (audit trail)
- Data processed on a large scale for public-facing tenants
- Innovative use of technology (European Digital Identity Wallet, ARF-conformant flows are new market entrants as of 2026)
Regardless of scale, several Member State supervisory authorities have listed “processing of official identifiers” and “biometric or unique identification” on their Article 35(4) mandatory-DPIA lists. Wallet PID falls under both.
1.3 Assessment date and DPO consultation
| Tenant operator | [fill in] |
|---|---|
| Assessment date | [fill in] |
| DPO name and contact | [fill in] |
| DPO consulted on | [fill in] |
| Reviewer name | [fill in] |
| Version | 1.0 |
| Next review due | [fill in — no later than 12 months, or on any material change to processing] |
2. Data flows (textual diagram)
+----------------+ openid4vp:// authz request +-------------------+
| End user + | -----------------------------------> | Aloaha WebPhone |
| European | | (Verifier) |
| Digital | <----------- direct_post JWE ------- | logineu.ashx |
| Identity | | age-verify.ashx |
| Wallet | +-------------------+
+----------------+ |
^ v
| +-------------------+
| OID4VCI credential offer (optional issuance) | Downstream RP |
+----------------------------------------------- | (tenant's own |
| application) |
+-------------------+
Local persistence:
App_Data/<tenant>/sessions/<sid>.json (short-lived — session only)
App_Data/<tenant>/audit/<yyyy-mm>.log (retention per tenant policy)
App_Data/<tenant>/metrics/<meter>.jsonl (licensable metrics)
Key properties:
- Wallet-first control. The end user’s European Digital Identity Wallet releases claims only after explicit consent inside the wallet UI. The verifier cannot pull data without a user-approved OpenID4VP response.
- Encrypted VP responses. With
haipStrictMode = true(platform default), the verifier rejects unencrypteddirect_postand accepts only JWE-encrypted VP responses (A256GCM, ECDH-ES+A256KW). - No shadow copy. All tenant data lives under
App_Data/<tenant>/on the tenant’s own IIS host filesystem. There is no central Aloaha database; if the tenant self-hosts, no data leaves the tenant infrastructure. - Per-tenant isolation. Cross-tenant reads are blocked at the tenant path resolver (
TenantPaths.*), enforced at every entry point.
3. Necessity and proportionality
3.1 Legal basis (GDPR Article 6)
The tenant operator selects the basis appropriate to the processing:
| Use case | Suggested Article 6 basis | Notes |
|---|---|---|
| Log-in to tenant service via European Digital Identity Wallet | Article 6(1)(b) — performance of a contract | The user requests the service and log-in is necessary to provide it |
| Age verification for a regulated tenant service | Article 6(1)(c) — legal obligation | Where Member State law mandates age check (e.g. gambling, alcohol, adult content) |
| Ad-hoc credential issuance (employee credential) | Article 6(1)(f) — legitimate interest | Balancing test required |
| Optional analytics / marketing attribution | Article 6(1)(a) — consent | Must be freely-given, specific, informed, unambiguous, and revocable |
3.2 Legal basis for special categories (GDPR Article 9)
Wallet PID typically contains: given_name, family_name, birthdate, issuing-authority reference, wallet trust framework, and — where the tenant requests — nationality, place of birth, or address. These are not special-category data. HOWEVER:
- If the tenant requests a health credential, disability status, religious affiliation, or trade-union membership, Article 9(2) applies. Under HAIP and OID4VP the user releases only requested claims (
dcql_query), so the tenant MUST minimise its request to what is strictly necessary. - Biometric data (e.g. remote face-matching against a wallet portrait) is Article 9 unless a Member State exemption applies.
3.3 Purpose limitation
Claims received via OID4VP MUST NOT be reused for a different purpose than the one the user consented to in the wallet UI. The wallet-side consent screen states the purpose; the tenant deployment MUST NOT log or ingest claims beyond that purpose.
3.4 Data minimisation
The tenant deployment SHOULD:
- request the smallest possible claim set (SD-JWT selective disclosure — ask for
over_18rather thanbirthdatewhere available), - use
age_over_NNboolean claims where possible for age gates, - avoid persisting the raw VP response — extract only the required disclosure and drop the rest,
- avoid logging the full JWS / JWE payload; log only claim names and outcome flags.
3.5 Necessity of the wallet flow itself
Compared to alternatives (bank ID, national eID, self-declared birthdate, photo of a physical ID document), the European Digital Identity Wallet provides: (a) cryptographic proof of issuer, (b) user consent per transaction, (c) selective disclosure, (d) revocation checking via OAuth Status List draft-13. The wallet flow is generally MORE data-minimising than its alternatives and is therefore the preferred mechanism where available.
4. Risks to data subjects
| # | Risk | Likelihood | Severity | Rationale |
|---|---|---|---|---|
| R1 | Identity theft via stolen or replayed wallet response | Low | High | HAIP nonce + same-device binding + DPoP jti reduce likelihood |
| R2 | Unnecessary claim disclosure (“over-asking”) | Medium | Medium | Depends on tenant claim request; enforced by wallet consent UI |
| R3 | Linkability across relying parties via wallet identifier | Low-Medium | Medium | Depends on wallet design (batch issuance, unlinkable credentials); outside our control |
| R4 | Profiling from audit logs | Low | Medium | Audit logs stay per-tenant; not aggregated by Aloaha |
| R5 | Unauthorised RP registration (attacker sets up a fake RP) | Low | High | LOTL-anchored RP-cert chain-walk (Oidc:LotlRequireChain=true default), OAuth Status List revocation |
| R6 | Credential replay against multiple RPs | Low | High | Per-transaction nonce, DPoP proof, same-device redirect_uri binding |
| R7 | Revocation-checking failure (using a revoked credential) | Low | Medium | OAuth Status List client polls issuer, cache TTL |
| R8 | Session hijack via cookie theft | Low | High | HttpOnly + SameSite=Lax + Secure session cookies, same-device binding |
| R9 | Cross-tenant data leak | Very Low | High | TenantPaths.* enforced at every entry point; ACL v3 SIP gate |
| R10 | Non-EU third-country transfer | Depends on hosting | High | Self-hosted tenant → tenant’s decision; MITA-Azure hosted → EU |
| R11 | Accessibility failure blocking wallet log-in for users with disabilities | Medium | High | See WCAG audit 2026-07-26; residual <nav>-landmark gap + colour-contrast unverified |
| R12 | Retention overrun (audit logs kept beyond necessity) | Low | Medium | Configurable per tenant; default 12 months |
| R13 | Loss of confidentiality in transit | Very Low | High | TLS 1.2+ required, TLS 1.3 preferred; JWE encryption of VP response |
| R14 | Loss of integrity of session state on disk | Low | Medium | File.Replace atomic write; .backup sidecars for rollback |
| R15 | Cognitive over-load on wallet consent (unrelated to platform) | Depends on wallet | Low | Wallet-side responsibility; platform emits clear purpose |
5. Mitigations shipped by the Aloaha WebPhone platform
The following are ENABLED in the current build (post-2026-07-26 HAIP-closure sprint). Tenants inherit them by default.
| Mitigation | Where | Default |
|---|---|---|
| JWE encryption of VP responses (A256GCM, ECDH-ES+A256KW) | Verifier | ON when HAIP strict = TRUE |
HAIP-strict enforcement (reject plain direct_post) | Verifier | haipStrictMode = TRUE per tenant |
| OAuth Status List (draft-13) credential-status client | StatusListClient | Oidc:StatusListCheckMode=enforce |
Same-device redirect_uri binding via signed session cookie | Verifier | Enforced |
| LOTL-anchored RP-cert chain-walk | oidc.ashx | Oidc:LotlRequireChain = TRUE (production profile lock) |
DPoP at VCI ?token + ?credential endpoints | vci.ashx | Vci:DpopMode |
attest_jwt_client_auth at VCI ?par + ?token | vci.ashx | Vci:ClientAuthMode |
DCQL query with trusted_authorities + AKI matching | Verifier | Enforced when configured |
| Per-tenant isolation | TenantPaths.* | Enforced globally |
| ACL v3 SIP + IP allow/deny gate | IpAllowGate.Allow | Enforced at every entry point |
| Session-scoped storage (no long-lived credential caching) | App_Data/<tenant>/sessions/ | Session lifetime only |
| HttpOnly + SameSite=Lax + Secure cookies | All authenticated endpoints | Enforced |
Atomic write + .backup sidecar | Every JSON write | Enforced |
LOUD [TAG-DIAG] audit logging | Every entry point | Enforced |
| RASP inline anomaly checks | Every new handler | Enforced |
| Runtime IP auto-blacklist (known scanner range) | ACL startup | Enforced |
| TLS 1.2+ / TLS 1.3 enforcement | web.config + IIS binding | Enforced |
Per-tenant /.well-known/security.txt | Tenant JSON | Optional per tenant |
| OpenID Federation 1.0 discovery | .well-known/openid-federation | Available |
| No third-party analytics on wallet pages | logineu.html, age-verify.html | No tracking pixels |
6. Residual risk
After the mitigations in §5, the following risks are NOT fully addressed and the tenant MUST decide whether to accept, transfer, or add compensating controls:
| # | Residual risk | Suggested action |
|---|---|---|
| RR1 | Accessibility gaps (colour contrast, focus-ring, AT walk-through unverified per WCAG audit 2026-07-26 §5) | Complete browser-driven audit + manual AT pass before public launch |
| RR2 | DPoP jti replay cache is per-process, not distributed — an attacker replay across worker restarts is theoretical but non-zero | Consider Redis-backed replay cache for high-availability tenants; default file-backed cache is adequate for single-node |
| RR3 | Wallet-side linkability across relying parties depends on wallet design (batch credential re-issuance) — outside platform control | Educate end users; prefer wallets that implement batch issuance |
| RR4 | Cross-border transfer if tenant hosts outside EU/EEA | Perform Article 46 assessment; use SCCs or an Article 45 adequacy decision |
| RR5 | Retention policy under-configured — default 12 months for audit logs may exceed the “necessary” test for some tenants | Tenant DPO sets retention per purpose |
| RR6 | End-user right-of-erasure (Article 17) partially manual — the ARF TS7 endpoint accepts requests, but tenant back-office workflow is operator-defined | Publish DPO channel in per-tenant security.txt |
| RR7 | AI Act obligations if the tenant uses wallet claims to feed automated decision-making | Tenant assesses AI-Act tier separately |
7. DPO consultation record
| DPO name | [fill in] |
|---|---|
| DPO consulted (date) | [fill in] |
| DPO opinion | [fill in — accept / accept with conditions / reject] |
| Conditions imposed | [fill in] |
| Article 36 prior-consultation triggered? | [fill in Yes/No — required if residual risk is high and cannot be mitigated] |
| Data subject / representative consultation (GDPR Art. 35(9))? | [fill in — describe how the views of data subjects were sought where appropriate] |
8. Sign-off
| Role | Name | Signature | Date |
|---|---|---|---|
| Controller / tenant operator | |||
| DPO | |||
| Reviewer | |||
| Next review date |
9. Change log
| Date | Change | Signed |
|---|---|---|
| 2026-07-26 | Template v1.0 issued for the Aloaha WebPhone European Digital Identity Wallet product surface | Aloaha engineering |
10. Companion documents
- Records of Processing Activities (RoPA) template — GDPR Article 30
- CodeB privacy manifesto
- HAIP verifier operator setup runbook
- HAIP 1.0 OID4VP Verifier conformance self-test
- EU Wallet Verifier API reference
Last updated 2026-07-26. Related pages: Privacy manifesto · RoPA template · HAIP operator setup · Deutsch