WEDOS ProtectionENISAEUPrepared for ENISA · 100% European
TLP:AMBER  ·  Sharing limited to ENISA and WEDOS. Do not distribute beyond the approved circle.
WGP · v2.3.0 TLP:AMBER CONFIDENTIAL DRAFT 2026-06-28

ENISA portal protection
architecture and two clear alternatives

This is the full picture, in three parts. Part I explains the foundations shared by both options — how traffic reaches us, the layers of control, how we sort requests, limits, challenges, and the block page. Part II presents the two alternatives for the sensitive flow, clearly separated: Alternative 1 protects it without ever seeing the content; Alternative 2 gives full protection while the content is sealed end-to-end. Part III is the complete capability list and due diligence.

For
ENISA (technical)
Structure
Foundations · 2 alternatives · reference
Status
Draft — for discussion
Classification
TLP:AMBER
Part I
Foundations — shared by both alternatives

01Goal and principle

We protect the ENISA portal from attacks. You keep your servers and your application; we sit in front and filter attacks.

▸ Principle

The point where we decrypt is the point where we could see content. For your sensitive data we make sure that either we never decrypt (Alternative 1) or the content is sealed so we cannot read it even when we do (Alternative 2). Authorization always stays with your application; we are the attack filter.

02Build CDN-first — protect only what is truly dynamic

The single most effective step: put as much of the site on the CDN as possible, so active protection only covers the small dynamic part.

Static content — pages, images, styles, scripts, documents — is cached at our edge, close to visitors, and served without touching your origin. A flood against a cached page is absorbed at the edge. Only truly dynamic and sensitive requests (login, account actions, data submission) need the active protection in this document.

Why this matters

A CDN-first design shrinks the attack surface — and it shrinks the integration work for Alternative 2 (E2EE), because only a few endpoints need sealing.

DoEffect
Serve static assets from a separate static domain with long cache lifetimesMaximum cache hits; keeps static traffic off the origin; avoids coalescing with the sensitive host
Use correct cache headers and hashed asset namesSafe long-term caching and instant cache-busting on change
Keep dynamic APIs small and specificSmall, clear surface to protect; smaller E2EE integration
Allow microcaching of semi-dynamic pages where possibleEdge relief during spikes

03Traffic planes and three zones

We split the site so that as little as possible — and as controlled as possible — reaches the sensitive part.

PlaneContentTLSHow we protect
CDN (static)Images, CSS, scripts — separate domain, separate certificateterminated at CDNFully cached; near-unattackable; separate domain avoids HTTP/2 coalescing with the sensitive host
Zone 1 — portalLanding page (static)terminatedFully cached + microcaching
Zone 2 — loginSign-interminatedBackground bot detection + tiered challenge; the profile is learned here
Zone 3 — sensitiveAccounts, data submissiondepends on alternativeAlternative 1: pass-through (we never decrypt). Alternative 2: terminated but sealed end-to-end. See Part II.

04Control layers — anycast POP and dedicated box

Every point has several layers. On the dedicated box, one shared table holds state across the whole box; a fast store (Redis) distributes it to other boxes and up to the edge.

ANYCAST POP (×N worldwide) XDP volumetric + JA4T (from SYN) AL4 L4 filter · OK/KO lookup · block KO here CDN + AVC static + portal · microcache → forward to box only non-cacheable / sensitive Redis (edge): block KO at anycast DEDICATED BOX (at origin) AL4 passthrough · zone 3 → origin / block ACT / ACU termination · JA4 / H2 / QUIC fp ALB bot-check · challenge · write OK/KO AVC · AL7 · ADB cache · L7 · dispatch to origin ATP challenge PoW / captcha SHARED STICKY — across the whole box Redis · distribute to other boxes + edge
Fig. 1 — Layers on the POP and on the dedicated box. Sticky shared across the box; Redis distributes OK/KO to other boxes and to the edge.

05What happens to a request

