Veilig delen van vertrouwelijke informatie

Genereer een beveiligde link
0/30
Het wachtwoord wordt nooit opgeslagen — de ontvanger heeft het nodig om te ontsleutelen.
Secret ophalen
Contact

Heeft u vragen, verbeteringen en/of opmerkingen over See It Once? Vul dan onderstaand contactformulier in. Wij nemen zo spoedig mogelijk contact met u op.

Vul uw naam in.
Vul een geldig e-mailadres in.
0/1000
Vul een bericht in (minimaal 10 tekens).
Technische werking
Architectuur
See It Once bestaat uit drie Docker-containers die via een intern netwerk communiceren: een Nginx-frontend die de interface serveert, een Node.js/Express-backend die de REST API aanbiedt, en Redis als in-memory datastore met ingebouwde TTL-ondersteuning. Alle API-verzoeken van de browser lopen via de Nginx-proxy naar de backend — de browser communiceert nooit rechtstreeks met Node.js.
Secret aanmaken
Voordat er iets naar de server wordt gestuurd, versleutelt de browser het secret lokaal met AES-256-GCM. De backend genereert een willekeurige id (16 bytes) en key (32 bytes). De versleutelde blob wordt opgeslagen in Redis onder secret:{id} met de gekozen TTL. De key wordt uitsluitend meegegeven in de gegenereerde link en wordt nooit door de server opgeslagen.
Extra wachtwoord (tweede versleutelingslaag)
Als de gebruiker een extra wachtwoord instelt, versleutelt de browser het secret vóór verzending een tweede keer via PBKDF2 (200.000 iteraties, SHA-256) gevolgd door AES-256-GCM. Het wachtwoord verlaat de browser nooit. De server ontvangt en bewaart uitsluitend de dubbel-versleutelde blob — zelfs de server-operator kan de inhoud niet inzien.
Secret ophalen & verwijderen
De ontvanger opent de link; de browser leest id en key uit de URL. De backend haalt de versleutelde blob op en verwijdert secret:{id} uit Redis voordat hij antwoordt. Na dit moment bestaat het secret nergens meer. De browser ontsleutelt de blob lokaal met de key uit de URL. Bij een extra wachtwoord ontsleutelt de browser daarna een tweede keer; pas dan stuurt hij een DELETE-verzoek naar de backend.
Foutieve wachtwoordpogingen
Bij een verkeerd extra wachtwoord meldt de browser dit via POST /api/secret/{id}/fail. Na 3 mislukte pogingen verwijdert de backend het secret definitief, ongeacht de resterende TTL.
Automatisch verlopen
Niet-geopende secrets worden automatisch verwijderd door Redis na de ingestelde vervaltijd (15 minuten tot 7 dagen). De backend luistert via een aparte subscriber-verbinding op Redis keyspace-events; zodra een secret verloopt, worden de statistieken direct bijgewerkt.
Beveiliging — wat de server nooit ziet
De server ontvangt nooit de decryptiesleutel, het extra wachtwoord of de leesbare tekst van het secret. De enige manier om een secret te lezen is via de exacte link met de juiste key — en die link is na één gebruik permanent ongeldig.
Dataflow samengevat
Aanmaken Browser versleutelt lokaal → verstuurt encrypted blob naar backend → backend slaat op in Redis met TTL → browser ontvangt id + key → browser bouwt deelbare link (key verlaat systeem nooit via server)

Ophalen Browser leest id + key uit URL → backend haalt op & verwijdert uit Redis → browser ontsleutelt lokaal met key → plaintext getoond, nergens meer opgeslagen
🔒
AES-256-GCM encryptie
De decryptiesleutel is uitsluitend in de link aanwezig, nooit op de server opgeslagen.
Eenmalige toegang
Bericht wordt direct verwijderd nadat het eenmaal gelezen is.
Automatisch verlopen
Ongelezen berichten worden automatisch verwijderd na de gekozen tijd.
🛡
Lokaal gehost en privacygericht
Gehost in Nederland. Geen logging, geen tracking.