← Terug naar de site

Technische architectuur

Hoe klantdata versleuteld is, waarom de ontwikkelaars er niet bij kunnen, en hoe we AI inzetten. Volledig, en eerlijk over de grenzen.

Niveau B: externe KMS + functiescheiding + audit Concept ter bespreking
In het kort

De belofte, en de eerlijke reikwijdte

De inhoud van klantdossiers (documenten, persoonsgegevens, contracttekst) wordt versleuteld opgeslagen. Alleen Jan (notaris) en Louis (advocaat), en de klant zelf, kunnen die inhoud ontsleutelen. Wij als ontwikkelaars beheren het systeem en zien de structuur (welke dossiers, status, wie-wat-wanneer), maar niet de inhoud van dossiers die Jan of Louis aanmaken.

Wat dit is, en wat niet

Dit is niveau B: de sleutel leeft buiten ons bereik in een Europese sleutelkluis, wij staan niet op de toegangspolicy, en elke poging wordt geweigerd en gelogd. Het is geen wiskundige onmogelijkheid (dat is niveau A, waarbij alleen Jan/Louis de sleutel bezitten). Het verschil staat verderop expliciet uitgelegd.

Het principe

De vertrouwensgrens

De kern is het scheiden van metadata (die wij nodig hebben om te beheren) en inhoud (die vertrouwelijk is). Iedereen zit in hetzelfde systeem, maar niet iedereen kan hetzelfde ontsleutelen.

binnen de grens
Ziet leesbare inhoud
Jan notaris Louis advocaat De klant

Kan de sleutel gebruiken in de kluis en dus documenten en persoonsgegevens ontsleutelen, alleen van de eigen dossiers.

buiten de grens
Ziet alleen versleutelde inhoud
Tal dev Jelle dev Naut dev Supabase / infra

Beheert het systeem en ziet structuur en status, maar krijgt voor Jan/Louis-dossiers alleen onleesbare cijfertekst. Geen sleuteltoegang.

De opslag (Supabase) staat zelf ook buiten de grens: daar ligt alleen cijfertekst. De sleutel ligt ergens anders.

De techniek

Envelope-encryptie: twee sleutels op elkaar

Elk dossier krijgt zijn eigen datasleutel (DEK) waarmee de inhoud wordt versleuteld (AES-GCM). Die datasleutel wordt zelf versleuteld ("gewrapt") door een hoofdsleutel (KEK) die in de Europese sleutelkluis van Scaleway (Key Manager) leeft.

in Supabase
Inhoud → cijfertekst
Versleuteld met de DEK. Onleesbaar zonder de DEK.
in Supabase
DEK (gewrapt)
Alleen versleuteld opgeslagen. Nutteloos zonder de KEK.
in Scaleway KMS
KEK, hoofdsleutel
Verlaat de kluis nooit. Niet te exporteren. Gebruik alleen via de kluis, met policy.

Om iets te lezen moet je de kluis vragen de DEK te "unwrappen" met de KEK. Dat mag alleen wie op de policy staat, en elke vraag wordt gelogd.

De kern

Waarom wij niet kunnen ontsleutelen

Voor de vertrouwelijke dossiers (aangemaakt door Jan/Louis) gebruikt het systeem een aparte hoofdsleutel, KEK-client. Drie feiten samen maken dat wij daar niet bij kunnen:

Zo toon je het live aan Jan & Louis

Log in als developer en open een dossier van Jan: het systeem vraagt de kluis om te ontsleutelen, geweigerd, de dataroom toont "versleuteld, geen toegang", en in het Scaleway-logboek staat de geweigerde poging. Log in als Jan: ontsleutelen lukt, inhoud zichtbaar. Datzelfde logboek laat over vijf jaar zien dat KEK-client nooit door een developer is gebruikt.

De eerlijke grens

Niveau B rust op een scharnierpunt: wie beheert de policy van de kluis? Daarom is Jan de KMS-beheerder, niet wij. Als wij de beheerder waren, konden wij onszelf toegang geven (wel gelogd). Nu ligt het beheer bij Jan, en kunnen wij de policy niet zelf wijzigen. Wil je "wiskundig onmogelijk", dan is dat niveau A: de sleutel uitsluitend bij Jan/Louis, wat automatische AI-verwerking beperkt.

De regel

Wie het dossier aanmaakt, bepaalt de zichtbaarheid

Dataroom aangemaakt doorHoofdsleutelWij (developers) zien
tal@ / jelle@ / naut@workflowautomations.nlKEK-devLeesbaar, voor testen
Jan (notaris) of Louis (advocaat)KEK-clientVersleuteld, niet zichtbaar
De klant (via portaal-link)KEK-clientVersleuteld, niet zichtbaar