Depending on the content type and the visitor state (unknown / OK / KO), a request goes to a different place. Switch the scenario to see the path. The sensitive case is where the two alternatives differ (Part II).

Client request Edge · AL4 / CDN OK/KO lookup CDN cache static + portal Login · zone 2 bot-check + challenge Origin · sensitive zone passthrough from AL4 Block AL4 (box & anycast)
Where
—
What happens
—
Termination / profile
—
Fig. 2 — Static and portal come from CDN cache; a new visitor to sensitive without OK is redirected to login; OK goes passthrough to origin; KO falls at AL4.

06Profile and signals

The profile has two levels. A rich profile decides on the box (where we terminate). A thin key propagates down so the edge can evaluate OK/KO.

SignalLevelAt the edge?Note
IPthin keyyesunstable on mobile — strict: change = block + re-login
JA4thin keyfrom learningnative after termination
JA4Tthin keyfrom first packetfrom the network handshake (being added)
ASN / country / IP classthin keyyesstable complement; drives challenge choice
JA4H · HTTP/2 · QUIC fingerprintrichnoonly after termination; refines the decision
▸ Stable fingerprint — enforce HTTP/2 only

For the protected portal we enforce HTTP/2 only (disable HTTP/1.1 and HTTP/3): one transport, no fingerprint change mid-session. Also JA4T needs a TCP handshake, which HTTP/3 (QUIC) does not have.

▸ To be candid

Combining signals increases uniqueness, not unforgeability — a targeted attacker can clone a fingerprint. So this is a filter, not a gate; the real boundary remains authorization at your origin.

07Propagation, latency and failure

State is written only by the terminating layer. The edge only reads. The hot path always reads locally; the times below are for replication only.

Propagation layerLatencyNote
Local (same process)instantprocess memory
Box-shared (local peers)sub-ms – a few msbetween processes on one box
To other boxes (in region)a few – tens of msreplication, not hot path
To edge / cross-continenttens – ~100+ msWAN; a block propagates globally
▸ When a dedicated box fails

We balance traffic across all locations, so a failure means only reduced capacity. The edge removes the failed location; a new box reads the profile from the shared store, so the visitor continues without re-login (if within the window). A blocked visitor stays blocked.

08Topology and failover — we recommend 3+ locations

We balance traffic across all dedicated locations (active/active). A failure of one means reduced capacity, not an outage.

FAILOVER (HA)
Anycast POP Anycast POP Anycast POP EDGE · anycast XDP + AL4 health-check Redis: blocks Dedicated box · Hluboká (CZ) dedicated POP for ENISA ACTIVE Dedicated box · Luxembourg (LU) dedicated POP for ENISA ACTIVE Dedicated box · TBD location third location 3+ ACTIVE Origin sensitive data Redis · profile shared across locations All active — full balancing
Fig. 3 — Active/active balancing across all locations. A failure of one = reduced capacity, the service keeps running. Redis shares the profile → no re-login.
LocationsAssessment
1Single point of failure; failure = outage; maintenance = outage. Not for production.
2HA, but on failure the other carries 100% load (needs 2× headroom); no quorum.
3+ recommendedSurvives one failure with distributed headroom; better coverage; rolling maintenance without outage.

09Multi-layer limits and rules

On every layer we can limit or block counts and rates. Each counter applies per any dimension, over any time window, and settings can differ per value.

What we count / limitPer which dimensionOver which window
Connections (total, concurrent, new-connection rate)per IP · per prefix · per ASN · per country · per continent · per IP category · per URL/path · per browser (UA) · per JA4 / JA4H / JA4T — and any combination1 s · 10 s · 1 min · 1 h · or a custom window
Requests (rate, burst, concurrency)
Requests per URL
▸ Fully flexible

IP categories are open-ended — we can define any categories we need (datacenter, residential, mobile, hosting, VPN, Tor, search engine, and custom ones), each with its own settings. Settings can also differ per individual IP or per group. Any signal × any counter × any dimension × any time window × any action can be freely combined.

