Ga naar inhoud
HexaTransfer
Terug naar blog
Encryptie & beveiliging

Zero-knowledge-architectuur: waarom de server niets kan zien

Leer hoe zero-knowledge-architectuur ervoor zorgt dat zelfs de dienstverlener uw bestanden niet kan bekijken.

Zero-knowledge-architectuur betekent dat de serviceprovider geen technische mogelijkheid heeft om je bestanden te lezen — de versleutelingssleutels bereiken hun servers nooit, en er is geen hoofdsleutel, geen achterdeur, geen "vertrouw ons" nodig. Je browser versleutelt bestanden met AES-256-GCM vóór de upload met een sleutel die lokaal is gegenereerd, en die sleutel reist naar de ontvanger alleen via het URL-fragment na #, dat browsers nooit naar servers verzenden. Zelfs onder een geldig gerechtelijk bevel kan de provider alleen versleutelde tekst produceren. Dit is het model dat Tresorit, Proton, SwissTransfer en HexaTransfer gebruiken, en het is wiskundig anders dan "versleuteld in rust."

Het bewijs zit in wat de server kan produceren

De duidelijkste test van zero-knowledge: wat zou het bedrijf kunnen overhandigen als het gedwongen wordt? In traditionele cloudopslag (Google Drive, Dropbox, OneDrive) is het antwoord: je bestanden, in plaintext. Het transparantierapport van Google over 2023 toont dat ze hebben voldaan aan 83% van de Amerikaanse overheidsgegevensverzoeken, waarbij gebruikersinhoud werd geproduceerd waar wettelijk vereist. Dat is geen falen van de beveiliging van Google — het is hoe de architectuur werkt.

Met zero-knowledge kan het bedrijf produceren:

  • Versleutelde bestandsblobs (nutteloos zonder de sleutel)
  • Accountmetadata (e-mail, aanmeldings-IP)
  • Upload- en download-IP-adressen, tijdstempels
  • Betalingsinformatie indien van toepassing

Ze kunnen niet produceren: bestandsnamen, inhoud, identiteit van de ontvanger of decoderingssleutels. Niet omdat ze weigeren — maar omdat ze ze niet hebben.

De URL-fragmenttruc, precies uitgelegd

De kern technische zet is het gebruik van het URL-fragment als een verborgen sleutelkanaal. Wanneer een browser https://hexatransfer.com/d/xyz789#k=BASE64SLEUTEL aanvraagt, stuurt hij alleen GET /d/xyz789 naar de server. Het fragment blijft in de adresbalk van de browser. JavaScript roept vervolgens window.location.hash aan om de sleutel te lezen en geeft die door aan crypto.subtle.decrypt().

Dit werd rond 2013 gepioneerd door Mega.nz en verfijnd door Firefox Send voordat Mozilla het in 2020 sloot. Het patroon is nu standaard. De serverlogboeken, inclusief toegangslogboeken op nginx of Caddy, leggen het fragment nooit vast omdat HTTP RFC 3986 het definieert als alleen client-side.

Een provider zou theoretisch het fragment kunnen loggen via client-side JavaScript, wat de reden is waarom zero-knowledge-diensten hun clientcode publiceren voor inspectie en het vaak als ondertekende statische assets van een aparte oorsprong aanleveren.

Waarom dit verschilt van "versleuteld in rust"

Elke cloudprovider versleutelt bestanden in rust — het is basisvereiste en meestal vereist door SOC 2 Type II- en ISO 27001-certificeringen. Maar "versleuteld in rust" met door de provider gehouden sleutels betekent dat de versleuteling onzichtbaar is voor aanvallers met gestolen schijven en onzichtbaar voor jou in de zin dat de provider automatisch ontsleutelt op verzoek.

Zero-knowledge keert het sleutelbeheer om: jij houdt de sleutel, de provider houdt de versleutelde tekst. De provider wint niets door te ontsleutelen want het kan niet. Dit is van belang onder drie specifieke bedreigingen:

  1. Malafide medewerkers. Een medewerker van een provider met databasetoegang ziet alleen versleutelde tekst.
  2. Overheidsverzoeken. AVG Artikel 48 en Amerikaanse CLOUD Act-verzoeken kunnen openbaarmaking afdwingen, maar je kunt niet openbaar maken wat je niet hebt.
  3. Serverinbreuken. De LastPass-inbreuk van 2021 stelde versleutelde kluizen bloot; zwakke hoofdwachtwoorden werden nog steeds gekraakt, maar het zero-knowledge-ontwerp voorkwam massale plaintext-blootstelling.

Wat versleuteld is, wat metadata is

Een naïeve implementatie versleutelt bestandsinhoud maar laat bestandsnamen, -groottes en mappenstructuur zichtbaar. Echte zero-knowledge versleutelt ook de bestandsnaam, doorgaans door een JSON-header zoals {"name": "Q4-financieel.pdf", "type": "application/pdf"} toe te voegen aan de bestandsbytes vóór AES-GCM-versleuteling.

