Hoe de versleuteling werkt
SG/Send gebruikt AES-256-GCM symmetrische versleuteling, volledig uitgevoerd in uw browser. De server ziet nooit uw onversleutelde gegevens, uw bestandsnamen of uw versleutelingssleutels. Deze pagina legt precies uit hoe het werkt.
Symmetrische versleuteling: één sleutel, twee bewerkingen
SG/Send gebruikt symmetrische versleuteling — dezelfde sleutel versleutelt en ontsleutelt het bestand. Dit is het eenvoudigste en snelste versleutelingsmodel en, mits correct uitgevoerd, het veiligste voor bestandsoverdracht.
Wat is AES-256-GCM?
AES (Advanced Encryption Standard) is het versleutelingsalgoritme dat wordt gebruikt door overheden, banken en legers wereldwijd. 256 is de sleutelgrootte in bits — er zijn 2256 mogelijke sleutels, waardoor brute force computationeel onmogelijk is. GCM (Galois/Counter Mode) voegt geauthenticeerde versleuteling toe — het versleutelt niet alleen, maar detecteert ook of iemand de cijfertekst heeft gemanipuleerd.
Waarom symmetrisch?
Symmetrische versleuteling gebruikt één sleutel voor zowel versleuteling als ontsleuteling. Dit verschilt van asymmetrische versleuteling (zoals RSA) die een sleutelpaar gebruikt. Voor bestandsoverdracht is symmetrisch de juiste keuze: het is snel, goed begrepen en de Web Crypto API biedt een beproefde implementatie in elke moderne browser.
De versleutelingsstroom: stap voor stap
Dit is precies wat er gebeurt wanneer u een bestand verstuurt via SG/Send.
Sleutelgeneratie
Wanneer u een bestand selecteert, genereert uw browser een willekeurige 256-bits AES-sleutel met behulp van de Web Crypto API (crypto.subtle.generateKey). Dit gebruikt de cryptografisch veilige willekeurige nummergenerator van het besturingssysteem. De sleutel bestaat alleen in het geheugen van uw browser.
IV-generatie
Een 12-byte initialisatievector (IV) wordt willekeurig gegenereerd (crypto.getRandomValues). De IV zorgt ervoor dat het tweemaal versleutelen van hetzelfde bestand verschillende cijfertekst oplevert. De IV is niet geheim — deze wordt vooraan de versleutelde uitvoer geplaatst en met de cijfertekst meegestuurd.
Versleuteling
Het bestand wordt in de browser versleuteld met crypto.subtle.encrypt met het AES-GCM-algoritme, de gegenereerde sleutel en de IV. De uitvoer is cijfertekst + een 128-bits authenticatietag. De authenticatietag is de integriteitsgarantie van GCM — als iemand ook maar één bit van de cijfertekst wijzigt, mislukt de ontsleuteling.
Uploaden
Alleen de versleutelde uitvoer (IV + cijfertekst + authenticatietag) wordt naar de server geüpload. De server ontvangt een blob van willekeurig ogende bytes. Het wijst een overdrachts-ID toe (12 willekeurige tekens) en slaat de cijfertekst op. Geen bestandsnaam, geen content-type-hint, geen sleutel — alleen versleutelde bytes.
Link delen
De verzender ontvangt een downloadlink. De ontsleutelingssleutel wordt in het URL-fragment geplaatst (het deel na #). URL-fragmenten worden nooit door de browser naar de server gestuurd — dit is gedefinieerd in RFC 3986. De verzender deelt deze link via elk kanaal naar keuze (e-mail, chat, persoonlijk).
Ontsleuteling
De ontvanger opent de link. Hun browser downloadt de versleutelde bytes van de server, haalt de sleutel uit het URL-fragment, scheidt de IV van de cijfertekst en ontsleutelt met crypto.subtle.decrypt. Als de authenticatietag niet overeenkomt (manipulatie gedetecteerd), mislukt de ontsleuteling. De server neemt nooit deel aan de ontsleuteling.
Wat de server ziet vs. wat deze niet ziet
Dit is de zero-knowledge-garantie. Hier is precies welke gegevens op de server bestaan.
De server slaat op
Overdrachts-ID — willekeurige 12 tekens
Versleutelde bytes — niet te onderscheiden van willekeurige gegevens
IP-hash — SHA-256 van IP + dagelijks roterend salt
Tijdstempel — wanneer de overdracht is aangemaakt
Bestandsgrootte — grootte van de versleutelde blob (bytes)
De server ziet nooit
Versleutelingssleutel — blijft in de browser, gedeeld via URL-fragment
Bestandsnaam — wordt nooit naar de server gestuurd
Bestandstype — geen content-type-metadata opgeslagen
Onversleutelde inhoud — alleen cijfertekst wordt geüpload
Onbewerkt IP-adres — gehasht vóór opslag
Technologiestack
Elke laag is gekozen voor eenvoud, beveiliging en implementatie zonder afhankelijkheden.
| Laag | Technologie | Doel |
|---|---|---|
| Runtime | Python 3.12 / arm64 | Applicatieservertaal |
| Webframework | FastAPI via osbot-fast-api | HTTP-routing en verwerking van verzoeken |
| Compute | AWS Lambda + Mangum | Serverloze uitvoering, betalen per gebruik |
| Opslag | Memory-FS (Storage_FS) | Uitwisselbare backend: geheugen, schijf of S3 |
| Versleuteling | Web Crypto API (AES-256-GCM) | Clientzijde versleuteling in de browser |
| Typesysteem | Type_Safe (osbot-utils) | Schemadefinities zonder Pydantic |
| Frontend | Vanilla JS + Web Components | Nul frameworkafhankelijkheden (IFD) |
| Testen | pytest, in-memory stack | Geen mocks, geen patches, echte implementaties |
| CI/CD | GitHub Actions | Test-, tag- en implementatiepijplijn |
Systeemarchitectuur
Twee Lambda-functies, één opslaglaag, één CDN. Eenvoudig door ontwerp.
User Lambda (Publiek)
Publieke functie die bestandsoverdrachten, gezondheidscontroles, vooraf ondertekende uploads, persoonlijke kluizen en MCP-integratie afhandelt. Toegankelijk via Lambda Function URL achter CloudFront.
18 eindpuntenAdmin Lambda (Geauthenticeerd)
Alleen-admin-functie voor tokenbeheer, analyses, serverstatistieken en MCP-beheertools. Vereist authenticatie. Aparte Lambda = aparte beveiligingsgrens.
55 eindpuntenMemory-FS (Storage_FS)
Alle opslag gaat via een abstractielaag. Applicatiecode weet nooit of de backend in het geheugen, op schijf of S3 is. Dezelfde codebase over alle 7 implementatiedoelen zonder een regel applicatielogica te wijzigen.
Uitwisselbare backendCloudFront CDN
Statische assets, caching, SSL-terminatie en WAF. Lambda URLs bieden de HTTPS-eindpunten rechtstreeks — geen API Gateway nodig.
Edge-netwerkImplementatiedoelen
Eén codebase, zeven implementatiedoelen gegroepeerd in vier patronen.
Lambda
Primaire implementatie. Twee Lambda-functies achter Lambda Function URLs. Directe HTTPS-eindpunten, geen API Gateway nodig.
ProductieContainer
Docker, AWS Fargate en GCP Cloud Run. Dezelfde applicatie verpakt als container.
Docker / Fargate / GCPServer
EC2-instanties en AMI-builds. Voor teams die volledige controle over de runtime-omgeving nodig hebben.
EC2 / AMICLI
Opdrachtregelinterface voor gescripte overdrachten, CI/CD-pijplijnen en gevorderde gebruikers.
Terminal