Examples: "max 100 requests per 10 seconds per IP on /api/submit"; "max 5 new connections per second per datacenter IP"; "challenge a country's VPN ranges on the login path"; "rate-limit per ASN per hour worldwide, except an allow-listed partner network."

10Challenges — CAPTCHA and Proof-of-Work

Yes, we have CAPTCHA — and several types of Proof-of-Work. Our approach is invisible-first, so genuine users rarely see a challenge. We tune the trigger, difficulty and type per site and per path.

TypeWhat it isTypical use
Invisible detectionSilent background checksDefault for most traffic
Proof-of-Work (tiered)A puzzle solved quietly by the device; difficulty scales with riskSuspicious / high-rate; datacenter, VPN, Tor
CAPTCHAA visible human checkHighest-risk cases or on request
https://portal.enisa.europa.eu/  ·  security check
WEDOS ProtectionENISA

Quick security check

WEDOS Global Protection · verifying your connection

We are making sure you are a real visitor. For most people this happens automatically, in the background, and needs no action. Only when something looks unusual do we show a short check.

Level 1 · invisible check — passed
Level 2 · proof-of-work (runs quietly)
Level 3 · CAPTCHA (only if still needed)
I am a person

Difficulty scales with risk. Most visitors never see levels 2 or 3. We tune which level applies, per site and per path. Available in all 24 official EU languages.

Figure — Challenge design: invisible-first, then Proof-of-Work, then CAPTCHA only if needed. Included in the service, tuned to your needs.
▸ Commercials

CAPTCHA and Proof-of-Work are configured and tuned as part of the managed service. There is no extra charge for these features.

11Block page (from CDN cache)

The page a blocked visitor sees: an explanation, contact, and a copyable request summary. It is fully cached in the CDN, so attacking it costs no origin resources. Available in all official EU languages.

https://portal.enisa.europa.eu/  ·  HTTP 429
WEDOS ProtectionENISA

Access temporarily restricted

Request blocked by WEDOS Global Protection

This request was temporarily blocked by attack protection. If you are an authorized user, please try again shortly, or sign in. If the problem persists, contact support and include the request summary below.

Request summary (copy for support)
Ref:    a1b2c3d4-ee55-46f7-9a01-d3f2c7b18e90
Time:   2026-06-28 09:41:07 UTC
Reason: rate-limit / reputation
Node:   edge-anycast (LU)

Contact: soc@enisa.europa.eu  ·  wedos.com

BGESCSDADEETELENFRGAHRITLVLTHUMTNLPLPTROSKSLFISV

Available in all 24 official EU languages. The page is fully cached in the CDN — attacking it requires no origin resources.

Fig. 5 — Example block page served from CDN cache (WEDOS + ENISA logos, explanation, contact, copyable request summary, language selection).
Part II
The two alternatives for the sensitive flow

12The two alternatives at a glance

For the sensitive flow there are two alternatives. Both share one promise: we cannot read your content. They differ in how much L7 protection we can give and how much you change in your app.

Sensitive flow accounts, data submission ALTERNATIVE 1 · pass-through (3 zones) We do not decrypt the sensitive zone. no change in your app · network-level protection ALTERNATIVE 2 · E2EE payload (HPKE) We terminate, protect fully, still cannot read it. small change in your app · full L7 protection Both alternatives: we cannot read your content.
Figure 1 — Two ways to protect the sensitive flow. Both keep your content unreadable to us.
Alternative 1 — pass-throughAlternative 2 — E2EE payload
We decrypt sensitive content?No (we do not terminate it)No (it is sealed end-to-end)
L7 protection on sensitive flowNetwork level + profileFull L7 (over the sealed data)
Change in your appNoneA small change (we provide the parts)
StartImmediatelyWhen your team is ready
Alternative 1
Protection without seeing content
Pass-through · we never decrypt the sensitive zone · no change in your application