Zo kunnen wij blijven ontwikkelen en testen met onze eigen datarooms, terwijl echte klantdossiers standaard buiten ons zicht vallen.

De AI-verwerking

Onversleuteld naar de AI, zonder namen en zonder dat wij meekijken

Het belangrijkste AI-gebruik is due diligence bij overnames: de AI loopt met een vaste regelset door complete documenten en controleert op veelvoorkomende fouten. Twee beschermingen tegelijk: (1) de tekst wordt alleen ontsleuteld in een verwerkings-laag onder een eigen identiteit (niet de developer-identiteit) die niets logt, en (2) voor verzending worden namen, adressen en bedragen vervangen door tokens (pseudonimisering), zodat het model geen identificerende gegevens ziet.

1
Cijfertekst
versleuteld in Supabase
2 KMS
Unwrap DEK
in het geheugen
3
Pseudonimiseer
namen → tokens
4
Naar Scaleway
privé EU-model
5
Herstel & opslaan
weer versleuteld
"Is naar Scaleway sturen niet hetzelfde als zelf op Hetzner hosten?"

Juridisch: ja, vrijwel identiek. In beide gevallen draait het model op de hardware van een EU-verwerker (Scaleway = Frans, Hetzner = Duits, beide buiten de Amerikaanse Cloud Act). Zelf hosten geeft dezelfde juridische positie voor veel meer werk.

Alleen eigen hardware haalt de derde partij echt weg, maar dan word jij de operator die bij de data kan, wat botst met "wij kunnen er niet bij". Gelaagd (encryptie + geblokkeerde verwerker + pseudonimisering + audit) verslaat monolithisch ("ons eigen kastje").

Afweging

De AI-opstelling, per keuze afgewogen

1 · Gedeelde EU-API (Scaleway Generative APIs)

licht gebruik

Serverless, goedkoop, EU, geen training. Maar gedeelde infra: contractueel privé, niet geïsoleerd. Zwakker verhaal voor beroepsgeheim dan dedicated.

2 · Scaleway Managed Inference (dedicated)

aanbevolen basis

Eén model, één GPU, één klant, in je eigen VPC. Geen opslag/training/derden-toegang. EU, geen Cloud Act. Vaste uurprijs, gunstig voor grote DD-batches. Verwerker onder DPA + afgeleide geheimhoudingsplicht. KNB en NOvA staan cloud/verwerkers toe mits passende waarborgen. (Geen juridisch advies, laat toetsen + DPIA.)

3 · Zelf hosten (Hetzner / EU-cloud GPU)

afgeraden

Zelfde juridische positie (Hetzner is nog steeds een verwerker) voor veel meer werk (GPU-ops, patches, uptime). En jullie worden operator, wat botst met "wij kunnen er niet bij".

4 · Eigen hardware (Rotterdam)

toekomstoptie

Geen derde partij meer, maar jullie worden zelf de operator (zwakker "devs niet"-verhaal) en hoge kosten/moeite. Verbetert de juridische positie niet t.o.v. een EU-verwerker onder DPA. Bewaren voor als een klant het eist.

5 · Pseudonimiseringslaag (bovenop elke optie)

vaste laag

Identificerende gegevens worden voor verzending vervangen door consistente, omkeerbare tokens; de mapping blijft binnen de grens. De AI-leverancier ziet geen namen. Werkt voor DD-foutcontrole omdat structuur en inhoud intact blijven. Zie de implementatie →

Onze aanbeveling

Optie 2 + Optie 5: Scaleway Managed Inference met een vaste pseudonimiseringslaag, boven op de encryptie (Jan's sleutel) en de audit. Simpel te beheren, juridisch verdedigbaar, en het sterkste verhaal.

Bewijsbaarheid

Alles is aantoonbaar gelogd, ook over vijf jaar

Overzicht

Rollen × rechten

Kan …DeveloperJan & LouisKlant
Dashboards, dossierlijsten, status zienjajanee
Systeem beheren, deployen, supportjaneenee
Inhoud van klant-dossiers lezenneejaeigen
Documenten toevoegentestjaja
Dataroom verwijderentestjanee
AI-analyse op klantdatagepseudonimiseerdjanee

Levend document, concept ter bespreking. De sterkere varianten (kluis-beheer bij een neutrale partij, confidential computing, of volledig niveau A) zijn hardeningsstappen die later kunnen worden toegevoegd zonder het model om te gooien.