Platform · MindooDB-beveiligingsmodel

Ga uit van gecompromitteerde servers

Dit is het beveiligingsmodel op platformniveau achter elke MindooDB-installatie — inclusief Haven Beveiliging & privacy. MindooDB is zo ontworpen dat opslag- en sync-infrastructuur niet vertrouwd hoeft te worden. Drie onafhankelijke versleutelingslagen beschermen de vertrouwelijkheid van gegevens. Cryptografische handtekeningen bewijzen wie iets schreef en verhinderen manipulatie. Zelfs een volledig gekraakte server levert alleen versleutelde gegevens en publieke sleutels op — geen leesbare gegevens, geen privésleutels, geen gebruikersnamen.

Zero-trust-beveiligingsarchitectuur: sleutels blijven op de apparaten, versleutelde gegevens gaan via een versleutelingsschild naar servers die ze niet kunnen ontsleutelen
Gelaagde beveiliging

Drie onafhankelijke versleutelingslagen

Het sync-protocol van MindooDB stapelt de bescherming over meerdere lagen. Ook als één laag is gekraakt, blijven de andere de vertrouwelijkheid van gegevens beschermen. Dat is het architectonische hart van de beveiliging van MindooDB: je hoeft geen enkele losse laag te vertrouwen om veilig te zijn.

Laag 1
Versleuteling op applicatieniveau

Voordat een vermelding de store bereikt, wordt haar payload met een symmetrische sleutel (AES-256-GCM) versleuteld. Die versleuteling hoort bij het datamodel, niet bij het transport. De server die de vermeldingen bewaart, kan de inhoud niet lezen — hij ziet alleen versleutelde bytes.

Laag 2
Payload-versleuteling in het transport

Antwoordt de server op een sync-verzoek, dan verpakt hij de payloads van de vermeldingen in een extra RSA-laag met de publieke sleutel van de vragende gebruiker. Zelfs wie het HTTP-antwoord onderschept, kan het zonder de privé-RSA-sleutel van de ontvanger niet ontsleutelen.

Laag 3
Kanaalversleuteling