13L7 protection without seeing content (pass-through)

We give full protection where it is safe to look, and we deliberately do not decrypt the sensitive zone. This needs no change in your application.

Zone 1 — Static / portal cached on CDN · near-unattackable Zone 2 — Login terminated · bot checks · we learn a profile Zone 3 — Sensitive pass-through · we do NOT decrypt Your origin decrypts & authorizes
Figure 2 — Alternative 1: three zones. Only the sensitive zone is pass-through; we protect at the network level and never decrypt it.

For the sensitive zone we do not hold the keys and do not see the content. We decide using signals that do not need the content: the source (IP, ASN, country), the fingerprint learned at login, the request rate and size, and the trusted/blocked/unknown state carried from the login zone. Known-bad and over-limit traffic is stopped near the visitor; only good traffic reaches your origin, which decrypts and authorizes.

On the sensitive flow, do we...
See the source and the amount/shape of trafficyes
See the connection fingerprint learned at loginyes
Read the actual contentno

What happens to a request here

  1. Arrive. The visitor reaches the nearest edge location (anycast).
  2. Sort. We classify the visitor as trusted, unknown, or blocked — from signals that do not need the content.
  3. Serve or check. Static parts come straight from the CDN cache; the login zone is terminated, with bot detection and a challenge only if the visitor looks risky.
  4. Pass through. For the sensitive zone we do not decrypt. Known-bad and over-limit traffic is stopped first; the rest is forwarded to your origin, still sealed.
  5. Open at your origin. Your server decrypts and authorizes. We never saw the content.

Termination vs pass-through — where the lock opens

The point where the lock opens is where we can see content. In this alternative, for the sensitive zone it opens only at your origin.

Client browser Edge XDP + AL4 Box 3 zones Origin sensitive data termination here
TLS termination
—
WGP sees
—
CRA / data
—
Fig. 4 — In zone 3 the lock opens only at the origin. A KO request (repeatedly not logged in) falls at AL4 immediately.
▸ What you change

Nothing in your application. This alternative is a routing and protection design on our side — the fastest way to protect the sensitive flow while guaranteeing we never see its content.

Alternative 2
Protection with sealed content
Termination + end-to-end encryption (HPKE) · full L7 protection · we still cannot read it

14L7 protection with sealed content (E2EE / HPKE)

Here we do terminate the sensitive flow and give it full L7 protection — yet still cannot read it, because the content is sealed end-to-end with a key we never hold.

In plain terms: your website locks the sensitive content in a box before it leaves the visitor. We guard that box the whole way — but we never hold the key. Only your own server can open it.

▸ The picture to keep in mind

Think of a locked box travelling inside a glass tube. Everyone can see the box move, and we can guard it and check its outside — but only the person with the key can open it. That is end-to-end encryption.

How it works, in plain words

It works like a second layer of HTTPS, carried all the way to the ENISA origin. Your origin publishes its public key. We only deliver that key to the browser — without the matching private key it is useless to us. The browser uses it to protect the content, sends it through us encrypted, and only your origin can open it. We see the ciphertext and the metadata, never the content.

▸ The exact mechanism (for the technical reader)

This is not “RSA and prime numbers”. The browser takes the origin's public key and its own one-time key and mathematically derives a shared key (Elliptic-Curve Diffie–Hellman over P-256). It encrypts the content with that shared key (AES-256-GCM). Your origin derives the same shared key from its private key — and only it can. So the public key does not encrypt the data directly; it is used to agree a shared key. We never hold the private half, so we cannot derive the key and cannot read the payload.

Forward secrecy. The browser makes a fresh one-time (ephemeral) key for every message, sends its public part in the envelope, and discards the private part. Even if a key were compromised later, past messages still cannot be decrypted.