Metadata die moeilijk te verbergen is:

  • Bestandsgrootte — de versleutelde tekstlengte benadert de plaintext-lengte. Opvullen naar vaste emmers (1 MB, 10 MB, 100 MB, 1 GB) verbergt dit maar verspilt bandbreedte.
  • Uploadtiming — het correleren van tijdstempels met andere gegevens kan nog steeds informatie lekken.
  • IP-adressen — de provider ziet wie er heeft geüpload en gedownload. Combineer met Tor of een vertrouwde VPN als dit van belang is.

Proton en Tresorit publiceren gedetailleerde matrices voor metadata-blootstelling. SwissTransfer en HexaTransfer kiezen voor een eenvoudigere aanpak: minimale metadata, korte bewaring (24 uur tot 7 dagen) en geen accountkoppeling voor gratis overdrachten.

Het authenticatieprobleem

Zero-knowledge creëert een uitdaging: als de server je bestanden niet kan ontsleutelen, hoe authenticeert hij je dan om vreemden van downloaden te weerhouden? Drie gangbare patronen:

  • Op links gebaseerde authenticatie. Bezit van de URL (en het fragment) is autorisatie. Gebruikt door SwissTransfer, HexaTransfer, Tresorit Send. Eenvoudig, werkt zonder accounts.
  • Wachtwoordbeveiligde links. Het URL-fragment bevat een salt; de werkelijke sleutel wordt afgeleid met PBKDF2 van het wachtwoord. De server slaat een verificator op (hash van de sleutel) om verkeerde gissingen snel af te wijzen.
  • Account-gebonden zero-knowledge. Proton en Tresorit leiden je hoofdsleutel af van je inlogwachtwoord via Argon2id, en gebruiken die vervolgens om per-bestandssleutels te ontgrendelen die versleuteld op de server zijn opgeslagen.

Elk heeft afwegingen. Op links gebaseerd is het eenvoudigst maar lekt de sleutel naar iedereen die de URL krijgt. Wachtwoordbeschermd voegt een tweede factor toe. Account-gebonden vereist dat je de clientcode vertrouwt om de hoofdsleutel niet te exfiltreren.

Implementatieproblemen die zero-knowledge breken

Enkele praktijkfouten de moeite waard om te kennen:

  • Serverside bestandsvoorbeelden. Als de provider miniaturen genereert of tekst extraheert voor zoeken, hebben ze plaintext nodig. Zero-knowledge-diensten kunnen deze functies niet aanbieden voor versleutelde inhoud.
  • Synchronisatieconflictresolutie. Het vergelijken van bestandsinhoud op apparaten vereist normaal gesproken plaintext. Syncthing en Cryptomator handelen dit af met client-side diffs.
  • Analytics-SDK's. Scripts van derden van Google Analytics of Segment kunnen window.location.hash lezen in clientcode. Zero-knowledge-diensten hosten analytics zelf of verwijderen fragmenttoegang.
  • Wachtwoordherstel. Als de provider je wachtwoord kan resetten en je toch toegang geeft tot oude bestanden, moeten ze een herstelsleutel bezitten — wat zero-knowledge verbreekt. Proton waarschuwt expliciet dat wachtwoordherstel betekent dat versleutelde gegevens verloren gaan.

Wie werkelijk zero-knowledge levert

Een korte lijst van diensten met geloofwaardige zero-knowledge-claims, geverifieerd door audits van derden (Cure53, NCC Group, Trail of Bits):

  • Tresorit — Zwitsers, SOC 2 Type II, zero-knowledge bestandssynchronisatie en Send.
  • Proton Drive — Zwitsers, gebaseerd op het Proton Mail-cryptografiemodel.
  • SwissTransfer — gratis laag met optionele E2EE, gerund door Infomaniak.
  • Mega.nz — Nieuw-Zeeland, gepubliceerd cryptografiewitboek.
  • HexaTransfer — browsergebaseerd, geen account, 10 GB per overdracht.

Diensten die versleuteld zijn maar niet zero-knowledge: Google Drive, Dropbox, OneDrive, Box, iCloud (behalve de Advanced Data Protection-laag) en de standaardlaag van WeTransfer.

In de praktijk toepassen

Voordat je een dienst vertrouwt met gevoelige bestanden, doorloop je deze checklist:

  • Stelt het privacybeleid dat de provider je bestanden niet kan lezen?
  • Is er een gepubliceerd beveiligingswitboek dat AES-256-GCM en de KDF noemt?
  • Bevat de deel-URL een fragment (tekst na #)?
  • Zijn er auditrapporten van derden uit de afgelopen 24 maanden?
  • Is de clientcode open source of minimaal auditeerbaar?

Vier ja's betekent dat je een zero-knowledge-dienst hebt gevonden. Drie of minder betekent dat de provider je bestanden kan zien.

Probeer het op hexatransfer.com — gratis, zonder account, tot 10 GB.

Verstuur grote bestanden veilig met end-to-end-versleuteling

Draag bestanden tot 10 GB gratis over met end-to-end-versleuteling. Geen account nodig. Uw bestanden worden in uw browser versleuteld voordat ze worden geüpload — niemand anders kan ze lezen.

Een bestand verzenden