Alle communicatie loopt over TLS. Dat beschermt de metadata (vermeldings-ID's, tijdstempels, verzoekparameters) die de payload-lagen niet dekken. Samen sluiten de drie lagen de gegevens volledig af: opgeslagen, onderweg en op de verbinding.

Vertrouwensmodel

Hoe vertrouwen ontstaat

Vertrouwen heeft in MindooDB precies één wortel: de Ed25519-ondertekeningssleutel van de beheerder. De beheerder ondertekent de directory-database, waarin de gebruikersregistraties staan. De publieke sleutel van elke gebruiker staat in een door de beheerder ondertekende directory-vermelding. Krijgt een client of server een documentwijziging binnen, dan toetst die de publieke sleutel van de ondertekenaar aan de directory — staat de sleutel er niet in, dan wordt de wijziging afgewezen. Authenticatie op de server is niet nodig; vertrouwen ontstaat uit cryptografisch bewijs.

Vertrouwensketen
De ondertekeningssleutel van de beheerder ondertekent de directory; de directory bevat door de beheerder ondertekende gebruikersregistraties; geregistreerde gebruikers ondertekenen documentwijzigingen met versleutelde payloads
De admin-sleutel ondertekent de directory. De directory bepaalt welke gebruikers worden vertrouwd. Gebruikers ondertekenen wijzigingen. Servers kunnen valideren zonder bedrijfsgegevens te lezen.

Wat de server wel en niet ziet

Dit is het praktische gevolg van de zero-trust-architectuur. Een server (of elke tussenstap, ook relayknopen) verwerkt uitsluitend versleutelde gegevens en publieke informatie. Alles wat gevoelig is, blijft op de apparaten van de clients.

De server ziet
  • Publieke ondertekeningssleutels (Ed25519)
  • Publieke versleutelingssleutels (RSA-OAEP)
  • Versleutelde blobs (AES-256-GCM)
  • Metadata van vermeldingen (tijdstempels, content-hashes)
  • Hashes van gebruikersnamen (SHA-256 — niet de namen zelf)
De server ziet nooit
  • Documentinhoud (end-to-end versleuteld)
  • Gebruikersnamen (versleuteld met de RSA-sleutel van de admin)
  • Privésleutels voor ondertekening of versleuteling
  • Symmetrische versleutelingssleutels (tenant of benoemd)
  • Gedeelde wachtwoorden (alleen out-of-band)
Toegangscontrole

Toegangscontrole via versleuteling

MindooDB regelt toegangscontrole met versleutelingssleutels, niet met rechten op de server. Heb je de sleutel, dan kun je het document ontsleutelen. Heb je hem niet, dan is het document onleesbaar. Daarmee werkt toegangscontrole overal gelijk — of de gegevens op een server staan, op een peer-apparaat of op een relayknoop die ze niet kan lezen. Voor fijnmazige controle over schrijfbewerkingen — wie documenten mag aanmaken, wijzigen, verwijderen, snapshotten of wissen — is er de aparte pagina Toegangscontrole.

Standaardsleutel van de tenant

Alle documenten worden versleuteld met de AES-256-standaardsleutel van de tenant, tenzij een andere sleutel is opgegeven. Elke geregistreerde gebruiker krijgt die sleutel bij de onboarding. Geschikt voor algemene gegevens binnen de hele tenant.

Benoemde sleutels

Voor gevoelige documenten maak je een benoemde versleutelingssleutel aan en deel je die alleen met bevoegde gebruikers. Sleutels worden offline verdeeld (de versleutelde sleutel per e-mail, het wachtwoord telefonisch of persoonlijk) of via een beleidsregel zonder admin-inzage: wie de sleutel al heeft, pakt hem voor elke ontvanger in met diens persoonlijke publieke (RSA-)sleutel, zodat een beheerder hem kan doorgeven zonder hem ooit te lezen. Alleen wie de sleutel heeft, kan ontsleutelen.

$publicinfos-sleutel

Een speciale sleutel die uitsluitend de toegangscontrolevermeldingen van de directory versleutelt (gebruikersregistraties, intrekkingen, groepen). Servers controleren daarmee welke ondertekeningssleutels worden vertrouwd — zonder gebruikersnamen of bedrijfsgegevens te zien. Gebruikersnamen staan er als SHA-256-hashes in; de echte namen zijn versleuteld met de RSA-sleutel van de admin.

Toegangscontrole afdwingen
Bewerking Afgedwongen door
Gebruiker registreren Admin-handtekening vereist (Ed25519)
Document aanmaken Versleutelingssleutel nodig (standaard of benoemd)
Document wijzigen Ondertekeningssleutel (geregistreerde gebruiker) + versleutelingssleutel nodig
Document lezen Ontsleutelingssleutel nodig
Gebruiker intrekken Admin-handtekening vereist; blokkeert sync en wijst volgende wijzigingen af
Authenticatie

Challenge-response-authenticatie en veilige onboarding

MindooDB gebruikt geen wachtwoorden of tokens op de server. De authenticatie berust op Ed25519-challenge-response: de server maakt een willekeurige challenge, de client ondertekent die met zijn privésleutel en de server toetst de handtekening aan de geregistreerde publieke sleutel. Dat bewijst de identiteit zonder geheimen te delen.

Sync-authenticatie

Elke sync-sessie begint met een challenge-response-handshake:

  • De client stuurt zijn publieke ondertekeningssleutel naar de server
  • De server zoekt de sleutel op in de directory en stuurt een willekeurige challenge
  • De client ondertekent de challenge met zijn privésleutel
  • De server toetst de handtekening, controleert of de gebruiker is ingetrokken en geeft een kortlevende JWT uit

Geen wachtwoorden of sessiedatabases op de server. Een ingetrokken gebruiker komt zelfs niet aan het begin van de authenticatie.

Nieuwe gebruikers veilig toelaten

Nieuwe gebruikers komen erbij via een handshake in drie stappen waarbij privésleutels het apparaat nooit verlaten:

  • Toetredingsverzoek — De nieuwe gebruiker maakt zijn sleutels lokaal aan en stelt een verzoek op dat alleen publieke sleutels bevat. Dat is veilig via elk kanaal te versturen.
  • Goedkeuring door de beheerder — De beheerder registreert de gebruiker in de directory en versleutelt de symmetrische sleutels met een eenmalig deelwachtwoord.
  • Uitwisseling via twee kanalen — Het toetredingsantwoord gaat per e-mail of chat; het deelwachtwoord komt apart telefonisch of persoonlijk.
Cryptografische primitieven

Algoritmen en garanties

MindooDB gebruikt gevestigde, breed onderzochte cryptografische algoritmen. Geen eigen cryptografie. De keuzes wegen het beveiligingsniveau af tegen compatibiliteit op alle platformen (Node.js, browsers, React Native).

Algoritmen
  • Ondertekening: Ed25519 (128 bits beveiliging, elliptische kromme)
  • Payload-versleuteling: AES-256-GCM (256 bits beveiliging)
  • Transportversleuteling: RSA-OAEP met SHA-256 (3072-bits sleutels)
  • Sleutelafleiding: PBKDF2 met een eigen salt per sleuteltype
  • Token-ondertekening: HMAC-SHA256
  • Hashing: SHA-256 (content-adressering, privacy van gebruikersnamen)
Beveiligingsgaranties
  • Vertrouwelijkheid: AES-256-GCM-versleuteling — alleen wie de sleutel heeft, kan lezen
  • Authenticiteit: Ed25519-handtekeningen — bewijzen wie een wijziging maakte
  • Integriteit: Hash-ketening — manipulatie breekt de ketting en is op elk punt te zien
  • Onweerlegbaarheid: Handtekeningen zijn niet na te maken — wie iets schreef, is te bewijzen
  • Privacy: Gebruikersnamen gehasht en versleuteld — de server kan gebruikers niet herkennen
Dreigingsmodel

Waartegen het systeem beschermt

MindooDB gaat ervan uit dat servers, netwerkinfrastructuur en zelfs sommige peers gecompromitteerd of kwaadwillend kunnen zijn. Het beveiligingsmodel houdt de vertrouwelijkheid en integriteit van gegevens ook onder die omstandigheden overeind.

Afgeweerde aanvallen
  • Gekraakte server — Een aanvaller krijgt alleen versleutelde gegevens en publieke sleutels. Niets leesbaar, geen privésleutels, geen gebruikersnamen.
  • Afluisteren van het netwerk — Drie versleutelingslagen beschermen de gegevens, ook als TLS is gekraakt.
  • Onbevoegde wijzigingen — Elke wijziging is ondertekend; niet of verkeerd ondertekende wijzigingen worden afgewezen.
  • Manipulatie — Hash-ketening maakt elke aanpassing zichtbaar.
  • Toegang van ingetrokken gebruikers — Het intrekken werkt bij de challenge en bij de tokencontrole; de sync is meteen geblokkeerd.
  • Meelezen bij het relay — Relayknopen bewaren en geven versleutelde vermeldingen door die ze niet kunnen ontsleutelen.
Zichtbare metadata

De inhoud van de payload is altijd versleuteld, maar een deel van de metadata is bewust zichtbaar voor de server. Dat is een doelbewuste trade-off: het sync-protocol heeft metadata nodig om vermeldingen af te stemmen.

  • Zichtbaar: tijdstempels van vermeldingen, content-hashes, documentstructuur (hoeveel vermeldingen per document), toegangspatronen (wanneer gebruikers synchroniseren)
  • Niet zichtbaar: documentinhoud, gebruikersnamen, versleutelingssleutels, inhoud van bijlagen

Content-hashes verraden wanneer twee vermeldingen identieke versleutelde gegevens bevatten (voor de deduplicatie). Dat is een aanvaarde trade-off voor efficiënte opslag.

Eerlijke trade-offs

Wat je moet weten

MindooDB is bètasoftware met een sterk cryptografisch fundament. Er is een uitgebreide beveiligingsaudit uitgevoerd die benoemt welke onderdelen voor productiegebruik nog steviger moeten. Wij denken dat openheid over grenzen meer vertrouwen wekt dan marketingbeloften.

Grenzen van het intrekken

Een gebruiker intrekken blokkeert alle verdere sync en wijst zijn volgende wijzigingen af. Gegevens die al naar zijn apparaat zijn gesynchroniseerd, blijven daar echter leesbaar — geen enkel systeem kan verwijdering garanderen op een apparaat dat nooit meer verbinding maakt. Beperk het risico: gebruik benoemde sleutels voor gevoelige documenten (kleiner bereik) en roteer sleutels als gebruikers vertrekken. Haven Enterprise voegt aan diezelfde governance-beleidsregels een admin-ondertekend wissen op afstand toe: de tenant verdwijnt van een gestolen of afgedankt apparaat zodra dat weer verbinding maakt.

Complexiteit van sleutelbeheer

Meerdere sleutels per gebruiker (ondertekening, versleuteling, benoemde symmetrische sleutels) moeten veilig worden verdeeld. Beperk het risico: één wachtwoord ontgrendelt alle sleutels via PBKDF2 met verschillende salts. De KeyBag biedt daarvoor één gezamenlijke sleutelopslag. De join-request/response-flow regelt de sleuteluitwisseling voor nieuwe gebruikers. Haven Enterprise automatiseert het werk daarna: admin-ondertekende beleidsregels voor sleuteldistributie geven sleutels aan gebruikers en groepen — en trekken ze weer in — per ontvanger ingepakt, en elke client stemt zijn KeyBag bij de volgende sync af.

Query's op de server vragen om uitdrukkelijk gedeelde sleutels

Standaard kan de server niet in documentinhoud zoeken, omdat hij alleen versleutelde gegevens ziet. Alle query's lopen via de client met incrementele indexering. Vraagt jouw toepassing toch om verwerking op de server (bijvoorbeeld een online boekingssysteem of een openbare website), dan kun je het serverproces een ontsleutelingssleutel geven of een deel van de gegevens met hem delen. Dat is per installatie een bewuste architectuurkeuze — standaard geldt vertrouwelijkheid, met serveropslag alleen waar je die zelf aanzet.

Stand van de beveiligingsaudit

Een uitgebreide beveiligingsaudit heeft benoemd wat steviger moet: rate limiting op de endpoints, het intrekken van JWT-tokens en rotatie van de admin-sleutel. Wijzigingen die ingetrokken gebruikers met terugwerkende kracht aanbrengen, worden inmiddels tegengehouden door getuigenbewijzen met vertrouwde tijd (zie het model van de toegangscontrole). Het cryptografische fundament (Ed25519, AES-256-GCM, RSA-OAEP) staat stevig. Het steviger maken van de operatie loopt.

Compliance

Technische maatregelen die compliance ondersteunen

MindooDB levert cryptografische bouwstenen die de belangrijkste technische eisen van gangbare regelgeving afdekken. Compliance zelf blijft een organisatorische taak — MindooDB geeft je het technische fundament.

Ingebouwd: audit & integriteit
  • ✅ Volledige schrijfgeschiedenis (append-only)
  • ✅ Cryptografische handtekeningen (bewijs van auteurschap)
  • ✅ Manipulatievrije vastlegging (hash-geketend)
  • ✅ Tijdreizen (elke stand reconstrueren)
Ingebouwd: gegevensbescherming
  • ✅ End-to-end versleuteling (server kan niet ontsleutelen)
  • ✅ Fijnmazige toegangscontrole (benoemde sleutels)
  • ✅ Gecoördineerd wissen (purgeDocHistory)
  • ⚙️ Leestoegang loggen (bouw je op app-niveau)

Deze maatregelen ondersteunen programma's volgens HIPAA (zorg), SOX (financieel), AVG (gegevensbescherming) en PCI-DSS (betalingen). Uitgebreide compliance-documentatie bekijken →

In actie zien
Haven - de werkruimte op dit beveiligingsmodel

MindooDB Haven is een PWA in de browser die dezelfde end-to-end versleuteling, apps in een sandbox en local-first sync in één rustige werkruimte op elk platform brengt. Probeer de gratis bèta of lees je in de details in.