Tamper-evidence — the bonus. This does not come from the encryption alone; it comes from authenticated encryption (AES-GCM), which attaches a cryptographic tag to every message. If anyone, including us, changes a single bit of the envelope, decryption at your origin fails and the message is rejected. The envelope header (method, path, time, request id) is bound into that tag too, so a sealed body cannot even be replayed to a different endpoint. The “Simulate tampering” toggle in the demo shows exactly this.

▸ One line for ENISA

It works like a second layer of HTTPS taken all the way to your origin. You publish your public key; we only deliver it, and without your private key it is useless to us. The browser derives a shared key from it (ECDH over P-256), encrypts the content (AES-GCM) and sends it through us — we see only ciphertext and metadata. And thanks to authenticated encryption, no change in transit goes unnoticed: your origin rejects it.

How it works — in four steps

Visitor's app your website + SDK WGP we guard the outside Your origin has the key (HSM)
Step 1 — Seal. Your app puts the sensitive content into a locked box. Only your origin holds the key.

The technical version: the client (a browser script or a machine client) wraps only the body of the request in a sealed envelope (using HPKE, RFC 9180) addressed to your server's public key. Only the payload is sealed — structure, headers, sizes and fingerprint stay visible, so we apply rate-limiting, bot detection, challenges and a structural firewall before your origin. Your origin unseals it with its private key (in an HSM). We do not use nested TLS — only the payload is sealed.

What happens to a request here

  1. Seal. The visitor's app wraps the request body in a sealed envelope (HPKE) addressed to your origin's public key.
  2. Arrive. It reaches the nearest edge over HTTP/2, sealed the whole way.
  3. Guard. We terminate the outer connection and apply full L7 — rate limits, bot checks, a challenge if needed, and a structural firewall — reading only the outside (headers, size, fingerprint).
  4. Forward. We pass the still-sealed body to your origin.
  5. Unseal. Your origin opens it with its key (HSM), checks the client is authorized, processes it, and seals the reply.

14.1  For people and for machines

The same sealed-envelope format is used by everyone; only how the client obtains its key differs. Confidentiality to the server needs no client key. Proving "authorized only" uses a client key, or a password-based method (OPAQUE) for people.

ParticipantKey handlingProof of "authorized"Another device
Machine (M2M)Long-term key at setup; private key in a secure store / HSM, never leaves the clientRegistered public keyn/a
Person · trusted deviceBrowser generates a non-exportable key at first sign-inRegistered public keyPassword fallback or key backup
Person · password onlyNo stored key — a password method (OPAQUE) unlocks a wrapped keyPassword (OPAQUE) sessionAny device (password is enough)

14.2  Can you just add an encryption JavaScript to the browser?

