Encryptie in rust vs in transit: beide zijn belangrijk
Begrijp het verschil tussen encryptie in rust en in transit. Waarom u beide nodig heeft voor echt veilig bestandsdelen.
Encryptie in transit beschermt gegevens die zich verplaatsen tussen twee punten — je browser en een server, bijvoorbeeld — met TLS 1.3 met AES-256-GCM of ChaCha20-Poly1305. Encryptie in rust beschermt gegevens die op schijf staan, doorgaans met AES-256-XTS voor volledige schijfversleuteling of AES-256-GCM per bestand. Geen van beide alleen is voldoende. TLS beschermt tegen netwerkafluisteren maar ontsleutelt bij de server; versleuteling in rust beschermt opgeslagen gegevens maar is nutteloos als de sleutels naast de versleutelde tekst leven. Echte beveiliging komt door beide te layeren, bij voorkeur samen met client-side (end-to-end) encryptie zodat de server nooit plaintext ziet.
Twee verschillende bedreigingen, twee verschillende maatregelen
De bedreigingen zien er anders uit afhankelijk van waar je gegevens zich bevinden:
In transit (netwerkpad): een koffieshop-aanvaller met een pakketsnifferr, een gecompromitteerde ISP-router, een nationale overheid die onderzeese kabels onderschept. De Snowden-documenten van 2013 onthulden het MUSCULAR-programma van de NSA dat interne Google-fiberverbindingen aftapte. Verdediging: TLS 1.3, bij voorkeur met certificaatpinning voor apps.
In rust (opslag): een gestolen laptop, een gelekte back-uptape, een verkeerd geconfigureerde S3-bucket, een malafide datacentermedewerker met schijftoegang. De Equifax-inbreuk van 2017 stelde 147 miljoen records bloot, deels omdat gegevens onversleuteld lagen. Verdediging: LUKS, BitLocker, FileVault voor schijven; AES-256-GCM of AES-256-XTS per bestand of blok.
De fout is het ene als vervanging voor het andere behandelen. TLS beschermt geen databasedump. Schijfversleuteling stopt geen man-in-the-middle-aanval.
Hoe TLS 1.3 gegevens in transit beschermt
TLS 1.3, gestandaardiseerd in RFC 8446 (2018), is de moderne standaard. Het gebruikt:
- Forward secrecy standaard via efemere ECDHE-sleuteluitwisseling. Zelfs als de langetermijnsleutel van een server uitlekt, blijven vroegere sessies beschermd.
- Alleen AEAD-ciphers — AES-128-GCM, AES-256-GCM of ChaCha20-Poly1305. Oude CBC-modi en RC4 zijn verdwenen.
- Enkele round-trip handshake (1-RTT), of nul round-trips (0-RTT) voor hervatting.
- Versleutelde handshake zodat passieve waarnemers de certificaatketen niet kunnen zien.
Elke gerenommeerde bestandsoverdrachtsservice — WeTransfer, SwissTransfer, Tresorit, Proton Drive, HexaTransfer — draait TLS 1.3 met HSTS-headers die HTTPS afdwingen voor minimaal 12 maanden. Je kunt dit verifiëren via het testssl-hulpmiddel van SSL Labs; alles met een score onder A- heeft configuratieproblemen.
Hoe versleuteling in rust op de server werkt
Zodra bestanden arriveren en TLS eindigt, neemt versleuteling in rust het over. Er zijn verschillende lagen:
- Op blokniveau (volledige schijf): AES-256-XTS op LUKS (Linux), BitLocker (Windows), FileVault (macOS) of cloudprovider-equivalenten zoals AWS EBS-versleuteling. Beschermt tegen gestolen schijven.
- Op bestandssysteemniveau: eCryptfs, Fscrypt op ext4/F2FS. De bestanden van elke gebruiker versleuteld met afzonderlijke sleutels.
- Op objectopslagsniveau: AWS S3 SSE-KMS, Azure Blob met Storage Service Encryption, Google Cloud Storage met door de klant beheerde sleutels. Elk object versleuteld met AES-256-GCM.
- Op applicatieniveau: de service versleutelt elk bestand in zijn eigen code voordat het naar opslag wordt geschreven, met sleutels gehouden in een KMS of HSM.
Applicatieniveau is het sterkst omdat de versleuteling plaatsvindt voordat enig opslagsysteem de gegevens ziet. AWS KMS rekent €1/sleutel/maand plus €0,03 per 10.000 verzoeken — goedkoop genoeg dat serieuze services het per bestand gebruiken.
De val van "sleutels naast de versleutelde tekst"
Hier faalt versleuteling in rust vaak. Als de sleutels zijn opgeslagen op dezelfde server als de versleutelde tekst, krijgt een aanvaller die de server binnendringt beide. De provider kan technisch gezien het vakje "versleuteld in rust" aanvinken voor naleving terwijl hij nul echte bescherming biedt tegen servercompromis.
Goede architecturen scheiden verantwoordelijkheden:
- Versleutelde tekst op S3 of vergelijkbare objectopslag.
- Versleutelingssleutels in AWS KMS, Google Cloud KMS, Azure Key Vault of een toegewijd HSM.
- Toegang tot sleutels gecontroleerd door kortlevende IAM-referenties en auditlogboeken.
Geweldige architecturen gaan verder: de sleutels bestaan helemaal niet op de server. Client-side versleuteling (E2EE) betekent dat de browser van de gebruiker de sleutel genereert, het bestand versleutelt en de sleutel bewaart. De server slaat versleutelde tekst op en heeft niets te lekken.
Waar versleutelingshiaten verschijnen
Zelfs met beide maatregelen in plaats is gegevens kort plaintext op verschillende plaatsen:
- In servergeheugen tijdens uploadverwerking, virusscan of miniatuurgeneratie. Een geheugendump tijdens dit venster onthult plaintext.
- In toegangslogboeken als bestandsnamen of inhoudfragmenten worden gelogd voor foutopsporing.
- In back-uptapes als back-ups niet dezelfde versleuteling erven.
- Tijdens compressie of transcodering waarbij de service bestandsinhoud verwerkt.
- In de browsercache na het downloaden als de gebruiker die niet wist.
Deze hiaten zijn waarom zero-knowledge (client-side) versleuteling van belang is. Wanneer bestanden in de browser worden versleuteld vóór de upload, worden de serverside hiaten irrelevant — de server ziet alleen versleutelde tekst.
Wat de grote diensten daadwerkelijk doen
Een ruwe classificatie op basis van openbare documentatie:
- Google Drive, Dropbox, OneDrive: TLS 1.3 in transit, AES-256 in rust met door de provider gehouden sleutels. Niet zero-knowledge — de provider kan je bestanden lezen.
- WeTransfer (gratis laag): TLS 1.3, AES-256 in rust op AWS S3. Provider houdt sleutels.
- Box Enterprise: TLS 1.3, AES-256-GCM in rust, optionele door de klant beheerde sleutels (Box KeySafe).
- Tresorit, Proton Drive, SwissTransfer E2EE-laag, HexaTransfer: TLS 1.3 in transit, AES-256-GCM in rust, maar de per-bestandssleutels zijn door de client gegenereerd en bereiken de server nooit. Effectief zero-knowledge.
Voor gevoelige gegevens biedt alleen de laatste categorie zinvolle bescherming tegen insidergevaren en geldige juridische eisen.
Naleving en het "defense in depth"-mandaat
Regelgevers vereisen expliciet beide:
- AVG Artikel 32 vereist "pseudonimisering en versleuteling van persoonsgegevens" zonder beperking in welke toestand de gegevens zich bevinden.
- HIPAA Security Rule 45 CFR § 164.312(a)(2)(iv) en (e)(2)(ii) vereist versleuteling voor ePHI zowel in transit als in rust.
- PCI DSS 4.0 Vereisten 3 en 4 onderscheidt "bescherm opgeslagen kaarthoudergegevens" (in rust) van "bescherm kaarthoudergegevens met sterke cryptografie tijdens verzending" (in transit).
- FIPS 140-3-validatie is van toepassing op cryptografische modules die in beide contexten worden gebruikt.
Slechts één bieden is een nalevingsfout zelfs voordat het een beveiligingsfout wordt.
Hoe je beide actief kunt verifiëren
Vijf snelle controles voor elke bestandsoverdrachtsservice:
- Voer
testssl.sh https://provider.comuit om TLS 1.3 met alleen sterke ciphers te bevestigen. - Controleer op HSTS-headers met
max-agevan minimaal 31.536.000 (één jaar). - Lees het beveiligingswitboek voor expliciete vermelding van AES-256-GCM of AES-256-XTS in rust.
- Bevestig dat sleutels zijn gehouden in een KMS of HSM, niet de applicatiedatabase.
- Zoek naar SOC 2 Type II- of ISO 27001-certificering — beide vereisen gedocumenteerde maatregelen in rust en in transit.
Bonus: controleer of client-side versleuteling beschikbaar is als optie. Als ja, schakel die in voor alles gevoeligs.
Correct layeren
Het patroon dat daadwerkelijk werkt:
- Browser versleutelt bestand met een willekeurige AES-256-GCM-sleutel (client-side).
- Versleutelde tekst reist via TLS 1.3 naar de server (in transit).
- Server slaat versleutelde tekst op in AES-256-versleutelde opslag (in rust).
- Decoderingssleutel leeft alleen in het URL-fragmentgedeelte van de deel-URL, nooit naar de server verzonden.
Drie onafhankelijke lagen. Breek er één, de anderen houden stand. Dit is het ontwerp dat HexaTransfer gebruikt, samen met Tresorit Send, Proton Drive-deellinks en de E2EE-modus van SwissTransfer.
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