Yes — a small drop-in JavaScript SDK. But it always needs a matching piece at your origin, because the data must be decrypted somewhere to be used. There is no browser-only version. With a CDN-first site, only a few dynamic endpoints need sealing, so the integration is small.

  1. Client: add one <script> tag and a short config (which endpoints to seal, your server's public key). The SDK seals request bodies and unseals responses transparently.
  2. Server: add a small decrypt/encrypt step on those endpoints, with your private key in an HSM.
  3. Delivery integrity: serve the SDK and the page that loads it via pass-through or your own origin, and pin the file hash with SRI.
  4. Identity: register client keys (machines) or use OPAQUE (people).

14.3  The one real weakness — delivery of the crypto code

In the browser, E2EE is only as strong as the integrity of the code that encrypts. Whoever serves the page could substitute crypto that leaks the key. Because we terminate the outer connection, we are structurally in that position — so the guarantee against us is only as strong as the code delivery.

MeasureWhat it addresses
Root of trust outside WGPServe the bootstrap and SDK via pass-through or your origin — trust must not pass through a layer we can modify
SRIThe bootstrap pins the SDK hash; a tampered file is rejected
Code signing / installed appStronger binding than SRI alone
Native / machine clientNo JavaScript delivery — the strongest option
▸ To be candid

Even with SRI, the page carrying the hash must arrive with integrity, so the root of trust must sit outside WGP (your origin or pass-through). The strongest guarantee is an installed client. Metadata (sizes, timing, paths) stays visible — mitigate with padding and uniform endpoints.

14.4  Deployment effort and CRA

Effort: low-to-moderate and phased. You add the SDK on a few endpoints, a decrypt step at the origin, a server keypair (HSM), and choose the identity model. Alternative 1 needs zero app change and can start now; Alternative 2 is added later on the endpoints that need it.

▸ Authorized clients and CRA

With per-client keys, this also answers "authorized clients only" for the machine-to-machine data-submission endpoint at the application layer. For the EU Cyber Resilience Act it is a strong, provable story: full protection while demonstrably never seeing the content — data minimization by design.

15What we see outside the envelope

A clear line for the record: in both alternatives we never see the content. Everything else is operational metadata. This is what “we protect it but cannot read it” means in practice.

The design rule that follows: sensitive data goes only inside the sealed body — never in the URL, headers, or cookies, because those are visible to us in Alternative 2.

What it isAlt 1 — pass-throughAlt 2 — E2EE (we terminate outer TLS)
Source IP, port, geo, network (ASN)visiblevisible
Time, request rate, sizes, RTT, connection reusevisiblevisible
SNI (target hostname), ALPN, TLS versionvisiblevisible
TLS / network fingerprint — JA4 / JA4Tvisiblevisible
HTTP method (POST…)hiddenvisible
URL / path, query stringhiddenvisible
HTTP headers — User-Agent, Referer, Cookie, Authorization, Content-Typehiddenvisible
HTTP fingerprint — JA4Hhiddenvisible
Response status and sizesize onlyvisible
Envelope header — v, suite, key_id, ts, ridn/a (nothing in the clear)visible (metadata, not content)
Approx. body length (from ciphertext size)leaks via packet sizesleaks via ciphertext size
Body content — the actual datahiddenhidden

Alternative 1 hides more — we do not terminate, so method, path and headers stay inside TLS — but gives only network-level protection on the sensitive flow. Alternative 2 exposes the request envelope and headers to us so we can apply full L7, yet the body stays sealed.

What can be inferred without reading the content

Even sealed, some things leak from the shape of traffic: the message length (ciphertext ≈ plaintext + 16 bytes), timing and frequency, which endpoint was called (a path like /api/delete reveals intent), and per-user correlation via IP, fingerprint, cookie or request id.

LeakHow to reduce it
Message lengthPad the body to fixed-size buckets
Which endpoint / actionUse one uniform endpoint; put the action inside the sealed body
Headers / cookies exposureKeep headers minimal; carry nothing sensitive outside the body
Timing / frequencyBatch or add jitter where feasible
▸ In one line for ENISA

We see the envelope and operational metadata — who, where, when, how big, which endpoint, which fingerprint — but never the content. Length and timing cannot be fully hidden (that is traffic physics), only blurred.

16Choosing between them

You do not have to choose forever now — the two can coexist.

Start here

Alternative 1 today

Instant protection of the sensitive flow, with no change in your app. We can switch it on for you.

Add when ready

Alternative 2 later

Full L7 protection on the few dynamic endpoints that need it, sealed end-to-end. Smaller if the site is CDN-first.

Our suggestion

Begin with Alternative 1 for immediate cover, then add Alternative 2 on the data-submission endpoints when your team is ready.

Part III
Reference — full capabilities and due diligence

17Full configuration list — everything we can do

Everything below is configurable per site and can be combined. You do not need to learn this — we set it up and tune it for you.

16.1  Signals we can decide on

GroupSignals
Source / identityIP, prefix, ASN, country, continent, IP category (datacenter / residential / mobile / hosting / VPN / Tor / search engine)
Request targetURL / path, HTTP method, host, Content-Type, request size
Client / browserUser-Agent, Referrer, headers, login cookies; UA quality classes (blacklisted / bad / outdated / AI-agent / missing / too short / whitespace)
FingerprintJA4, JA4H, JA4T (being added), HTTP/2 and HTTP/3 fingerprint, JA4 composite
Reputation listsSpamhaus (DROP / ASN-DROP), abuse.ch (Feodo / ThreatFox), GreyNoise (RIOT allow-list)
BehaviourRequest rate, parallel connections, new-connection rate, error patterns, honeypots, learned baseline, automation signals
ApplicationCMS autodetection (WordPress, Drupal, Magento, PrestaShop, Joomla, and more) → tailored rules; WebSocket; combined rules

16.2  Limits — per dimension, per time window

Connections, requests, and requests per URL — over 1 s / 10 s / 1 min / 1 h or a custom window — per IP, prefix, ASN, country, continent, IP category, URL/path, browser, or fingerprint, and in any combination. IP categories are open-ended, and per-IP settings can differ.

16.3  Actions

ActionMeaning
ALLOWLet it through
LOGRecord only
RATE-LIMITSlow it down, per any dimension and window
CHALLENGEInvisible check / Proof-of-Work (tiered) / CAPTCHA
BLOCKDrop, error code, or cached info page

16.4  Other controls

AreaWhat we can do
Caching / CDNFull cache, microcache, static offload, Brotli/gzip, cached error/block pages
ProtocolEnforce HTTP/2 only, HSTS, TLS management; pass-through vs termination per zone
Web firewall (WAF)Rules on path, method, headers, content type; structural validation (sealed-envelope format); CMS-aware rules
Visitor stateTrusted / blocked / unknown, shared across locations; demote on anomaly
Logging & reportsTraffic logs (metadata only for sealed traffic), cross-layer correlation, 18-month retention, reports

18Appendix — Due diligence (summary)

QuestionAnswer
Penetration testingAs part of onboarding and handover we perform penetration testing of the deployed L7 protection. It is included in the service. We can share relevant results and a summary on completion, or sample reports under NDA if required.
SanctionsWEDOS has never been subject to any sanctions — regulatory, financial, or political.
Data portability & exitThe service is transparent and non-locking. Transition in and out is straightforward, with no dependency on proprietary components. We do not store customer content or application data; upon termination no customer data remains, aside from agreed operational records.
GDPRWe do not process or store customer application data. We only handle CDN cache data (temporary, auto-expiring) and traffic logs (limited, pre-agreed retention). WEDOS has never been subject to GDPR enforcement actions or fines.
Company profileLargest domain registrar in the Czech Republic (~23% share). ICANN-accredited registrar, RIPE member; among the top registrars for several TLDs (e.g. top 20 for .EU). DNS with DNSSEC, web and email hosting for hundreds of thousands of domains, thousands of virtual servers. References on request.
Ownership & buildPrivately owned, no external investors, loans, or liabilities. All products are open-source based with our own know-how added; nothing is outsourced — built in-house.

19Versions

VersionDateChange
2.3.02026-06-28Added a plain-words explainer at the top of section 14: the HTTPS analogy, the ECDH shared-key derivation (not RSA/primes), forward secrecy, and tamper-evidence via authenticated encryption.
2.2.02026-06-28Added section 15 “What we see outside the envelope” — a visible/hidden table contrasting Alternative 1 and Alternative 2, plus metadata-leakage mitigations.
2.1.02026-06-28Separated the two alternatives more strongly with full-width chapter banners, and added a parallel “What happens to a request here” step-by-step walkthrough inside each alternative.
2.0.02026-06-28Merged the architecture and the protection plan into one document, reorganized into three parts, with the two alternatives clearly separated. Added CDN-first, time-windowed limits, a CAPTCHA/PoW challenge design, and a step-by-step E2EE explainer.
▸ Status

Draft for discussion. No production change is proposed here; final configuration is set after agreement and validated in our environment before deployment.